UNPKG

@shockpkg/ria-packager

Version:

Package for creating Adobe AIR packages

1 lines 10.2 kB
{"version":3,"file":"air.mjs","names":["createWriteStream","mkdir","open","dirname","Zipper","Packager","PackagerAir","_zipper","_zipperEntryHash","constructor","path","_zipUxUid","_zipUxGid","_zipCreateVersion","_zipCreateHostOS","_zipInternalAttributes","_zipGetExternalAttributes","executable","_createZipper","writable","_activeZipper","r","Error","_isResourceCompressible","destination","_metaResourceMimetypePath","_metaResourceHashPath","_isResourceHash","_open","recursive","_close","zipper","close","hashEntry","hashDigest","_hasher","digest","headerOffsetLocal","initData","local","encodeLocal","data","Uint8Array","length","set","f","write","_writeResource","options","compressible","hash","mtime","Date","entry","createEntry","TextEncoder","encode","createVersion","createHostOS","internalAttributes","externalAttributes","setDate","addExtraFieldsExtendedTimestamp","addExtraFieldsInfoZipUnix2","entryData","addEntry"],"sources":["../../src/packager/air.ts"],"sourcesContent":["import {createWriteStream} from 'node:fs';\nimport {mkdir, open} from 'node:fs/promises';\nimport {dirname} from 'node:path';\n\nimport {IZipperWriteStream, Zipper, ZipperEntry} from '../zipper.ts';\nimport {IPackagerResourceOptions, Packager} from '../packager.ts';\n\n/**\n * PackagerAir object.\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\t/**\n\t * PackagerAir constructor.\n\t *\n\t * @param path Output path.\n\t */\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: IZipperWriteStream) {\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\tprotected async _open() {\n\t\tconst {path} = this;\n\t\tawait mkdir(dirname(path), {recursive: true});\n\t\tthis._zipper = this._createZipper(\n\t\t\tcreateWriteStream(path) as IZipperWriteStream\n\t\t);\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 local = hashEntry.encodeLocal();\n\n\t\t// Merge both the header and digest together, write all at once.\n\t\tconst data = new Uint8Array(local.length + hashDigest.length);\n\t\tdata.set(local);\n\t\tdata.set(hashDigest, local.length);\n\n\t\t// Write that buffer at the offset.\n\t\tconst f = await open(this.path, 'r+');\n\t\ttry {\n\t\t\tawait f.write(data, 0, data.length, headerOffsetLocal);\n\t\t} finally {\n\t\t\tawait f.close();\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<Uint8Array>,\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 = new TextEncoder().encode(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"],"mappings":"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","ignoreList":[]}