@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.
Files changed (74) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +389 -0
  3. package/README.md +32 -2
  4. package/dist/aot.d.ts +98 -0
  5. package/dist/aot.d.ts.map +1 -0
  6. package/dist/aot.js +145 -0
  7. package/dist/aot.js.map +1 -0
  8. package/dist/args.d.ts +31 -0
  9. package/dist/args.d.ts.map +1 -0
  10. package/dist/args.js +37 -0
  11. package/dist/args.js.map +1 -0
  12. package/dist/commands/compile.d.ts +3 -0
  13. package/dist/commands/compile.d.ts.map +1 -0
  14. package/dist/commands/compile.js +233 -0
  15. package/dist/commands/compile.js.map +1 -0
  16. package/dist/commands/help.d.ts +6 -0
  17. package/dist/commands/help.d.ts.map +1 -0
  18. package/dist/commands/help.js +52 -0
  19. package/dist/commands/help.js.map +1 -0
  20. package/dist/commands/run.d.ts +3 -0
  21. package/dist/commands/run.d.ts.map +1 -0
  22. package/dist/commands/run.js +122 -0
  23. package/dist/commands/run.js.map +1 -0
  24. package/dist/files.d.ts +10 -0
  25. package/dist/files.d.ts.map +1 -0
  26. package/dist/files.js +35 -0
  27. package/dist/files.js.map +1 -0
  28. package/dist/index.d.ts +5 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +5 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/main.d.ts +3 -0
  33. package/dist/main.d.ts.map +1 -0
  34. package/dist/main.js +45 -0
  35. package/dist/main.js.map +1 -0
  36. package/dist/output.d.ts +7 -0
  37. package/dist/output.d.ts.map +1 -0
  38. package/dist/output.js +20 -0
  39. package/dist/output.js.map +1 -0
  40. package/dist/shell-memories.d.ts +2 -0
  41. package/dist/shell-memories.d.ts.map +1 -0
  42. package/dist/shell-memories.js +32 -0
  43. package/dist/shell-memories.js.map +1 -0
  44. package/dist/shell-thread.d.ts +2 -0
  45. package/dist/shell-thread.d.ts.map +1 -0
  46. package/dist/shell-thread.js +49 -0
  47. package/dist/shell-thread.js.map +1 -0
  48. package/dist/shell-toplevel-library.d.ts +2 -0
  49. package/dist/shell-toplevel-library.d.ts.map +1 -0
  50. package/dist/shell-toplevel-library.js +22 -0
  51. package/dist/shell-toplevel-library.js.map +1 -0
  52. package/dist/shell.d.ts +62 -0
  53. package/dist/shell.d.ts.map +1 -0
  54. package/dist/shell.js +135 -0
  55. package/dist/shell.js.map +1 -0
  56. package/dist/threads.d.ts +85 -0
  57. package/dist/threads.d.ts.map +1 -0
  58. package/dist/threads.js +145 -0
  59. package/dist/threads.js.map +1 -0
  60. package/package.json +46 -3
  61. package/src/aot.ts +239 -0
  62. package/src/args.ts +53 -0
  63. package/src/commands/compile.ts +286 -0
  64. package/src/commands/help.ts +60 -0
  65. package/src/commands/run.ts +131 -0
  66. package/src/files.ts +38 -0
  67. package/src/index.ts +25 -0
  68. package/src/main.ts +51 -0
  69. package/src/output.ts +23 -0
  70. package/src/shell-memories.ts +35 -0
  71. package/src/shell-thread.ts +54 -0
  72. package/src/shell-toplevel-library.ts +28 -0
  73. package/src/shell.ts +211 -0
  74. 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,3 @@
1
+ import { type Command } from "../args.js";
2
+ export declare const run: Command;
3
+ //# sourceMappingURL=run.d.ts.map
@@ -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":"AAAA,2EAA2E;AAC3E,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAmB,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAgB,KAAK,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;EAeZ,YAAY;;;;;6DAK+C,CAAC;AAE9D,uDAAuD;AACvD,MAAM,eAAe,GAAG;IACtB,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE;IACxC,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,oBAAoB,EAAE;CACtD,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEtD,MAAM,OAAO,GAAG;IACd,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvC,GAAG,cAAc;CACT,CAAC;AAEX,mFAAmF;AACnF,SAAS,YAAY;IACnB,OAAO;QACL,IAAI,CAAC,IAAI;YACP,wEAAwE;YACxE,qEAAqE;YACrE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC3B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,EAAE,KAAK;YACf,IAAI,CAAC;gBACH,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAY;IAC1B,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,qDAAqD;IAC9D,KAAK,EAAE,KAAK;IACZ,KAAK,CAAC,IAAI,CAAC,IAAI;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAC7B,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CACpE,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QACvC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,UAAU,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,GAAwC,EAAE,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACtC,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,GAAG,IAAI,0EAA0E,CAAC,CAAC;YAC1F,CAAC;YAED,IAAI,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QAC5E,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,2FAA2F;QAC3F,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,OAAO,CAAC,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE;gBAC5C,QAAQ;gBACR,aAAa;gBACb,KAAK;gBACL,KAAK,EAAE,YAAY,EAAE;gBACrB,OAAO,EAAE,OAAO,CAAC,IAAI;aACtB,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,aAAa,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,CAAC,yBAA0B,CAAW,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -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"}
@@ -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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -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
@@ -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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shell-memories.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shell-thread.d.ts.map
@@ -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,2 @@
1
+ export declare const shellToplevelLibrary: Uint8Array;
2
+ //# sourceMappingURL=shell-toplevel-library.d.ts.map
@@ -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"}