UNPKG

8.8 kBSource Map (JSON)View Raw
1{"version":3,"sources":["projector.ts"],"names":["Projector","Object","constructor","path","movieAppendMarker","openAsArchive","stat","fse","isDirectory","ArchiveDir","isFile","Error","r","ArchiveHdi","hdiutil","mounterMac","nobrowse","withFile","player","movieFile","movieData","readFile","withData","_checkOutput","_writePlayer","_modifyPlayer","_writeMovie","pathExists","_appendMovieData","file","data","format","buffers","c","push","Buffer","from","b","alloc","writeUInt32LE","length","writeUInt32BE","fd","open","appendFile","close"],"mappings":"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","sourcesContent":["import {\n\tArchive,\n\tArchiveDir,\n\tArchiveHdi,\n\tcreateArchiveByFileExtension\n} from '@shockpkg/archive-files';\nimport fse from 'fs-extra';\n\n/**\n * Projector constructor.\n *\n * @param path Output path.\n */\nexport abstract class Projector extends Object {\n\t/**\n\t * Path to hdiutil binary.\n\t */\n\tpublic hdiutil: string | null = null;\n\n\t/**\n\t * Output path.\n\t */\n\tpublic readonly path: string;\n\n\tconstructor(path: string) {\n\t\tsuper();\n\n\t\tthis.path = path;\n\t}\n\n\t/**\n\t * The movie appended marker.\n\t *\n\t * @returns Hex string.\n\t */\n\tpublic get movieAppendMarker() {\n\t\treturn '563412FA';\n\t}\n\n\t/**\n\t * Get the player file or directory as an Archive instance.\n\t *\n\t * @param path File path.\n\t * @returns Archive instance.\n\t */\n\tpublic async openAsArchive(path: string): Promise<Archive> {\n\t\tconst stat = await fse.stat(path);\n\t\tif (stat.isDirectory()) {\n\t\t\treturn new ArchiveDir(path);\n\t\t}\n\t\tif (!stat.isFile()) {\n\t\t\tthrow new Error(`Archive path not file or directory: ${path}`);\n\t\t}\n\n\t\tconst r = createArchiveByFileExtension(path);\n\t\tif (!r) {\n\t\t\tthrow new Error(`Archive file type unknown: ${path}`);\n\t\t}\n\n\t\tif (r instanceof ArchiveHdi) {\n\t\t\tconst {hdiutil} = this;\n\t\t\tif (hdiutil) {\n\t\t\t\tr.mounterMac.hdiutil = hdiutil;\n\t\t\t}\n\t\t\tr.nobrowse = true;\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Write out projector with player and file.\n\t *\n\t * @param player Player path.\n\t * @param movieFile Movie file.\n\t */\n\tpublic async withFile(player: string, movieFile: string | null) {\n\t\tconst movieData = movieFile ? await fse.readFile(movieFile) : null;\n\t\tawait this.withData(player, movieData);\n\t}\n\n\t/**\n\t * Write out projector with player and data.\n\t *\n\t * @param player Player path.\n\t * @param movieData Movie data.\n\t */\n\tpublic async withData(player: string, movieData: Readonly<Buffer> | null) {\n\t\tawait this._checkOutput();\n\t\tawait this._writePlayer(player);\n\t\tawait this._modifyPlayer();\n\t\tawait this._writeMovie(movieData);\n\t}\n\n\t/**\n\t * Check that output path is valid, else throws.\n\t */\n\tprotected async _checkOutput() {\n\t\tif (await fse.pathExists(this.path)) {\n\t\t\tthrow new Error(`Output path already exists: ${this.path}`);\n\t\t}\n\t}\n\n\t/**\n\t * Append movie data to a file.\n\t * Format string characters:\n\t * - d: Movie data.\n\t * - m: Marker bytes.\n\t * - s: Size, 32LE.\n\t * - S: Size, 32BE.\n\t * - l: Size, 64LE.\n\t * - L: Size, 64BE.\n\t *\n\t * @param file File to append to.\n\t * @param data Movie data.\n\t * @param format Format string.\n\t */\n\tprotected async _appendMovieData(\n\t\tfile: string,\n\t\tdata: Readonly<Buffer>,\n\t\tformat: string\n\t) {\n\t\tconst buffers: Readonly<Buffer>[] = [];\n\t\tfor (const c of format) {\n\t\t\tswitch (c) {\n\t\t\t\tcase 'd': {\n\t\t\t\t\tbuffers.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'm': {\n\t\t\t\t\tbuffers.push(Buffer.from(this.movieAppendMarker, 'hex'));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 's': {\n\t\t\t\t\tconst b = Buffer.alloc(4);\n\t\t\t\t\tb.writeUInt32LE(data.length, 0);\n\t\t\t\t\tbuffers.push(b);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'S': {\n\t\t\t\t\tconst b = Buffer.alloc(4);\n\t\t\t\t\tb.writeUInt32BE(data.length, 0);\n\t\t\t\t\tbuffers.push(b);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'l': {\n\t\t\t\t\t// 64-bit, just write 32-bit, SWF cannot be larger.\n\t\t\t\t\tconst b = Buffer.alloc(8, 0);\n\t\t\t\t\tb.writeUInt32LE(data.length, 0);\n\t\t\t\t\tbuffers.push(b);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'L': {\n\t\t\t\t\t// 64-bit, just write 32-bit, SWF cannot be larger.\n\t\t\t\t\tconst b = Buffer.alloc(8, 0);\n\t\t\t\t\tb.writeUInt32BE(data.length, 4);\n\t\t\t\t\tbuffers.push(b);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tthrow new Error(`Unknown format string character: ${c}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst stat = await fse.stat(file);\n\t\tif (!stat.isFile()) {\n\t\t\tthrow new Error(`Path not a file: ${file}`);\n\t\t}\n\n\t\tconst fd = await fse.open(file, 'a');\n\t\ttry {\n\t\t\tfor (const b of buffers) {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tawait fse.appendFile(fd, b);\n\t\t\t}\n\t\t}\n\t\tfinally {\n\t\t\tawait fse.close(fd);\n\t\t}\n\t}\n\n\t/**\n\t * Projector file extension.\n\t *\n\t * @returns File extension.\n\t */\n\tpublic abstract get extension(): string;\n\n\t/**\n\t * Write the projector player.\n\t *\n\t * @param player Player path.\n\t */\n\tprotected abstract _writePlayer(player: string): Promise<void>;\n\n\t/**\n\t * Modify the projector player.\n\t */\n\tprotected abstract _modifyPlayer(): Promise<void>;\n\n\t/**\n\t * Write out the projector movie file.\n\t *\n\t * @param movieData Movie data or null.\n\t */\n\tprotected abstract _writeMovie(\n\t\tmovieData: Readonly<Buffer> | null\n\t): Promise<void>;\n}\n"],"file":"projector.js","sourceRoot":"../src"}
\No newline at end of file