UNPKG

9.03 kBSource Map (JSON)View Raw
1{"version":3,"file":"loader.mjs","names":["stringEncode","Tag","Swf","concat","asvm1TypeString","str","Uint8Array","asmv1ActionConstantPool","strs","data","map","v","DataView","buffer","byteOffset","byteLength","setUint16","length","asvm1TypeConstant8","i","asmv1ActionPush","pushed","asvm1ActionLoadMovie","setUint8","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"],"sources":["../src/loader.ts"],"sourcesContent":["import {stringEncode} from './swf/util';\nimport {Tag} from './swf/tag';\nimport {Swf} from './swf/swf';\nimport {concat} from './util/internal/data';\n\n/**\n * Type string.\n *\n * @param str The string.\n * @returns Bytecode data.\n */\nfunction asvm1TypeString(str: string) {\n\treturn concat([new Uint8Array(1), stringEncode(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 = concat([new Uint8Array(5), ...strs.map(stringEncode)]);\n\tconst v = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\tdata[0] = 0x88;\n\tv.setUint16(1, data.length - 3, true);\n\tv.setUint16(3, strs.length, true);\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 = new Uint8Array(2);\n\tdata[0] = 0x08;\n\tdata[1] = i;\n\treturn data;\n}\n\n/**\n * Action: Push.\n *\n * @param pushed Pushed data.\n * @returns Bytecode data.\n */\nfunction asmv1ActionPush(pushed: Uint8Array[]) {\n\tconst data = concat([new Uint8Array(3), ...pushed]);\n\tconst v = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\tdata[0] = 0x96;\n\tv.setUint16(1, data.length - 3, true);\n\treturn data;\n}\n\n/**\n * Action: LoadMovie.\n *\n * @returns Bytecode data.\n */\nfunction asvm1ActionLoadMovie() {\n\tconst data = new Uint8Array(4);\n\tconst v = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\tdata[0] = 0x9a;\n\tv.setUint16(1, data.length - 3, true);\n\tv.setUint8(3, 0x40);\n\treturn data;\n}\n\n/**\n * Action: End.\n *\n * @returns Bytecode data.\n */\nfunction asvm1ActionEnd() {\n\treturn new Uint8Array(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 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 concat([\n\t\tasmv1ActionConstantPool([url, '_level0']),\n\t\tasmv1ActionPush([asvm1TypeConstant8(0), asvm1TypeConstant8(1)]),\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 = new Uint8Array(3);\n\t// eslint-disable-next-line no-bitwise\n\tsetBackgroundColor.data[2] = color & 0xff;\n\t// eslint-disable-next-line no-bitwise\n\tsetBackgroundColor.data[1] = (color >> 8) & 0xff;\n\t// eslint-disable-next-line no-bitwise\n\tsetBackgroundColor.data[0] = (color >> 16) & 0xff;\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 =\n\t\tswfv < 5 ? bytecodeLoadMovieSwf4(url) : bytecodeLoadMovieSwf5(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"],"mappings":"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"}
\No newline at end of file