mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-23 06:10:02 +08:00
- Keep cached native class instances callable, including inherited methods and JavaScript arguments. - Support plain-object Proxy traps with live receivers, enumeration, and data-property invariants. - Compile untyped addition, computed environment keys, and text-codec startup storage natively.
58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
import { Base, FactoryInput, Input, Metrics, View, describeOptions, exerciseCachedStore, exerciseEnvironmentProxy } from "bundled-methods";
|
|
|
|
const view = new View("selected");
|
|
const base: Base = view;
|
|
console.log(JSON.stringify(new Base().selected()), view.selected(), base.getSelectedText());
|
|
console.log(view.label(), view.label("changed") === view, base.selected());
|
|
console.log(view.parent === null);
|
|
view.parent = new View("parent");
|
|
console.log(view.parent.selected());
|
|
view.parent = null;
|
|
const metrics = new Metrics(12, true);
|
|
console.log(metrics.count() + 1, metrics.active());
|
|
|
|
// The nullable base callback keeps one native slot through the bundled
|
|
// intermediate class and a derived arrow that captures its owner.
|
|
base.runLifecycle();
|
|
const callback = view.onLifecyclePass;
|
|
console.log(callback === view.onLifecyclePass);
|
|
base.resetLifecycle();
|
|
base.runLifecycle();
|
|
console.log(view.onLifecyclePass === null);
|
|
callback?.();
|
|
for (let i = 0; i < 20; i++) {
|
|
const captured = new View(`iteration ${i}`);
|
|
if (i === 19) captured.runLifecycle();
|
|
}
|
|
|
|
// The shipped declaration omits the private field's type. Its JavaScript
|
|
// constructor still identifies the class stored behind the null initializer.
|
|
const input = new Input();
|
|
const parser = input.save();
|
|
console.log("parser identity", parser === input.save());
|
|
input.push("hello");
|
|
input.push("!");
|
|
console.log(input.read(), parser?.read(), parser?.describe());
|
|
input.clear();
|
|
console.log(input.read(), parser?.read());
|
|
input.close();
|
|
input.push("ignored");
|
|
input.clear();
|
|
console.log(input.read(), input.save() === null, parser?.describe());
|
|
input.open();
|
|
console.log("replacement", input.save() === parser, input.read());
|
|
|
|
const factory = new FactoryInput();
|
|
console.log(factory.read());
|
|
factory.open("from factory");
|
|
const saved = factory.save();
|
|
console.log(factory.read(), saved === factory.save());
|
|
factory.close();
|
|
console.log(factory.read(), saved?.describe());
|
|
factory.open("replacement");
|
|
console.log(factory.read(), factory.save() === saved);
|
|
console.log(describeOptions({ name: "omitted" }));
|
|
console.log(describeOptions({ name: "present", required: false, default: 0, type: "number" }));
|
|
console.log(exerciseCachedStore());
|
|
console.log(exerciseEnvironmentProxy());
|