UNPKG

17.1 kBPlain TextView Raw
1{"code":"function defineName$__(cls,name){\n\tObject.defineProperty(cls,\"name\",{value:name,configurable:true});\n};;\nfunction decorate$__(decorators,target,key,desc){\n\tvar c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n\tif (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n\telse for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n\treturn c > 3 && r && Object.defineProperty(target, key, r), r;\n};;\nfunction inheritClass$__(cls){\n\tObject.getPrototypeOf(cls.prototype).constructor?.inherited?.(cls);\n};\nimport {αlazy as imba_αlazy, use_hooks as imba_use_hooks, hooks as imba_hooks, accessor as imba_accessor} from 'imba';\n(imba_use_hooks());\nvar $1 = Symbol('id'), $2 = Symbol(), $3 = Symbol('meta'), $4 = Symbol(), $5 = Symbol('filePersisted'), $6 = Symbol(), $7 = Symbol(), $10, $11, $12;\nconst $__init__$ = Symbol.for('#__init__'), $__patch__$ = Symbol.for('#__patch__'), $__hooks__$ = Symbol.for('#__hooks__'), $__initor__$ = Symbol.for('#__initor__'), $__inited__$ = Symbol.for('#__inited__');\n\n/*body*/\nimport {Index} from '../core/iterable';\nimport mt from 'mime-types';\n\nimport * as mp from '../msgpack';\nimport * as os from '../util/os';\n\nif (false) {};\n\nexport class OPAsset extends OPObject {\n\t[$__patch__$]($$ = {},fields = true){\n\t\tvar $8;\n\t\tsuper[$__patch__$] && super[$__patch__$]($$,fields);\n\t\tfields && ($8 = $$.id) !== undefined && this.ααid.$init($8,this,$1,'id',$$);\n\t\tfields && ($8 = $$.meta) !== undefined && this.ααmeta.$init($8,this,$3,'meta',$$);\n\t\tfields && ($8 = $$.filePersisted) !== undefined && this.ααfilePersisted.$init($8,this,$5,'filePersisted',$$);\n\t\t($8 = $$.broadcastedΦ) !== undefined && (this.broadcastedΦ = $8);\n\t\t($8 = $$.uploadingΦ) !== undefined && (this.uploadingΦ = $8);\n\t\t($8 = $$.blobΞurl) !== undefined && (this.blobΞurl = $8);\n\t\t\n\t}\n\tconstructor(){\n\t\tsuper(...arguments);\n\t\tsuper[$__init__$] || this[$__init__$]();this[$__initor__$]===$7 && (this[$__hooks__$]&&this[$__hooks__$].inited(this),this[$__inited__$] && this[$__inited__$]());\n\t}\n\t[$__init__$]($$ = null,deep = true,fields = true){\n\t\tvar $9;\n\t\tdeep && super[$__init__$] && super[$__init__$](...arguments);\n\t\tfields && this.ααid.$init($$ ? $$.id : undefined,this,$1,'id',$$);\n\t\tfields && this.ααmeta.$init($$ ? $$.meta : undefined,this,$3,'meta',$$);\n\t\tfields && this.ααfilePersisted.$init($$ ? $$.filePersisted : undefined,this,$5,'filePersisted',$$);\n\t\tthis.broadcastedΦ = ($$ && ($9 = $$.broadcastedΦ) !== undefined) ? ($9) : false;\n\t\tthis.uploadingΦ = ($$ && ($9 = $$.uploadingΦ) !== undefined) ? ($9) : false;\n\t\tthis.blobΞurl = $$ ? $$.blobΞurl : undefined;\n\t\t\n\t}\n\tset id(val){ this.ααid.$set(val,this,$1,'id') }\n\tget id(){ return this.ααid.$get(this,$1,'id') }\n\tget ααid(){ return this[$2] || imba_accessor(($10 = this.αkey(),($10.size instanceof Function) ? $10.size(16) : ($10.size = 16),($10.system instanceof Function) ? $10.system() : ($10.system = true),($10.base58 instanceof Function) ? $10.base58() : ($10.base58 = true),$10),this,$1,'id',$2,OPAsset.prototype) }\n\t\n\tset meta(val){ this.ααmeta.$set(val,this,$3,'meta') }\n\tget meta(){ return this.ααmeta.$get(this,$3,'meta') }\n\tget ααmeta(){ return this[$4] || imba_accessor(($11 = this.αjson(),($11.hidden instanceof Function) ? $11.hidden() : ($11.hidden = true),$11),this,$3,'meta',$4,OPAsset.prototype) }\n\t\n\tset filePersisted(val){ this.ααfilePersisted.$set(val,this,$5,'filePersisted') }\n\tget filePersisted(){ return this.ααfilePersisted.$get(this,$5,'filePersisted') }\n\tget ααfilePersisted(){ return this[$6] || imba_accessor(($12 = this.αbool(),$12),this,$5,'filePersisted',$6,OPAsset.prototype) }\n\t\n\tget hash(){\n\t\treturn this.params[0];\n\t}\n\tget mime(){\n\t\treturn this.params[1];\n\t}\n\tget size(){\n\t\treturn +this.params[2];\n\t}\n\tget randomPart(){\n\t\treturn this.params[3];\n\t}\n\t\n\tget extension(){\n\t\t\n\t\treturn mt.extension(this.mime);\n\t}\n\t\n\tget fontΦ(){\n\t\treturn this.mime?.startsWith?.('font');\n\t}\n\t\n\t\n\t\n\t// node only\n\tasync beforePersist(){\n\t\t\n\t\t\n\t\t\n\t\treturn this.filePersisted = await os.fs.exists(this.originalPath);\n\t\t;\n\t}\n\t\n\tbroadcastUpload(){\n\t\t\n\t\tthis.filePersisted = true;\n\t\tif (!(this.broadcastedΦ)) {\n\t\t\t\n\t\t\tOP.broadcast(OPAssetUploaded.packed(this.id));\n\t\t\treturn this.broadcastedΦ = true;\n\t\t};\n\t}\n\t\n\tasync saveToDisk(blob){\n\t\t\n\t\tawait os.fs.mkdir(this.baseDir,{recursive: true});\n\t\treturn await os.fs.writeFile(this.originalPath,blob);\n\t}\n\t\n\tupload(blob){\n\t\tvar self = this;\n\t\t\n\t\tif (!(false)) { return };\n\t\tif (this.filePersisted) { return };\n\t\t\n\t\t// prevent user from leaving the page until upload finishes\n\t\tthis.uploadingΦ = true;\n\t\tOP.post('/op/assets',blob).finally(function() { return self.uploadingΦ = false; });\n\t\treturn this;\n\t}\n\t\n\tinDisk(){\n\t\tvar self = this;\n\t\t\n\t\tif (!(true)) {};\n\t\treturn new Promise(async function(resolve) {\n\t\t\t\n\t\t\ttry {\n\t\t\t\t\n\t\t\t\tawait os.fs.promises.access(self.originalPath,os.fs.constants.R_OK);\n\t\t\t\treturn resolve(true);\n\t\t\t} catch (error) {\n\t\t\t\t\n\t\t\t\treturn resolve(false);\n\t\t\t};\n\t\t});\n\t}\n\t\n\tstatic encodeKey(params){\n\t\t\n\t\tparams.splice(3,0,Date.now());\n\t\t\n\t\treturn this.key.encode(params);\n\t}\n\t\n\tstatic _for(raw,parameters = {}){\n\t\t\n\t\tconst mime = parameters.mime;\n\t\tif (false) {};\n\t\treturn this.get(this.encodeKey([os.hash(raw),mime,raw.length || raw.byteLength]));\n\t}\n\t\n\tstatic async for(raw,parameters = {}){\n\t\t\n\t\tif (raw instanceof this) {\n\t\t\t\n\t\t\treturn raw;\n\t\t};\n\t\t\n\t\tlet options = {};\n\t\tif (false) {};\n\t\t\n\t\toptions.mime ||= await os.getMime(raw);\n\t\t\n\t\tlet asset;\n\t\ttry {\n\t\t\t\n\t\t\tif (options.mime?.startsWith?.('image')) {\n\t\t\t\t\n\t\t\t\tasset = await OPImage._for(raw,options);\n\t\t\t} else if (options.mime?.startsWith?.('audio') || options.mime?.startsWith?.('video')) {\n\t\t\t\t\n\t\t\t\tasset = await OPMedia._for(raw,options);\n\t\t\t};\n\t\t} catch (error) {\n\t\t\t\n\t\t\tconsole.log(\"error\",error);\n\t\t};\n\t\t\n\t\t// unsupported images will be stored as regular assets\n\t\tasset ||= await OPAsset._for(raw,options);\n\t\t// display the image immediately\n\t\t// will have a url to the file in question in the browser\n\t\tasset.blobΞurl ||= options.blobΞurl;\n\t\t\n\t\t\n\t\t\n\t\tawait asset.saveToDisk(raw);\n\t\tasset.broadcastUpload();\n\t\t;\n\t\t\n\t\tawait asset.save();\n\t\treturn asset;\n\t}\n\t\n\tget params(){\n\t\t\n\t\treturn OPKey.decode(this.id)?.payload;\n\t}\n\t\n\tserialize(){\n\t\t\n\t\treturn this.id;\n\t}\n\t\n\tget sourceHash(){\n\t\t\n\t\treturn mp.stringify(this.hash,32);\n\t}\n\t\n\tget resolvedΦ(){\n\t\t\n\t\treturn true;\n\t}\n\t\n\tget originalPath(){\n\t\t\n\t\treturn ((\"\" + this.baseDir + `/original.` + this.extension));\n\t}\n\t\n\tget originalURL(){\n\t\t\n\t\treturn (`/op/fs/` + this.base + `/original.` + this.extension);\n\t}\n\t\n\tget url(){\n\t\t\n\t\treturn this.blobΞurl || (\"/op/assets/\" + this.id + \".\" + this.extension);\n\t}\n\t\n\tget base(){\n\t\t\n\t\t// TODO Better to include the whole hash for deepest dir?\n\t\treturn (\"\" + (this.constructor.id) + `/` + this.sourceHash.replace(/(\\w{4})/,'$1/'));\n\t}\n\t\n\tget baseDir(){\n\t\t\n\t\treturn (\"\" + (process.env.OP_LFS_DIR) + `/` + this.base);\n\t}\n\tstatic {\n\t\tthis.prototype[$__initor__$] = $7;this.prototype[$__hooks__$] = imba_hooks;\n\t\tdefineName$__(this,'OPAsset');this.alias = 'A';\n\t\tdecorate$__([imba_αlazy.bind([])],this.prototype,'params',null);\n\t\tdecorate$__([imba_αlazy.bind([])],this.prototype,'sourceHash',null);\n\t\tinheritClass$__(this);}\n}; globalThis.OPAsset = OPAsset;\n\nclass OPFile {\nstatic {\n\tdefineName$__(this,'OPFile');}}; globalThis.OPFile = OPFile;\n\nclass OPFiles {\nstatic {\n\tdefineName$__(this,'OPFiles');}}; globalThis.OPFiles = OPFiles;\n","map":{"version":3,"file":"asset.js","sourceRoot":"","sources":["/Users/abdellah/workspace/scrimba/op/src/types/asset.imba"],"sourcesContent":["import {Index} from '../core/iterable'\nimport mt from 'mime-types'\n\nimport * as mp from '../msgpack'\nimport * as os from '../util/os'\n\nif $web$\n\tdef beforeUnload(e)\n\t\tconst assets = OPAsset.all!.filter do $1.uploading?\n\t\tif assets.length\n\t\t\te.preventDefault!\n\t\t\te.returnValue = ''\n\tglobal.window.addEventListener('beforeunload', beforeUnload)\n\nexport global class OPAsset < OPObject\n\tstatic alias = 'A'\n\n\tid @key.size(16).system.base58\n\n\tmeta @json.hidden\n\n\tfilePersisted @bool\n\n\tget hash do params[0]\n\tget mime do params[1]\n\tget size do +params[2]\n\tget randomPart do params[3]\n\n\tget extension do\n\t\tmt.extension(mime)\n\n\tget font? do mime..startsWith 'font'\n\n\tbroadcasted? = no\n\tuploading? = no\n\tblob-url\n\n\t# node only\n\tdef beforePersist\n\t\tif $node$\n\t\t\tfilePersisted = await os.fs.exists(originalPath)\n\n\tdef broadcastUpload\n\t\tfilePersisted = yes\n\t\tunless broadcasted?\n\t\t\tOP.broadcast( OPAssetUploaded.packed(id) )\n\t\t\tbroadcasted? = yes\n\n\tdef saveToDisk(blob)\n\t\tawait os.fs.mkdir(baseDir, recursive: yes)\n\t\tawait os.fs.writeFile(originalPath, blob)\n\n\tdef upload(blob)\n\t\treturn unless $web$\n\t\treturn if filePersisted\n\n\t\t# prevent user from leaving the page until upload finishes\n\t\tuploading? = yes\n\t\tOP.post('/op/assets', blob).finally do uploading? = no\n\t\tself\n\n\tdef inDisk\n\t\treturn unless $node$\n\t\tnew Promise do(resolve)\n\t\t\ttry\n\t\t\t\tawait os.fs.promises.access originalPath, os.fs.constants.R_OK\n\t\t\t\tresolve yes\n\t\t\tcatch error\n\t\t\t\tresolve no\n\n\tstatic def encodeKey(params)\n\t\tparams.splice 3, 0, Date.now!\n\n\t\tkey.encode(params)\n\n\tstatic def _for raw, parameters = {}\n\t\tconst mime = parameters.mime\n\t\traw = await raw.arrayBuffer! if $browser$\n\t\tself.get encodeKey [os.hash(raw), mime, raw.length or raw.byteLength]\n\n\tstatic def for raw, parameters = {}\n\t\tif raw isa self\n\t\t\treturn raw\n\n\t\tlet options = {}\n\t\tif $web$\n\t\t\tif raw isa File\n\t\t\t\toptions.mime = raw.type\n\n\t\t\tif raw..isFile and raw.file isa Function\n\t\t\t\traw = await new Promise do raw.file $1\n\t\t\t\toptions.mime = raw.type\n\t\t\t\t# raw.file do(file) resolve(self.for(file))\n\n\t\t\tif typeof raw == 'string' and raw.match(/^https?\\:/)\n\t\t\t\tconst url = raw\n\t\t\t\tlet res = await global.fetch url\n\t\t\t\tlet data = await res.arrayBuffer!\n\t\t\t\traw = new Blob([data])\n\n\t\t\toptions.blob-url = URL.createObjectURL raw\n\n\t\toptions.mime ||= await os.getMime(raw)\n\n\t\tlet asset\n\t\ttry\n\t\t\tif options.mime..startsWith('image')\n\t\t\t\tasset = await OPImage._for(raw, options)\n\t\t\telif options.mime..startsWith('audio') or options.mime..startsWith('video')\n\t\t\t\tasset = await OPMedia._for(raw, options)\n\t\tcatch error\n\t\t\tconsole.log \"error\", error\n\n\t\t# unsupported images will be stored as regular assets\n\t\tasset ||= await OPAsset._for(raw, options)\n\t\t# display the image immediately\n\t\t# will have a url to the file in question in the browser\n\t\tasset.blob-url ||= options.blob-url\n\n\t\tif $node$\n\t\t\tawait asset.saveToDisk(raw)\n\t\t\tasset.broadcastUpload!\n\t\telif $web$\n\t\t\t# save image id in the server\n\t\t\t# this will check if the image was already uploaded before\n\t\t\t# using the hash and the beforePersist hook to populate filePersisted\n\t\t\tawait asset.persist!\n\t\t\t# upload checks if fileIsPersisted\n\t\t\tasset.upload(raw)\n\n\t\tawait asset.save!\n\t\tasset\n\n\t@lazy get params\n\t\tOPKey.decode(id)..payload\n\n\tdef serialize\n\t\tid\n\n\t@lazy get sourceHash\n\t\tmp.stringify(hash,32)\n\n\tget resolved?\n\t\tyes\n\n\tget originalPath\n\t\t$node$ ? `{baseDir}/original.{extension}` : originalURL\n\n\tget originalURL\n\t\t`/op/fs/{base}/original.{extension}`\n\n\tget url\n\t\tblob-url or \"/op/assets/{id}.{extension}\"\n\n\tget base\n\t\t# TODO Better to include the whole hash for deepest dir?\n\t\t`{constructor.id}/{sourceHash.replace(/(\\w{4})/,'$1/')}`\n\n\tget baseDir\n\t\t`{process.env.OP_LFS_DIR}/{base}`\n\nglobal class OPFile\n\nglobal class OPFiles\n"],"names":[],"mappings":"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"},"dependencies":[],"meta":{"vite":{"lang":"js"}}}
\No newline at end of file