@swf2es/cli 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/LICENSE.third-party +389 -0
- package/README.md +32 -2
- package/dist/aot.d.ts +98 -0
- package/dist/aot.d.ts.map +1 -0
- package/dist/aot.js +145 -0
- package/dist/aot.js.map +1 -0
- package/dist/args.d.ts +31 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +37 -0
- package/dist/args.js.map +1 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +233 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/help.d.ts +6 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +52 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +122 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/files.d.ts +10 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +35 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +45 -0
- package/dist/main.js.map +1 -0
- package/dist/output.d.ts +7 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +20 -0
- package/dist/output.js.map +1 -0
- package/dist/shell-memories.d.ts +2 -0
- package/dist/shell-memories.d.ts.map +1 -0
- package/dist/shell-memories.js +32 -0
- package/dist/shell-memories.js.map +1 -0
- package/dist/shell-thread.d.ts +2 -0
- package/dist/shell-thread.d.ts.map +1 -0
- package/dist/shell-thread.js +49 -0
- package/dist/shell-thread.js.map +1 -0
- package/dist/shell-toplevel-library.d.ts +2 -0
- package/dist/shell-toplevel-library.d.ts.map +1 -0
- package/dist/shell-toplevel-library.js +22 -0
- package/dist/shell-toplevel-library.js.map +1 -0
- package/dist/shell.d.ts +62 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +135 -0
- package/dist/shell.js.map +1 -0
- package/dist/threads.d.ts +85 -0
- package/dist/threads.d.ts.map +1 -0
- package/dist/threads.js +145 -0
- package/dist/threads.js.map +1 -0
- package/package.json +46 -3
- package/src/aot.ts +239 -0
- package/src/args.ts +53 -0
- package/src/commands/compile.ts +286 -0
- package/src/commands/help.ts +60 -0
- package/src/commands/run.ts +131 -0
- package/src/files.ts +38 -0
- package/src/index.ts +25 -0
- package/src/main.ts +51 -0
- package/src/output.ts +23 -0
- package/src/shell-memories.ts +35 -0
- package/src/shell-thread.ts +54 -0
- package/src/shell-toplevel-library.ts +28 -0
- package/src/shell.ts +211 -0
- package/src/threads.ts +223 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// swf2es help: the commands, or one command's usage.
|
|
2
|
+
import { parseArgs } from "node:util";
|
|
3
|
+
import { COMMON_OPTIONS, COMMON_USAGE, parse } from "../args.js";
|
|
4
|
+
import { usageError } from "../output.js";
|
|
5
|
+
import { compile } from "./compile.js";
|
|
6
|
+
import { run } from "./run.js";
|
|
7
|
+
export const help = {
|
|
8
|
+
name: "help",
|
|
9
|
+
summary: "show the commands, or a command's usage",
|
|
10
|
+
usage: `usage: swf2es help [command]
|
|
11
|
+
|
|
12
|
+
Shows the commands, or how to run one.
|
|
13
|
+
|
|
14
|
+
options:
|
|
15
|
+
${COMMON_USAGE}`,
|
|
16
|
+
async main(argv) {
|
|
17
|
+
const parsed = parse(help, () => parseArgs({ args: argv, allowPositionals: true, options: COMMON_OPTIONS }));
|
|
18
|
+
if (!parsed) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const { positionals } = parsed;
|
|
22
|
+
if (positionals.length > 1) {
|
|
23
|
+
usageError(`expected one command at most, got ${positionals.length}`);
|
|
24
|
+
}
|
|
25
|
+
if (positionals.length === 0) {
|
|
26
|
+
console.log(usage());
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const command = commands.get(positionals[0]);
|
|
30
|
+
if (!command) {
|
|
31
|
+
usageError(`no command ${positionals[0]}`);
|
|
32
|
+
}
|
|
33
|
+
console.log(command.usage);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
export const commands = new Map([compile, run, help].map((c) => [c.name, c]));
|
|
37
|
+
/** The command's own usage: its commands, and the bare form compile keeps. */
|
|
38
|
+
export function usage() {
|
|
39
|
+
const width = Math.max(...[...commands.keys()].map((n) => n.length));
|
|
40
|
+
const list = [...commands.values()].map((c) => ` ${c.name.padEnd(width)} ${c.summary}`);
|
|
41
|
+
return `usage: swf2es <command> [options]
|
|
42
|
+
swf2es <file.swf|file.abc> [options] (as swf2es compile)
|
|
43
|
+
|
|
44
|
+
commands:
|
|
45
|
+
${list.join("\n")}
|
|
46
|
+
|
|
47
|
+
options:
|
|
48
|
+
${COMMON_USAGE}
|
|
49
|
+
|
|
50
|
+
Run swf2es help <command> for a command's options.`;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAgB,KAAK,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,IAAI,GAAY;IAC3B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE;;;;;EAKP,YAAY,EAAE;IACd,KAAK,CAAC,IAAI,CAAC,IAAI;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAC9B,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAC3E,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAC/B,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,UAAU,CAAC,qCAAqC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,UAAU,CAAC,cAAc,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/F,8EAA8E;AAC9E,MAAM,UAAU,KAAK;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1F,OAAO;;;;EAIP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGf,YAAY;;mDAEqC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgC,KAAK,OAAO,EAAS,MAAM,YAAY,CAAC;AAkE/E,eAAO,MAAM,GAAG,EAAE,OAwDjB,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// swf2es run: ABCs run as avmshell runs them, each compiled by codegen and
|
|
2
|
+
// loaded into the runtime, their trace and print on stdout.
|
|
3
|
+
import { readFileSync, statSync, writeFileSync, writeSync } from "node:fs";
|
|
4
|
+
import { basename, extname, resolve } from "node:path";
|
|
5
|
+
import { parseArgs } from "node:util";
|
|
6
|
+
import { createCodegen } from "@swf2es/codegen";
|
|
7
|
+
import { builtinLibrary, createRuntime } from "@swf2es/runtime/avm2";
|
|
8
|
+
import { InputError, RejectedError, readInput } from "../aot.js";
|
|
9
|
+
import { COMMON_OPTIONS, COMMON_USAGE, parse } from "../args.js";
|
|
10
|
+
import { codegenModule, read, readLibraries } from "../files.js";
|
|
11
|
+
import { fail, usageError } from "../output.js";
|
|
12
|
+
import { runShell } from "../shell.js";
|
|
13
|
+
import { shellToplevelLibrary } from "../shell-toplevel-library.js";
|
|
14
|
+
import { nodeShellThreads } from "../threads.js";
|
|
15
|
+
const USAGE = `usage: swf2es run <file.abc> [more.abc ...] [options]
|
|
16
|
+
|
|
17
|
+
Runs ABCs as avmshell does: its libraries first, their scripts run on
|
|
18
|
+
first use, then each ABC in the order given, in one domain, its entry
|
|
19
|
+
point run once it loads. What they trace and print goes to stdout. An ABC
|
|
20
|
+
rejected with a VerifyError, or an exception nothing catches, is printed
|
|
21
|
+
there too, as avmshell prints it, and ends the run; the ABCs after it do
|
|
22
|
+
not run. avmshell's File reads and writes in the working directory, and
|
|
23
|
+
its workers run on threads of their own, stopped when the ABCs end.
|
|
24
|
+
|
|
25
|
+
options:
|
|
26
|
+
--lib <file.abc> a library to load first, into the root domain, in
|
|
27
|
+
the order given; repeat for each. Default:
|
|
28
|
+
avmshell's builtin.abc and shell_toplevel.abc,
|
|
29
|
+
which swf2es ships
|
|
30
|
+
${COMMON_USAGE}
|
|
31
|
+
|
|
32
|
+
exit status: 0 when every ABC ran to its end, 1 as avmshell's for a
|
|
33
|
+
VerifyError or an uncaught exception, 2 for a mistake in the command line,
|
|
34
|
+
and 1 for what stopped it besides (an unreadable input or library, a SWF,
|
|
35
|
+
a library rejected, an error of swf2es' own), said on stderr`;
|
|
36
|
+
/** avmshell's libraries, as its own build has them. */
|
|
37
|
+
const SHELL_LIBRARIES = [
|
|
38
|
+
{ name: "builtin", abc: builtinLibrary },
|
|
39
|
+
{ name: "shell_toplevel", abc: shellToplevelLibrary },
|
|
40
|
+
];
|
|
41
|
+
const SWF_SIGNATURES = new Set(["FWS", "CWS", "ZWS"]);
|
|
42
|
+
const OPTIONS = {
|
|
43
|
+
lib: { type: "string", multiple: true },
|
|
44
|
+
...COMMON_OPTIONS,
|
|
45
|
+
};
|
|
46
|
+
/** avmshell's File: the working directory's files, as it reads and writes them. */
|
|
47
|
+
function workingFiles() {
|
|
48
|
+
return {
|
|
49
|
+
read(name) {
|
|
50
|
+
// One it cannot open, unreadable or a directory, avmshell's File cannot
|
|
51
|
+
// open either: Error #1500 for the ABC to catch, not swf2es failing.
|
|
52
|
+
try {
|
|
53
|
+
const path = resolve(name);
|
|
54
|
+
return statSync(path).isFile() ? new Uint8Array(readFileSync(path)) : null;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
write(name, bytes) {
|
|
61
|
+
try {
|
|
62
|
+
writeFileSync(resolve(name), bytes);
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export const run = {
|
|
72
|
+
name: "run",
|
|
73
|
+
summary: "run ABCs as avmshell does, printing what they trace",
|
|
74
|
+
usage: USAGE,
|
|
75
|
+
async main(argv) {
|
|
76
|
+
const parsed = parse(run, () => parseArgs({ args: argv, allowPositionals: true, options: OPTIONS }));
|
|
77
|
+
if (!parsed) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const { values, positionals } = parsed;
|
|
81
|
+
if (positionals.length === 0) {
|
|
82
|
+
usageError("expected an ABC file to run", "run");
|
|
83
|
+
}
|
|
84
|
+
const abcs = [];
|
|
85
|
+
for (const file of positionals) {
|
|
86
|
+
const abc = await read(file, "input");
|
|
87
|
+
if (SWF_SIGNATURES.has(String.fromCharCode(...abc.subarray(0, 3)))) {
|
|
88
|
+
fail(`${file}: a SWF; run takes ABCs, as a SWF's code needs the player's playerglobal`);
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
readInput(abc);
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
fail(e instanceof InputError ? `${file}: ${e.message}` : String(e));
|
|
95
|
+
}
|
|
96
|
+
abcs.push({ name: basename(file, extname(file)), abc });
|
|
97
|
+
}
|
|
98
|
+
const libs = values.lib ? await readLibraries(values.lib) : SHELL_LIBRARIES;
|
|
99
|
+
const codegen = await codegenModule();
|
|
100
|
+
const compiler = await createCodegen(codegen);
|
|
101
|
+
// A line at a time, as avmshell's console writes it; its workers' threads write their own.
|
|
102
|
+
const print = (line) => writeSync(1, `${line}\n`);
|
|
103
|
+
const threads = nodeShellThreads({ codegen, libraries: libs, abcs });
|
|
104
|
+
try {
|
|
105
|
+
process.exitCode = await runShell(libs, abcs, {
|
|
106
|
+
compiler,
|
|
107
|
+
createRuntime,
|
|
108
|
+
print,
|
|
109
|
+
files: workingFiles(),
|
|
110
|
+
workers: threads.host,
|
|
111
|
+
});
|
|
112
|
+
await threads.close();
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
if (e instanceof RejectedError) {
|
|
116
|
+
fail(e.message);
|
|
117
|
+
}
|
|
118
|
+
fail(`swf2es itself failed: ${e.stack ?? e}`);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function read(path: string, what: string): Promise<Uint8Array>;
|
|
2
|
+
export declare function writing(path: string, write: () => Promise<unknown>): Promise<void>;
|
|
3
|
+
/** The libraries at `paths`, read, each named by its file. */
|
|
4
|
+
export declare function readLibraries(paths: string[]): Promise<{
|
|
5
|
+
name: string;
|
|
6
|
+
abc: Uint8Array;
|
|
7
|
+
}[]>;
|
|
8
|
+
/** The release codegen.wasm, compiled. */
|
|
9
|
+
export declare function codegenModule(): Promise<WebAssembly.Module>;
|
|
10
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAOA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAM1E;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,EAAE,CAAC,CAO3F;AAED,0CAA0C;AAC1C,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAGjE"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Reading the commands' inputs and writing their outputs, a failure said
|
|
2
|
+
// as such rather than as a stack.
|
|
3
|
+
import { readFile } from "node:fs/promises";
|
|
4
|
+
import { basename, extname } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { fail } from "./output.js";
|
|
7
|
+
export async function read(path, what) {
|
|
8
|
+
try {
|
|
9
|
+
return new Uint8Array(await readFile(path));
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
fail(`cannot read ${what} ${path}: ${e.code ?? e}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function writing(path, write) {
|
|
16
|
+
try {
|
|
17
|
+
await write();
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
fail(`cannot write ${path}: ${e.code ?? e}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** The libraries at `paths`, read, each named by its file. */
|
|
24
|
+
export function readLibraries(paths) {
|
|
25
|
+
return Promise.all(paths.map(async (path) => ({
|
|
26
|
+
name: basename(path, extname(path)),
|
|
27
|
+
abc: await read(path, "library"),
|
|
28
|
+
})));
|
|
29
|
+
}
|
|
30
|
+
/** The release codegen.wasm, compiled. */
|
|
31
|
+
export async function codegenModule() {
|
|
32
|
+
const path = fileURLToPath(import.meta.resolve("@swf2es/codegen/codegen.wasm"));
|
|
33
|
+
return WebAssembly.compile(await readFile(path));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,kCAAkC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,IAAY;IACnD,IAAI,CAAC;QACH,OAAO,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,KAAM,CAA2B,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,KAA6B;IACvE,IAAI,CAAC;QACH,MAAM,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,gBAAgB,IAAI,KAAM,CAA2B,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;KACjC,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAChF,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** The ahead-of-time compiler and avmshell's way of running ABCs as a library, for a host that does without the command. */
|
|
2
|
+
export { type AbcInput, type ActionsModule, AIR_API_VERSION, API_VERSION, type Avm1Input, compileActionsAhead, compileAhead, type Input, type Module, RejectedError, readInput, sha256, } from "./aot.js";
|
|
3
|
+
export { evaluateModule, runShell, type ShellCompiler, type ShellLibrary, type ShellModule, type ShellOptions, shellDomain, } from "./shell.js";
|
|
4
|
+
export { nodeShellThreads, type ShellThreads, type ShellThreadsOptions } from "./threads.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAC5H,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,eAAe,EACf,WAAW,EACX,KAAK,SAAS,EACd,mBAAmB,EACnB,YAAY,EACZ,KAAK,KAAK,EACV,KAAK,MAAM,EACX,aAAa,EACb,SAAS,EACT,MAAM,GACP,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,cAAc,EACd,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** The ahead-of-time compiler and avmshell's way of running ABCs as a library, for a host that does without the command. */
|
|
2
|
+
export { AIR_API_VERSION, API_VERSION, compileActionsAhead, compileAhead, RejectedError, readInput, sha256, } from "./aot.js";
|
|
3
|
+
export { evaluateModule, runShell, shellDomain, } from "./shell.js";
|
|
4
|
+
export { nodeShellThreads } from "./threads.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAC5H,OAAO,EAGL,eAAe,EACf,WAAW,EAEX,mBAAmB,EACnB,YAAY,EAGZ,aAAa,EACb,SAAS,EACT,MAAM,GACP,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,cAAc,EACd,QAAQ,EAKR,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAA+C,MAAM,cAAc,CAAC"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// The swf2es command: the first argument names a command, and any other
|
|
3
|
+
// first argument is compile's input, as before there were commands.
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import { printVersion } from "./args.js";
|
|
6
|
+
import { compile } from "./commands/compile.js";
|
|
7
|
+
import { commands, usage } from "./commands/help.js";
|
|
8
|
+
import { USAGE_ERROR, usageError } from "./output.js";
|
|
9
|
+
async function main(argv) {
|
|
10
|
+
const [first, ...rest] = argv;
|
|
11
|
+
const command = commands.get(first);
|
|
12
|
+
if (command) {
|
|
13
|
+
await command.main(rest);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
switch (first) {
|
|
17
|
+
case undefined:
|
|
18
|
+
process.stderr.write(`${usage()}\n`);
|
|
19
|
+
process.exitCode = USAGE_ERROR;
|
|
20
|
+
return;
|
|
21
|
+
case "-h":
|
|
22
|
+
case "--help":
|
|
23
|
+
if (rest.length === 0) {
|
|
24
|
+
console.log(usage());
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
break;
|
|
28
|
+
case "-v":
|
|
29
|
+
case "--version":
|
|
30
|
+
if (rest.length === 0) {
|
|
31
|
+
printVersion();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
// An option before the input, as `swf2es -o dir file.swf`, is compile's
|
|
37
|
+
// too; a word that is no command nor a file is taken for a mistyped command.
|
|
38
|
+
if (first.startsWith("-") || /[./\\]/.test(first) || existsSync(first)) {
|
|
39
|
+
await compile.main(argv);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
usageError(`no command ${first}; to compile a file of that name, swf2es compile ${first}`);
|
|
43
|
+
}
|
|
44
|
+
await main(process.argv.slice(2));
|
|
45
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,wEAAwE;AACxE,oEAAoE;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;YACrC,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC;YAC/B,OAAO;QACT,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ;YACX,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,MAAM;QACR,KAAK,IAAI,CAAC;QACV,KAAK,WAAW;YACd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,YAAY,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM;IACV,CAAC;IAED,wEAAwE;IACxE,6EAA6E;IAC7E,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvE,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,UAAU,CAAC,cAAc,KAAK,oDAAoD,KAAK,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** The exit status for a mistake in how the command was run. */
|
|
2
|
+
export declare const USAGE_ERROR = 2;
|
|
3
|
+
/** Say what went wrong, and a hint on another line if there is one, and exit. */
|
|
4
|
+
export declare function fail(message: string, status?: number, hint?: string): never;
|
|
5
|
+
/** A mistake in the command line, with where to read how to run it. */
|
|
6
|
+
export declare function usageError(message: string, command?: string): never;
|
|
7
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAKA,gEAAgE;AAChE,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,iFAAiF;AACjF,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAQtE;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAEnE"}
|
package/dist/output.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// What the command says about itself on stderr. styleText colours only a
|
|
2
|
+
// terminal that takes colour: not with NO_COLOR, nor when stderr is a pipe
|
|
3
|
+
// or a file, unless FORCE_COLOR asks.
|
|
4
|
+
import { styleText } from "node:util";
|
|
5
|
+
/** The exit status for a mistake in how the command was run. */
|
|
6
|
+
export const USAGE_ERROR = 2;
|
|
7
|
+
/** Say what went wrong, and a hint on another line if there is one, and exit. */
|
|
8
|
+
export function fail(message, status = 1, hint) {
|
|
9
|
+
const head = styleText(["bold", "red"], "error:", { stream: process.stderr });
|
|
10
|
+
process.stderr.write(`swf2es: ${head} ${message}\n`);
|
|
11
|
+
if (hint) {
|
|
12
|
+
process.stderr.write(`${styleText("dim", hint, { stream: process.stderr })}\n`);
|
|
13
|
+
}
|
|
14
|
+
process.exit(status);
|
|
15
|
+
}
|
|
16
|
+
/** A mistake in the command line, with where to read how to run it. */
|
|
17
|
+
export function usageError(message, command) {
|
|
18
|
+
fail(message, USAGE_ERROR, `run swf2es help${command ? ` ${command}` : ""} for usage`);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,2EAA2E;AAC3E,sCAAsC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,gEAAgE;AAChE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B,iFAAiF;AACjF,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,MAAM,GAAG,CAAC,EAAE,IAAa;IAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC;IACrD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAgB;IAC1D,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,kBAAkB,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-memories.d.ts","sourceRoot":"","sources":["../src/shell-memories.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// The shared memory of a primordial's threads, kept by a thread of its own
|
|
2
|
+
// (threads.ts): every shareable ByteArray's memory a thread shares is
|
|
3
|
+
// posted on the group's BroadcastChannel, which this thread, its event
|
|
4
|
+
// loop always free, keeps, and answers a thread that asks for one it
|
|
5
|
+
// missed, as one does that was still starting when the memory was shared.
|
|
6
|
+
import { workerData } from "node:worker_threads";
|
|
7
|
+
const { group, memories: seen, ready } = workerData;
|
|
8
|
+
const memories = new Map(seen.map((m) => [m.id, m]));
|
|
9
|
+
const channel = new BroadcastChannel(group);
|
|
10
|
+
channel.onmessage = (event) => {
|
|
11
|
+
const message = event.data;
|
|
12
|
+
switch (message.type) {
|
|
13
|
+
case "memory":
|
|
14
|
+
memories.set(message.memory.id, message.memory);
|
|
15
|
+
break;
|
|
16
|
+
case "ask":
|
|
17
|
+
channel.postMessage({
|
|
18
|
+
type: "answer",
|
|
19
|
+
id: message.id,
|
|
20
|
+
memory: memories.get(message.id) ?? null,
|
|
21
|
+
});
|
|
22
|
+
Atomics.store(message.answered, 0, 1);
|
|
23
|
+
Atomics.notify(message.answered, 0);
|
|
24
|
+
break;
|
|
25
|
+
case "answer":
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
// Subscribed: the threads may start.
|
|
30
|
+
Atomics.store(ready, 0, 1);
|
|
31
|
+
Atomics.notify(ready, 0);
|
|
32
|
+
//# sourceMappingURL=shell-memories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-memories.js","sourceRoot":"","sources":["../src/shell-memories.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,0EAA0E;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,UAA0B,CAAC;AACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAA4B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC5C,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;IAC5B,MAAM,OAAO,GAAI,KAA4C,CAAC,IAAI,CAAC;IACnE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM;QACR,KAAK,KAAK;YACR,OAAO,CAAC,WAAW,CAAC;gBAClB,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI;aACjB,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,QAAQ;YACX,MAAM;IACV,CAAC;AACH,CAAC,CAAC;AAEF,qCAAqC;AACrC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-thread.d.ts","sourceRoot":"","sources":["../src/shell-thread.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// A background worker's thread (threads.ts): its ABCs, or the primordial's,
|
|
2
|
+
// run after the libraries as runShell runs them, in a runtime that is the
|
|
3
|
+
// worker's; the workers it starts run on threads of its own, which it waits
|
|
4
|
+
// for once its code ends, as they outlive it in avmshell.
|
|
5
|
+
import { writeSync } from "node:fs";
|
|
6
|
+
import { parentPort, workerData } from "node:worker_threads";
|
|
7
|
+
import { createCodegen } from "@swf2es/codegen";
|
|
8
|
+
import { createRuntime, endShellWorker, shellWorkerTerminated, startShellWorker, } from "@swf2es/runtime/avm2";
|
|
9
|
+
import { runShell } from "./shell.js";
|
|
10
|
+
import { nodeShellThreads } from "./threads.js";
|
|
11
|
+
const { codegen, libraries, abcs, init, post, group, memories, apiVersion } = workerData;
|
|
12
|
+
const print = post
|
|
13
|
+
? (line) => parentPort?.postMessage(line)
|
|
14
|
+
: (line) => writeSync(1, `${line}\n`);
|
|
15
|
+
if (startShellWorker(init)) {
|
|
16
|
+
const threads = nodeShellThreads({
|
|
17
|
+
codegen,
|
|
18
|
+
libraries,
|
|
19
|
+
abcs,
|
|
20
|
+
group,
|
|
21
|
+
memories,
|
|
22
|
+
apiVersion,
|
|
23
|
+
...(post ? { print } : {}),
|
|
24
|
+
});
|
|
25
|
+
let exception = true;
|
|
26
|
+
try {
|
|
27
|
+
const code = init.code ? [{ name: `worker-${init.id}`, abc: init.code }] : abcs;
|
|
28
|
+
const exitCode = await runShell(libraries, code, {
|
|
29
|
+
compiler: await createCodegen(codegen),
|
|
30
|
+
createRuntime,
|
|
31
|
+
print,
|
|
32
|
+
workers: threads.host,
|
|
33
|
+
worker: init,
|
|
34
|
+
apiVersion,
|
|
35
|
+
});
|
|
36
|
+
exception = exitCode !== 0;
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
// Terminated by another worker, its code stops where it was.
|
|
40
|
+
if (!shellWorkerTerminated(init)) {
|
|
41
|
+
print(`swf2es: a background worker failed: ${e.stack ?? e}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
endShellWorker(init, exception);
|
|
46
|
+
await threads.ended();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=shell-thread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-thread.js","sourceRoot":"","sources":["../src/shell-thread.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,0DAA0D;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAwB,MAAM,cAAc,CAAC;AAEtE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GACzE,UAA6B,CAAC;AAChC,MAAM,KAAK,GAAG,IAAI;IAChB,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC;IACjD,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;AAEhD,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,gBAAgB,CAAC;QAC/B,OAAO;QACP,SAAS;QACT,IAAI;QACJ,KAAK;QACL,QAAQ;QACR,UAAU;QACV,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3B,CAAC,CAAC;IACH,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE;YAC/C,QAAQ,EAAE,MAAM,aAAa,CAAC,OAAO,CAAC;YACtC,aAAa;YACb,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,UAAU;SACX,CAAC,CAAC;QACH,SAAS,GAAG,QAAQ,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,6DAA6D;QAC7D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,uCAAwC,CAAW,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;YAAS,CAAC;QACT,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-toplevel-library.d.ts","sourceRoot":"","sources":["../src/shell-toplevel-library.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,oBAAoB,EAAE,UAElC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// avmplus' shell_toplevel.abc: avmshell's own classes, which `swf2es run` loads after builtin.
|
|
2
|
+
// Generated by tools/avmplus-libraries.ts --update; not to be edited.
|
|
3
|
+
//
|
|
4
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
5
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
6
|
+
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
7
|
+
//
|
|
8
|
+
// Its source form is the ActionScript in shell/ and extensions/ (Sampler.as, Trace.as)
|
|
9
|
+
// of avmplus, https://github.com/swf2es/avmplus at commit
|
|
10
|
+
// 858d034a3bd3a54d9b70909386435cf4aec81d21,
|
|
11
|
+
// which shell/shell_toplevel.py compiles into generated/shell_toplevel.abc.
|
|
12
|
+
/** Base64 to bytes with a plain loop: Uint8Array.from with a callback takes some 8 times as long. */
|
|
13
|
+
function decode(text) {
|
|
14
|
+
const raw = atob(text);
|
|
15
|
+
const bytes = new Uint8Array(raw.length);
|
|
16
|
+
for (let i = 0; i < raw.length; i++) {
|
|
17
|
+
bytes[i] = raw.charCodeAt(i);
|
|
18
|
+
}
|
|
19
|
+
return bytes;
|
|
20
|
+
}
|
|
21
|
+
export const shellToplevelLibrary = decode("EAAuAAgqZQACAQMEAAgAAAAAAADoPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAIQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAYQKUDAAR2b2lkB0Jvb2xlYW4GU3lzdGVtE3NoZWxsX3RvcGxldmVsLmFzJDEHYXZtcGx1cwVkZW9wdAhyZWFkTGluZQZTdHJpbmcIZ2V0VGltZXIEdWludAV0cmFjZQZEb21haW4NY3VycmVudERvbWFpbghnZXRDbGFzcwVDbGFzcwhkZWJ1Z2dlcg1hdm1wbHVzOklUZXN0BHRlc3QFSVRlc3QNYXZtcGx1czpDVGVzdAPuipQFQ1Rlc3QGT2JqZWN0CmF2bXBsdXM6TUkGTnVtYmVyBHBsdXMCTUkOYXZtcGx1czpTeXN0ZW0EYXJndgdnZXRBcmd2A2ludAVBcnJheQNYTUwLX19BUzNfXy52ZWMGVmVjdG9yCEZ1bmN0aW9uBGV4aXQDZm9vBGV4ZWMDYmFyBGF0dHIId2hhdGV2ZXIFc2xlZXARZ2V0QXZtcGx1c1ZlcnNpb24LZ2V0RmVhdHVyZXMKZ2V0UnVubW9kZQV3cml0ZQppc0RlYnVnZ2VyEmdldE5hbm9zZWNvbmRUaW1lcgt0b3RhbE1lbW9yeQpmcmVlTWVtb3J5DXByaXZhdGVNZW1vcnkTZm9yY2VGdWxsQ29sbGVjdGlvbg9xdWV1ZUNvbGxlY3Rpb24WaHR0cDovL3d3dy5leGFtcGxlLmNvbQZuc3Rlc3QIaXNHbG9iYWwKc3dmVmVyc2lvbgphcGlWZXJzaW9uCmRpc3Bvc2VYTUwVc21hc2hPYmplY3RWZWN0b3JTaXplEnNtYXNoSW50VmVjdG9yU2l6ZRNzbWFzaFVJbnRWZWN0b3JTaXplFXNtYXNoRG91YmxlVmVjdG9yU2l6ZR5wYXVzZUZvckdDSWZDb2xsZWN0aW9uSW1taW5lbnQHaXM2NGJpdAhpc0ludHB0cg5ydW5JblNhZmVwb2ludBJjYW5vbmljYWxpemVOdW1iZXIMYXZtcGx1czpGaWxlC2ZsYXNoLnV0aWxzCUJ5dGVBcnJheQZleGlzdHMEcmVhZA1yZWFkQnl0ZUFycmF5DndyaXRlQnl0ZUFycmF5BEZpbGUVYXZtc2hlbGw6QWJzdHJhY3RCYXNlCGF2bXNoZWxsDEFic3RyYWN0QmFzZRdhdm1zaGVsbDpSZXN0cmljdGVkQmFzZQ5SZXN0cmljdGVkQmFzZR9hdm1zaGVsbDpBYnN0cmFjdFJlc3RyaWN0ZWRCYXNlFkFic3RyYWN0UmVzdHJpY3RlZEJhc2USYXZtc2hlbGw6Q2hlY2tCYXNlCUNoZWNrQmFzZRNhdm1zaGVsbDpOYXRpdmVCYXNlCk5hdGl2ZUJhc2UWYXZtc2hlbGw6TmF0aXZlQmFzZUFTMw1OYXRpdmVCYXNlQVMzGWF2bXNoZWxsOlNoZWxsQ29yZUZyaWVuZDEQU2hlbGxDb3JlRnJpZW5kMRlhdm1zaGVsbDpTaGVsbENvcmVGcmllbmQyEFNoZWxsQ29yZUZyaWVuZDIZZmxhc2guc3lzdGVtOkNhcGFiaWxpdGllcwdBVk1QbHVzDGZsYXNoLnN5c3RlbQpwbGF5ZXJUeXBlDENhcGFiaWxpdGllcxVhdm1zaGVsbDpwdWJsaWNfY2xhc3MKcHVibGljX3ZhcgPuipUScHVibGljX3Zhcl9BSVJfMV8wA0FQSQM2NjED7oqWEnB1YmxpY192YXJfRlBfMTBfMAM2NjID7oqXEnB1YmxpY192YXJfQUlSXzFfNQM2NjMD7oqYFHB1YmxpY192YXJfQUlSXzFfNV8xAzY2NAPuipkVcHVibGljX3Zhcl9GUF8xMF8wXzMyAzY2NQPuipoUcHVibGljX3Zhcl9BSVJfMV81XzIDNjY2GnB1YmxpY192YXJfQUlSXzFfMF9GUF8xMF8wJnB1YmxpY192YXJfQUlSXzFfNV8xX0ZQXzEwXzBfQUlSXzFfNV8yJXB1YmxpY192YXJfRlBfMTBfMF8zMl9BSVJfMV8wX0ZQXzEwXzAMcHVibGljX2NvbnN0FHB1YmxpY19jb25zdF9BSVJfMV8wFHB1YmxpY19jb25zdF9GUF8xMF8wFHB1YmxpY19jb25zdF9BSVJfMV81FnB1YmxpY19jb25zdF9BSVJfMV81XzEXcHVibGljX2NvbnN0X0ZQXzEwXzBfMzIWcHVibGljX2NvbnN0X0FJUl8xXzVfMhxwdWJsaWNfY29uc3RfQUlSXzFfMF9GUF8xMF8wKHB1YmxpY19jb25zdF9BSVJfMV81XzFfRlBfMTBfMF9BSVJfMV81XzIncHVibGljX2NvbnN0X0ZQXzEwXzBfMzJfQUlSXzFfMF9GUF8xMF8wD3B1YmxpY19mdW5jdGlvbhdwdWJsaWNfZnVuY3Rpb25fQUlSXzFfMBdwdWJsaWNfZnVuY3Rpb25fRlBfMTBfMBdwdWJsaWNfZnVuY3Rpb25fQUlSXzFfNRlwdWJsaWNfZnVuY3Rpb25fQUlSXzFfNV8xGnB1YmxpY19mdW5jdGlvbl9GUF8xMF8wXzMyGXB1YmxpY19mdW5jdGlvbl9BSVJfMV81XzIfcHVibGljX2Z1bmN0aW9uX0FJUl8xXzBfRlBfMTBfMCtwdWJsaWNfZnVuY3Rpb25fQUlSXzFfNV8xX0ZQXzEwXzBfQUlSXzFfNV8yKnB1YmxpY19mdW5jdGlvbl9GUF8xMF8wXzMyX0FJUl8xXzBfRlBfMTBfMA1wdWJsaWNfZ2V0c2V0FXB1YmxpY19nZXRzZXRfQUlSXzFfMBVwdWJsaWNfZ2V0c2V0X0ZQXzEwXzAVcHVibGljX2dldHNldF9BSVJfMV81F3B1YmxpY19nZXRzZXRfQUlSXzFfNV8xGHB1YmxpY19nZXRzZXRfRlBfMTBfMF8zMhdwdWJsaWNfZ2V0c2V0X0FJUl8xXzVfMh1wdWJsaWNfZ2V0c2V0X0FJUl8xXzBfRlBfMTBfMClwdWJsaWNfZ2V0c2V0X0FJUl8xXzVfMV9GUF8xMF8wX0FJUl8xXzVfMihwdWJsaWNfZ2V0c2V0X0ZQXzEwXzBfMzJfQUlSXzFfMF9GUF8xMF8wDHB1YmxpY19jbGFzcx1hdm1zaGVsbDpwdWJsaWNfY2xhc3NfQUlSXzFfMBRwdWJsaWNfY2xhc3NfQUlSXzFfMB1hdm1zaGVsbDpwdWJsaWNfY2xhc3NfRlBfMTBfMBRwdWJsaWNfY2xhc3NfRlBfMTBfMB1hdm1zaGVsbDpwdWJsaWNfY2xhc3NfQUlSXzFfNRRwdWJsaWNfY2xhc3NfQUlSXzFfNR9hdm1zaGVsbDpwdWJsaWNfY2xhc3NfQUlSXzFfNV8xFnB1YmxpY19jbGFzc19BSVJfMV81XzEgYXZtc2hlbGw6cHVibGljX2NsYXNzX0ZQXzEwXzBfMzIXcHVibGljX2NsYXNzX0ZQXzEwXzBfMzIfYXZtc2hlbGw6cHVibGljX2NsYXNzX0FJUl8xXzVfMhZwdWJsaWNfY2xhc3NfQUlSXzFfNV8yJWF2bXNoZWxsOnB1YmxpY19jbGFzc19BSVJfMV8wX0ZQXzEwXzAccHVibGljX2NsYXNzX0FJUl8xXzBfRlBfMTBfMDFhdm1zaGVsbDpwdWJsaWNfY2xhc3NfQUlSXzFfNV8xX0ZQXzEwXzBfQUlSXzFfNV8yKHB1YmxpY19jbGFzc19BSVJfMV81XzFfRlBfMTBfMF9BSVJfMV81XzIwYXZtc2hlbGw6cHVibGljX2NsYXNzX0ZQXzEwXzBfMzJfQUlSXzFfMF9GUF8xMF8wJ3B1YmxpY19jbGFzc19GUF8xMF8wXzMyX0FJUl8xXzBfRlBfMTBfMBBwdWJsaWNfaW50ZXJmYWNlGHB1YmxpY19pbnRlcmZhY2VfQUlSXzFfMBhwdWJsaWNfaW50ZXJmYWNlX0ZQXzEwXzAYcHVibGljX2ludGVyZmFjZV9BSVJfMV81GnB1YmxpY19pbnRlcmZhY2VfQUlSXzFfNV8xG3B1YmxpY19pbnRlcmZhY2VfRlBfMTBfMF8zMhpwdWJsaWNfaW50ZXJmYWNlX0FJUl8xXzVfMiBwdWJsaWNfaW50ZXJmYWNlX0FJUl8xXzBfRlBfMTBfMCxwdWJsaWNfaW50ZXJmYWNlX0FJUl8xXzVfMV9GUF8xMF8wX0FJUl8xXzVfMitwdWJsaWNfaW50ZXJmYWNlX0ZQXzEwXzBfMzJfQUlSXzFfMF9GUF8xMF8wJWF2bXNoZWxsOk5hdGl2ZVN1YmNsYXNzT2ZBYnN0cmFjdEJhc2UcTmF0aXZlU3ViY2xhc3NPZkFic3RyYWN0QmFzZR9hdm1zaGVsbDpTdWJjbGFzc09mQWJzdHJhY3RCYXNlFlN1YmNsYXNzT2ZBYnN0cmFjdEJhc2UnYXZtc2hlbGw6TmF0aXZlU3ViY2xhc3NPZlJlc3RyaWN0ZWRCYXNlHk5hdGl2ZVN1YmNsYXNzT2ZSZXN0cmljdGVkQmFzZSFhdm1zaGVsbDpTdWJjbGFzc09mUmVzdHJpY3RlZEJhc2UYU3ViY2xhc3NPZlJlc3RyaWN0ZWRCYXNlL2F2bXNoZWxsOk5hdGl2ZVN1YmNsYXNzT2ZBYnN0cmFjdFJlc3RyaWN0ZWRCYXNlJk5hdGl2ZVN1YmNsYXNzT2ZBYnN0cmFjdFJlc3RyaWN0ZWRCYXNlKWF2bXNoZWxsOlN1YmNsYXNzT2ZBYnN0cmFjdFJlc3RyaWN0ZWRCYXNlIFN1YmNsYXNzT2ZBYnN0cmFjdFJlc3RyaWN0ZWRCYXNlHGF2bXNoZWxsOk5hdGl2ZUJhc2VFeHRlbmRlcjETTmF0aXZlQmFzZUV4dGVuZGVyMRxhdm1zaGVsbDpOYXRpdmVCYXNlRXh0ZW5kZXIyBGZvbzEEZm9vMhNOYXRpdmVCYXNlRXh0ZW5kZXIyC0FQSV9BSVJfMV8wC0FQSV9GUF8xMF8wC0FQSV9BSVJfMV81DUFQSV9BSVJfMV81XzEOQVBJX0ZQXzEwXzBfMzINQVBJX0FJUl8xXzVfMgpuc19leGFtcGxlBm5hdGl2ZQNjbHMTOjphdm1zaGVsbDo6TUlDbGFzcwhpbnN0YW5jZRQ6OmF2bXNoZWxsOjpNSU9iamVjdAdtZXRob2RzGDo6YXZtc2hlbGw6Ok1JT2JqZWN0SW1wbAphdm1wbHVz7oqUFzo6YXZtc2hlbGw6OlN5c3RlbUNsYXNzB2NsYXNzZ2MFZXhhY3QEYXV0bwljb25zdHJ1Y3QEbm9uZRU6OmF2bXNoZWxsOjpGaWxlQ2xhc3MLYXZtc2hlbGzuipQdOjphdm1zaGVsbDo6QWJzdHJhY3RCYXNlQ2xhc3MeOjphdm1zaGVsbDo6QWJzdHJhY3RCYXNlT2JqZWN0AmdjCGFic3RyYWN0LTo6YXZtc2hlbGw6Ok5hdGl2ZVN1YmNsYXNzT2ZBYnN0cmFjdEJhc2VDbGFzcy46OmF2bXNoZWxsOjpOYXRpdmVTdWJjbGFzc09mQWJzdHJhY3RCYXNlT2JqZWN0Hzo6YXZtc2hlbGw6OlJlc3RyaWN0ZWRCYXNlQ2xhc3MgOjphdm1zaGVsbDo6UmVzdHJpY3RlZEJhc2VPYmplY3QKcmVzdHJpY3RlZC86OmF2bXNoZWxsOjpOYXRpdmVTdWJjbGFzc09mUmVzdHJpY3RlZEJhc2VDbGFzczA6OmF2bXNoZWxsOjpOYXRpdmVTdWJjbGFzc09mUmVzdHJpY3RlZEJhc2VPYmplY3QnOjphdm1zaGVsbDo6QWJzdHJhY3RSZXN0cmljdGVkQmFzZUNsYXNzKDo6YXZtc2hlbGw6OkFic3RyYWN0UmVzdHJpY3RlZEJhc2VPYmplY3QTYWJzdHJhY3QtcmVzdHJpY3RlZDc6OmF2bXNoZWxsOjpOYXRpdmVTdWJjbGFzc09mQWJzdHJhY3RSZXN0cmljdGVkQmFzZUNsYXNzODo6YXZtc2hlbGw6Ok5hdGl2ZVN1YmNsYXNzT2ZBYnN0cmFjdFJlc3RyaWN0ZWRCYXNlT2JqZWN0Gjo6YXZtc2hlbGw6OkNoZWNrQmFzZUNsYXNzGzo6YXZtc2hlbGw6OkNoZWNrQmFzZU9iamVjdAVjaGVjaxs6OmF2bXNoZWxsOjpOYXRpdmVCYXNlQ2xhc3McOjphdm1zaGVsbDo6TmF0aXZlQmFzZU9iamVjdAZmcmllbmQTYXZtc2hlbGw6OlNoZWxsQ29yZSthdm1zaGVsbDo6U2hlbGxDb3JlLGF2bXNoZWxsOjpTaGVsbFRvcGxldmVsD2ZsYXNoLnN5c3Rlbe6KlA5nZXRDbGFzc0J5TmFtZQVwcmludAthdm1zaGVsbO6KlQthdm1zaGVsbO6Klgthdm1zaGVsbO6Klwthdm1zaGVsbO6KmAthdm1zaGVsbO6KmQthdm1zaGVsbO6Kmg5hdm1wbHVzOkRvbWFpbgRpbml0C0RvbWFpbi5hcyQyCWxvYWRCeXRlcxhNSU5fRE9NQUlOX01FTU9SWV9MRU5HVEgEbG9hZAxkb21haW5NZW1vcnkLRG9tYWluQ2xhc3MMRG9tYWluT2JqZWN0BVFOYW1lE19nZXRJbnZvY2F0aW9uQ291bnQMU2FtcGxlci5hcyQzDWZsYXNoLnNhbXBsZXILX2dldFNhbXBsZXMBZgFlA3JldBNfc2V0U2FtcGxlckNhbGxiYWNrB3dyYXBwZXIYZmxhc2guc2FtcGxlcjpTdGFja0ZyYW1lBG5hbWUCKCkEZmlsZQFbAToEbGluZQFdCHNjcmlwdElECHRvU3RyaW5nClN0YWNrRnJhbWUUZmxhc2guc2FtcGxlcjpTYW1wbGUEdGltZQVzdGFjawZTYW1wbGUaZmxhc2guc2FtcGxlcjpDbGFzc0ZhY3RvcnkPU3RhY2tGcmFtZUNsYXNzC1NhbXBsZUNsYXNzF0RlbGV0ZU9iamVjdFNhbXBsZUNsYXNzFE5ld09iamVjdFNhbXBsZUNsYXNzDENsYXNzRmFjdG9yeR1mbGFzaC5zYW1wbGVyOk5ld09iamVjdFNhbXBsZQJpZAR0eXBlBm9iamVjdARzaXplD05ld09iamVjdFNhbXBsZSBmbGFzaC5zYW1wbGVyOkRlbGV0ZU9iamVjdFNhbXBsZRJEZWxldGVPYmplY3RTYW1wbGUQZmxhc2guc2FtcGxlcu6KlBVOZXdPYmplY3RTYW1wbGVPYmplY3QMY2xlYXJTYW1wbGVzG1NhbXBsZXJTY3JpcHQ6OmNsZWFyU2FtcGxlcw1zdGFydFNhbXBsaW5nHFNhbXBsZXJTY3JpcHQ6OnN0YXJ0U2FtcGxpbmcMc3RvcFNhbXBsaW5nG1NhbXBsZXJTY3JpcHQ6OnN0b3BTYW1wbGluZw1wYXVzZVNhbXBsaW5nHFNhbXBsZXJTY3JpcHQ6OnBhdXNlU2FtcGxpbmcUc2FtcGxlSW50ZXJuYWxBbGxvY3MjU2FtcGxlclNjcmlwdDo6c2FtcGxlSW50ZXJuYWxBbGxvY3MSc2V0U2FtcGxlckNhbGxiYWNrIlNhbXBsZXJTY3JpcHQ6Ol9zZXRTYW1wbGVyQ2FsbGJhY2sHZ2V0U2l6ZRZTYW1wbGVyU2NyaXB0OjpnZXRTaXplDmdldE1lbWJlck5hbWVzHVNhbXBsZXJTY3JpcHQ6OmdldE1lbWJlck5hbWVzCmdldFNhbXBsZXMaU2FtcGxlclNjcmlwdDo6X2dldFNhbXBsZXMOZ2V0U2FtcGxlQ291bnQdU2FtcGxlclNjcmlwdDo6Z2V0U2FtcGxlQ291bnQSZ2V0SW52b2NhdGlvbkNvdW50GGdldFNldHRlckludm9jYXRpb25Db3VudBhnZXRHZXR0ZXJJbnZvY2F0aW9uQ291bnQiU2FtcGxlclNjcmlwdDo6X2dldEludm9jYXRpb25Db3VudA5pc0dldHRlclNldHRlch1TYW1wbGVyU2NyaXB0Ojppc0dldHRlclNldHRlchBnZXRMZXhpY2FsU2NvcGVzH1NhbXBsZXJTY3JpcHQ6OmdldExleGljYWxTY29wZXMMZ2V0U2F2ZWRUaGlzG1NhbXBsZXJTY3JpcHQ6OmdldFNhdmVkVGhpcw9nZXRNYXN0ZXJTdHJpbmceU2FtcGxlclNjcmlwdDo6Z2V0TWFzdGVyU3RyaW5nAzcxMhFmbGFzaC50cmFjZTpUcmFjZQNPRkYHTUVUSE9EUxFNRVRIT0RTX1dJVEhfQVJHUxFNRVRIT0RTX0FORF9MSU5FUxtNRVRIT0RTX0FORF9MSU5FU19XSVRIX0FSR1MERklMRQhMSVNURU5FUghzZXRMZXZlbAhnZXRMZXZlbAtzZXRMaXN0ZW5lcgtnZXRMaXN0ZW5lcgtmbGFzaC50cmFjZQVUcmFjZQpUcmFjZS5hcyQ0DmZsYXNoLnRyYWNl7oqUClRyYWNlQ2xhc3MSZmxhc2gudXRpbHM6RW5kaWFuCkJJR19FTkRJQU4JYmlnRW5kaWFuDUxJVFRMRV9FTkRJQU4MbGl0dGxlRW5kaWFuBkVuZGlhbgtFbmRpYW4uYXMkNQ5mbGFzaC51dGlsc+6KlBhmbGFzaC5zeXN0ZW06V29ya2VyU3RhdGUDTkVXA25ldwdSVU5OSU5HB3J1bm5pbmcKVEVSTUlOQVRFRAp0ZXJtaW5hdGVkBkZBSUxFRAZmYWlsZWQHQUJPUlRFRAdhYm9ydGVkCUVYQ0VQVElPTglleGNlcHRpb24LV29ya2VyLmFzJDYFRXJyb3ITbm90IGFuIGVudW0gdmFsdWU6IARjb2RlC1dvcmtlclN0YXRlE2ZsYXNoLnN5c3RlbTpXb3JrZXIJbV9jdXJyZW50BldvcmtlchBpbnRlcm5hbEdldFN0YXRlB2N1cnJlbnQCcHIFc3RhdGUFc3RhcnQKaXNQYXJlbnRPZgxpc1ByaW1vcmRpYWwRc2V0U2hhcmVkUHJvcGVydHkRZ2V0U2hhcmVkUHJvcGVydHkJdGVybWluYXRlCm1fYnl0ZUNvZGUYZmxhc2guc3lzdGVtOldvcmtlckV2ZW50DFdPUktFUl9TVEFURQt3b3JrZXJTdGF0ZQ9tX3ByZXZpb3VzU3RhdGUObV9jdXJyZW50U3RhdGUIbV90YXJnZXQMY3VycmVudFN0YXRlDXByZXZpb3VzU3RhdGUGdGFyZ2V0C1dvcmtlckV2ZW50D2ZsYXNoLnN5c3Rlbe6KqgM2ODIcOjphdm1zaGVsbDo6U2hlbGxXb3JrZXJDbGFzcx06OmF2bXNoZWxsOjpTaGVsbFdvcmtlck9iamVjdBlmbGFzaC5zeXN0ZW06V29ya2VyRG9tYWluEVdvcmtlckRvbWFpbi5hcyQ3DFdvcmtlckRvbWFpbiFjcmVhdGVXb3JrZXJGcm9tQnl0ZUFycmF5SW50ZXJuYWwZY3JlYXRlV29ya2VyRnJv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AgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQABAQABAAAGAQAACAEAAAABBAAAAQQBDQYBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAARUVASAAAAEAAAABAAEBGgEgARoGASABARoBIAAGASAABgEgAAYBIAEBGwEgAQEGASAAAQEgAAIBIAAVASAACAEgABsBIAAGASAAFQEgABUBIAAVASAAAQEgAAEBIAABASABAhQBIAAaASAAGgEgAQEcASABARoBIAIBHggBIAIBHwgBIAIBIAgBIAIBIQgBIAEBFQEoAQEGAAIBIAECAAEgAQEiASABAAABIAAAAQAAAAEAAQIGASABBgYBIAIBBgYBIAFHBgEgAgIGRwEgAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAYBAAACAQAAAAEAAAABAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAAIBAAACAQAAAgEAAQEAAQABAQABAAEBAAEAAQEAAQABAQABAAEBAAEAAQEAAQABAQABAAEBAAEAAQEAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA4wIBIAAIASABAeMCASABAOMCAQACAEcIASgBAwMBDQYBIAIABggBCAEDAwBHASABAEcBIAAAAQABBgYBIAEUIgEgARsiASACAhTyAgEgAxUU8gIIASACFRTyAgEAAhUU8gIBAAIVFPICAQAAFQEgARQNASAA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");
|
|
22
|
+
//# sourceMappingURL=shell-toplevel-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-toplevel-library.js","sourceRoot":"","sources":["../src/shell-toplevel-library.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,sEAAsE;AACtE,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,2DAA2D;AAC3D,EAAE;AACF,uFAAuF;AACvF,0DAA0D;AAC1D,4CAA4C;AAC5C,4EAA4E;AAI5E,qGAAqG;AACrG,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAe,MAAM,CACpD,07vBAA07vB,CAC37vB,CAAC"}
|