@shockpkg/ria-packager
Version:
Package for creating Adobe AIR packages
1 lines • 9.74 kB
Source Map (JSON)
{"version":3,"sources":["packager/air.ts"],"names":["fse","Zipper","Packager","PackagerAir","constructor","path","_zipUxUid","_zipUxGid","_zipCreateVersion","_zipCreateHostOS","_zipInternalAttributes","_zipGetExternalAttributes","executable","_createZipper","writable","_activeZipper","r","_zipper","Error","_isResourceCompressible","destination","_metaResourceMimetypePath","_metaResourceHashPath","_isResourceHash","_open","applicationData","ensureFile","createWriteStream","_close","zipper","close","hashEntry","_zipperEntryHash","hashDigest","_hasher","digest","headerOffsetLocal","initData","localBuffer","getLocalBuffer","data","Buffer","concat","fd","open","write","length","_writeResource","options","compressible","hash","mtime","Date","entry","createEntry","createVersion","createHostOS","internalAttributes","externalAttributes","setDate","addExtraFieldsExtendedTimestamp","addExtraFieldsInfoZipUnix2","entryData","addEntry"],"mappings":"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","sourcesContent":["import {Writable} from 'stream';\n\nimport fse from 'fs-extra';\n\nimport {\n\tZipper,\n\tZipperEntry\n} from '../zipper';\nimport {\n\tIPackagerResourceOptions,\n\tPackager\n} from '../packager';\n\n/**\n * PackagerAir constructor.\n *\n * @param path Output path.\n */\nexport abstract class PackagerAir extends Packager {\n\t/**\n\t * Zipper instance.\n\t */\n\tprotected _zipper: Zipper | null = null;\n\n\t/**\n\t * Zipper hash entry to be updated.\n\t */\n\tprotected _zipperEntryHash: ZipperEntry | null = null;\n\n\tconstructor(path: string) {\n\t\tsuper(path);\n\t}\n\n\t/**\n\t * ZIP file Ux metadata user ID.\n\t *\n\t * @returns User ID.\n\t */\n\tprotected get _zipUxUid() {\n\t\treturn 203;\n\t}\n\n\t/**\n\t * ZIP file Ux metadata group ID.\n\t *\n\t * @returns Group ID.\n\t */\n\tprotected get _zipUxGid() {\n\t\treturn 0;\n\t}\n\n\t/**\n\t * ZIP file metadata create version number.\n\t *\n\t * @returns Version number.\n\t */\n\tprotected get _zipCreateVersion() {\n\t\treturn 0x17;\n\t}\n\n\t/**\n\t * ZIP file metadata create host OS.\n\t *\n\t * @returns OS ID.\n\t */\n\tprotected get _zipCreateHostOS() {\n\t\treturn 3;\n\t}\n\n\t/**\n\t * ZIP file internal attributes.\n\t *\n\t * @returns Internal attributes.\n\t */\n\tprotected get _zipInternalAttributes() {\n\t\treturn 1;\n\t}\n\n\t/**\n\t * ZIP file external attributes.\n\t *\n\t * @param executable Is the entry executable.\n\t * @returns External attributes.\n\t */\n\tprotected _zipGetExternalAttributes(executable: boolean) {\n\t\treturn executable ? 0x81ED0000 : 0x81A40000;\n\t}\n\n\t/**\n\t * Create a Zipper instance.\n\t *\n\t * @param writable Writable stream.\n\t * @returns Zipper instance.\n\t */\n\tprotected _createZipper(writable: Writable) {\n\t\treturn new Zipper(writable);\n\t}\n\n\t/**\n\t * Get the active Zipper.\n\t *\n\t * @returns Zipper instance.\n\t */\n\tprotected _activeZipper() {\n\t\tconst r = this._zipper;\n\t\tif (!r) {\n\t\t\tthrow new Error('Internal error');\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Check if resource is compressable file.\n\t *\n\t * @param destination Resource destination.\n\t * @returns Returne true if not a match for the excluded files.\n\t */\n\tprotected _isResourceCompressible(destination: string) {\n\t\t// Do not compress the following resources.\n\t\treturn (\n\t\t\tdestination !== this._metaResourceMimetypePath &&\n\t\t\tdestination !== this._metaResourceHashPath\n\t\t);\n\t}\n\n\t/**\n\t * Check if resource is hash file.\n\t *\n\t * @param destination Resource destination.\n\t * @returns Returns true if match.\n\t */\n\tprotected _isResourceHash(destination: string) {\n\t\treturn destination === this._metaResourceHashPath;\n\t}\n\n\t/**\n\t * Open implementation.\n\t *\n\t * @param applicationData The application descriptor data.\n\t */\n\tprotected async _open(applicationData: Readonly<Buffer>) {\n\t\tawait fse.ensureFile(this.path);\n\t\tthis._zipper = this._createZipper(fse.createWriteStream(this.path));\n\t}\n\n\t/**\n\t * Close implementation.\n\t */\n\tprotected async _close() {\n\t\tconst zipper = this._activeZipper();\n\t\tawait zipper.close();\n\t\tthis._zipper = null;\n\n\t\t// Update the hash in the hash meta resource, if present.\n\t\tconst hashEntry = this._zipperEntryHash;\n\t\tif (!hashEntry) {\n\t\t\treturn;\n\t\t}\n\t\tthis._zipperEntryHash = null;\n\n\t\t// First get the digest.\n\t\tconst hashDigest = this._hasher.digest();\n\n\t\t// Get the offset of the local file header.\n\t\tconst {headerOffsetLocal} = hashEntry;\n\n\t\t// Init entry with the hash data, no compression.\n\t\tawait hashEntry.initData(hashDigest, false);\n\n\t\t// Encode the local file header.\n\t\tconst localBuffer = hashEntry.getLocalBuffer();\n\n\t\t// Merge both the header and digest together.\n\t\tconst data = Buffer.concat([localBuffer, hashDigest]);\n\n\t\t// Write that buffer at the offset.\n\t\tconst fd = await fse.open(this.path, 'r+');\n\t\ttry {\n\t\t\tawait fse.write(fd, data, 0, data.length, headerOffsetLocal);\n\t\t}\n\t\tfinally {\n\t\t\tawait fse.close(fd);\n\t\t}\n\t}\n\n\t/**\n\t * Write resource with data implementation.\n\t *\n\t * @param destination Packaged file relative destination.\n\t * @param data Resource data.\n\t * @param options Resource options.\n\t */\n\tprotected async _writeResource(\n\t\tdestination: string,\n\t\tdata: Readonly<Buffer>,\n\t\toptions: Readonly<IPackagerResourceOptions>\n\t) {\n\t\tconst zipper = this._activeZipper();\n\t\tconst compressible = this._isResourceCompressible(destination);\n\t\tconst hash = this._isResourceHash(destination);\n\t\tconst mtime = options.mtime || new Date();\n\n\t\tconst entry = zipper.createEntry();\n\t\tentry.path = destination;\n\t\tentry.createVersion = this._zipCreateVersion;\n\t\tentry.createHostOS = this._zipCreateHostOS;\n\t\tentry.internalAttributes = this._zipInternalAttributes;\n\t\tentry.externalAttributes = this._zipGetExternalAttributes(\n\t\t\toptions.executable === true\n\t\t);\n\t\tentry.setDate(mtime);\n\t\tentry.addExtraFieldsExtendedTimestamp(mtime, mtime, null);\n\t\tentry.addExtraFieldsInfoZipUnix2(this._zipUxUid, this._zipUxGid);\n\t\tconst entryData = await entry.initData(\n\t\t\tdata,\n\t\t\tcompressible ? null : false\n\t\t);\n\t\tawait zipper.addEntry(entry, entryData);\n\n\t\tif (hash) {\n\t\t\tthis._zipperEntryHash = entry;\n\t\t}\n\t}\n}\n"],"file":"air.mjs","sourceRoot":"../../src"}