mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-02 07:43:42 +08:00
An exported function declaration is a mutable binding, so its module can replace it; the hooks treated only `let` and `var` exports as live and snapshotted the function, leaving island imports on the first function. Bind function exports like `var`, and cover a reassigned function export in the shared-singleton corpus program. Co-Authored-By: Claude 5.5 <noreply@anthropic.com>
42 lines
1.0 KiB
JavaScript
42 lines
1.0 KiB
JavaScript
// Island code (loaded with requireModule): imports the shared module by
|
|
// named imports, by namespace, and through require().
|
|
import { createRequire } from "node:module";
|
|
import * as ns from "./state.mjs";
|
|
import { config, count, entries, record, describe } from "./state.mjs";
|
|
|
|
const require = createRequire(import.meta.url);
|
|
|
|
record("island-1");
|
|
export const startup = `count=${count} ns=${ns.count} entries=${entries()}`;
|
|
|
|
export function report() {
|
|
return `count=${count} ns=${ns.count} entries=${entries()}`;
|
|
}
|
|
|
|
export function bump(name) {
|
|
const before = count;
|
|
const after = record(name);
|
|
return `${before}->${after} live=${count}`;
|
|
}
|
|
|
|
export function configure(mode) {
|
|
config.mode = mode;
|
|
}
|
|
|
|
export function describeConfig() {
|
|
return `${config.mode}/${config.owner}`;
|
|
}
|
|
|
|
export function sameRecord(fn) {
|
|
return fn === record && fn === ns.record;
|
|
}
|
|
|
|
export function requireSees() {
|
|
const viaRequire = require("./state.mjs");
|
|
return viaRequire === ns && viaRequire.entries() === entries();
|
|
}
|
|
|
|
export function describeNow() {
|
|
return describe();
|
|
}
|