xbintsc 0.5.52 → 0.6.8
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/README.md +8 -2
- package/README.zh-CN.md +9 -3
- package/dist/scripts/fetch-tarball.d.ts +28 -0
- package/dist/scripts/fetch-tarball.js +57 -0
- package/dist/scripts/fetch-tarball.js.map +1 -0
- package/dist/scripts/gui-build-options.d.ts +77 -0
- package/dist/scripts/gui-build-options.js +134 -0
- package/dist/scripts/gui-build-options.js.map +1 -0
- package/dist/src/cli/help.d.ts +1 -1
- package/dist/src/cli/hints.d.ts +6 -2
- package/dist/src/cli/hints.js +16 -2
- package/dist/src/cli/hints.js.map +1 -1
- package/dist/src/cli/main.js +9 -0
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/driver/app-artifacts.d.ts +2 -0
- package/dist/src/driver/app-artifacts.js +3 -3
- package/dist/src/driver/app-artifacts.js.map +1 -1
- package/dist/src/driver/compiler.js +147 -52
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/driver/icon.d.ts +1 -1
- package/dist/src/driver/icon.js +3 -3
- package/dist/src/driver/icon.js.map +1 -1
- package/dist/src/driver/macos-sdk.d.ts +32 -0
- package/dist/src/driver/macos-sdk.js +50 -0
- package/dist/src/driver/macos-sdk.js.map +1 -0
- package/dist/src/driver/options.d.ts +6 -0
- package/dist/src/driver/platform-support.d.ts +45 -0
- package/dist/src/driver/platform-support.js +66 -0
- package/dist/src/driver/platform-support.js.map +1 -0
- package/dist/src/driver/prebuilt.d.ts +26 -0
- package/dist/src/driver/prebuilt.js +58 -0
- package/dist/src/driver/prebuilt.js.map +1 -0
- package/dist/src/driver/runtime-objects.d.ts +11 -0
- package/dist/src/driver/runtime-objects.js +14 -5
- package/dist/src/driver/runtime-objects.js.map +1 -1
- package/dist/src/driver/toolchain-provider.d.ts +8 -0
- package/dist/src/driver/toolchain-provider.js +8 -0
- package/dist/src/driver/toolchain-provider.js.map +1 -1
- package/dist/src/driver/toolchain.d.ts +20 -1
- package/dist/src/driver/toolchain.js +19 -0
- package/dist/src/driver/toolchain.js.map +1 -1
- package/dist/src/driver/version.d.ts +1 -1
- package/dist/src/driver/version.js +1 -1
- package/dist/src/driver/version.js.map +1 -1
- package/dist/src/driver/win-entry.d.ts +1 -1
- package/dist/src/driver/win-entry.js +4 -4
- package/dist/src/driver/win-entry.js.map +1 -1
- package/dist/src/extensions/gui/html.d.ts +10 -7
- package/dist/src/extensions/gui/html.js +53 -29
- package/dist/src/extensions/gui/html.js.map +1 -1
- package/dist/src/extensions/node/child_process/index.d.ts +4 -3
- package/dist/src/extensions/node/child_process/index.js +4 -3
- package/dist/src/extensions/node/child_process/index.js.map +1 -1
- package/dist/tests/cli/hints.test.js +9 -1
- package/dist/tests/cli/hints.test.js.map +1 -1
- package/dist/tests/cli/main.test.js +9 -0
- package/dist/tests/cli/main.test.js.map +1 -1
- package/dist/tests/driver/compiler.test.js +107 -0
- package/dist/tests/driver/compiler.test.js.map +1 -1
- package/dist/tests/driver/cxx-compile-flags.test.d.ts +1 -0
- package/dist/tests/driver/cxx-compile-flags.test.js +24 -0
- package/dist/tests/driver/cxx-compile-flags.test.js.map +1 -0
- package/dist/tests/driver/macos-sdk.test.d.ts +1 -0
- package/dist/tests/driver/macos-sdk.test.js +83 -0
- package/dist/tests/driver/macos-sdk.test.js.map +1 -0
- package/dist/tests/driver/platform-support.test.d.ts +1 -0
- package/dist/tests/driver/platform-support.test.js +41 -0
- package/dist/tests/driver/platform-support.test.js.map +1 -0
- package/dist/tests/driver/prebuilt.test.d.ts +1 -0
- package/dist/tests/driver/prebuilt.test.js +44 -0
- package/dist/tests/driver/prebuilt.test.js.map +1 -0
- package/dist/tests/driver/toolchain-provider.test.js +24 -0
- package/dist/tests/driver/toolchain-provider.test.js.map +1 -1
- package/dist/tests/driver/toolchain.test.js +23 -0
- package/dist/tests/driver/toolchain.test.js.map +1 -1
- package/dist/tests/e2e/async-await.test.js +4 -2
- package/dist/tests/e2e/async-await.test.js.map +1 -1
- package/dist/tests/e2e/compile-node.test.js +21 -0
- package/dist/tests/e2e/compile-node.test.js.map +1 -1
- package/dist/tests/e2e/fetch.test.js +34 -6
- package/dist/tests/e2e/fetch.test.js.map +1 -1
- package/dist/tests/e2e/gui-example-pelican3d.test.d.ts +10 -0
- package/dist/tests/e2e/gui-example-pelican3d.test.js +94 -0
- package/dist/tests/e2e/gui-example-pelican3d.test.js.map +1 -0
- package/dist/tests/e2e/gui-script.test.js +48 -0
- package/dist/tests/e2e/gui-script.test.js.map +1 -1
- package/dist/tests/e2e/unhandled-rejection.test.d.ts +14 -0
- package/dist/tests/e2e/unhandled-rejection.test.js +107 -0
- package/dist/tests/e2e/unhandled-rejection.test.js.map +1 -0
- package/dist/tests/extensions/gui.test.js +44 -0
- package/dist/tests/extensions/gui.test.js.map +1 -1
- package/dist/tests/scripts/fetch-tarball.test.d.ts +1 -0
- package/dist/tests/scripts/fetch-tarball.test.js +70 -0
- package/dist/tests/scripts/fetch-tarball.test.js.map +1 -0
- package/doc/ai/cli.md +6 -0
- package/doc/ai/language-support.md +1 -0
- package/doc/ai/troubleshooting.md +32 -2
- package/doc/ai/zh-CN/cli.md +5 -0
- package/doc/ai/zh-CN/language-support.md +1 -0
- package/doc/ai/zh-CN/troubleshooting.md +27 -2
- package/doc/gui/build.md +7 -3
- package/doc/gui/dom.md +3 -1
- package/doc/gui/webgl.md +4 -0
- package/doc/gui-scripts.md +33 -17
- package/doc/gui.md +17 -1
- package/doc/implemented/async.md +1 -0
- package/doc/implemented/modules.md +9 -6
- package/doc/implemented/node/child-process.md +12 -4
- package/doc/implemented/runtime-core.md +1 -1
- package/doc/npm-package.md +23 -2
- package/doc/post/make-js-great-again.md +30 -0
- package/doc/requirements.md +31 -0
- package/doc/unimplemented/deviations.md +1 -0
- package/doc/zh-CN/gui/build.md +4 -2
- package/doc/zh-CN/gui/dom.md +3 -1
- package/doc/zh-CN/gui/webgl.md +1 -0
- package/doc/zh-CN/gui-scripts.md +23 -11
- package/doc/zh-CN/gui.md +11 -1
- package/doc/zh-CN/implemented/async.md +1 -0
- package/doc/zh-CN/implemented/modules.md +8 -4
- package/doc/zh-CN/implemented/node/child-process.md +10 -3
- package/doc/zh-CN/implemented/runtime-core.md +1 -1
- package/doc/zh-CN/npm-package.md +18 -1
- package/doc/zh-CN/post/make-js-great-again.md +32 -0
- package/doc/zh-CN/requirements.md +25 -0
- package/doc/zh-CN/unimplemented/deviations.md +1 -0
- package/package.json +7 -7
- package/runtime/ext_node/child_process/child_process.c +149 -7
- package/runtime/rt.h +4 -0
- package/runtime/xt_async.c +4 -0
- package/runtime/xt_generator.c +2 -0
- package/runtime/xt_loop.c +8 -4
- package/runtime/xt_promise.c +103 -0
- package/scripts/build-gui.ts +17 -5
- package/scripts/build-media.ts +89 -10
- package/scripts/build-runtime.ts +7 -2
- package/scripts/fetch-tarball.ts +71 -0
- package/scripts/gui-build-cache.ts +28 -0
- package/scripts/gui-build-options.ts +26 -2
- package/scripts/package-release.ts +8 -0
- package/src/cli/hints.ts +19 -2
- package/src/cli/main.ts +11 -0
- package/src/driver/app-artifacts.ts +5 -3
- package/src/driver/compiler.ts +167 -56
- package/src/driver/icon.ts +3 -2
- package/src/driver/macos-sdk.ts +52 -0
- package/src/driver/options.ts +6 -0
- package/src/driver/platform-support.ts +69 -0
- package/src/driver/prebuilt.ts +61 -0
- package/src/driver/runtime-objects.ts +26 -5
- package/src/driver/toolchain-provider.ts +11 -0
- package/src/driver/toolchain.ts +26 -1
- package/src/driver/version.ts +1 -1
- package/src/driver/win-entry.ts +4 -3
- package/src/extensions/gui/html.ts +61 -31
- package/src/extensions/node/child_process/index.ts +4 -3
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
6
6
|
import { createGuiHarness, guiAvailable } from "./gui-helpers.js";
|
|
7
|
+
import { nodeExtension } from "../../src/extensions/node/index.js";
|
|
7
8
|
const harness = createGuiHarness();
|
|
8
9
|
describe.skipIf(!guiAvailable)("gui extension — scripts", () => {
|
|
9
10
|
beforeAll(() => harness.setup());
|
|
@@ -78,5 +79,52 @@ button.addEventListener("click", () => {
|
|
|
78
79
|
/* 0 -> 1 -> 3 proves the hoisted import (double) is linked. */
|
|
79
80
|
expect(value("srcAfter")).toBe("3");
|
|
80
81
|
});
|
|
82
|
+
it("runs an inline <script> with imports, node:fs included", () => {
|
|
83
|
+
/* An inline body is compiled like a `<script src>` file: its top-level
|
|
84
|
+
* imports are hoisted, a bare one links (`node:fs` needs the node
|
|
85
|
+
* extension) and a relative one is deferred until the script runs. */
|
|
86
|
+
const { value } = harness.compileAndRun("script-inline-imports", `
|
|
87
|
+
import { createWindow, run } from "gui";
|
|
88
|
+
import page from "./page-inline.html";
|
|
89
|
+
|
|
90
|
+
const win = createWindow({ title: "inline-imports", width: 320, height: 240 });
|
|
91
|
+
win.on("ready", () => {
|
|
92
|
+
const button = win.document.getElementById("b");
|
|
93
|
+
button.click();
|
|
94
|
+
button.click();
|
|
95
|
+
console.log("inlineAfter=" + win.document.getElementById("container").textContent);
|
|
96
|
+
win.close();
|
|
97
|
+
});
|
|
98
|
+
win.loadHTML(page);
|
|
99
|
+
run();
|
|
100
|
+
`, {
|
|
101
|
+
extensions: [nodeExtension],
|
|
102
|
+
console: true,
|
|
103
|
+
cwd: harness.workdir,
|
|
104
|
+
files: {
|
|
105
|
+
"page-inline.html": `<html><body>
|
|
106
|
+
<div id="container">0</div>
|
|
107
|
+
<button id="b">0</button>
|
|
108
|
+
<script lang="ts">
|
|
109
|
+
import { readFileSync } from "node:fs";
|
|
110
|
+
import { double } from "./helper";
|
|
111
|
+
const button = document.getElementById("b");
|
|
112
|
+
const label = document.getElementById("container");
|
|
113
|
+
let n = Number(readFileSync("seed.txt", "utf8"));
|
|
114
|
+
button.addEventListener("click", () => {
|
|
115
|
+
n = double(n) + 1;
|
|
116
|
+
button.textContent = String(n);
|
|
117
|
+
label.textContent = String(n);
|
|
118
|
+
});
|
|
119
|
+
</script>
|
|
120
|
+
</body></html>`,
|
|
121
|
+
"seed.txt": "2",
|
|
122
|
+
"helper.ts": "export function double(n: number) { return n * 2; }",
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
/* 2 -> 5 -> 11: the file read supplied the seed and the deferred helper
|
|
126
|
+
* module was evaluated before the listener ran. */
|
|
127
|
+
expect(value("inlineAfter")).toBe("11");
|
|
128
|
+
});
|
|
81
129
|
});
|
|
82
130
|
//# sourceMappingURL=gui-script.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gui-script.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-script.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"gui-script.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-script.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEnE,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;AAEnC,QAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,yBAAyB,EAAE,GAAG,EAAE;IAC7D,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAElC,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,aAAa,CACrC,QAAQ,EACR;;;;;;;;;;;;;;;OAeC,EACD;YACE,KAAK,EAAE;gBACL,WAAW,EAAE;;;;;;;;;;;;;eAaR;aACN;SACF,CACF,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,aAAa,CACrC,WAAW,EACX;;;;;;;;;;;;;;OAcC,EACD;YACE,KAAK,EAAE;gBACL,eAAe,EAAE,yFAAyF;gBAC1G,YAAY,EAAE;;;;;;;;CAQvB;gBACS,WAAW,EAAE,qDAAqD;aACnE;SACF,CACF,CAAC;QACF,+DAA+D;QAC/D,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE;;8EAEsE;QACtE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,aAAa,CACrC,uBAAuB,EACvB;;;;;;;;;;;;;;OAcC,EACD;YACE,UAAU,EAAE,CAAC,aAAa,CAAC;YAC3B,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,OAAO,CAAC,OAAO;YACpB,KAAK,EAAE;gBACL,kBAAkB,EAAE;;;;;;;;;;;;;;;eAef;gBACL,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,qDAAqD;aACnE;SACF,CACF,CAAC;QACF;2DACmD;QACnD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unhandled promise rejections are fatal, like Node's default
|
|
3
|
+
* `--unhandled-rejections=throw`.
|
|
4
|
+
*
|
|
5
|
+
* The case that matters is the entry point: a compiled program's `main()` is
|
|
6
|
+
* usually `async`, so an exception escaping it rejects *its* promise, and
|
|
7
|
+
* nothing else ever looks at that promise. The process used to print nothing
|
|
8
|
+
* and exit 0, so a failing program looked like a program that did nothing.
|
|
9
|
+
*
|
|
10
|
+
* The runtime reports whatever a handler never observed once the event loop
|
|
11
|
+
* drains. A `.catch`, a `try` around an `await`, or even a handler attached
|
|
12
|
+
* later from a timer counts as observed and must stay silent.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unhandled promise rejections are fatal, like Node's default
|
|
3
|
+
* `--unhandled-rejections=throw`.
|
|
4
|
+
*
|
|
5
|
+
* The case that matters is the entry point: a compiled program's `main()` is
|
|
6
|
+
* usually `async`, so an exception escaping it rejects *its* promise, and
|
|
7
|
+
* nothing else ever looks at that promise. The process used to print nothing
|
|
8
|
+
* and exit 0, so a failing program looked like a program that did nothing.
|
|
9
|
+
*
|
|
10
|
+
* The runtime reports whatever a handler never observed once the event loop
|
|
11
|
+
* drains. A `.catch`, a `try` around an `await`, or even a handler attached
|
|
12
|
+
* later from a timer counts as observed and must stay silent.
|
|
13
|
+
*/
|
|
14
|
+
import { expect, it } from "vitest";
|
|
15
|
+
import { describeE2E } from "./harness.js";
|
|
16
|
+
describeE2E("unhandled promise rejections", (harness) => {
|
|
17
|
+
it("reports a rejected async entry point and exits non-zero", () => {
|
|
18
|
+
const result = harness.runProgramFull(`
|
|
19
|
+
async function inner(): Promise<void> {
|
|
20
|
+
throw new Error("boom");
|
|
21
|
+
}
|
|
22
|
+
async function main() {
|
|
23
|
+
console.log("started");
|
|
24
|
+
await inner();
|
|
25
|
+
console.log("unreachable");
|
|
26
|
+
}
|
|
27
|
+
main();
|
|
28
|
+
`);
|
|
29
|
+
expect(result.status).toBe(1);
|
|
30
|
+
expect(result.stdout.trim()).toBe("started");
|
|
31
|
+
expect(result.stderr).toContain("Unhandled promise rejection");
|
|
32
|
+
expect(result.stderr).toContain("Error: boom");
|
|
33
|
+
expect(result.stderr).toContain("at module");
|
|
34
|
+
expect(result.stdout).not.toContain("unreachable");
|
|
35
|
+
});
|
|
36
|
+
it("stays silent when a handler observes the rejection", () => {
|
|
37
|
+
const result = harness.runProgramFull(`
|
|
38
|
+
async function boom(): Promise<void> {
|
|
39
|
+
throw new Error("body-throw");
|
|
40
|
+
}
|
|
41
|
+
async function main() {
|
|
42
|
+
await boom().catch((e: Error) => console.log("catch", e.message));
|
|
43
|
+
try {
|
|
44
|
+
await boom();
|
|
45
|
+
} catch (e) {
|
|
46
|
+
console.log("try", (e as Error).message);
|
|
47
|
+
}
|
|
48
|
+
const late = boom();
|
|
49
|
+
await new Promise<void>((resolve) =>
|
|
50
|
+
setTimeout(() => {
|
|
51
|
+
late.catch((e: Error) => console.log("late", e.message));
|
|
52
|
+
resolve();
|
|
53
|
+
}, 5),
|
|
54
|
+
);
|
|
55
|
+
await Promise.reject(new Error("rejected")).catch((e: Error) => console.log("reject", e.message));
|
|
56
|
+
console.log("done");
|
|
57
|
+
}
|
|
58
|
+
main();
|
|
59
|
+
`);
|
|
60
|
+
expect(result.status).toBe(0);
|
|
61
|
+
expect(result.stderr).toBe("");
|
|
62
|
+
expect(result.stdout.trim().split("\n")).toEqual([
|
|
63
|
+
"catch body-throw",
|
|
64
|
+
"try body-throw",
|
|
65
|
+
"late body-throw",
|
|
66
|
+
"reject rejected",
|
|
67
|
+
"done",
|
|
68
|
+
]);
|
|
69
|
+
});
|
|
70
|
+
it("reports a top-level rejection that nothing awaits", () => {
|
|
71
|
+
const result = harness.runProgramFull(`
|
|
72
|
+
Promise.reject(new Error("top-level"));
|
|
73
|
+
setTimeout(() => console.log("timer"), 5);
|
|
74
|
+
`);
|
|
75
|
+
expect(result.status).toBe(1);
|
|
76
|
+
// The event loop still ran to completion before the report.
|
|
77
|
+
expect(result.stdout.trim()).toBe("timer");
|
|
78
|
+
expect(result.stderr).toContain("Unhandled promise rejection");
|
|
79
|
+
expect(result.stderr).toContain("Error: top-level");
|
|
80
|
+
});
|
|
81
|
+
it("prints non-Error reasons and one report per rejection", () => {
|
|
82
|
+
const result = harness.runProgramFull(`
|
|
83
|
+
Promise.reject("plain string");
|
|
84
|
+
Promise.reject(42);
|
|
85
|
+
`);
|
|
86
|
+
expect(result.status).toBe(1);
|
|
87
|
+
const reports = result.stderr.split("Unhandled promise rejection").length - 1;
|
|
88
|
+
expect(reports).toBe(2);
|
|
89
|
+
expect(result.stderr).toContain("plain string");
|
|
90
|
+
expect(result.stderr).toContain("42");
|
|
91
|
+
});
|
|
92
|
+
it("treats an awaited rejection caught by the caller as handled", () => {
|
|
93
|
+
const result = harness.runProgramFull(`
|
|
94
|
+
async function boom(): Promise<void> {
|
|
95
|
+
throw new Error("inner");
|
|
96
|
+
}
|
|
97
|
+
async function wrapper(): Promise<void> {
|
|
98
|
+
await boom();
|
|
99
|
+
}
|
|
100
|
+
wrapper().catch((e: Error) => console.log("wrapper", e.message));
|
|
101
|
+
`);
|
|
102
|
+
expect(result.status).toBe(0);
|
|
103
|
+
expect(result.stderr).toBe("");
|
|
104
|
+
expect(result.stdout.trim()).toBe("wrapper inner");
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=unhandled-rejection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unhandled-rejection.test.js","sourceRoot":"","sources":["../../../tests/e2e/unhandled-rejection.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,6 +68,50 @@ describe("gui .html asset loader", () => {
|
|
|
68
68
|
const empty = loadHtmlAsset("b.html", `<script></script>`);
|
|
69
69
|
expect(empty.moduleSource).not.toContain("__registerScript");
|
|
70
70
|
});
|
|
71
|
+
it("hoists an inline script's bare import to module scope", () => {
|
|
72
|
+
/* An `import` left inside the script function body is not a module
|
|
73
|
+
* statement: codegen never registers the binding and reports TS5001 when
|
|
74
|
+
* the body calls it. Both script forms must link the same way. */
|
|
75
|
+
const body = [
|
|
76
|
+
'import { readFileSync } from "node:fs";',
|
|
77
|
+
'const out = document.getElementById("out");',
|
|
78
|
+
'out.textContent = readFileSync("data.txt", "utf8");',
|
|
79
|
+
].join("\n");
|
|
80
|
+
const { moduleSource } = loadHtmlAsset("page.html", `<script lang="ts">${body}</script>`);
|
|
81
|
+
const importIndex = moduleSource.indexOf('import { readFileSync } from "node:fs"');
|
|
82
|
+
const wrappedIndex = moduleSource.indexOf("function __xt_script_");
|
|
83
|
+
expect(importIndex).toBeGreaterThanOrEqual(0);
|
|
84
|
+
expect(importIndex).toBeLessThan(wrappedIndex);
|
|
85
|
+
expect(moduleSource).toContain('readFileSync("data.txt", "utf8")');
|
|
86
|
+
expect(parseDiagnostics(moduleSource)).toBe(0);
|
|
87
|
+
});
|
|
88
|
+
it("defers an inline script's relative import and resolves it from the HTML dir", () => {
|
|
89
|
+
const directory = writeFiles({ "lib/util.ts": "export const size = 1;" });
|
|
90
|
+
const htmlPath = join(directory, "page.html");
|
|
91
|
+
const { moduleSource } = loadHtmlAsset(htmlPath, `<script>import { size } from "./lib/util";\nconsole.log(size);</script>`);
|
|
92
|
+
expect(moduleSource).toContain('import { __xt_deferred_module as __xt_deferred_0_0 } from "./lib/util"');
|
|
93
|
+
expect(moduleSource).toContain("const { size } = __xt_deferred_0_0();");
|
|
94
|
+
expect(parseDiagnostics(moduleSource)).toBe(0);
|
|
95
|
+
});
|
|
96
|
+
it("strips export modifiers from an inline script", () => {
|
|
97
|
+
const { moduleSource } = loadHtmlAsset("page.html", `<script>export const a = 1;\nexport function f() { return a; }</script>`);
|
|
98
|
+
expect(moduleSource).toContain("const a = 1;");
|
|
99
|
+
expect(moduleSource).toContain("function f()");
|
|
100
|
+
expect(moduleSource).not.toContain("export const");
|
|
101
|
+
expect(parseDiagnostics(moduleSource)).toBe(0);
|
|
102
|
+
});
|
|
103
|
+
it("keys inline scripts by body and prelude, and rejects a shared eager binding", () => {
|
|
104
|
+
/* Identical statements, different deferred imports: one registry entry
|
|
105
|
+
* each, because the prelude is part of the wrapped function. */
|
|
106
|
+
const page = loadHtmlAsset("page.html", `<script>import { size } from "./a";\nconsole.log(size);</script>` +
|
|
107
|
+
`<script>import { size } from "./b";\nconsole.log(size);</script>`);
|
|
108
|
+
const ids = [...page.moduleSource.matchAll(/__registerScript\("([^"]+)"/g)].map((m) => m[1]);
|
|
109
|
+
expect(ids).toHaveLength(2);
|
|
110
|
+
expect(ids[0]).not.toBe(ids[1]);
|
|
111
|
+
/* Two inline scripts cannot both claim the same module-scope binding. */
|
|
112
|
+
expect(() => loadHtmlAsset("page.html", `<script>import { b } from "p1";\nconsole.log(b);</script>` +
|
|
113
|
+
`<script>import { b } from "p2";\nconsole.log(b);</script>`)).toThrow(/already imported by another <script>/);
|
|
114
|
+
});
|
|
71
115
|
it("compiles an external <script src> file into a registered function", () => {
|
|
72
116
|
const directory = writeFiles({
|
|
73
117
|
"app.ts": "const b = document.getElementById('b');\nb.textContent = 'ready';",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gui.test.js","sourceRoot":"","sources":["../../../tests/extensions/gui.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gui.test.js","sourceRoot":"","sources":["../../../tests/extensions/gui.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { spawnSync } from "node:child_process";
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
import { downloadTarball } from "../../scripts/fetch-tarball.js";
|
|
7
|
+
vi.mock("node:child_process", () => ({ spawnSync: vi.fn() }));
|
|
8
|
+
const spawn = vi.mocked(spawnSync);
|
|
9
|
+
const directories = [];
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
spawn.mockReset();
|
|
12
|
+
});
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
while (directories.length > 0)
|
|
15
|
+
rmSync(directories.pop(), { recursive: true, force: true });
|
|
16
|
+
});
|
|
17
|
+
/** Make the mocked curl write `content` to its `-o` target and report `status`. */
|
|
18
|
+
function respond(status, content = "tarball") {
|
|
19
|
+
spawn.mockImplementationOnce((_command, args) => {
|
|
20
|
+
const argv = args ?? [];
|
|
21
|
+
const output = argv[argv.indexOf("-o") + 1];
|
|
22
|
+
if (status === 0)
|
|
23
|
+
writeFileSync(output, content);
|
|
24
|
+
return { status };
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function temporaryDirectory() {
|
|
28
|
+
const directory = mkdtempSync(join(tmpdir(), "xbintsc-fetch-"));
|
|
29
|
+
directories.push(directory);
|
|
30
|
+
return directory;
|
|
31
|
+
}
|
|
32
|
+
describe("downloadTarball", () => {
|
|
33
|
+
it("writes the tarball through a .part file", () => {
|
|
34
|
+
const destination = join(temporaryDirectory(), "ffmpeg.tar.xz");
|
|
35
|
+
respond(0, "release");
|
|
36
|
+
downloadTarball(destination, "https://example.invalid/ffmpeg.tar.xz", "FFmpeg");
|
|
37
|
+
expect(readFileSync(destination, "utf8")).toBe("release");
|
|
38
|
+
expect(existsSync(`${destination}.part`)).toBe(false);
|
|
39
|
+
expect(spawn).toHaveBeenCalledTimes(1);
|
|
40
|
+
});
|
|
41
|
+
it("retries a transient TLS failure", () => {
|
|
42
|
+
const destination = join(temporaryDirectory(), "ffmpeg.tar.xz");
|
|
43
|
+
respond(35);
|
|
44
|
+
respond(0, "release");
|
|
45
|
+
downloadTarball(destination, "https://example.invalid/ffmpeg.tar.xz", "FFmpeg", { retryDelayMs: 0 });
|
|
46
|
+
expect(spawn).toHaveBeenCalledTimes(2);
|
|
47
|
+
expect(readFileSync(destination, "utf8")).toBe("release");
|
|
48
|
+
});
|
|
49
|
+
it("fails fast on a status a retry cannot fix", () => {
|
|
50
|
+
const destination = join(temporaryDirectory(), "ffmpeg.tar.xz");
|
|
51
|
+
respond(22); // curl: the server answered 404
|
|
52
|
+
expect(() => downloadTarball(destination, "https://example.invalid/ffmpeg.tar.xz", "FFmpeg", { retryDelayMs: 0 }))
|
|
53
|
+
.toThrow(/status 22/);
|
|
54
|
+
expect(spawn).toHaveBeenCalledTimes(1);
|
|
55
|
+
expect(existsSync(destination)).toBe(false);
|
|
56
|
+
expect(existsSync(`${destination}.part`)).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it("gives up after the last attempt without leaving a partial file", () => {
|
|
59
|
+
const destination = join(temporaryDirectory(), "ffmpeg.tar.xz");
|
|
60
|
+
respond(35);
|
|
61
|
+
respond(35);
|
|
62
|
+
expect(() => downloadTarball(destination, "https://example.invalid/ffmpeg.tar.xz", "FFmpeg", {
|
|
63
|
+
attempts: 2,
|
|
64
|
+
retryDelayMs: 0,
|
|
65
|
+
})).toThrow(/status 35/);
|
|
66
|
+
expect(spawn).toHaveBeenCalledTimes(2);
|
|
67
|
+
expect(existsSync(`${destination}.part`)).toBe(false);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=fetch-tarball.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-tarball.test.js","sourceRoot":"","sources":["../../../tests/scripts/fetch-tarball.test.ts"],"names":[],"mappings":"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"}
|
package/doc/ai/cli.md
CHANGED
|
@@ -143,6 +143,12 @@ unreadable or malformed config fails the build with `invalid JSON` or
|
|
|
143
143
|
| `xbintsc_PREFER_PREBUILT` | `0` forces the runtime to be compiled from source |
|
|
144
144
|
| `xbintsc_BINARY` | Native compiler binary the `bin/` launcher should run |
|
|
145
145
|
|
|
146
|
+
When linking a prebuilt `core`/`ext_node` archive fails with a toolchain
|
|
147
|
+
mismatch (`LNK2038`, `LNK2019`, `Undefined symbols`, `undefined reference`),
|
|
148
|
+
`build` automatically retries with those archives' C sources; the bundled
|
|
149
|
+
`gui`/`media` archives cannot be rebuilt that way. See
|
|
150
|
+
[npm-package](../npm-package.md#the-first-build-and-the-cache).
|
|
151
|
+
|
|
146
152
|
## Incremental compilation
|
|
147
153
|
|
|
148
154
|
Each build is keyed on the entry source hash, the compiler version, the build
|
|
@@ -72,6 +72,7 @@ Canonical detail (always current, much longer):
|
|
|
72
72
|
| Feature | Status | Notes |
|
|
73
73
|
| --- | --- | --- |
|
|
74
74
|
| `async` / `await`, `Promise`, `Promise.all` | ✅ | real suspension: an `async` body runs on a stackful coroutine, and awaiting a **pending** promise pauses it until the promise settles. Every `await` yields once, so a settled value or non-promise is queued as a microtask like Node |
|
|
75
|
+
| Unhandled rejections | ✅ | fatal, like Node's default: printed as `Unhandled promise rejection` on stderr once the event loop drains, then exit status 1. A `.catch`, a `try` around an `await`, or a handler attached later from a timer all count as handled |
|
|
75
76
|
| `setTimeout` and callbacks | ✅ | timers run on the core event loop; `await new Promise(r => setTimeout(r, ms))` works |
|
|
76
77
|
| `queueMicrotask` / `setImmediate` / `performance.now` | ✅ | microtasks share the promise FIFO queue; `setImmediate` is a zero-delay timer with numeric ids; `performance.now` is monotonic fractional milliseconds |
|
|
77
78
|
| Sockets / servers (`http`, `net`, `dgram`) | ✅ | callbacks run on the event loop and can settle a promise you await (`net` / `http` examples included in the tests) |
|
|
@@ -7,8 +7,9 @@ xbintsc doctor
|
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
It prints the platform, the toolchain it will use (and where it came from), the
|
|
10
|
-
compiler version, the runtime directory, the runtime library directory
|
|
11
|
-
icon resource compiler
|
|
10
|
+
compiler version, the runtime directory, the runtime library directory, the
|
|
11
|
+
supported platform floor and the icon resource compiler — plus, on macOS, the
|
|
12
|
+
SDK it will hand to clang. Most "it doesn't work" reports are answered here.
|
|
12
13
|
|
|
13
14
|
## Before anything else: is clang new enough?
|
|
14
15
|
|
|
@@ -109,11 +110,40 @@ stderr — read the stderr, not just the first line. Frequent causes:
|
|
|
109
110
|
```
|
|
110
111
|
That imports `vcvarsall` and pins `xbintsc_CLANG` to the LLVM bundled with
|
|
111
112
|
Visual Studio. Invoking `vcvarsall.bat x64` directly also works.
|
|
113
|
+
- on macOS, clang reports a standard header as missing — `fatal error:
|
|
114
|
+
'stdio.h' file not found`, `'setjmp.h' file not found`, … There is no
|
|
115
|
+
`/usr/include` on macOS; those headers live in the SDK, and clang only
|
|
116
|
+
searches it when it has a sysroot (`/usr/bin/clang`'s shim, `-isysroot`, or
|
|
117
|
+
`SDKROOT`). xbintsc resolves the SDK with `xcrun --show-sdk-path` and passes
|
|
118
|
+
it as `-isysroot` (unless `SDKROOT` is already set), so this error means
|
|
119
|
+
`xcrun` cannot resolve an SDK for the selected Xcode: check `xcode-select -p`
|
|
120
|
+
and `DEVELOPER_DIR`, and that the selected Xcode is a complete install. A
|
|
121
|
+
header name in the message says nothing about the header — the same error
|
|
122
|
+
names whichever system header the runtime includes first. The same missing
|
|
123
|
+
sysroot shows up at the link as `ld: library 'm' not found`.
|
|
112
124
|
- the linker is wrong on Linux — set `xbintsc_CLANG` and/or pass
|
|
113
125
|
`xbintsc_LINKER_ARGS=-fuse-ld=lld`;
|
|
114
126
|
- `No C compiler found. Set xbintsc_CLANG to a clang binary.` — no clang on
|
|
115
127
|
`PATH` at all.
|
|
116
128
|
|
|
129
|
+
### `Undefined symbols` / `LNK2038` / `was built for newer macOS version`
|
|
130
|
+
|
|
131
|
+
The prebuilt archive from `@xbintsc/<os>-<arch>` was produced by a newer Xcode
|
|
132
|
+
Command Line Tools/SDK or Visual Studio C++ toolset than this machine's. The
|
|
133
|
+
linker cannot mix it with local objects. The driver retries the link once with
|
|
134
|
+
`core`/`ext_node` compiled from the sources shipped in the package and prints:
|
|
135
|
+
|
|
136
|
+
```text
|
|
137
|
+
xbintsc: the prebuilt runtime archive does not link with this toolchain (…); compiling the C runtime from source
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
The first retry is slow because it compiles the C runtime; later builds reuse
|
|
141
|
+
the cached objects. If the failure persists, it is the `gui.a`/`media.a`
|
|
142
|
+
archive: those bundle SDL3/FFmpeg and their sources are not in the npm package,
|
|
143
|
+
so they cannot be rebuilt from it. Use a release/archive built for this
|
|
144
|
+
toolchain, or a source checkout (`npm run gui`, `npm run media`). To skip the
|
|
145
|
+
retry entirely set `xbintsc_PREFER_PREBUILT=0`.
|
|
146
|
+
|
|
117
147
|
### `GUI native library not found at …`
|
|
118
148
|
|
|
119
149
|
The `gui` extension needs its per-platform prebuilt `gui.a`/`gui.lib`. The
|
package/doc/ai/zh-CN/cli.md
CHANGED
|
@@ -123,6 +123,11 @@ JSON schema:[xbintsc.config.schema.json](../../xbintsc.config.schema.json)。
|
|
|
123
123
|
| `xbintsc_PREFER_PREBUILT` | `0` 强制从源码编译运行时 |
|
|
124
124
|
| `xbintsc_BINARY` | `bin/` 启动器应运行的原生编译器二进制 |
|
|
125
125
|
|
|
126
|
+
链接预编译的 `core`/`ext_node` 归档因工具链不匹配(`LNK2038`、`LNK2019`、
|
|
127
|
+
`Undefined symbols`、`undefined reference`)失败时,`build` 会自动改用这些归档对应的
|
|
128
|
+
C 源码重试;随包的 `gui`/`media` 归档无法这样重编。见
|
|
129
|
+
[npm-package](../../zh-CN/npm-package.md#首次构建与缓存)。
|
|
130
|
+
|
|
126
131
|
## 增量编译
|
|
127
132
|
|
|
128
133
|
每次构建的键由入口源码哈希、编译器版本、构建选项、平台和已启用扩展集合共同决定
|
|
@@ -69,6 +69,7 @@ xbintsc 编译 TypeScript 的一个**实用子集**。本页用来判断你能
|
|
|
69
69
|
| 特性 | 状态 | 说明 |
|
|
70
70
|
| --- | --- | --- |
|
|
71
71
|
| `async`/`await`、`Promise`、`Promise.all` | ✅ | 真实挂起:async 函数体运行在栈式协程上,等待**未 settle** 的 Promise 时暂停,settle 后恢复。每次 `await` 都会让出一次,已 settle 的值或非 Promise 也会像 Node 一样排入微任务 |
|
|
72
|
+
| 未处理的 rejection | ✅ | 与 Node 默认行为一致:事件循环排空后在 stderr 打印 `Unhandled promise rejection` 并以状态码 1 退出。`.catch`、`await` 外层 `try`、或稍后在定时器里补挂的处理函数都算已处理 |
|
|
72
73
|
| `setTimeout` 与回调 | ✅ | 定时器运行在核心事件循环上;`await new Promise(r => setTimeout(r, ms))` 可用 |
|
|
73
74
|
| `queueMicrotask` / `setImmediate` / `performance.now` | ✅ | 微任务与 Promise 共用 FIFO 队列;`setImmediate` 是零延迟定时器,返回数字 id;`performance.now` 返回单调递增的毫秒小数 |
|
|
74
75
|
| 套接字/服务端(`http`、`net`、`dgram`) | ✅ | 回调在事件循环上执行,可以 settle 你正在 await 的 Promise(测试含 `net`/`http` 示例) |
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
xbintsc doctor
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
它会打印平台、将要使用的工具链(以及来源)、编译器版本、运行时目录、运行时库目录、
|
|
10
|
+
支持的平台下限与图标资源编译器;macOS 上还会打印交给 clang 的 SDK。绝大多数
|
|
11
|
+
"跑不起来"的答案都在这里。
|
|
11
12
|
|
|
12
13
|
## 首先确认:clang 够新吗?
|
|
13
14
|
|
|
@@ -100,11 +101,35 @@ clang 自身失败。抛出的消息包含完整的 clang 命令与 stderr——
|
|
|
100
101
|
```
|
|
101
102
|
该脚本会导入 `vcvarsall`,并把 `xbintsc_CLANG` 指向 Visual Studio 自带的
|
|
102
103
|
LLVM。直接执行 `vcvarsall.bat x64` 也仍然可行。
|
|
104
|
+
- macOS 上 clang 报标准头找不到——`fatal error: 'stdio.h' file not found`、
|
|
105
|
+
`'setjmp.h' file not found` 等。macOS 没有 `/usr/include`;这些头文件在 SDK
|
|
106
|
+
里,而 clang 只有拿到 sysroot(`/usr/bin/clang` 的 shim、`-isysroot` 或
|
|
107
|
+
`SDKROOT`)才会去搜索它。xbintsc 会用 `xcrun --show-sdk-path` 解析 SDK 并以
|
|
108
|
+
`-isysroot` 传给 clang(`SDKROOT` 已设置时不覆盖),因此出现这个错误说明
|
|
109
|
+
`xcrun` 无法为选中的 Xcode 解析出 SDK:检查 `xcode-select -p` 和
|
|
110
|
+
`DEVELOPER_DIR`,并确认该 Xcode 是完整安装。消息里出现的头文件名没有意义
|
|
111
|
+
——运行时先 include 哪个系统头,报的就是哪个。同一个缺失的 sysroot 也会在链接
|
|
112
|
+
阶段表现为 `ld: library 'm' not found`。
|
|
103
113
|
- Linux 上链接器不对——设置 `xbintsc_CLANG`,并/或传
|
|
104
114
|
`xbintsc_LINKER_ARGS=-fuse-ld=lld`;
|
|
105
115
|
- `No C compiler found. Set xbintsc_CLANG to a clang binary.` —— `PATH` 里完全没有
|
|
106
116
|
clang。
|
|
107
117
|
|
|
118
|
+
### `Undefined symbols` / `LNK2038` / `was built for newer macOS version`
|
|
119
|
+
|
|
120
|
+
`@xbintsc/<os>-<arch>` 里的预编译归档由比本机更新的 Xcode Command Line
|
|
121
|
+
Tools/SDK 或 Visual Studio C++ 生成工具构建,链接器无法把它与本机目标文件混用。
|
|
122
|
+
驱动会自动改用包内自带的源码重新编译 `core`/`ext_node` 并重试一次链接,同时打印:
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
xbintsc: the prebuilt runtime archive does not link with this toolchain (…); compiling the C runtime from source
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
首次重试会编译 C 运行时,所以较慢;之后的构建复用缓存的目标文件。如果仍然失败,
|
|
129
|
+
冲突的就是 `gui.a`/`media.a`:它们内含 SDL3/FFmpeg,npm 包里没有这些源码,无法从
|
|
130
|
+
包里重编。请改用与本机工具链匹配的发布包,或在源码检出中构建(`npm run gui`、
|
|
131
|
+
`npm run media`)。设置 `xbintsc_PREFER_PREBUILT=0` 可以完全跳过这次重试。
|
|
132
|
+
|
|
108
133
|
### `GUI native library not found at …`
|
|
109
134
|
|
|
110
135
|
`gui` 扩展需要各平台预编译的 `gui.a`/`gui.lib`。可选的 `@xbintsc/<os>-<arch>`
|
package/doc/gui/build.md
CHANGED
|
@@ -45,9 +45,13 @@
|
|
|
45
45
|
minimal static build with only the demuxers/parsers/decoders the media
|
|
46
46
|
elements need, compiles `runtime/ext_media/media.cpp` against it and merges
|
|
47
47
|
everything into `runtime/lib/<os>-<arch>/media.a` (`media.lib` with the MSVC
|
|
48
|
-
ABI on Windows).
|
|
49
|
-
|
|
50
|
-
`
|
|
48
|
+
ABI on Windows). The download retries the transient TLS failures the release
|
|
49
|
+
host is prone to, and the tarball is kept at
|
|
50
|
+
`vendor/ffmpeg-<version>.tar.xz` after extraction, so a rebuild (or CI, which
|
|
51
|
+
caches it by `FFMPEG_VERSION`) extracts the local copy instead of fetching it
|
|
52
|
+
again. `gui.a` does **not** link FFmpeg: the compiler selects the `media` link
|
|
53
|
+
feature for a program that may play media and only then links `media.a` (see
|
|
54
|
+
[Link features](#link-features)).
|
|
51
55
|
- `src/extensions/gui/index.ts` exposes the engine archive through
|
|
52
56
|
`nativeObjects()` (via `findRuntimeLibrary`, so `.a`/`.lib` both work) and the
|
|
53
57
|
OS frameworks through `linkerFlags()`. Its `linkFeatures()` (in
|
package/doc/gui/dom.md
CHANGED
|
@@ -201,7 +201,9 @@ The two parameters (`window`, `document`) are ordinary function arguments, so
|
|
|
201
201
|
script locals need no global-object machinery. External scripts work too:
|
|
202
202
|
`<script src="./counter.ts">` is read at compile time, its imports are hoisted
|
|
203
203
|
(rewritten to resolve from the HTML file) and its body is wrapped the same way —
|
|
204
|
-
so a script module can `import` helpers and still see `document`.
|
|
204
|
+
so a script module can `import` helpers and still see `document`. An inline body
|
|
205
|
+
goes through the same split, so `import` works identically there, `node:fs` and
|
|
206
|
+
other `node:` built-ins included once the `node` extension is enabled. Scripts are
|
|
205
207
|
**compile-time assets**: HTML created at runtime (`innerHTML`, fetched over the
|
|
206
208
|
network) never executes, and `src` URLs (`https://…`, `data:…`) are ignored.
|
|
207
209
|
Everything runs in document order after parsing (effectively deferred). See
|
package/doc/gui/webgl.md
CHANGED
|
@@ -337,6 +337,10 @@ SPIRV-Cross, nor any `webgl_*` member (see [Link features](./build.md#link-featu
|
|
|
337
337
|
- `examples/gui/webgl2-cubes` draws 64 instanced cubes with one draw call,
|
|
338
338
|
`#version 300 es` and a VAO; covered by
|
|
339
339
|
`tests/e2e/gui-example-webgl2.test.ts`.
|
|
340
|
+
- `examples/gui/pelican-3d` is a complete lit scene (procedural sky, fog,
|
|
341
|
+
instanced trees/clouds, a rigged pelican and bicycle) split across nine ES
|
|
342
|
+
modules with `AudioContext` sound; covered by
|
|
343
|
+
`tests/e2e/gui-example-pelican3d.test.ts`.
|
|
340
344
|
|
|
341
345
|
These suites run against whichever backend the host selects: Vulkan on Linux
|
|
342
346
|
(and Windows), Metal on macOS, so the SPIRV-Cross -> MSL path is covered by the
|