char/avril

(wip) why'd you have to go and make things so complicaaaaated?

git clone https://git.t4t.associates/char/avril

Charlotte Somsnapshot: capture and restore extension layouts in one artifactd71572b

main
2.5 KiB97 linesraw
1import { collect, reportMicrotask, state } from "test:main";
2import {
3  copy,
4  meta,
5  schedule,
6  sharedSize,
7  state as lazyState,
8} from "test:lazy";
9import { seed } from "guest:dep";
10
11collect();
12assert(
13  sharedSize(new SharedArrayBuffer(12)) === 12,
14  "Live intrinsic in lazy module",
15);
16
17function assert(value, message) {
18  if (!value) throw Error(message);
19}
20assert(
21  state === lazyState && state === snapshotState && state.seed === seed,
22  "Export identity",
23);
24assert(Object.isFrozen(state), "Live initialization descriptors");
25assert(
26  Object.getOwnPropertyDescriptor(state, "seed").value === seed,
27  "Data descriptor",
28);
29assert(
30  extensionMeta.url === "ext:test/main.js" && extensionMeta.main === false,
31  "Saved import.meta",
32);
33assert(
34  meta.url === "ext:test/lazy.js" && meta.main === false,
35  "Lazy import.meta",
36);
37assert(
38  extensionMeta.resolve("./state.js") === "ext:test/state.js",
39  "Saved resolve callback",
40);
41assert(
42  meta.resolve("./state.js") === "ext:test/state.js",
43  "Fresh resolve callback",
44);
45assert(
46  import.meta.main && import.meta.url.includes("snapshot-" + seed),
47  "Guest import.meta",
48);
49assert(
50  import.meta.resolve("guest:dep").includes("snapshot-" + seed),
51  "Fresh loader resolution",
52);
53assert((await import("guest:dep")).seed === seed, "Guest dynamic import");
54assert(await seedAsync() === seed, "Async op and promise bridge");
55for (
56  const name of ["ext:test/state.js", "ext:core/bootstrap", "private-alias"]
57) {
58  let denied = false;
59  try {
60    await import(name);
61  } catch (error) {
62    denied = error.message.includes("private");
63  }
64  assert(denied, "Guest imported private module: " + name);
65}
66let denied = false;
67let dynamicError;
68try {
69  await extensionDynamic();
70} catch (error) {
71  dynamicError = error;
72  denied = error.message.includes("not yet implemented");
73}
74assert(denied, "Restored origin marker lost: " + dynamicError);
75let restarted = false;
76try {
77  startAgain();
78} catch (error) {
79  restarted = error.message === "Runtime already started";
80}
81assert(restarted, "Live initialization was not one-shot");
82
83const original = { state };
84original.self = original;
85const copied = copy(original);
86assert(
87  copied !== original && copied.self === copied && copied.state.seed === seed,
88  "Clone bridge",
89);
90const wasm = await WebAssembly.compileStreaming(seed);
91assert(wasm instanceof WebAssembly.Module, "Wasm streaming hook");
92schedule();
93globalThis.afterTasks = () => {
94  reportMicrotask();
95  globalThis.rejected = Promise.reject(Error("rejection"));
96};
97globalThis.complete = true;