UNPKG

41.2 kBPlain TextView Raw
1{"code":"function iter$__(a){ let v; return a ? ((v=a.toIterable) ? v.call(a) : a) : a; };;\nfunction defineName$__(cls,name){\n\tObject.defineProperty(cls,\"name\",{value:name,configurable:true});\n};;\nfunction inheritClass$__(cls){\n\tObject.getPrototypeOf(cls.prototype).constructor?.inherited?.(cls);\n};\nconst $setup$ = Symbol.for('#setup'), $setupΦ$ = Symbol.for('#setup?'), $dom$ = Symbol.for('#dom'), $server$ = Symbol.for('#server');\n\n/*body*/\n// imba$stdlib=1\nimport cluster from 'cluster';\nimport nfs from 'fs';\nimport np from 'path';\nimport {EventEmitter} from 'events';\nimport {env} from './env';\n\nimport http from 'http';\nimport https from 'https';\n\n// TODO share mimeType list with bundler to\n// bundle supported file extensions\nconst defaultHeaders = {\n\thtml: {'Content-Type': 'text/html; charset=utf-8'},\n\tjs: {'Content-Type': 'text/javascript; charset=utf-8'},\n\tcjs: {'Content-Type': 'text/javascript; charset=utf-8'},\n\tmjs: {'Content-Type': 'text/javascript; charset=utf-8'},\n\tjson: {'Content-Type': 'application/json; charset=utf-8'},\n\tcss: {'Content-Type': 'text/css; charset=utf-8'},\n\tmap: {'Content-Type': 'application/json; charset=utf-8'},\n\t\n\totf: {'Content-Type': 'font/otf'},\n\tttf: {'Content-Type': 'font/ttf'},\n\twoff: {'Content-Type': 'font/woff'},\n\twoff2: {'Content-Type': 'font/woff2'},\n\t\n\tsvg: {'Content-Type': 'image/svg+xml'},\n\tavif: {'Content-Type': 'image/avif'},\n\tgif: {'Content-Type': 'image/gif'},\n\tpng: {'Content-Type': 'image/png'},\n\tapng: {'Content-Type': 'image/apng'},\n\twebp: {'Content-Type': 'image/webp'},\n\tjpg: {'Content-Type': 'image/jpeg'},\n\tjpeg: {'Content-Type': 'image/jpeg'},\n\tico: {'Content-Type': 'image/x-icon'},\n\tbmp: {'Content-Type': 'image/bmp'},\n\tpdf: {'Content-Type': 'application/pdf'},\n\t\n\twebm: {'Content-Type': 'video/webm'},\n\tweba: {'Content-Type': 'audio/webm'},\n\tavi: {'Content-Type': 'video/x-msvideo'},\n\tmp3: {'Content-Type': 'audio/mpeg'},\n\tmp4: {'Content-Type': 'video/mp4'},\n\tm4a: {'Content-Type': 'audio/m4a'},\n\tmov: {'Content-Type': 'video/quicktime'},\n\twmv: {'Content-Type': 'video/x-ms-wmv'},\n\tmpeg: {'Content-Type': 'video/mpeg'},\n\twav: {'Content-Type': 'audio/wav'},\n\togg: {'Content-Type': 'audio/ogg'},\n\togv: {'Content-Type': 'video/ogg'},\n\toga: {'Content-Type': 'audio/ogg'},\n\topus: {'Content-Type': 'audio/opus'}\n};\n\nconst proc = globalThis.process;\n\nclass Servers extends Set {\n\t\n\t\n\tcall(name,...params){\n\t\tvar $1;\n\t\t\n\t\t$1 = [];\n\t\tfor (let server of iter$__(this)){\n\t\t\t\n\t\t\t$1.push(server[name](...params));\n\t\t};\n\t\treturn $1;\n\t}\n\t\n\tclose(o = {}){\n\t\tvar $2;\n\t\t\n\t\t$2 = [];\n\t\tfor (let server of iter$__(this)){\n\t\t\t\n\t\t\t$2.push(server.close(o));\n\t\t};\n\t\treturn $2;\n\t}\n\t\n\treload(o = {}){\n\t\tvar $3;\n\t\t\n\t\t$3 = [];\n\t\tfor (let server of iter$__(this)){\n\t\t\t\n\t\t\t$3.push(server.reload(o));\n\t\t};\n\t\treturn $3;\n\t}\n\t\n\tbroadcast(msg,...rest){\n\t\tvar $4;\n\t\t\n\t\t$4 = [];\n\t\tfor (let server of iter$__(this)){\n\t\t\t\n\t\t\t$4.push(server.broadcast(msg,...rest));\n\t\t};\n\t\treturn $4;\n\t}\n\t\n\temit(event,data){\n\t\tvar $5;\n\t\t\n\t\t$5 = [];\n\t\tfor (let server of iter$__(this)){\n\t\t\t\n\t\t\t$5.push(server.emit(event,data));\n\t\t};\n\t\treturn $5;\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Servers');inheritClass$__(this);}\n};\n\nconst servers = new Servers;\n\nconst process = new class Process extends EventEmitter {\n\t\n\tconstructor(){\n\t\tvar self;\n\t\t\n\t\tsuper(...arguments);self = this;\n\t\tthis.autoreload = false;\n\t\tthis.state = {};\n\t\t\n\t\tif (globalThis.IMBA_RUN) {\n\t\t\t\n\t\t\tif (cluster.isWorker) {\n\t\t\t\t\n\t\t\t\tproc.on('message',function(msg) {\n\t\t\t\t\t\n\t\t\t\t\tself.emit('message',msg);\n\t\t\t\t\tif (msg[0] == 'emit') { return self.emit(...msg.slice(1)) };\n\t\t\t\t\t// reload! if msg == 'reload'\n\t\t\t\t});\n\t\t\t};\n\t\t};\n\t\tthis;\n\t}\n\t\n\t[$setup$](){\n\t\tvar self = this;\n\t\t\n\t\tif (!((this[$setupΦ$] != true) ? ((this[$setupΦ$] = true,true)) : false)) { return };\n\t\t\n\t\tthis.on('rebuild',function(e) {\n\t\t\t\n\t\t\tlet prev = globalThis.IMBA_MANIFEST;\n\t\t\tglobalThis.IMBA_MANIFEST = e;\n\t\t\treturn servers.broadcast('rebuild',e);\n\t\t});\n\t\t\n\t\tthis.on('reloading',function(e) {\n\t\t\tvar $6;\n\t\t\t\n\t\t\tself.state.reloading = true;\n\t\t\t$6 = [];\n\t\t\tfor (let server of iter$__(servers)){\n\t\t\t\t\n\t\t\t\t$6.push(server.pause());\n\t\t\t};\n\t\t\treturn $6;\n\t\t});\n\t\t\n\t\tthis.on('reloaded',async function(e) {\n\t\t\tvar $7;\n\t\t\t\n\t\t\tself.state.reloaded = true;\n\t\t\tservers.broadcast('reloaded');\n\t\t\tawait new Promise(function(_0) { return setTimeout(_0,100); });\n\t\t\t\n\t\t\t$7 = [];\n\t\t\tfor (let server of iter$__(servers)){\n\t\t\t\t\n\t\t\t\t$7.push(server.close());\n\t\t\t};\n\t\t\tlet promises = $7;\n\t\t\t\n\t\t\tsetTimeout(function() { return proc.exit(0); },100);\n\t\t\tawait Promise.all(promises);\n\t\t\treturn proc.exit(0);\n\t\t});\n\t\treturn true;\n\t}\n\t\n\tsend(msg){\n\t\t\n\t\tif (proc.send instanceof Function) {\n\t\t\t\n\t\t\treturn proc.send(msg);\n\t\t};\n\t}\n\t\n\ton(name,cb){\n\t\t\n\t\treturn super.on(...arguments);\n\t}\n\t\n\treload(){\n\t\t\n\t\t// only allow reloading once\n\t\tif (!((this.isReloading != true) ? ((this.isReloading = true,true)) : false)) { return this };\n\t\tthis.state.reloading = true;\n\t\t\n\t\tif (!(proc.env.IMBA_SERVE)) {\n\t\t\t\n\t\t\tconsole.warn(\"not possible to gracefully reload servers not started via imba start\");\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tthis.send('reload');\n\t\treturn;\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Process');inheritClass$__(this);}\n};\n\nfunction deepImports(src,links = [],depth = 0){\n\t\n\tlet asset = globalThis.IMBA_MANIFEST[src];\n\tif (links.indexOf(src) >= 0) { return links };\n\tif (asset?.imports) {\n\t\t\n\t\t\n\t\tfor (let $8 = 0, $9 = iter$__(asset?.imports), $10 = $9.length; $8 < $10; $8++) {\n\t\t\tlet item = $9[$8];\n\t\t\t\n\t\t\t// if links.indexOf(item) >= 0 and depth > 10\n\t\t\t// console.warn \"already found import!!\",item,links\n\t\t\t// return links\n\t\t\tlinks.push(item);\n\t\t\tdeepImports(item,links,depth + 1);\n\t\t};\n\t};\n\treturn links;\n};\n\nclass AssetResponder {\n\t\n\t\n\tconstructor(server,url,asset = {}){\n\t\t\n\t\tthis.server = server;\n\t\tthis.url = url;\n\t\t[this.pathname,this.query] = url.split('?');\n\t\tthis.ext = np.extname(this.pathname);\n\t\t\n\t\tthis.headers = {\n\t\t\t'Content-Type': 'text/plain',\n\t\t\t'Access-Control-Allow-Origin': '*',\n\t\t\t'cache-control': 'public, max-age=31536000'\n\t\t};\n\t\tObject.assign(this.headers,server.options.assetHeaders || {});\n\t\tObject.assign(this.headers,defaultHeaders[this.ext.slice(1)] || {});\n\t\t\n\t\tthis.headers[\"max-age\"] = 86400000;\n\t\t\n\t\tif (asset.imports && server.options.preload !== false) {\n\t\t\t\n\t\t\tthis.headers.Link = deepImports(url).map(function(_0) { return (\"<\" + _0 + \">; rel=modulepreload; as=script\"); }).join(', ');\n\t\t};\n\t\t\n\t\tthis.path = server.localPathForUrl(url);\n\t}\n\t\n\trespond(req,res){\n\t\tvar self = this;\n\t\t\n\t\treturn nfs.access(this.path,nfs.constants.R_OK,function(err) {\n\t\t\t\n\t\t\tif (err) {\n\t\t\t\t\n\t\t\t\tres.writeHead(404,{});\n\t\t\t\treturn res.end();\n\t\t\t};\n\t\t\t\n\t\t\ttry {\n\t\t\t\t\n\t\t\t\tif (self.server.options.setHeaders) {\n\t\t\t\t\t\n\t\t\t\t\tself.server.options.setHeaders(res,self.path);\n\t\t\t\t};\n\t\t\t\tif (globalThis.BUN) {\n\t\t\t\t\t\n\t\t\t\t\treturn nfs.readFile(self.path,function(err,data) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tres.writeHead(200,self.headers);\n\t\t\t\t\t\treturn res.end(data);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\tlet stream = nfs.createReadStream(self.path);\n\t\t\t\t\tres.writeHead(200,self.headers);\n\t\t\t\t\treturn stream.pipe(res);\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\t\n\t\t\t\tres.writeHead(503,{});\n\t\t\t\treturn res.end();\n\t\t\t};\n\t\t});\n\t}\n\t\n\tcreateReadStream(){\n\t\t\n\t\treturn nfs.createReadStream(this.path);\n\t}\n\t\n\tpipe(response){\n\t\t\n\t\treturn this.createReadStream().pipe(response);\n\t}\n\tstatic {\n\t\tdefineName$__(this,'AssetResponder');}\n};\n\nclass Server {\n\t\n\t\n\tstatic wrap(server,o = {}){\n\t\t\n\t\treturn new this(server,o);\n\t}\n\t\n\tlocalPathForUrl(url){\n\t\tlet path, res;\n\t\t\n\t\tlet src = url.replace(/\\?.*$/,'');\n\t\treturn this.urlToLocalPathMap[src] ??= true && (\n\t\t\t\n\t\t\tpath = np.resolve(env.publicPath,'.' + src),\n\t\t\tres = nfs.existsSync(path) && path,\n\t\t\t(!(res) && this.staticDir) && (\n\t\t\t\t\n\t\t\t\tpath = np.resolve(this.staticDir,'.' + src),\n\t\t\t\tres = nfs.existsSync(path) && path\n\t\t\t),\n\t\t\tres\n\t\t);\n\t}\n\t\n\theadersForAsset(path){\n\t\tlet headers;\n\t\t\n\t\tlet ext = np.extname(path);\n\t\treturn headers = Object.assign({\n\t\t\t'Content-Type': 'text/plain',\n\t\t\t'Access-Control-Allow-Origin': '*',\n\t\t\t'cache-control': 'public'\n\t\t},defaultHeaders[ext.slice(1)] || {});\n\t}\n\t\n\tget manifest(){\n\t\t\n\t\treturn globalThis.IMBA_MANIFEST || {};\n\t}\n\t\n\tconstructor(srv,options = {}){\n\t\tvar self = this;\n\t\t\n\t\tservers.add(this);\n\t\tthis.id = Math.random();\n\t\tthis.options = options;\n\t\tthis.closed = false;\n\t\tthis.paused = false;\n\t\tthis.server = srv;\n\t\tthis.clients = new Set;\n\t\tthis.stalledResponses = [];\n\t\tthis.assetResponders = {};\n\t\tthis.urlToLocalPathMap = {};\n\t\tthis.publicExistsMap = {};\n\t\t\n\t\tthis.staticDir = globalThis.IMBA_STATICDIR || '';\n\t\t\n\t\tif (proc.env.IMBA_PATH) {\n\t\t\t\n\t\t\tthis.devtoolsPath = np.resolve(proc.env.IMBA_PATH,'dist','hmr.js');\n\t\t};\n\t\t\n\t\tthis.scheme = (srv instanceof http.Server) ? 'http' : 'https';\n\t\t\n\t\t// fetch and remove the original request listener\n\t\tlet originalHandler = this.server._events.request;\n\t\tlet dom = globalThis[$dom$];\n\t\t\n\t\tsrv.off('request',originalHandler);\n\t\t\n\t\t// check if this is an express app?\n\t\toriginalHandler[$server$] = this;\n\t\t\n\t\tsrv.on('listening',function() {\n\t\t\t\n\t\t\t// if not silent?\n\t\t\tlet adr = self.server.address();\n\t\t\tlet host = adr.address;\n\t\t\tif (host == '::' || host == '0.0.0.0') {\n\t\t\t\t\n\t\t\t\thost = 'localhost';\n\t\t\t};\n\t\t\tlet url = (\"\" + self.scheme + \"://\" + host + \":\" + (adr.port) + \"/\");\n\t\t\t// unless proc.env.IMBA_CLUSTER\n\t\t\tif (!(proc.env.IMBA_CLUSTER)) {\n\t\t\t\t\n\t\t\t\treturn console.log((\"listening on \" + url));\n\t\t\t};\n\t\t});\n\t\t\n\t\tif (globalThis.IMBA_HMR) {\n\t\t\t\n\t\t\tglobalThis.IMBA_HMR_PATH = '/__hmr__.js';\n\t\t};\n\t\t\n\t\tthis.handler = function(req,res) {\n\t\t\tlet path;\n\t\t\t\n\t\t\tlet ishttp2 = req.constructor.name == 'Http2ServerRequest';\n\t\t\tlet url = req.url;\n\t\t\t\n\t\t\tif (self.paused || self.closed) {\n\t\t\t\t\n\t\t\t\tres.statusCode = 302;\n\t\t\t\tres.setHeader('Location',req.url);\n\t\t\t\t\n\t\t\t\tif (!(ishttp2)) {\n\t\t\t\t\t\n\t\t\t\t\tres.setHeader('Connection','close');\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (self.closed) {\n\t\t\t\t\t\n\t\t\t\t\tif (ishttp2) {\n\t\t\t\t\t\t\n\t\t\t\t\t\treq.stream.session.close();\n\t\t\t\t\t};\n\t\t\t\t\treturn res.end();\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\treturn self.stalledResponses.push(res);\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tif (globalThis.IMBA_HMR) {\n\t\t\t\t\n\t\t\t\tif (url == '/__hmr__.js' && self.devtoolsPath) {\n\t\t\t\t\t\n\t\t\t\t\t// and if hmr?\n\t\t\t\t\tlet stream = nfs.createReadStream(self.devtoolsPath);\n\t\t\t\t\tres.writeHead(200,defaultHeaders.js);\n\t\t\t\t\treturn stream.pipe(res);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (url == '/__hmr__') {\n\t\t\t\t\t\n\t\t\t\t\tlet headers = {\n\t\t\t\t\t\t'Content-Type': 'text/event-stream',\n\t\t\t\t\t\t'Cache-Control': 'no-cache'\n\t\t\t\t\t};\n\t\t\t\t\tif (!(ishttp2)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\theaders.Connection = 'keep-alive';\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tres.writeHead(200,headers);\n\t\t\t\t\tself.clients.add(res);\n\t\t\t\t\tself.broadcast('init',globalThis.IMBA_MANIFEST,[res]);\n\t\t\t\t\treq.on('close',function() { return self.clients.delete(res); });\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\t// create full url\n\t\t\tlet headers = req.headers;\n\t\t\tlet base;\n\t\t\t// console.log 'protocol',req.protocol\n\t\t\tif (ishttp2) {\n\t\t\t\t\n\t\t\t\tbase = headers[':scheme'] + '://' + headers[':authority'];\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tlet scheme = req.connection.encrypted ? 'https' : 'http';// \n\t\t\t\tbase = scheme + '://' + headers.host;\n\t\t\t};\n\t\t\t\n\t\t\tlet asset = self.manifest[url];\n\t\t\t\n\t\t\tif (asset) {\n\t\t\t\t\n\t\t\t\tlet path = self.localPathForUrl(url);\n\t\t\t\tif (path) {\n\t\t\t\t\t\n\t\t\t\t\tlet responder = self.assetResponders[url] ||= new AssetResponder(self,url,asset);\n\t\t\t\t\treturn responder.respond(req,res);\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tif (url.match(/\\.[A-Z\\d]{8}\\./) || url.match(/\\.\\w{1,4}($|\\?)/)) {\n\t\t\t\t\n\t\t\t\tif (path = self.localPathForUrl(url)) {\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet headers = self.headersForAsset(path);\n\t\t\t\t\t\tif (options.setHeaders) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\toptions.setHeaders(res,path);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (globalThis.BUN) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn nfs.readFile(path,function(err,data) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tres.writeHead(500,{});\n\t\t\t\t\t\t\t\t\treturn res.write((\"Error getting the file: \" + err));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tres.writeHead(200,headers);\n\t\t\t\t\t\t\t\t\treturn res.end(data);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlet stream = nfs.createReadStream(path);\n\t\t\t\t\t\t\tres.writeHead(200,headers);\n\t\t\t\t\t\t\treturn stream.pipe(res);\n\t\t\t\t\t\t};\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tres.writeHead(503,{});\n\t\t\t\t\t\treturn res.end();\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\t// continue to the real server\n\t\t\tif (dom) {\n\t\t\t\t\n\t\t\t\tlet loc = new dom.Location(req.url,base);\n\t\t\t\t// create a context - not a document?\n\t\t\t\treturn dom.Document.create({location: loc},function() {\n\t\t\t\t\t\n\t\t\t\t\treturn originalHandler(req,res);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\treturn originalHandler(req,res);\n\t\t\t};\n\t\t};\n\t\t\n\t\tsrv.on('request',this.handler);\n\t\t\n\t\tsrv.on('close',function() {\n\t\t\t\n\t\t\treturn console.log(\"server is closing!!!\");\n\t\t});\n\t\t\n\t\tif (globalThis.IMBA_RUN) {\n\t\t\t\n\t\t\tif (cluster.isWorker) {\n\t\t\t\t\n\t\t\t\tprocess[$setup$]();\n\t\t\t\tprocess.send('serve');\n\t\t\t};\n\t\t};\n\t}\n\t\n\tbroadcast(event,data = {},clients = this.clients){\n\t\t\n\t\tdata = JSON.stringify(data);\n\t\tlet msg = (\"data: \" + data + \"\\n\\n\\n\");\n\t\tfor (let client of iter$__(clients)){\n\t\t\t\n\t\t\tclient.write((\"event: \" + event + \"\\n\"));\n\t\t\tclient.write(\"id: imba\\n\");\n\t\t\tclient.write(msg);\n\t\t};\n\t\treturn this;\n\t}\n\t\n\tpause(){\n\t\t\n\t\tif ((this.paused != true) ? ((this.paused = true,true)) : false) {\n\t\t\t\n\t\t\tthis.broadcast('paused');\n\t\t};\n\t\treturn this;\n\t}\n\t\n\tresume(){\n\t\t\n\t\tif ((this.paused != false) ? ((this.paused = false,true)) : false) {\n\t\t\t\n\t\t\tthis.broadcast('resumed');\n\t\t\treturn this.flushStalledResponses();\n\t\t};\n\t}\n\t\n\tflushStalledResponses(){\n\t\t\n\t\tfor (let $11 = 0, $12 = iter$__(this.stalledResponses), $13 = $12.length; $11 < $13; $11++) {\n\t\t\tlet res = $12[$11];\n\t\t\tres.end();\n\t\t};\n\t\treturn this.stalledResponses = [];\n\t}\n\t\n\tclose(){\n\t\tvar self = this;\n\t\t\n\t\tthis.pause();\n\t\t\n\t\treturn new Promise(function(resolve) {\n\t\t\t\n\t\t\tself.closed = true;\n\t\t\tself.server.close(resolve);\n\t\t\treturn self.flushStalledResponses();\n\t\t});\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Server');}\n};\n\nexport function serve(srv,...params){\n\t\n\treturn Server.wrap(srv,...params);\n};\n","map":{"version":3,"file":"serve.js","sourceRoot":"","sources":["/Users/abdellah/workspace/scrimba/imba/packages/imba/src/imba/serve.imba"],"sourcesContent":["# imba$stdlib=1\nimport cluster from 'cluster'\nimport nfs from 'fs'\nimport np from 'path'\nimport {EventEmitter} from 'events'\nimport {env} from './env'\n\nimport http from 'http'\nimport https from 'https'\n\n# TODO share mimeType list with bundler to\n# bundle supported file extensions\nconst defaultHeaders = {\n\thtml: {'Content-Type': 'text/html; charset=utf-8'}\n\tjs: {'Content-Type': 'text/javascript; charset=utf-8'}\n\tcjs: {'Content-Type': 'text/javascript; charset=utf-8'}\n\tmjs: {'Content-Type': 'text/javascript; charset=utf-8'}\n\tjson: {'Content-Type': 'application/json; charset=utf-8'}\n\tcss: {'Content-Type': 'text/css; charset=utf-8'}\n\tmap: {'Content-Type': 'application/json; charset=utf-8'}\n\n\totf: {'Content-Type': 'font/otf'}\n\tttf: {'Content-Type': 'font/ttf'}\n\twoff: {'Content-Type': 'font/woff'}\n\twoff2: {'Content-Type': 'font/woff2'}\n\n\tsvg: {'Content-Type': 'image/svg+xml'}\n\tavif: {'Content-Type': 'image/avif'}\n\tgif: {'Content-Type': 'image/gif'}\n\tpng: {'Content-Type': 'image/png'}\n\tapng: {'Content-Type': 'image/apng'}\t\n\twebp: {'Content-Type': 'image/webp'}\n\tjpg: {'Content-Type': 'image/jpeg'}\n\tjpeg: {'Content-Type': 'image/jpeg'}\n\tico: {'Content-Type': 'image/x-icon'}\n\tbmp: {'Content-Type': 'image/bmp'}\n\tpdf: {'Content-Type': 'application/pdf'}\n\n\twebm: {'Content-Type': 'video/webm'}\n\tweba: {'Content-Type': 'audio/webm'}\n\tavi: {'Content-Type': 'video/x-msvideo'}\n\tmp3: {'Content-Type': 'audio/mpeg'}\n\tmp4: {'Content-Type': 'video/mp4'}\n\tm4a: {'Content-Type': 'audio/m4a'}\n\tmov: {'Content-Type': 'video/quicktime'}\n\twmv: {'Content-Type': 'video/x-ms-wmv'}\n\tmpeg: {'Content-Type': 'video/mpeg'}\n\twav: {'Content-Type': 'audio/wav'}\n\togg: {'Content-Type': 'audio/ogg'}\n\togv: {'Content-Type': 'video/ogg'}\n\toga: {'Content-Type': 'audio/ogg'}\n\topus: {'Content-Type': 'audio/opus'}\n\n}\n\nconst proc = global.process\n\nclass Servers < Set\n\n\tdef call name,...params\n\t\tfor server of self\n\t\t\tserver[name](...params)\n\n\tdef close o = {}\t\n\t\tfor server of self\n\t\t\tserver.close(o)\n\n\tdef reload o = {}\t\n\t\tfor server of self\n\t\t\tserver.reload(o)\n\n\tdef broadcast msg, ...rest\n\t\tfor server of self\n\t\t\tserver.broadcast(msg,...rest)\n\n\tdef emit event, data\n\t\tfor server of self\n\t\t\tserver.emit(event,data)\n\nconst servers = new Servers\n\nconst process = new class Process < EventEmitter\n\tdef constructor\n\t\tsuper\n\t\tautoreload = no\n\t\tstate = {}\n\n\t\tif global.IMBA_RUN\n\t\t\tif cluster.isWorker\n\t\t\t\tproc.on('message') do(msg)\n\t\t\t\t\temit('message',msg)\n\t\t\t\t\temit(...msg.slice(1)) if msg[0] == 'emit'\n\t\t\t\t\t# reload! if msg == 'reload'\n\t\tself\n\n\tdef #setup\n\t\treturn unless #setup? =? yes\n\n\t\ton('rebuild') do(e)\n\t\t\tlet prev = global.IMBA_MANIFEST\n\t\t\tglobal.IMBA_MANIFEST = e\n\t\t\tservers.broadcast('rebuild',e)\n\n\t\ton('reloading') do(e)\n\t\t\tstate.reloading = yes\n\t\t\tfor server of servers\n\t\t\t\tserver.pause!\n\n\t\ton('reloaded') do(e)\n\t\t\tstate.reloaded = yes\n\t\t\tservers.broadcast('reloaded')\n\t\t\tawait new Promise do setTimeout($1,100)\n\n\t\t\tlet promises = for server of servers\n\t\t\t\tserver.close!\n\n\t\t\tsetTimeout(&,100) do proc.exit(0)\n\t\t\tawait Promise.all(promises)\n\t\t\tproc.exit(0)\n\t\tyes\n\n\tdef send msg\n\t\tif proc.send isa Function\n\t\t\tproc.send(msg)\n\n\tdef on name, cb\n\t\tsuper\n\n\tdef reload\n\t\t# only allow reloading once\n\t\treturn self unless isReloading =? yes\n\t\tstate.reloading = yes\n\n\t\tunless proc.env.IMBA_SERVE\n\t\t\tconsole.warn \"not possible to gracefully reload servers not started via imba start\"\n\t\t\treturn\n\n\t\tsend('reload')\n\t\treturn\n\ndef deepImports src, links = [], depth = 0\n\tlet asset = global.IMBA_MANIFEST[src]\n\treturn links if links.indexOf(src) >= 0\n\tif asset..imports\n\n\t\tfor item in asset..imports\n\t\t\t# if links.indexOf(item) >= 0 and depth > 10\n\t\t\t#\tconsole.warn \"already found import!!\",item,links\n\t\t\t#\treturn links\n\t\t\tlinks.push(item)\n\t\t\tdeepImports(item, links, depth + 1)\n\treturn links\n\nclass AssetResponder\n\n\tdef constructor server, url, asset = {}\n\t\tserver = server\n\t\turl = url\n\t\t[pathname,query] = url.split('?')\n\t\text = np.extname(pathname)\n\n\t\theaders = {\n\t\t\t'Content-Type': 'text/plain'\n\t\t\t'Access-Control-Allow-Origin': '*'\n\t\t\t'cache-control': 'public, max-age=31536000'\n\t\t}\n\t\tObject.assign(headers,server.options.assetHeaders or {})\n\t\tObject.assign(headers,defaultHeaders[ext.slice(1)] or {})\n\n\t\theaders[\"max-age\"] = 86400000\n\n\t\tif asset.imports and server.options.preload !== no\n\t\t\theaders['Link'] = deepImports(url).map(do \"<{$1}>; rel=modulepreload; as=script\").join(', ')\n\n\t\tpath = server.localPathForUrl(url)\n\n\tdef respond req, res\n\t\tnfs.access(path,nfs.constants.R_OK) do(err)\n\t\t\tif err\n\t\t\t\tres.writeHead(404,{})\n\t\t\t\treturn res.end!\n\n\t\t\ttry\n\t\t\t\tif server.options.setHeaders\n\t\t\t\t\t\tserver.options.setHeaders(res,path)\n\t\t\t\tif global.BUN\n\t\t\t\t\tnfs.readFile(path) do(err,data)\n\t\t\t\t\t\tres.writeHead(200,headers)\n\t\t\t\t\t\tres.end(data)\n\t\t\t\telse\n\t\t\t\t\tlet stream = nfs.createReadStream(path)\n\t\t\t\t\tres.writeHead(200, headers)\n\t\t\t\t\treturn stream.pipe(res)\n\t\t\tcatch e\n\t\t\t\tres.writeHead(503,{})\n\t\t\t\treturn res.end!\n\n\tdef createReadStream\n\t\tnfs.createReadStream(path)\n\n\tdef pipe response\n\t\tcreateReadStream!.pipe(response)\n\nclass Server\n\n\tstatic def wrap server, o = {}\n\t\tnew self(server,o)\n\n\tdef localPathForUrl url\n\t\tlet src = url.replace(/\\?.*$/,'')\n\t\treturn urlToLocalPathMap[src] ??= if true\n\t\t\tlet path = np.resolve(env.publicPath,'.' + src)\n\t\t\tlet res = nfs.existsSync(path) and path\n\t\t\tif !res and staticDir\n\t\t\t\tpath = np.resolve(staticDir,'.' + src)\n\t\t\t\tres = nfs.existsSync(path) and path\n\t\t\tres\t\n\n\tdef headersForAsset path\n\t\tlet ext = np.extname(path)\n\t\tlet headers = Object.assign({\n\t\t\t'Content-Type': 'text/plain'\n\t\t\t'Access-Control-Allow-Origin': '*'\n\t\t\t'cache-control': 'public'\n\t\t},defaultHeaders[ext.slice(1)] or {})\n\n\tget manifest\n\t\tglobal.IMBA_MANIFEST or {}\n\n\tdef constructor srv,options = {}\n\t\tservers.add(self)\n\t\tid = Math.random!\n\t\toptions = options\n\t\tclosed = no\n\t\tpaused = no\n\t\tserver = srv\n\t\tclients = new Set\n\t\tstalledResponses = []\n\t\tassetResponders = {}\n\t\turlToLocalPathMap = {}\n\t\tpublicExistsMap = {}\n\n\t\tstaticDir = global.IMBA_STATICDIR or ''\n\n\t\tif proc.env.IMBA_PATH\n\t\t\tdevtoolsPath = np.resolve(proc.env.IMBA_PATH,'dist','hmr.js')\n\n\t\tscheme = srv isa http.Server ? 'http' : 'https'\n\n\t\t# fetch and remove the original request listener\n\t\tlet originalHandler = server._events.request\n\t\tlet dom = global.#dom\n\n\t\tsrv.off('request',originalHandler)\n\n\t\t# check if this is an express app?\n\t\toriginalHandler.#server = self\n\n\t\tsrv.on('listening') do\n\t\t\t# if not silent?\n\t\t\tlet adr = server.address!\n\t\t\tlet host = adr.address\n\t\t\tif host == '::' or host == '0.0.0.0'\n\t\t\t\thost = 'localhost'\n\t\t\tlet url = \"{scheme}://{host}:{adr.port}/\"\n\t\t\t# unless proc.env.IMBA_CLUSTER\n\t\t\tunless proc.env.IMBA_CLUSTER\n\t\t\t\tconsole.log \"listening on {url}\"\n\n\t\tif global.IMBA_HMR\n\t\t\tglobal.IMBA_HMR_PATH = '/__hmr__.js'\n\n\t\thandler = do(req,res)\n\t\t\tlet ishttp2 = req.constructor.name == 'Http2ServerRequest'\n\t\t\tlet url = req.url\n\n\t\t\tif paused or closed\n\t\t\t\tres.statusCode=302\n\t\t\t\tres.setHeader('Location',req.url)\n\n\t\t\t\tunless ishttp2\n\t\t\t\t\tres.setHeader('Connection','close')\n\n\t\t\t\tif closed\n\t\t\t\t\tif ishttp2\n\t\t\t\t\t\treq.stream.session.close!\n\t\t\t\t\treturn res.end!\n\t\t\t\telse\n\t\t\t\t\treturn stalledResponses.push(res)\n\n\t\t\tif global.IMBA_HMR\n\t\t\t\tif url == '/__hmr__.js' and devtoolsPath\n\t\t\t\t\t# and if hmr?\n\t\t\t\t\tlet stream = nfs.createReadStream(devtoolsPath)\n\t\t\t\t\tres.writeHead(200, defaultHeaders.js)\n\t\t\t\t\treturn stream.pipe(res)\n\n\t\t\t\tif url == '/__hmr__'\n\t\t\t\t\tlet headers = {\n\t\t\t\t\t\t'Content-Type': 'text/event-stream'\n\t\t\t\t\t\t'Cache-Control': 'no-cache'\n\t\t\t\t\t}\n\t\t\t\t\tunless ishttp2\n\t\t\t\t\t\theaders['Connection'] = 'keep-alive'\n\n\t\t\t\t\tres.writeHead(200,headers)\n\t\t\t\t\tclients.add(res)\n\t\t\t\t\tbroadcast('init',global.IMBA_MANIFEST,[res])\n\t\t\t\t\treq.on('close') do clients.delete(res)\n\t\t\t\t\treturn true\n\n\t\t\t# create full url\n\t\t\tlet headers = req.headers\n\t\t\tlet base\n\t\t\t# console.log 'protocol',req.protocol\n\t\t\tif ishttp2\n\t\t\t\tbase = headers[':scheme'] + '://' + headers[':authority']\n\t\t\telse\n\t\t\t\tlet scheme = req.connection.encrypted ? 'https' : 'http' #\n\t\t\t\tbase = scheme + '://' + headers.host\n\n\t\t\tlet asset = manifest[url]\n\n\t\t\tif asset\n\t\t\t\tlet path = localPathForUrl(url)\n\t\t\t\tif path\n\t\t\t\t\tlet responder = assetResponders[url] ||= new AssetResponder(self,url,asset)\n\t\t\t\t\treturn responder.respond(req,res)\n\n\t\t\tif url.match(/\\.[A-Z\\d]{8}\\./) or url.match(/\\.\\w{1,4}($|\\?)/)\n\t\t\t\tif let path = localPathForUrl(url)\n\t\t\t\t\ttry\n\t\t\t\t\t\tlet headers = headersForAsset(path)\n\t\t\t\t\t\tif options.setHeaders\n\t\t\t\t\t\t\toptions.setHeaders(res,path)\n\t\t\t\t\t\tif global.BUN\n\t\t\t\t\t\t\treturn nfs.readFile(path) do(err,data)\n\t\t\t\t\t\t\t\tif err\n\t\t\t\t\t\t\t\t\tres.writeHead(500,{})\n\t\t\t\t\t\t\t\t\tres.write(\"Error getting the file: {err}\")\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tres.writeHead(200,headers)\n\t\t\t\t\t\t\t\t\tres.end(data)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlet stream = nfs.createReadStream(path)\n\t\t\t\t\t\t\tres.writeHead(200, headers)\n\t\t\t\t\t\t\treturn stream.pipe(res)\n\t\t\t\t\tcatch e\n\t\t\t\t\t\tres.writeHead(503,{})\n\t\t\t\t\t\treturn res.end!\n\n\t\t\t# continue to the real server\n\t\t\tif dom\n\t\t\t\tlet loc = new dom.Location(req.url,base)\n\t\t\t\t# create a context - not a document?\n\t\t\t\tdom.Document.create(location: loc) do\n\t\t\t\t\treturn originalHandler(req,res)\n\t\t\telse\n\t\t\t\treturn originalHandler(req,res)\n\n\t\tsrv.on('request',handler)\n\n\t\tsrv.on('close') do\n\t\t\tconsole.log \"server is closing!!!\"\n\n\t\tif global.IMBA_RUN\n\t\t\tif cluster.isWorker\n\t\t\t\tprocess.#setup!\n\t\t\t\tprocess.send('serve')\n\n\tdef broadcast event, data = {}, clients = clients\n\t\tdata = JSON.stringify(data)\n\t\tlet msg = \"data: {data}\\n\\n\\n\"\n\t\tfor client of clients\n\t\t\tclient.write(\"event: {event}\\n\")\n\t\t\tclient.write(\"id: imba\\n\")\n\t\t\tclient.write(msg)\n\t\treturn self\n\n\tdef pause\n\t\tif paused =? yes\n\t\t\tbroadcast('paused')\n\t\tself\n\n\tdef resume\n\t\tif paused =? no\n\t\t\tbroadcast('resumed')\n\t\t\tflushStalledResponses!\n\n\tdef flushStalledResponses\n\t\tfor res in stalledResponses\n\t\t\tres.end!\n\t\tstalledResponses = []\n\n\tdef close\n\t\tpause!\n\n\t\tnew Promise do(resolve)\n\t\t\tclosed = yes\n\t\t\tserver.close(resolve)\n\t\t\tflushStalledResponses!\n\nexport def serve srv,...params\n\treturn Server.wrap(srv,...params)\n"],"names":[],"mappings":";;;;;;;;;;;AACA,MAAM,CAAC,OAAO,MAAM,SAAS;AAC7B,MAAM,CAAC,GAAG,MAAM,IAAI;AACpB,MAAM,CAAC,EAAE,MAAM,MAAM;AACrB,MAAM,EAAE,YAAY,OAAO,QAAQ;AACnC,MAAM,EAAE,GAAG,OAAO,OAAO;;AAEzB,MAAM,CAAC,IAAI,MAAM,MAAM;AACvB,MAAM,CAAC,KAAK,MAAM,OAAO;;;;MAInB,cAAc,GAAG;CACtB,IAAI,EAAE,CAAC,cAAc,EAAE,0BAA0B,CAAC;CAClD,EAAE,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC;CACtD,GAAG,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC;CACvD,GAAG,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC;CACvD,IAAI,EAAE,CAAC,cAAc,EAAE,iCAAiC,CAAC;CACzD,GAAG,EAAE,CAAC,cAAc,EAAE,yBAAyB,CAAC;CAChD,GAAG,EAAE,CAAC,cAAc,EAAE,iCAAiC,CAAC;;CAExD,GAAG,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC;CACjC,GAAG,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC;CACjC,IAAI,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CACnC,KAAK,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;;CAErC,GAAG,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;CACtC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACpC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACpC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACpC,GAAG,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACnC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACpC,GAAG,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;CACrC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,GAAG,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;;CAExC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACpC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACpC,GAAG,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;CACxC,GAAG,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACnC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,GAAG,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;CACxC,GAAG,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;CACvC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CACpC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,GAAG,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;CAClC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;CAEpC;;MAEK,IAAI,GAAG,UAAM,CAAC,OAAO;;AAE3B,KAAK,CAAC,OAAO,SAAG,GAAG,EAAA;;;CAEd,IAAI,CAAC,IAAI,IAAI,MAAM,CAAA;;;;EACtB,GAAG,MAAC,MAAM,YAAI,IAAI,EAAA;;WACjB,MAAM,CAAA,IAAK,CAAC,IAAI,MAAM,CAAC;GAAA;;EAAA;;CAErB,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;;;;EAChB,GAAG,MAAC,MAAM,YAAI,IAAI,EAAA;;WACjB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;GAAA;;EAAA;;CAEb,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;;;;EACjB,GAAG,MAAC,MAAM,YAAI,IAAI,EAAA;;WACjB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;GAAA;;EAAA;;CAEd,SAAS,CAAC,GAAG,IAAK,IAAI,CAAA;;;;EACzB,GAAG,MAAC,MAAM,YAAI,IAAI,EAAA;;WACjB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC;GAAA;;EAAA;;CAE3B,IAAI,CAAC,KAAK,CAAE,IAAI,CAAA;;;;EACnB,GAAG,MAAC,MAAM,YAAI,IAAI,EAAA;;WACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;GAAA;;EAAA;;;AAAA,CAAA;;MAEpB,OAAO,GAAG,GAAG,CAAC,OAAO;;MAErB,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,SAAG,YAAY,EAAA;;CAC3C,WAAW,EAAA;;;EACd,mBAAK;EACL,KAAA,UAAU,GAAG,KAAE;EACf,KAAA,KAAK,GAAG,EAAE;;EAEV,EAAE,EAAC,UAAM,CAAC,QAAQ,EAAA;;GACjB,EAAE,EAAC,OAAO,CAAC,QAAQ,EAAA;;IAClB,IAAI,CAAC,EAAE,CAAC,SAAS,CAAE,QAAE,CAAC,GAAG,EAAC;;KACzB,KAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;KACG,EAAE,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,WAAzC,KAAA,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;KACO,CAHX;IAGW;GAAA;EAC/B,IAAI;EAAA;;YAEK;;;EACF,EAAM,mBAAQ,IAAI,IAAG,oBAAP,GAAI,IAAG,kBAA5B,EAAA,MAAM;;EAEN,KAAA,EAAE,CAAC,SAAS,CAAE,QAAE,CAAC,CAAC,EAAC;;OACd,IAAI,GAAG,UAAM,CAAC,aAAa;GAC/B,UAAM,CAAC,aAAa,GAAG,CAAC;GACxB,OAAA,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;GAAA,CAHlB;;EAKb,KAAA,EAAE,CAAC,WAAW,CAAE,QAAE,CAAC,CAAC,EAAC;;;GACpB,KAAA,KAAK,CAAC,SAAS,GAAG,IAAG;;GACrB,GAAG,MAAC,MAAM,YAAI,OAAO,EAAA;;YACpB,MAAM,CAAC,KAAK,EAAC;IAAA;;GAAA,CAHA;;EAKf,KAAA,EAAE,CAAC,UAAU,CAAE,cAAE,CAAC,CAAC,EAAC;;;GACnB,KAAA,KAAK,CAAC,QAAQ,GAAG,IAAG;GACpB,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;SACvB,GAAG,CAAC,OAAO,CAAC,QAAE,OAAC,OAAA,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,IAAtB;;;GAEF,GAAG,MAAC,MAAM,YAAI,OAAO,EAAA;;YACnC,MAAM,CAAC,KAAK,EAAC;IAAA;OADV,QAAQ;;GAGZ,UAAU,CAAQ,QAAE,KAAC,OAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAApB,GAAG,CAAC;SACX,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;GAC3B,OAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;GAAA,CAVC;EAWd,OAAA,IAAG;EAAA;;CAEA,IAAI,CAAC,GAAG,CAAA;;EACX,EAAE,EAAC,IAAI,CAAC,IAAI,YAAK,QAAQ,EAAA;;GACxB,OAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;GAAA;EAAA;;CAEZ,EAAE,CAAC,IAAI,CAAE,EAAE,CAAA;;EACd,OAAA,MADG,EAAE,cACA;EAAA;;CAEF,MAAM,EAAA;;;EAEG,EAAM,KAAC,KAAA,WAAW,IAAI,IAAG,MAAlB,KAAA,WAAW,GAAI,IAAG,kBAArC,EAAA,MAAM,CAAC,IAAI;EACX,KAAA,KAAK,CAAC,SAAS,GAAG,IAAG;;EAErB,EAAM,IAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAA;;GACzB,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAA;GACnF,MAAM;GAAA;;EAEP,KAAA,IAAI,CAAC,QAAQ,CAAC;EACd,MAAM;EAAA;;;AAAA,CAAA;;AAER,QAAG,CAAC,WAAW,CAAC,GAAG,CAAE,KAAK,GAAG,EAAE,CAAE,KAAK,GAAG,CAAC,CAAA;;KACrC,KAAK,GAAG,UAAM,CAAC,aAAa,CAAA,GAAI,CAAC;CACxB,EAAE,EAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAvC,EAAA,MAAM,CAAC,KAAK;CACZ,EAAE,EAAC,KAAK,EAAE,OAAO,EAAA;;;EAEhB,GAAG,2BAAS,KAAK,EAAE,OAAO,oCAAA;OAAtB,IAAI;;;;;GAIP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;GAChB,WAAW,CAAC,IAAI,CAAE,KAAK,CAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;GAAA;EAAA;CACrC,MAAM,CAAC,KAAK;CAAA;;AAEb,KAAK,CAAC,cAAc,EAAA;;;CAEf,WAAW,CAAC,MAAM,CAAE,GAAG,CAAE,KAAK,GAAG,EAAE,CAAA;;EACtC,KAAA,MAAM,GAAG,MAAM;EACf,KAAA,GAAG,GAAG,GAAG;EACT,CAAC,KAAA,QAAQ,CAAC,KAAA,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;EACjC,KAAA,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAA,QAAQ,CAAC;;EAE1B,KAAA,OAAO,GAAG;GACT,cAAc,EAAE,YAAY;GAC5B,6BAA6B,EAAE,GAAG;GAClC,eAAe,EAAE,0BAA0B;GAC3C;EACD,MAAM,CAAC,MAAM,CAAC,KAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;EACxD,MAAM,CAAC,MAAM,CAAC,KAAA,OAAO,CAAC,cAAc,CAAA,KAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;;EAEzD,KAAA,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ;;EAE7B,EAAE,EAAC,KAAK,CAAC,OAAO,CAAC,EAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAE,EAAA;;GACjD,KAAA,OAAO,KAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAE,OAAC,OAAA,OAAG,EAAE,qCAAiC,IAAC,CAAC,IAAI,CAAC,IAAI,CAAC;GAAA;;EAE7F,KAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC;EAAA;;CAE/B,OAAO,CAAC,GAAG,CAAE,GAAG,CAAA;;;EACnB,OAAA,GAAG,CAAC,MAAM,CAAC,KAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAE,QAAE,CAAC,GAAG,EAAC;;GAC1C,EAAE,EAAC,GAAG,EAAA;;IACL,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAC;IAAA;;OAEb;;IACF,EAAE,EAAC,KAAA,MAAM,CAAC,OAAO,CAAC,UAAU,EAAA;;KAC1B,KAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,KAAA,IAAI,CAAC;KAAA;IACrC,EAAE,EAAC,UAAM,CAAC,GAAG,EAAA;;KACZ,OAAA,GAAG,CAAC,QAAQ,CAAC,KAAA,IAAI,CAAE,QAAE,CAAC,GAAG,CAAC,IAAI,EAAC;;MAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAA,OAAO,CAAC;MAC1B,OAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;MAAA,CAFI;KAEJ,MACX;;SACC,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,KAAA,IAAI,CAAC;KACvC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAE,KAAA,OAAO,CAAC;KAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;KAAA;IAAA,WAClB;;IACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAC;IAAA;GAAA,CAlBkB;EAkBlB;;CAEd,gBAAgB,EAAA;;EACnB,OAAA,GAAG,CAAC,gBAAgB,CAAC,KAAA,IAAI,CAAC;EAAA;;CAEvB,IAAI,CAAC,QAAQ,CAAA;;SAChB,KAAA,gBAAgB,EAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;EAAA;;;AAAA,CAAA;;AAElC,KAAK,CAAC,MAAM,EAAA;;;CAEX,MAAM,CAAK,IAAI,CAAC,MAAM,CAAE,CAAC,GAAG,EAAE,CAAA;;EAC7B,OAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;EAAA;;CAEf,eAAe,CAAC,GAAG,CAAA;;;MAClB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;EACjC,MAAM,CAAC,KAAA,iBAAiB,CAAA,GAAI,CAAC,KAAQ,IAAI,KAAA;;GACpC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;GAC3C,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAG,CAAC,IAAI;GACpC,CAAA,EAAC,GAAG,CAAA,CAAC,EAAG,CAAC,KAAA,SAAS,CAAA,KAAA;;IACpB,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAA,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAG,CAAC,IAAI;GAAA;GACpC,GAAG;EAAC;EAAA;;CAEF,eAAe,CAAC,IAAI,CAAA;;;MACnB,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;SACtB,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;GAC3B,cAAc,EAAE,YAAY;GAC5B,6BAA6B,EAAE,GAAG;GAClC,eAAe,EAAE,QAAQ;GACzB,CAAC,cAAc,CAAA,GAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;EAAA;;CAEtC,GAAG,CAAC,QAAQ,EAAA;;EACX,OAAA,UAAM,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;EAAA;;CAEvB,WAAW,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;;;EAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;EACjB,KAAA,EAAE,GAAG,IAAI,CAAC,MAAM,EAAC;EACjB,KAAA,OAAO,GAAG,OAAO;EACjB,KAAA,MAAM,GAAG,KAAE;EACX,KAAA,MAAM,GAAG,KAAE;EACX,KAAA,MAAM,GAAG,GAAG;EACZ,KAAA,OAAO,GAAG,GAAG,CAAC,GAAG;EACjB,KAAA,gBAAgB,GAAG,EAAE;EACrB,KAAA,eAAe,GAAG,EAAE;EACpB,KAAA,iBAAiB,GAAG,EAAE;EACtB,KAAA,eAAe,GAAG,EAAE;;EAEpB,KAAA,SAAS,GAAG,UAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;;EAEvC,EAAE,EAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAA;;GACpB,KAAA,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;GAAA;;EAE9D,KAAA,MAAM,GAAG,CAAA,GAAG,YAAK,IAAI,CAAC,MAAM,CAAA,GAAG,MAAM,GAAG,OAAO;;;MAG3C,eAAe,GAAG,KAAA,MAAM,CAAC,OAAO,CAAC,OAAO;MACxC,GAAG,GAAG,UAAM,OAAK;;EAErB,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC;;;EAGlC,eAAe,UAAQ,GAAG,IAAI;;EAE9B,GAAG,CAAC,EAAE,CAAC,WAAW,CAAE,QAAE,GAAA;;;OAEjB,GAAG,GAAG,KAAA,MAAM,CAAC,OAAO,EAAC;OACrB,IAAI,GAAG,GAAG,CAAC,OAAO;GACtB,EAAE,EAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAA;;IACnC,IAAI,GAAG,WAAW;IAAA;OACf,GAAG,GAAG,MAAE,KAAA,MAAM,WAAK,IAAI,SAAG,CAAA,GAAG,CAAC,IAAI,CAAA,OAAG;;GAEzC,EAAM,IAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAA;;IAC3B,OAAA,OAAO,CAAC,GAAG,CAAC,mBAAe,GAAG,CAAE,CAAA;IAAA;GAAA,CATf;;EAWnB,EAAE,EAAC,UAAM,CAAC,QAAQ,EAAA;;GACjB,UAAM,CAAC,aAAa,GAAG,aAAa;GAAA;;EAErC,KAAA,OAAO,GAAG,QAAE,CAAC,GAAG,CAAC,GAAG,EAAC;;;OAChB,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB;OACtD,GAAG,GAAG,GAAG,CAAC,GAAG;;GAEjB,EAAE,EAAC,KAAA,MAAM,CAAC,EAAE,CAAC,KAAA,MAAM,EAAA;;IAClB,GAAG,CAAC,UAAU,GAAC,GAAG;IAClB,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;;IAEjC,EAAM,IAAC,OAAO,GAAA;;KACb,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC;KAAA;;IAEpC,EAAE,EAAC,KAAA,MAAM,EAAA;;KACR,EAAE,EAAC,OAAO,EAAA;;MACT,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC;MAAA;KAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAC;KAAA,MACZ;;KACH,MAAM,CAAC,KAAA,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;KAAA;IAAA;;GAEnC,EAAE,EAAC,UAAM,CAAC,QAAQ,EAAA;;IACjB,EAAE,EAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAG,CAAC,KAAA,YAAY,EAAA;;;SAEnC,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,KAAA,YAAY,CAAC;KAC/C,GAAG,CAAC,SAAS,CAAC,GAAG,CAAE,cAAc,CAAC,EAAE,CAAC;KACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;KAAA;;IAExB,EAAE,EAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAA;;SACf,OAAO,GAAG;MACb,cAAc,EAAE,mBAAmB;MACnC,eAAe,EAAE,UAAU;MAC3B;KACD,EAAM,IAAC,OAAO,GAAA;;MACb,OAAO,WAAc,GAAG,YAAY;MAAA;;KAErC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;KAC1B,KAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;KAChB,KAAA,SAAS,CAAC,MAAM,CAAC,UAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC;KAC5C,GAAG,CAAC,EAAE,CAAC,OAAO,CAAE,QAAE,KAAC,OAAA,KAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAvB;KACf,MAAM,CAAC,IAAI;KAAA;IAAA;;;OAGT,OAAO,GAAG,GAAG,CAAC,OAAO;OACrB,IAAI;;GAER,EAAE,EAAC,OAAO,EAAA;;IACT,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAAA,MACtD;;QACC,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,GAAG,OAAO,GAAG,MAAM;IACxD,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI;IAAA;;OAEjC,KAAK,GAAG,KAAA,QAAQ,CAAA,GAAI,CAAC;;GAEzB,EAAE,EAAC,KAAK,EAAA;;QACH,IAAI,GAAG,KAAA,eAAe,CAAC,GAAG,CAAC;IAC/B,EAAE,EAAC,IAAI,EAAA;;SACF,SAAS,GAAG,KAAA,eAAe,CAAA,GAAI,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;KAC3E,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;KAAA;IAAA;;GAEnC,EAAE,EAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAA;;IAC7D,EAAE,EAAK,IAAI,GAAG,KAAA,eAAe,CAAC,GAAG,CAAC,EAAA;;SAC9B;;UACE,OAAO,GAAG,KAAA,eAAe,CAAC,IAAI,CAAC;MACnC,EAAE,EAAC,OAAO,CAAC,UAAU,EAAA;;OACpB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;OAAA;MAC7B,EAAE,EAAC,UAAM,CAAC,GAAG,EAAA;;OACZ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAE,QAAE,CAAC,GAAG,CAAC,IAAI,EAAC;;QACrC,EAAE,EAAC,GAAG,EAAA;;SACL,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;SACrB,OAAA,GAAG,CAAC,KAAK,CAAC,8BAA0B,GAAG,CAAE,CAAC;SAAA,MACvC;;SACH,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;SAC1B,OAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;SAAA;QAAA,CANU;OAMV,MACZ;;WACC,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC;OACvC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAE,OAAO,CAAC;OAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;OAAA;MAAA,WAClB;;MACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;MACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAC;MAAA;KAAA;IAAA;;;GAGlB,EAAE,EAAC,GAAG,EAAA;;QACD,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;;IAExC,OAAA,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAC,QAAQ,EAAE,GAAG,EAAE,QAAE,GAAA;;KACpC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;KAAA,CADE;IACF,MAC7B;;IACH,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;IAAA;GAAA;;EAEjC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,KAAA,OAAO,CAAC;;EAEzB,GAAG,CAAC,EAAE,CAAC,OAAO,CAAE,QAAE,GAAA;;GACjB,OAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAA;GAAA,CADpB;;EAGf,EAAE,EAAC,UAAM,CAAC,QAAQ,EAAA;;GACjB,EAAE,EAAC,OAAO,CAAC,QAAQ,EAAA;;IAClB,OAAO,SAAO,EAAC;IACf,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IAAA;GAAA;EAAA;;CAEpB,SAAS,CAAC,KAAK,CAAE,IAAI,GAAG,EAAE,CAAE,OAAO,GAAG,KAAA,OAAO,CAAA;;EAChD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;MACvB,GAAG,GAAG,YAAQ,IAAI,YAAQ;EAC9B,GAAG,MAAC,MAAM,YAAI,OAAO,EAAA;;GACpB,MAAM,CAAC,KAAK,CAAC,aAAS,KAAK,QAAI,CAAC;GAChC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;GAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;GAAA;EAClB,MAAM,CAAC,IAAI;EAAA;;CAER,KAAK,EAAA;;EACR,EAAE,GAAC,KAAA,MAAM,IAAI,IAAG,MAAb,KAAA,MAAM,GAAI,IAAG,iBAAA;;GACf,KAAA,SAAS,CAAC,QAAQ,CAAC;GAAA;EACpB,OAAA,IAAI;EAAA;;CAED,MAAM,EAAA;;EACT,EAAE,GAAC,KAAA,MAAM,IAAI,KAAE,MAAZ,KAAA,MAAM,GAAI,KAAE,iBAAA;;GACd,KAAA,SAAS,CAAC,SAAS,CAAC;UACpB,KAAA,qBAAqB,EAAC;GAAA;EAAA;;CAEpB,qBAAqB,EAAA;;EACxB,GAAG,6BAAQ,KAAA,gBAAgB,uCAAA;OAAvB,GAAG;GACN,GAAG,CAAC,GAAG,EAAC;GAAA;EACT,OAAA,KAAA,gBAAgB,GAAG,EAAE;EAAA;;CAElB,KAAK,EAAA;;;EACR,KAAA,KAAK,EAAC;;EAEN,OAAA,GAAG,CAAC,OAAO,CAAC,QAAE,CAAC,OAAO,EAAC;;GACtB,KAAA,MAAM,GAAG,IAAG;GACZ,KAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;UACrB,KAAA,qBAAqB,EAAC;GAAA,CAHZ;EAGY;;;AAAA,CAAA;;AAEzB,MAAM,CAAC,QAAG,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,CAAA;;CAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC;CAAA;AAClC;"},"dependencies":[],"meta":{"vite":{"lang":"js"}}}
\No newline at end of file