@elaraai/east 1.0.93 → 1.0.95
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/dist/src/serialization/beast2/decoded-function.spec.js +135 -1
- package/dist/src/serialization/beast2/decoded-function.spec.js.map +1 -1
- package/dist/src/serialization/beast2/shared.d.ts +69 -2
- package/dist/src/serialization/beast2/shared.d.ts.map +1 -1
- package/dist/src/serialization/beast2/shared.js +119 -12
- package/dist/src/serialization/beast2/shared.js.map +1 -1
- package/dist/src/serialization/beast2/v5/body-key.d.ts +146 -0
- package/dist/src/serialization/beast2/v5/body-key.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/body-key.js +345 -0
- package/dist/src/serialization/beast2/v5/body-key.js.map +1 -0
- package/dist/src/serialization/beast2/v5/codec.d.ts +9 -0
- package/dist/src/serialization/beast2/v5/codec.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/codec.js +50 -10
- package/dist/src/serialization/beast2/v5/codec.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,13 +9,25 @@
|
|
|
9
9
|
* statement after an awaited call read its promise. A decode marks the nodes
|
|
10
10
|
* that await (`markAsync`) before it compiles them, and a platform function it
|
|
11
11
|
* was not given is left for a call to miss. Through both containers.
|
|
12
|
+
*
|
|
13
|
+
* And a whole-value decode compiles each body once (#1353): functions of one
|
|
14
|
+
* content under one platform list run one compiled body, each over its own
|
|
15
|
+
* captures, wherever they sit in the stream — the key is the IR's content
|
|
16
|
+
* and the stream's source map, never the IR's bytes, which back-references
|
|
17
|
+
* make depend on where it sits.
|
|
12
18
|
*/
|
|
13
19
|
import { describe, test } from "node:test";
|
|
14
20
|
import assert from "node:assert/strict";
|
|
15
|
-
import { AsyncFunctionType, BooleanType, FunctionType, IntegerType, NullType, StringType, VariantType } from "../../types.js";
|
|
21
|
+
import { ArrayType, AsyncFunctionType, BooleanType, FunctionType, IntegerType, NullType, StringType, StructType, VariantType } from "../../types.js";
|
|
16
22
|
import { variant } from "../../containers/variant.js";
|
|
17
23
|
import { East } from "../../index.js";
|
|
24
|
+
import { EastError } from "../../error.js";
|
|
25
|
+
import { EAST_IR_SYMBOL } from "../../function_symbols.js";
|
|
26
|
+
import { IRType } from "../../ir.js";
|
|
27
|
+
import { equalFor } from "../../comparison.js";
|
|
28
|
+
import { EastTypeValueType, toEastTypeValue } from "../../type_of_type.js";
|
|
18
29
|
import { decodeBeast2For, encodeBeast2For } from "./index.js";
|
|
30
|
+
import { COMPILED_BODY_LIMIT, compiledBodiesFor } from "./shared.js";
|
|
19
31
|
const Outcome = VariantType({ ok: StringType, refused: NullType });
|
|
20
32
|
/** A check the platform makes asynchronously — here, one every name passes. */
|
|
21
33
|
const check = East.asyncPlatform("decoded_function_check", [StringType], Outcome);
|
|
@@ -63,4 +75,126 @@ describe("a decoded function runs as it was built", () => {
|
|
|
63
75
|
await assert.rejects(decoded(true, "ada"), { message: /^Platform function 'decoded_function_check' is not available/ });
|
|
64
76
|
});
|
|
65
77
|
});
|
|
78
|
+
const Named = FunctionType([], StringType);
|
|
79
|
+
const Key = StructType({ key: StringType });
|
|
80
|
+
/** A maker of closures over a key, as a record Slice's methods are made over a descriptor: one body, many closures. */
|
|
81
|
+
const greeter = East.compile(East.function([Key], Named, (_$, d) => East.function([], StringType, () => East.str `hello ${d.key}`)), []);
|
|
82
|
+
/** The same maker built again: an IR of the very same content, another object. */
|
|
83
|
+
const greeterAgain = East.compile(East.function([Key], Named, (_$, d) => East.function([], StringType, () => East.str `hello ${d.key}`)), []);
|
|
84
|
+
/** A maker of another body. */
|
|
85
|
+
const shouter = East.compile(East.function([Key], Named, (_$, d) => East.function([], StringType, () => East.str `HEY ${d.key}`)), []);
|
|
86
|
+
/** Rows each defining a container of their own, so a body's later places back-reference its first at other distances. */
|
|
87
|
+
const Row = StructType({ fn: Named, tags: ArrayType(StringType) });
|
|
88
|
+
const Rows = ArrayType(Row);
|
|
89
|
+
const makers = [greeter, greeterAgain, shouter];
|
|
90
|
+
const rows = Array.from({ length: 12 }, (_, i) => ({ fn: makers[i % 3]({ key: `k${i}` }), tags: [`k${i}`] }));
|
|
91
|
+
const said = (i) => `${i % 3 === 2 ? "HEY" : "hello"} k${i}`;
|
|
92
|
+
/** Whether `object` is reachable from `root`, by identity. */
|
|
93
|
+
function reaches(root, object, seen = new Set()) {
|
|
94
|
+
if (root === object)
|
|
95
|
+
return true;
|
|
96
|
+
if (root === null || typeof root !== "object" || seen.has(root))
|
|
97
|
+
return false;
|
|
98
|
+
seen.add(root);
|
|
99
|
+
return Object.values(root).some((child) => reaches(child, object, seen));
|
|
100
|
+
}
|
|
101
|
+
/** The error a call raises. */
|
|
102
|
+
function raised(fn) {
|
|
103
|
+
try {
|
|
104
|
+
fn(1n);
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
if (e instanceof EastError)
|
|
108
|
+
return e;
|
|
109
|
+
throw e;
|
|
110
|
+
}
|
|
111
|
+
throw new Error("expected the call to raise");
|
|
112
|
+
}
|
|
113
|
+
describe("a decode compiles each body once (#1353)", () => {
|
|
114
|
+
test("functions of one content compile it once, wherever they sit in the stream, and a decode again compiles none", () => {
|
|
115
|
+
const platform = [];
|
|
116
|
+
const bodies = compiledBodiesFor(platform);
|
|
117
|
+
const blob = encodeBeast2For(Rows)(rows);
|
|
118
|
+
const decoded = decodeBeast2For(Rows, { platform })(blob);
|
|
119
|
+
assert.equal(bodies.compiled, 2, "the two greeters' content is one body, the shouter's another");
|
|
120
|
+
decoded.forEach((row, i) => assert.equal(row.fn(), said(i), "each runs over its own captures"));
|
|
121
|
+
decodeBeast2For(Rows, { platform })(blob);
|
|
122
|
+
const frozen = decodeBeast2For(Rows, { platform, frozen: true })(blob);
|
|
123
|
+
assert.equal(bodies.compiled, 2, "decoding again, frozen or not, compiles nothing");
|
|
124
|
+
frozen.forEach((row, i) => assert.equal(row.fn(), said(i)));
|
|
125
|
+
});
|
|
126
|
+
test("a decode then an encode gives back the bytes it was read from", () => {
|
|
127
|
+
const blob = encodeBeast2For(Rows)(rows);
|
|
128
|
+
const decoded = decodeBeast2For(Rows, { platform: [] })(blob);
|
|
129
|
+
// Each function keeps the IR it was decoded with, so the two greeters re-encode as the two they were written as.
|
|
130
|
+
assert.deepEqual(Array.from(encodeBeast2For(Rows)(decoded)), Array.from(blob));
|
|
131
|
+
});
|
|
132
|
+
test("an error names the location its own stream gives it: one content under two maps compiles twice", () => {
|
|
133
|
+
const Div = FunctionType([IntegerType], IntegerType);
|
|
134
|
+
const first = East.compile(East.function([IntegerType], IntegerType, (_$, x) => x.divide(0n)), []);
|
|
135
|
+
const second = East.compile(East.function([IntegerType], IntegerType, (_$, x) => x.divide(0n)), []);
|
|
136
|
+
// One content authored on two lines: only the source maps tell them apart.
|
|
137
|
+
const irOf = (fn) => fn[EAST_IR_SYMBOL];
|
|
138
|
+
assert.ok(equalFor(IRType)(irOf(first), irOf(second)), "one content");
|
|
139
|
+
assert.notDeepEqual(raised(first).location, raised(second).location, "two lines");
|
|
140
|
+
const platform = [];
|
|
141
|
+
const decode = decodeBeast2For(Div, { platform });
|
|
142
|
+
const one = decode(encodeBeast2For(Div)(first));
|
|
143
|
+
const two = decode(encodeBeast2For(Div)(second));
|
|
144
|
+
assert.equal(compiledBodiesFor(platform).compiled, 2, "the maps differ, so the bodies do");
|
|
145
|
+
assert.deepEqual(raised(one).location, raised(first).location);
|
|
146
|
+
assert.deepEqual(raised(two).location, raised(second).location);
|
|
147
|
+
});
|
|
148
|
+
test("two platform lists never share a body, and a list that changes compiles again", () => {
|
|
149
|
+
const answer = East.platform("decoded_function_answer", [], IntegerType);
|
|
150
|
+
const Ask = FunctionType([], IntegerType);
|
|
151
|
+
const ask = East.compile(East.function([], IntegerType, () => answer()), [answer.implement(() => 0n)]);
|
|
152
|
+
const blob = encodeBeast2For(Ask)(ask);
|
|
153
|
+
const one = [answer.implement(() => 1n)];
|
|
154
|
+
const two = [answer.implement(() => 2n)];
|
|
155
|
+
assert.equal(decodeBeast2For(Ask, { platform: one })(blob)(), 1n);
|
|
156
|
+
assert.equal(decodeBeast2For(Ask, { platform: two })(blob)(), 2n);
|
|
157
|
+
one[0] = answer.implement(() => 3n);
|
|
158
|
+
assert.equal(decodeBeast2For(Ask, { platform: one })(blob)(), 3n, "the list holds another function now");
|
|
159
|
+
const given = [];
|
|
160
|
+
assert.throws(() => decodeBeast2For(Ask, { platform: given })(blob)(), { message: /^Platform function 'decoded_function_answer' is not available/ });
|
|
161
|
+
given.push(answer.implement(() => 4n));
|
|
162
|
+
assert.equal(decodeBeast2For(Ask, { platform: given })(blob)(), 4n, "a list given the function it lacked");
|
|
163
|
+
});
|
|
164
|
+
test(`at most ${COMPILED_BODY_LIMIT} bodies are kept, the least recently used going first`, () => {
|
|
165
|
+
const Const = FunctionType([], IntegerType);
|
|
166
|
+
const Consts = ArrayType(Const);
|
|
167
|
+
// One build, so every function carries one source map, and the bodies' keys differ by their content alone.
|
|
168
|
+
const consts = East.compile(East.function([], Consts, () => Array.from({ length: COMPILED_BODY_LIMIT + 1 }, (_, i) => East.function([], IntegerType, () => BigInt(i)))), [])();
|
|
169
|
+
const platform = [];
|
|
170
|
+
const bodies = compiledBodiesFor(platform);
|
|
171
|
+
const decode = (fns) => decodeBeast2For(Consts, { platform })(encodeBeast2For(Consts)(fns));
|
|
172
|
+
decode(consts.slice(0, COMPILED_BODY_LIMIT));
|
|
173
|
+
assert.equal(bodies.size, COMPILED_BODY_LIMIT);
|
|
174
|
+
assert.equal(bodies.compiled, COMPILED_BODY_LIMIT);
|
|
175
|
+
assert.equal(decode([consts[0]])[0](), 0n);
|
|
176
|
+
assert.equal(bodies.compiled, COMPILED_BODY_LIMIT, "the first is kept, and used again it is the most recent");
|
|
177
|
+
decode([consts[COMPILED_BODY_LIMIT]]);
|
|
178
|
+
assert.equal(bodies.size, COMPILED_BODY_LIMIT, "one more, and the least recently used goes");
|
|
179
|
+
assert.equal(bodies.compiled, COMPILED_BODY_LIMIT + 1);
|
|
180
|
+
decode([consts[0]]);
|
|
181
|
+
assert.equal(bodies.compiled, COMPILED_BODY_LIMIT + 1, "the first, used since, stays");
|
|
182
|
+
assert.equal(decode([consts[1]])[0](), 1n);
|
|
183
|
+
assert.equal(bodies.compiled, COMPILED_BODY_LIMIT + 2, "the second, the least recently used, went");
|
|
184
|
+
});
|
|
185
|
+
test("a function whose IR back-references a container no function's IR defined compiles on its own", () => {
|
|
186
|
+
const Point = StructType({ x: IntegerType, y: IntegerType });
|
|
187
|
+
const Holder = StructType({ schema: EastTypeValueType, fn: FunctionType([Point], IntegerType) });
|
|
188
|
+
const getX = East.compile(East.function([Point], IntegerType, (_$, p) => p.x), []);
|
|
189
|
+
const platform = [];
|
|
190
|
+
const decode = decodeBeast2For(Holder, { platform });
|
|
191
|
+
// The schema is written first, and the IR's types are its very objects, so the IR back-references the schema's.
|
|
192
|
+
const blob = encodeBeast2For(Holder)({ schema: toEastTypeValue(Point), fn: getX });
|
|
193
|
+
const held = decode(blob);
|
|
194
|
+
assert.ok(reaches(held.fn[EAST_IR_SYMBOL], held.schema.value), "the IR holds the schema's own fields");
|
|
195
|
+
assert.equal(held.fn({ x: 7n, y: 1n }), 7n);
|
|
196
|
+
assert.equal(decode(blob).fn({ x: 8n, y: 1n }), 8n);
|
|
197
|
+
assert.equal(compiledBodiesFor(platform).compiled, 0, "neither decode keeps it");
|
|
198
|
+
});
|
|
199
|
+
});
|
|
66
200
|
//# sourceMappingURL=decoded-function.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoded-function.spec.js","sourceRoot":"","sources":["../../../../src/serialization/beast2/decoded-function.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"decoded-function.spec.js","sourceRoot":"","sources":["../../../../src/serialization/beast2/decoded-function.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,12 +82,72 @@ export declare function fnv1a64(bytes: Uint8Array): bigint;
|
|
|
82
82
|
* @returns a single-line, length-bounded description
|
|
83
83
|
*/
|
|
84
84
|
export declare function describeNoIrValue(value: unknown): string;
|
|
85
|
+
/** At most this many compiled bodies are kept per platform list, the least
|
|
86
|
+
* recently used going first: the print works Plan's payload compiles 552,
|
|
87
|
+
* the operations Calendar's 352 (#1353). */
|
|
88
|
+
export declare const COMPILED_BODY_LIMIT = 4096;
|
|
89
|
+
/**
|
|
90
|
+
* The bodies compiled against one platform list, by their functions' content
|
|
91
|
+
* key (#1353): a decoded function whose key is here runs the body already
|
|
92
|
+
* compiled, over its own captures, so a payload holding a body at many places
|
|
93
|
+
* compiles it once, and decoding it again compiles nothing.
|
|
94
|
+
*
|
|
95
|
+
* @remarks
|
|
96
|
+
* A compiled body is the closure tree the compiler builds from an IR. It
|
|
97
|
+
* takes its variables when it runs, a literal it returns is a primitive, and
|
|
98
|
+
* it binds the platform's functions as it compiles — so one body serves every
|
|
99
|
+
* function of its content under one platform list, and a changed list compiles
|
|
100
|
+
* again ({@link compiledBodiesFor}).
|
|
101
|
+
*
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
export declare class CompiledBodies {
|
|
105
|
+
/** The bodies by content key, the least recently used first. */
|
|
106
|
+
private readonly bodies;
|
|
107
|
+
/** The list's entries these compiled against, in order. */
|
|
108
|
+
private readonly entries;
|
|
109
|
+
private compiles;
|
|
110
|
+
/** @param platform - the platform list the bodies compile against */
|
|
111
|
+
constructor(platform: readonly PlatformFunction[]);
|
|
112
|
+
/**
|
|
113
|
+
* Whether `platform` holds the entries these bodies compiled against.
|
|
114
|
+
*
|
|
115
|
+
* @param platform - the list a decode was given
|
|
116
|
+
* @returns whether it holds the same platform functions, in order
|
|
117
|
+
*/
|
|
118
|
+
compiledAgainst(platform: readonly PlatformFunction[]): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* The body of the functions of content `key`, compiled the first time it is
|
|
121
|
+
* asked for.
|
|
122
|
+
*
|
|
123
|
+
* @param key - the functions' content key
|
|
124
|
+
* @param compile - compiles the body
|
|
125
|
+
* @returns the compiled body
|
|
126
|
+
*/
|
|
127
|
+
bodyFor(key: string, compile: () => (ctx: RuntimeContext) => any): (ctx: RuntimeContext) => any;
|
|
128
|
+
/** How many bodies are kept. */
|
|
129
|
+
get size(): number;
|
|
130
|
+
/** How many bodies have been compiled. */
|
|
131
|
+
get compiled(): number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The bodies compiled against a platform list: kept with the list, and started
|
|
135
|
+
* afresh once the list holds other functions.
|
|
136
|
+
*
|
|
137
|
+
* @param platform - the list a decode was given
|
|
138
|
+
* @returns its compiled bodies
|
|
139
|
+
* @internal
|
|
140
|
+
*/
|
|
141
|
+
export declare function compiledBodiesFor(platform: readonly PlatformFunction[]): CompiledBodies;
|
|
85
142
|
/** Platform bindings threaded through a decode pass, pre-resolved from
|
|
86
143
|
* {@link Beast2DecodeOptions} so per-function compiles don't re-derive them. */
|
|
87
144
|
export interface PlatformDecodeContext {
|
|
88
145
|
platform: PlatformFunction[];
|
|
89
146
|
platformFns: Record<string, any>;
|
|
90
147
|
asyncPlatformFns: Set<string>;
|
|
148
|
+
/** The bodies compiled against `platform`, which a keyed function compiles once into (#1353); found
|
|
149
|
+
* when the decode meets its first keyed function, so a decode of data pays nothing for them. */
|
|
150
|
+
compiled?: CompiledBodies;
|
|
91
151
|
}
|
|
92
152
|
/**
|
|
93
153
|
* Resolves decode options into the platform bindings used when compiling
|
|
@@ -113,13 +173,20 @@ export declare function buildPlatformContext(options?: Beast2DecodeOptions): Pla
|
|
|
113
173
|
* decode was not given is stubbed by the compiler, so the value decodes
|
|
114
174
|
* wherever it is read, and only a call needs the platform.
|
|
115
175
|
*
|
|
116
|
-
*
|
|
176
|
+
* A function with a content key runs the body compiled for its key under the
|
|
177
|
+
* decode's platform list, compiling it only the first time (#1353,
|
|
178
|
+
* {@link CompiledBodies}). It keeps the IR it was decoded with, unmarked when
|
|
179
|
+
* its body was compiled before: that IR is what it re-encodes and compares as,
|
|
180
|
+
* so a decode then an encode gives back the bytes it was read from.
|
|
181
|
+
*
|
|
182
|
+
* @param ir - the decoded Function or AsyncFunction IR, whose nodes are marked in place when it compiles
|
|
117
183
|
* @param isAsync - whether the declared type is AsyncFunction
|
|
118
184
|
* @param captureContext - decoded capture values keyed by capture name
|
|
119
185
|
* @param typeContext - capture types keyed by capture name
|
|
120
186
|
* @param platformCtx - pre-resolved platform bindings
|
|
121
187
|
* @param sourceMap - the source map to attach, if the blob carried one
|
|
188
|
+
* @param key - the function's content key: its IR's and its stream's source map's, when the codec keys it
|
|
122
189
|
* @returns the compiled callable with re-serialization symbols attached
|
|
123
190
|
*/
|
|
124
|
-
export declare function finishDecodedFunction(ir: FunctionIR | AsyncFunctionIR, isAsync: boolean, captureContext: RuntimeContext, typeContext: Record<string, EastTypeValue>, platformCtx: PlatformDecodeContext, sourceMap: SourceMap | null): (...inputs: any[]) => any;
|
|
191
|
+
export declare function finishDecodedFunction(ir: FunctionIR | AsyncFunctionIR, isAsync: boolean, captureContext: RuntimeContext, typeContext: Record<string, EastTypeValue>, platformCtx: PlatformDecodeContext, sourceMap: SourceMap | null, key?: string): (...inputs: any[]) => any;
|
|
125
192
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/serialization/beast2/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,EAAmG,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAExJ,OAAO,EAAU,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAE/D,2DAA2D;AAC3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B;;;;;+BAK2B;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;6DAC6D;AAC7D,eAAO,MAAM,WAAW,eAA0B,CAAC;AAOnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAQ/E;AAgFD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAUjD;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAqBxD;AAED;iFACiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/serialization/beast2/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,EAAmG,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAExJ,OAAO,EAAU,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAE/D,2DAA2D;AAC3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B;;;;;+BAK2B;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;6DAC6D;AAC7D,eAAO,MAAM,WAAW,eAA0B,CAAC;AAOnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAQ/E;AAgFD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAUjD;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAqBxD;AAMD;;6CAE6C;AAC7C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc;IACzB,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;IAC1E,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAK;IAErB,qEAAqE;gBACzD,QAAQ,EAAE,SAAS,gBAAgB,EAAE;IAIjD;;;;;OAKG;IACH,eAAe,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO;IAQ/D;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,cAAc,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,GAAG;IAc/F,gCAAgC;IAChC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0CAA0C;IAC1C,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF;AAKD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,cAAc,CAMvF;AAED;iFACiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B;qGACiG;IACjG,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,qBAAqB,CAOzF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,UAAU,GAAG,eAAe,EAChC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,WAAW,EAAE,qBAAqB,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,GAAG,CAAC,EAAE,MAAM,GACX,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,CAmC3B"}
|
|
@@ -204,6 +204,102 @@ export function describeNoIrValue(value) {
|
|
|
204
204
|
}
|
|
205
205
|
return parts.join(" ");
|
|
206
206
|
}
|
|
207
|
+
/** The platform list of a decode given none: one list, so that such decodes
|
|
208
|
+
* share their compiled bodies ({@link CompiledBodies}). */
|
|
209
|
+
const NO_PLATFORM = Object.freeze([]);
|
|
210
|
+
/** At most this many compiled bodies are kept per platform list, the least
|
|
211
|
+
* recently used going first: the print works Plan's payload compiles 552,
|
|
212
|
+
* the operations Calendar's 352 (#1353). */
|
|
213
|
+
export const COMPILED_BODY_LIMIT = 4096;
|
|
214
|
+
/**
|
|
215
|
+
* The bodies compiled against one platform list, by their functions' content
|
|
216
|
+
* key (#1353): a decoded function whose key is here runs the body already
|
|
217
|
+
* compiled, over its own captures, so a payload holding a body at many places
|
|
218
|
+
* compiles it once, and decoding it again compiles nothing.
|
|
219
|
+
*
|
|
220
|
+
* @remarks
|
|
221
|
+
* A compiled body is the closure tree the compiler builds from an IR. It
|
|
222
|
+
* takes its variables when it runs, a literal it returns is a primitive, and
|
|
223
|
+
* it binds the platform's functions as it compiles — so one body serves every
|
|
224
|
+
* function of its content under one platform list, and a changed list compiles
|
|
225
|
+
* again ({@link compiledBodiesFor}).
|
|
226
|
+
*
|
|
227
|
+
* @internal
|
|
228
|
+
*/
|
|
229
|
+
export class CompiledBodies {
|
|
230
|
+
/** The bodies by content key, the least recently used first. */
|
|
231
|
+
bodies = new Map();
|
|
232
|
+
/** The list's entries these compiled against, in order. */
|
|
233
|
+
entries;
|
|
234
|
+
compiles = 0;
|
|
235
|
+
/** @param platform - the platform list the bodies compile against */
|
|
236
|
+
constructor(platform) {
|
|
237
|
+
this.entries = [...platform];
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Whether `platform` holds the entries these bodies compiled against.
|
|
241
|
+
*
|
|
242
|
+
* @param platform - the list a decode was given
|
|
243
|
+
* @returns whether it holds the same platform functions, in order
|
|
244
|
+
*/
|
|
245
|
+
compiledAgainst(platform) {
|
|
246
|
+
if (platform.length !== this.entries.length)
|
|
247
|
+
return false;
|
|
248
|
+
for (let i = 0; i < platform.length; i++) {
|
|
249
|
+
if (platform[i] !== this.entries[i])
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* The body of the functions of content `key`, compiled the first time it is
|
|
256
|
+
* asked for.
|
|
257
|
+
*
|
|
258
|
+
* @param key - the functions' content key
|
|
259
|
+
* @param compile - compiles the body
|
|
260
|
+
* @returns the compiled body
|
|
261
|
+
*/
|
|
262
|
+
bodyFor(key, compile) {
|
|
263
|
+
const held = this.bodies.get(key);
|
|
264
|
+
if (held !== undefined) {
|
|
265
|
+
this.bodies.delete(key);
|
|
266
|
+
this.bodies.set(key, held);
|
|
267
|
+
return held;
|
|
268
|
+
}
|
|
269
|
+
const body = compile();
|
|
270
|
+
this.compiles++;
|
|
271
|
+
this.bodies.set(key, body);
|
|
272
|
+
if (this.bodies.size > COMPILED_BODY_LIMIT)
|
|
273
|
+
this.bodies.delete(this.bodies.keys().next().value);
|
|
274
|
+
return body;
|
|
275
|
+
}
|
|
276
|
+
/** How many bodies are kept. */
|
|
277
|
+
get size() {
|
|
278
|
+
return this.bodies.size;
|
|
279
|
+
}
|
|
280
|
+
/** How many bodies have been compiled. */
|
|
281
|
+
get compiled() {
|
|
282
|
+
return this.compiles;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/** The compiled bodies of each platform list, while the list lives. */
|
|
286
|
+
const compiledBodiesOf = new WeakMap();
|
|
287
|
+
/**
|
|
288
|
+
* The bodies compiled against a platform list: kept with the list, and started
|
|
289
|
+
* afresh once the list holds other functions.
|
|
290
|
+
*
|
|
291
|
+
* @param platform - the list a decode was given
|
|
292
|
+
* @returns its compiled bodies
|
|
293
|
+
* @internal
|
|
294
|
+
*/
|
|
295
|
+
export function compiledBodiesFor(platform) {
|
|
296
|
+
const held = compiledBodiesOf.get(platform);
|
|
297
|
+
if (held !== undefined && held.compiledAgainst(platform))
|
|
298
|
+
return held;
|
|
299
|
+
const fresh = new CompiledBodies(platform);
|
|
300
|
+
compiledBodiesOf.set(platform, fresh);
|
|
301
|
+
return fresh;
|
|
302
|
+
}
|
|
207
303
|
/**
|
|
208
304
|
* Resolves decode options into the platform bindings used when compiling
|
|
209
305
|
* decoded functions.
|
|
@@ -212,7 +308,7 @@ export function describeNoIrValue(value) {
|
|
|
212
308
|
* @returns the pre-resolved platform context
|
|
213
309
|
*/
|
|
214
310
|
export function buildPlatformContext(options) {
|
|
215
|
-
const platform = options?.platform ??
|
|
311
|
+
const platform = options?.platform ?? NO_PLATFORM;
|
|
216
312
|
return {
|
|
217
313
|
platform,
|
|
218
314
|
platformFns: Object.fromEntries(platform.map(fn => [fn.name, fn.fn])),
|
|
@@ -235,24 +331,35 @@ export function buildPlatformContext(options) {
|
|
|
235
331
|
* decode was not given is stubbed by the compiler, so the value decodes
|
|
236
332
|
* wherever it is read, and only a call needs the platform.
|
|
237
333
|
*
|
|
238
|
-
*
|
|
334
|
+
* A function with a content key runs the body compiled for its key under the
|
|
335
|
+
* decode's platform list, compiling it only the first time (#1353,
|
|
336
|
+
* {@link CompiledBodies}). It keeps the IR it was decoded with, unmarked when
|
|
337
|
+
* its body was compiled before: that IR is what it re-encodes and compares as,
|
|
338
|
+
* so a decode then an encode gives back the bytes it was read from.
|
|
339
|
+
*
|
|
340
|
+
* @param ir - the decoded Function or AsyncFunction IR, whose nodes are marked in place when it compiles
|
|
239
341
|
* @param isAsync - whether the declared type is AsyncFunction
|
|
240
342
|
* @param captureContext - decoded capture values keyed by capture name
|
|
241
343
|
* @param typeContext - capture types keyed by capture name
|
|
242
344
|
* @param platformCtx - pre-resolved platform bindings
|
|
243
345
|
* @param sourceMap - the source map to attach, if the blob carried one
|
|
346
|
+
* @param key - the function's content key: its IR's and its stream's source map's, when the codec keys it
|
|
244
347
|
* @returns the compiled callable with re-serialization symbols attached
|
|
245
348
|
*/
|
|
246
|
-
export function finishDecodedFunction(ir, isAsync, captureContext, typeContext, platformCtx, sourceMap) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
349
|
+
export function finishDecodedFunction(ir, isAsync, captureContext, typeContext, platformCtx, sourceMap, key) {
|
|
350
|
+
const compile = () => {
|
|
351
|
+
markAsync(ir, platformCtx.asyncPlatformFns);
|
|
352
|
+
// The compile snapshots the AMBIENT source map (compile_internal's
|
|
353
|
+
// fresh_ctx), so it must run under the map the blob carried: that is the
|
|
354
|
+
// map the IR's loc_ids index, and the only one that makes a runtime error
|
|
355
|
+
// inside the decoded function name its authoring site. Outside a scope the
|
|
356
|
+
// ambient map is null — or, decoding inside a build, that build's map,
|
|
357
|
+
// against which the blob's ids mean nothing. A blob without a map compiles
|
|
358
|
+
// under an empty one for the same reason (#626). A key holds the map, so a
|
|
359
|
+
// body compiled under one serves only functions read under its like.
|
|
360
|
+
return with_source_map(sourceMap ?? new SourceMap(), () => compile_internal(ir, typeContext, platformCtx.platformFns, platformCtx.asyncPlatformFns, platformCtx.platform, true, EMPTY_SET));
|
|
361
|
+
};
|
|
362
|
+
const compiled = key === undefined ? compile() : (platformCtx.compiled ??= compiledBodiesFor(platformCtx.platform)).bodyFor(key, compile);
|
|
256
363
|
const rawFn = compiled(captureContext);
|
|
257
364
|
const fn = isAsync
|
|
258
365
|
? async (...inputs) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/serialization/beast2/shared.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/serialization/beast2/shared.ts"],"names":[],"mappings":"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"}
|