UNPKG

8.81 kBSource Map (JSON)View Raw
1{"version":3,"sources":["loader.ts"],"names":["stringToCStr","Tag","Swf","asvm1TypeString","str","Buffer","concat","alloc","asmv1ActionConstantPool","strs","data","map","writeUInt8","writeUInt16LE","length","asvm1TypeConstant8","i","asmv1ActionPush","pushed","asvm1ActionLoadMovie","asvm1ActionEnd","bytecodeLoadMovieSwf4","url","bytecodeLoadMovieSwf5","loader","swfv","width","height","fps","color","delay","Error","swf","version","frameSize","xMax","Math","round","yMax","frameRate","value","frameCount","setBackgroundColor","code","tags","push","showFrame","doAction","end","encode"],"mappings":"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","sourcesContent":["import {\n\tstringToCStr\n} from './swf/util';\nimport {\n\tTag\n} from './swf/tag';\nimport {\n\tSwf\n} from './swf/swf';\n\n/**\n * Type string.\n *\n * @param str The string.\n * @returns Bytecode data.\n */\nfunction asvm1TypeString(str: string) {\n\treturn Buffer.concat([Buffer.alloc(1), stringToCStr(str)]);\n}\n\n/**\n * Action: ConstantPoolEnd.\n *\n * @param strs Constant strings.\n * @returns Bytecode data.\n */\nfunction asmv1ActionConstantPool(strs: string[]) {\n\tconst data = Buffer.concat([Buffer.alloc(5), ...strs.map(stringToCStr)]);\n\tdata.writeUInt8(0x88, 0);\n\tdata.writeUInt16LE(data.length - 3, 1);\n\tdata.writeUInt16LE(strs.length, 3);\n\treturn data;\n}\n\n/**\n * Type constant 8-bit.\n *\n * @param i Constant index.\n * @returns Bytecode data.\n */\nfunction asvm1TypeConstant8(i: number) {\n\tconst data = Buffer.alloc(2);\n\tdata.writeUInt8(0x08, 0);\n\tdata.writeUInt8(i, 1);\n\treturn data;\n}\n\n/**\n * Action: Push.\n *\n * @param pushed Pushed data.\n * @returns Bytecode data.\n */\nfunction asmv1ActionPush(pushed: Buffer[]) {\n\tconst data = Buffer.concat([Buffer.alloc(3), ...pushed]);\n\tdata.writeUInt8(0x96, 0);\n\tdata.writeUInt16LE(data.length - 3, 1);\n\treturn data;\n}\n\n/**\n * Action: LoadMovie.\n *\n * @returns Bytecode data.\n */\nfunction asvm1ActionLoadMovie() {\n\tconst data = Buffer.alloc(4);\n\tdata.writeUInt8(0x9A, 0);\n\tdata.writeUInt16LE(data.length - 3, 1);\n\tdata.writeUInt8(0x40, 3);\n\treturn data;\n}\n\n/**\n * Action: End.\n *\n * @returns Bytecode data.\n */\nfunction asvm1ActionEnd() {\n\treturn Buffer.alloc(1);\n}\n\n/**\n * Bytecode in SWF4 format.\n *\n * @param url The URL to load.\n * @returns Bytecode data.\n */\nfunction bytecodeLoadMovieSwf4(url: string) {\n\treturn Buffer.concat([\n\t\tasmv1ActionPush([asvm1TypeString(url)]),\n\t\tasmv1ActionPush([asvm1TypeString('/')]),\n\t\tasvm1ActionLoadMovie(),\n\t\tasvm1ActionEnd()\n\t]);\n}\n\n/**\n * Bytecode in SWF5 format.\n *\n * @param url The URL to load.\n * @returns Bytecode data.\n */\nfunction bytecodeLoadMovieSwf5(url: string) {\n\treturn Buffer.concat([\n\t\tasmv1ActionConstantPool([url, '_level0']),\n\t\tasmv1ActionPush([\n\t\t\tasvm1TypeConstant8(0),\n\t\t\tasvm1TypeConstant8(1)\n\t\t]),\n\t\tasvm1ActionLoadMovie(),\n\t\tasvm1ActionEnd()\n\t]);\n}\n\n/**\n * Generate a loader stub SWF movie.\n * Optionally include a delay to give player a change to initialize first.\n *\n * @param swfv SWF format version number.\n * @param width Frame width.\n * @param height Frame height.\n * @param fps Frames-per-second.\n * @param color Background color.\n * @param url The URL to load.\n * @param delay Number of frame to delay loading.\n * @returns Movie data.\n */\nexport function loader(\n\tswfv: number,\n\twidth: number,\n\theight: number,\n\tfps: number,\n\tcolor: number,\n\turl: string,\n\tdelay = 0\n) {\n\tif (swfv < 4) {\n\t\tthrow new Error('SWF format version must be 4+');\n\t}\n\tdelay = delay < 0 ? 0 : delay;\n\n\tconst swf = new Swf();\n\tswf.version = swfv;\n\tswf.frameSize.xMax = Math.round(width * 20);\n\tswf.frameSize.yMax = Math.round(height * 20);\n\tswf.frameRate.value = fps;\n\tswf.frameCount = delay + 1;\n\n\tconst setBackgroundColor = new Tag();\n\tsetBackgroundColor.code = 9;\n\tsetBackgroundColor.data = Buffer.alloc(3);\n\t// eslint-disable-next-line no-bitwise\n\tsetBackgroundColor.data.writeUInt8(color & 0xFF, 2);\n\t// eslint-disable-next-line no-bitwise\n\tsetBackgroundColor.data.writeUInt8((color >> 8) & 0xFF, 1);\n\t// eslint-disable-next-line no-bitwise\n\tsetBackgroundColor.data.writeUInt8((color >> 16) & 0xFF, 0);\n\tswf.tags.push(setBackgroundColor);\n\n\tconst showFrame = new Tag();\n\tshowFrame.code = 1;\n\tfor (let i = 0; i < delay; i++) {\n\t\tswf.tags.push(showFrame);\n\t}\n\n\tconst doAction = new Tag();\n\tdoAction.code = 12;\n\tdoAction.data = swfv < 5 ?\n\t\tbytecodeLoadMovieSwf4(url) :\n\t\tbytecodeLoadMovieSwf5(url);\n\tswf.tags.push(doAction);\n\n\tswf.tags.push(showFrame);\n\n\tconst end = new Tag();\n\tend.code = 0;\n\tswf.tags.push(end);\n\n\treturn swf.encode();\n}\n"],"file":"loader.mjs","sourceRoot":"../src"}
\No newline at end of file