@intentius/tsad-reference 1.4.0

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.
Files changed (55) hide show
  1. package/CAVEATS.md +95 -0
  2. package/README.md +42 -0
  3. package/dist/adapter.d.ts +5 -0
  4. package/dist/adapter.d.ts.map +1 -0
  5. package/dist/adapter.js +50 -0
  6. package/dist/adapter.js.map +1 -0
  7. package/dist/fnbody.d.ts +11 -0
  8. package/dist/fnbody.d.ts.map +1 -0
  9. package/dist/fnbody.js +68 -0
  10. package/dist/fnbody.js.map +1 -0
  11. package/dist/fold.d.ts +86 -0
  12. package/dist/fold.d.ts.map +1 -0
  13. package/dist/fold.js +558 -0
  14. package/dist/fold.js.map +1 -0
  15. package/dist/foldable-helpers.d.ts +23 -0
  16. package/dist/foldable-helpers.d.ts.map +1 -0
  17. package/dist/foldable-helpers.js +25 -0
  18. package/dist/foldable-helpers.js.map +1 -0
  19. package/dist/host.d.ts +45 -0
  20. package/dist/host.d.ts.map +1 -0
  21. package/dist/host.js +5 -0
  22. package/dist/host.js.map +1 -0
  23. package/dist/index.d.ts +9 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/module.d.ts +20 -0
  28. package/dist/module.d.ts.map +1 -0
  29. package/dist/module.js +74 -0
  30. package/dist/module.js.map +1 -0
  31. package/dist/project.d.ts +22 -0
  32. package/dist/project.d.ts.map +1 -0
  33. package/dist/project.js +481 -0
  34. package/dist/project.js.map +1 -0
  35. package/dist/revive.d.ts +16 -0
  36. package/dist/revive.d.ts.map +1 -0
  37. package/dist/revive.js +109 -0
  38. package/dist/revive.js.map +1 -0
  39. package/dist/subset.d.ts +42 -0
  40. package/dist/subset.d.ts.map +1 -0
  41. package/dist/subset.js +214 -0
  42. package/dist/subset.js.map +1 -0
  43. package/package.json +37 -0
  44. package/src/adapter.ts +48 -0
  45. package/src/fnbody.ts +61 -0
  46. package/src/fold.ts +581 -0
  47. package/src/foldable-helpers.ts +38 -0
  48. package/src/host.ts +38 -0
  49. package/src/index.ts +8 -0
  50. package/src/module.ts +52 -0
  51. package/src/no-own-execution.test.ts +86 -0
  52. package/src/prebuild.test.ts +68 -0
  53. package/src/project.ts +495 -0
  54. package/src/revive.ts +120 -0
  55. package/src/subset.ts +224 -0
package/dist/fold.js ADDED
@@ -0,0 +1,558 @@
1
+ /**
2
+ * Expression evaluation: judgments.md J1, one branch per F-Eval-* rule.
3
+ *
4
+ * Written from the specification text, not derived from any implementation
5
+ * (#50). Executes nothing of the source under fold. Its only executions are
6
+ * F-Eval-CallEager and F-Eval-CallMethod on a real receiver, both of which
7
+ * run code the file imported rather than code it wrote.
8
+ */
9
+ import * as ts from "typescript";
10
+ import { intrinsicCallFolds, intrinsicCallFoldsEagerly, intrinsicTagFolds, } from "./host.js";
11
+ import { isFoldableHelperName } from "./foldable-helpers.js";
12
+ import { isLiteralKey, isLiteralElementKey, isUnclaimedCallee } from "./subset.js";
13
+ import { findFnBodyViolation, plainBindingKey } from "./fnbody.js";
14
+ /** A located rejection, per R9.3: the node and the rule, wording unconstrained. */
15
+ export class FoldRejection extends Error {
16
+ rule;
17
+ line;
18
+ column;
19
+ constructor(rule, line, column, message) {
20
+ super(`${line}:${column} - ${message}`);
21
+ this.rule = rule;
22
+ this.line = line;
23
+ this.column = column;
24
+ this.name = "FoldRejection";
25
+ }
26
+ }
27
+ /**
28
+ * F-Val-Callable's marker. J1 may *call* one; it is never a value. Only the
29
+ * module layer populates `externals` with these, so nothing produces one in
30
+ * this implementation yet (#21, #22).
31
+ */
32
+ export class FoldableFunction {
33
+ name;
34
+ fn;
35
+ file;
36
+ consts;
37
+ externals;
38
+ /** Set when a call returned a live object the body produced (F-CallLeak, J3). */
39
+ leakedIdentity = false;
40
+ constructor(name, fn,
41
+ /** The defining module's path, for the re-anchored reason of F-Eval-CallLocal step 7. */
42
+ file,
43
+ /** The DEFINING module's scope: a body folds there, not in the caller's (R6.6). */
44
+ consts, externals) {
45
+ this.name = name;
46
+ this.fn = fn;
47
+ this.file = file;
48
+ this.consts = consts;
49
+ this.externals = externals;
50
+ }
51
+ }
52
+ export const isFoldableFunction = (v) => v instanceof FoldableFunction;
53
+ /**
54
+ * The chain-short-circuit value of F-Eval-Member steps 3 and 4. Not a member
55
+ * of the value domain: it never escapes an optional chain.
56
+ */
57
+ const CHAIN = Symbol("chain-short-circuit");
58
+ const isChain = (v) => v === CHAIN;
59
+ /**
60
+ * F-Val-Live: carries a live object when it, or anything reachable through
61
+ * plain objects and arrays, has a prototype other than the plain ones, or is
62
+ * a function. This is F-Identity's entity test, the normative one, and the
63
+ * test F-CallLeak uses. F-Import uses the broader reference test instead, on
64
+ * purpose; F-Identity in J3 says why.
65
+ */
66
+ export function carriesLiveObject(v, seen = new Set()) {
67
+ if (v === null || typeof v !== "object")
68
+ return typeof v === "function";
69
+ if (seen.has(v))
70
+ return false;
71
+ seen.add(v);
72
+ if (isLiveObject(v))
73
+ return true;
74
+ return Object.values(v).some((inner) => carriesLiveObject(inner, seen));
75
+ }
76
+ /**
77
+ * The non-recursive half of F-Val-Live: this value *is* a live object, rather
78
+ * than a plain structure that may hold one. Revival passes these through
79
+ * unchanged (L6.1); rebuilding one would destroy the identity J3 preserves.
80
+ */
81
+ export function isLiveObject(v) {
82
+ if (typeof v === "function")
83
+ return true;
84
+ if (v === null || typeof v !== "object")
85
+ return false;
86
+ const proto = Object.getPrototypeOf(v);
87
+ return proto !== Object.prototype && proto !== Array.prototype && proto !== null;
88
+ }
89
+ /** F-Val-Envelope: a non-array object carrying one of the six keys. */
90
+ const ENVELOPE_KEYS = ["__attrRef", "__intrinsic", "__helper", "__resource", "__compositeStep", "__symbol"];
91
+ export function isEnvelope(v) {
92
+ if (typeof v !== "object" || v === null || Array.isArray(v))
93
+ return false;
94
+ return ENVELOPE_KEYS.some((k) => k in v);
95
+ }
96
+ function locate(n) {
97
+ const { line, character } = n.getSourceFile().getLineAndCharacterOfPosition(n.getStart());
98
+ return { line: line + 1, column: character + 1 };
99
+ }
100
+ function reject(rule, n, message) {
101
+ const { line, column } = locate(n);
102
+ throw new FoldRejection(rule, line, column, message);
103
+ }
104
+ /** True when this access is itself part of an optional chain, so a sentinel propagates. */
105
+ function continuesChain(n) {
106
+ const parent = n.parent;
107
+ if (parent === undefined)
108
+ return false;
109
+ if (ts.isNonNullExpression(parent) && ts.isOptionalChain(parent))
110
+ return continuesChain(parent);
111
+ return ((ts.isPropertyAccessExpression(parent) || ts.isElementAccessExpression(parent) || ts.isCallExpression(parent)) &&
112
+ parent.expression === n &&
113
+ ts.isOptionalChain(parent));
114
+ }
115
+ /** True when `n` is a const whose initializer is a `new` expression (F-Eval-Ident step 1, F-Eval-Member step 1). */
116
+ const boundToNew = (scope, name) => {
117
+ const init = scope.consts.get(name);
118
+ return init !== undefined && ts.isNewExpression(init);
119
+ };
120
+ /**
121
+ * F-Eval-Interior. Inside an intrinsic's interior an identifier, or a
122
+ * `.`/`[]`/`!` chain rooted at one, that is not `undefined` and resolves in
123
+ * neither consts nor externals folds to `{__symbol}` instead of rejecting.
124
+ */
125
+ function isUnresolvedChain(n, scope) {
126
+ if (ts.isIdentifier(n))
127
+ return n.text !== "undefined" && !scope.consts.has(n.text) && !scope.externals.has(n.text);
128
+ if (ts.isPropertyAccessExpression(n) || ts.isElementAccessExpression(n) || ts.isNonNullExpression(n)) {
129
+ return isUnresolvedChain(n.expression, scope);
130
+ }
131
+ return false;
132
+ }
133
+ function foldInterior(n, scope, host) {
134
+ if (isUnresolvedChain(n, scope))
135
+ return { __symbol: n.getText() };
136
+ return foldExpr(n, scope, host);
137
+ }
138
+ /** F-Eval-New's arity rules, per F-Val-Arity. */
139
+ function foldNew(node, scope, host) {
140
+ if (!ts.isIdentifier(node.expression)) {
141
+ reject("F-Eval-New", node, "a constructor reached through anything but a plain identifier is not foldable");
142
+ }
143
+ if (scope.depth > 0)
144
+ reject("F-Eval-New", node, "`new` inside a folded function body is not foldable");
145
+ const name = node.expression.text;
146
+ const args = node.arguments ?? [];
147
+ if (args.length === 0)
148
+ return { __resource: name, props: {} };
149
+ const folded = args.map((a) => foldExpr(a, scope, host));
150
+ const first = args[0];
151
+ if (ts.isObjectLiteralExpression(first)) {
152
+ if (args.length === 1)
153
+ return { __resource: name, props: folded[0] };
154
+ if (args.length === 2 && ts.isObjectLiteralExpression(args[1])) {
155
+ return { __resource: name, props: folded[0], attributes: folded[1] };
156
+ }
157
+ }
158
+ const propsIndex = args.findIndex((a) => ts.isObjectLiteralExpression(a));
159
+ return { __resource: name, props: propsIndex === -1 ? {} : folded[propsIndex], args: folded };
160
+ }
161
+ /** F-Eval-Member and F-Eval-Index share every step but how the key is obtained. */
162
+ function foldAccess(node, key, optional, scope, host) {
163
+ // 1. an attribute of a same-file construction is a reference by NAME
164
+ if (ts.isIdentifier(node.expression) && boundToNew(scope, node.expression.text)) {
165
+ return { __attrRef: { entity: node.expression.text, attribute: key } };
166
+ }
167
+ // 2. S-CompositeStep, handled by the caller for property access only
168
+ // 3. sentinel propagation
169
+ const object = foldExpr(node.expression, scope, host);
170
+ if (isChain(object))
171
+ return continuesChain(node) ? CHAIN : undefined;
172
+ // 4. nullish
173
+ if (object === null || object === undefined) {
174
+ if (optional)
175
+ return continuesChain(node) ? CHAIN : undefined;
176
+ reject("F-Eval-Member", node, `property "${key}" read on ${String(object)} is not foldable: running this expression throws. Write \`?.\` if the value is genuinely optional`);
177
+ }
178
+ // 5. an attribute read on a construction used as a value
179
+ if (isEnvelope(object) && "__resource" in object) {
180
+ if (ts.isIdentifier(node.expression))
181
+ return { __attrRef: { entity: node.expression.text, attribute: key } };
182
+ reject("F-Eval-Member", node, `attribute "${key}" read on an inline construction has no name to reference it by`);
183
+ }
184
+ // 6. a plain index
185
+ return object[key];
186
+ }
187
+ /** The depth bound of F-Eval-CallLocal step 2, stated per F-Depth. */
188
+ export const MAX_CALL_DEPTH = 32;
189
+ /** F-Eval-CallLocal: evaluate a call to a project-local function, seven steps. */
190
+ function callLocal(callee, node, scope, host) {
191
+ const label = `call to "${callee.name}" (${callee.file})`;
192
+ // 1. the declaration must satisfy S-FnBody
193
+ const violation = findFnBodyViolation(callee.fn);
194
+ if (violation)
195
+ reject("F-Eval-CallLocal", node, `${label} is not foldable: ${violation}`);
196
+ // 2. depth bound
197
+ if (scope.depth >= MAX_CALL_DEPTH)
198
+ reject("F-Eval-CallLocal", node, `${label} is not foldable: call depth exceeded`);
199
+ // 3. arguments fold in the CALLER's scope; a spread argument rejects
200
+ const args = [];
201
+ for (const a of node.arguments) {
202
+ if (ts.isSpreadElement(a))
203
+ reject("F-Eval-CallLocal", node, `${label} is not foldable: a spread argument is not foldable`);
204
+ args.push(foldExpr(a, scope, host));
205
+ }
206
+ // 4. the body folds in the DEFINING module's scope, parameters bound on top
207
+ const consts = new Map(callee.consts);
208
+ const externals = new Map(callee.externals);
209
+ const bind = (n, v) => { consts.delete(n); externals.set(n, v); };
210
+ const inner = { consts, externals, depth: scope.depth + 1 };
211
+ callee.fn.parameters.forEach((param, i) => {
212
+ let value = args[i];
213
+ if (value === undefined && param.initializer)
214
+ value = foldExpr(param.initializer, inner, host);
215
+ if (ts.isIdentifier(param.name)) {
216
+ bind(param.name.text, value);
217
+ return;
218
+ }
219
+ if (value === null || typeof value !== "object") {
220
+ reject("F-Eval-CallLocal", node, `${label} is not foldable: a destructured parameter's argument is not an object`);
221
+ }
222
+ for (const el of param.name.elements) {
223
+ bind(el.name.text, value[plainBindingKey(el)]);
224
+ }
225
+ });
226
+ // 5. a concise body is its expression; a block folds its consts then returns
227
+ let result;
228
+ try {
229
+ const body = callee.fn.body;
230
+ if (!ts.isBlock(body)) {
231
+ result = foldExpr(body, inner, host);
232
+ }
233
+ else {
234
+ result = undefined;
235
+ for (const st of body.statements) {
236
+ if (ts.isReturnStatement(st)) {
237
+ result = st.expression ? foldExpr(st.expression, inner, host) : undefined;
238
+ break;
239
+ }
240
+ for (const d of st.declarationList.declarations) {
241
+ const v = foldExpr(d.initializer, inner, host);
242
+ if (ts.isIdentifier(d.name))
243
+ bind(d.name.text, v);
244
+ else {
245
+ if (v === null || typeof v !== "object")
246
+ reject("F-Eval-CallLocal", node, `${label} is not foldable: a destructured const's source is not an object`);
247
+ for (const el of d.name.elements) {
248
+ bind(el.name.text, v[plainBindingKey(el)]);
249
+ }
250
+ }
251
+ }
252
+ }
253
+ }
254
+ }
255
+ catch (e) {
256
+ // 7. re-anchor a failure inside the body at the call site
257
+ if (e instanceof FoldRejection) {
258
+ reject(e.rule, node, `${label} is not foldable: ${callee.file}:${e.line}:${e.column} - ${e.message.replace(/^\d+:\d+ - /, "")}`);
259
+ }
260
+ throw e;
261
+ }
262
+ // 6. a live object the body produced, that no argument carried, leaks identity
263
+ if (carriesLiveObject(result) && !args.some((a) => carriesLiveObject(a))) {
264
+ callee.leakedIdentity = true;
265
+ scope.captures?.add(callee.file);
266
+ }
267
+ return result;
268
+ }
269
+ /** Γ, H ⊢ e ⇓ v. */
270
+ export function foldExpr(node, scope, host) {
271
+ const F = (n) => foldExpr(n, scope, host);
272
+ // F-Eval-Unwrap
273
+ if (ts.isParenthesizedExpression(node) ||
274
+ ts.isAsExpression(node) ||
275
+ ts.isSatisfiesExpression(node) ||
276
+ ts.isNonNullExpression(node)) {
277
+ const inner = F(node.expression);
278
+ if (isChain(inner))
279
+ return continuesChain(node) ? CHAIN : undefined;
280
+ return inner;
281
+ }
282
+ // F-Eval-Function
283
+ if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {
284
+ reject("F-Eval-Function", node, "a function used as a value is not foldable");
285
+ }
286
+ // F-Eval-Literal
287
+ if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node))
288
+ return node.text;
289
+ if (ts.isNumericLiteral(node))
290
+ return Number(node.text);
291
+ if (node.kind === ts.SyntaxKind.TrueKeyword)
292
+ return true;
293
+ if (node.kind === ts.SyntaxKind.FalseKeyword)
294
+ return false;
295
+ if (node.kind === ts.SyntaxKind.NullKeyword)
296
+ return null;
297
+ // F-Eval-Ident, in the order the rule gives
298
+ if (ts.isIdentifier(node)) {
299
+ const name = node.text;
300
+ if (name === "undefined")
301
+ return undefined; // F-Eval-Undefined
302
+ if (scope.consts.has(name)) {
303
+ if (boundToNew(scope, name)) {
304
+ if (scope.externals.has(name))
305
+ return scope.externals.get(name);
306
+ reject("F-Eval-Ident", node, `same-file construction \`${name}\` used as a value is not foldable: folding it again would build a second one`);
307
+ }
308
+ return F(scope.consts.get(name));
309
+ }
310
+ if (scope.externals.has(name)) {
311
+ const value = scope.externals.get(name);
312
+ // F-Eval-Ident step 3, F-Val-Callable (#69): a callable of any kind is
313
+ // reached by the form that invokes it, never as a value.
314
+ if (isFoldableFunction(value))
315
+ reject("F-Eval-Ident", node, `function "${name}" used as a value is not foldable`);
316
+ if (typeof value === "function") {
317
+ const eager = host.intrinsics.some((i) => i.name === name && intrinsicCallFoldsEagerly(i));
318
+ reject("F-Eval-Ident", node, `function "${name}" used as a value is not foldable${eager ? ": call it instead" : ""}`);
319
+ }
320
+ return value;
321
+ }
322
+ if (name === "process") {
323
+ reject("F-Eval-Ident", node, 'ambient "process" read is not foldable: declare a build-time parameter and reference it instead');
324
+ }
325
+ reject("F-Eval-Ident", node, `unresolved identifier: ${name}`);
326
+ }
327
+ // F-Eval-Tagged
328
+ if (ts.isTaggedTemplateExpression(node)) {
329
+ if (scope.depth > 0)
330
+ reject("F-Eval-Tagged", node, "a tagged template inside a folded function body is not foldable");
331
+ const tag = node.tag.getText();
332
+ if (!host.intrinsics.some((i) => i.name === tag && intrinsicTagFolds(i))) {
333
+ reject("F-Eval-Tagged", node, `unregistered tagged template intrinsic: ${tag}`);
334
+ }
335
+ const t = node.template;
336
+ if (ts.isNoSubstitutionTemplateLiteral(t))
337
+ return { __intrinsic: tag, strings: [t.text], values: [] };
338
+ return {
339
+ __intrinsic: tag,
340
+ strings: [t.head.text, ...t.templateSpans.map((s) => s.literal.text)],
341
+ values: t.templateSpans.map((s) => foldInterior(s.expression, scope, host)),
342
+ };
343
+ }
344
+ // F-Eval-Template
345
+ if (ts.isTemplateExpression(node)) {
346
+ let out = node.head.text;
347
+ for (const span of node.templateSpans) {
348
+ const value = F(span.expression);
349
+ if (isEnvelope(value)) {
350
+ reject("F-Eval-Template", span.expression, "a symbolic value interpolated into a plain template literal is not foldable: it has no string form until the build resolves it");
351
+ }
352
+ out += String(value) + span.literal.text;
353
+ }
354
+ return out;
355
+ }
356
+ // F-Eval-Object
357
+ if (ts.isObjectLiteralExpression(node)) {
358
+ const out = {};
359
+ for (const member of node.properties) {
360
+ if (ts.isPropertyAssignment(member)) {
361
+ if (!isLiteralKey(member.name))
362
+ reject("F-Eval-Object", member.name, "computed or dynamic property name");
363
+ out[member.name.text] = F(member.initializer);
364
+ }
365
+ else if (ts.isShorthandPropertyAssignment(member)) {
366
+ out[member.name.text] = F(member.name);
367
+ }
368
+ else if (ts.isSpreadAssignment(member)) {
369
+ const source = F(member.expression);
370
+ if (source === null || typeof source !== "object") {
371
+ reject("F-Eval-Object", member, "spread source is not an object");
372
+ }
373
+ Object.assign(out, source);
374
+ }
375
+ else {
376
+ reject("F-Eval-Object", member, "unsupported object member");
377
+ }
378
+ }
379
+ return out;
380
+ }
381
+ // F-Eval-Array
382
+ if (ts.isArrayLiteralExpression(node)) {
383
+ const out = [];
384
+ for (const el of node.elements) {
385
+ if (ts.isSpreadElement(el)) {
386
+ const source = F(el.expression);
387
+ if (!Array.isArray(source))
388
+ reject("F-Eval-Array", el, "spread source is not an array");
389
+ out.push(...source);
390
+ }
391
+ else {
392
+ out.push(F(el));
393
+ }
394
+ }
395
+ return out;
396
+ }
397
+ // F-Eval-Member, with step 2 checked before the object is folded
398
+ if (ts.isPropertyAccessExpression(node)) {
399
+ if (node.name.text === "step" && ts.isCallExpression(node.expression) && isUnclaimedCallee(node.expression, host.intrinsics)) {
400
+ if (scope.depth > 0)
401
+ reject("F-Eval-Member", node, "a composite step inside a folded function body is not foldable");
402
+ const call = node.expression;
403
+ return {
404
+ __compositeStep: call.expression.text,
405
+ args: call.arguments.map((a) => F(a)),
406
+ };
407
+ }
408
+ return foldAccess(node, node.name.text, node.questionDotToken !== undefined, scope, host);
409
+ }
410
+ // F-Eval-Index
411
+ if (ts.isElementAccessExpression(node)) {
412
+ const key = node.argumentExpression;
413
+ if (!isLiteralElementKey(key)) {
414
+ reject("F-Eval-Index", key, "element-access key must be a string or numeric literal");
415
+ }
416
+ return foldAccess(node, key.text, node.questionDotToken !== undefined, scope, host);
417
+ }
418
+ // F-Eval-Unary
419
+ if (ts.isPrefixUnaryExpression(node)) {
420
+ if (node.operator === ts.SyntaxKind.ExclamationToken)
421
+ return !F(node.operand);
422
+ if (node.operator === ts.SyntaxKind.MinusToken)
423
+ return -Number(F(node.operand));
424
+ reject("F-Eval-Unary", node, `unsupported unary operator: ${ts.SyntaxKind[node.operator]}`);
425
+ }
426
+ // F-Eval-Binary
427
+ if (ts.isBinaryExpression(node)) {
428
+ const K = ts.SyntaxKind;
429
+ const op = node.operatorToken.kind;
430
+ if (op === K.AmpersandAmpersandToken) {
431
+ const left = F(node.left);
432
+ return left ? F(node.right) : left;
433
+ }
434
+ if (op === K.BarBarToken) {
435
+ const left = F(node.left);
436
+ return left ? left : F(node.right);
437
+ }
438
+ if (op === K.QuestionQuestionToken) {
439
+ const left = F(node.left);
440
+ return left === null || left === undefined ? F(node.right) : left;
441
+ }
442
+ const l = F(node.left);
443
+ const r = F(node.right);
444
+ switch (op) {
445
+ case K.PlusToken: return l + r;
446
+ case K.MinusToken: return l - r;
447
+ case K.AsteriskToken: return l * r;
448
+ case K.SlashToken: return l / r;
449
+ case K.EqualsEqualsEqualsToken: return l === r;
450
+ case K.ExclamationEqualsEqualsToken: return l !== r;
451
+ case K.GreaterThanToken: return l > r;
452
+ case K.LessThanToken: return l < r;
453
+ case K.GreaterThanEqualsToken: return l >= r;
454
+ case K.LessThanEqualsToken: return l <= r;
455
+ default: reject("F-Eval-Binary", node, `unsupported binary operator: ${K[op]}`);
456
+ }
457
+ }
458
+ // F-Eval-Conditional
459
+ if (ts.isConditionalExpression(node))
460
+ return F(node.condition) ? F(node.whenTrue) : F(node.whenFalse);
461
+ // F-Eval-New
462
+ if (ts.isNewExpression(node))
463
+ return foldNew(node, scope, host);
464
+ // F-Eval-Call*: helper, intrinsic, local, eager, method, in that order
465
+ if (ts.isCallExpression(node)) {
466
+ const callee = node.expression;
467
+ if (ts.isIdentifier(callee) && !scope.consts.has(callee.text)) {
468
+ const name = callee.text;
469
+ // F-Eval-CallHelper
470
+ if (isFoldableHelperName(name)) {
471
+ if (scope.depth > 0)
472
+ reject("F-Eval-CallHelper", node, "an authoring helper call inside a folded function body is not foldable");
473
+ return { __helper: name, args: node.arguments.map((a) => F(a)) };
474
+ }
475
+ // F-Eval-CallIntrinsic
476
+ if (host.intrinsics.some((i) => i.name === name && intrinsicCallFolds(i))) {
477
+ if (scope.depth > 0)
478
+ reject("F-Eval-CallIntrinsic", node, "an intrinsic call inside a folded function body is not foldable");
479
+ return { __intrinsic: name, args: node.arguments.map((a) => foldInterior(a, scope, host)) };
480
+ }
481
+ // F-Eval-CallLocal, after the two registered shapes
482
+ const local = scope.externals.get(name);
483
+ if (isFoldableFunction(local))
484
+ return callLocal(local, node, scope, host);
485
+ // F-Eval-CallEager
486
+ if (host.intrinsics.some((i) => i.name === name && intrinsicCallFoldsEagerly(i))) {
487
+ if (typeof local !== "function")
488
+ reject("F-Eval-CallEager", node, `"${name}" did not resolve to a function`);
489
+ return local(...node.arguments.map((a) => F(a)));
490
+ }
491
+ }
492
+ // F-Eval-CallMethod
493
+ if (ts.isPropertyAccessExpression(callee)) {
494
+ const method = callee.name.text;
495
+ const receiver = F(callee.expression);
496
+ if (isChain(receiver))
497
+ return continuesChain(node) ? CHAIN : undefined;
498
+ if (receiver === null || receiver === undefined) {
499
+ if (callee.questionDotToken)
500
+ return continuesChain(node) ? CHAIN : undefined;
501
+ reject("F-Eval-CallMethod", node, `cannot call ".${method}(...)" on ${String(receiver)}`);
502
+ }
503
+ if (isEnvelope(receiver)) {
504
+ reject("F-Eval-CallMethod", node, `a method call on a symbolic value is not foldable`);
505
+ }
506
+ const fn = receiver[method];
507
+ if (typeof fn !== "function")
508
+ reject("F-Eval-CallMethod", node, `"${method}" is not a callable method on the folded value`);
509
+ return fn.apply(receiver, node.arguments.map((a) => F(a)));
510
+ }
511
+ reject("F-Eval-Reject", node, "function call as a value is not foldable");
512
+ }
513
+ // F-Eval-Reject
514
+ reject("F-Eval-Reject", node, `unsupported expression: ${ts.SyntaxKind[node.kind]}`);
515
+ }
516
+ /** F-Bind: a top-level `const` with an identifier name and an initializer. */
517
+ export function collectConsts(sf) {
518
+ const out = new Map();
519
+ for (const st of sf.statements) {
520
+ if (!ts.isVariableStatement(st))
521
+ continue;
522
+ if ((st.declarationList.flags & ts.NodeFlags.Const) === 0)
523
+ continue;
524
+ for (const d of st.declarationList.declarations) {
525
+ // A const bound to a function is a project-local function, not a value
526
+ // (S-LocalFunction, F-Bind): it binds through collectLocalFunctions.
527
+ if (ts.isIdentifier(d.name) && d.initializer && !isFunctionInitializer(d.initializer))
528
+ out.set(d.name.text, d.initializer);
529
+ }
530
+ }
531
+ return out;
532
+ }
533
+ const isFunctionInitializer = (e) => ts.isArrowFunction(e) || ts.isFunctionExpression(e);
534
+ /**
535
+ * S-LocalFunction, F-Bind: every top-level `function` declaration, exported or
536
+ * not, and every top-level `const` bound to an arrow or function expression,
537
+ * as `FoldableFunction` markers for the file's own scope. A call reaches
538
+ * F-Eval-CallLocal; a use as a value is F-Eval-Ident step 3's rejection. The
539
+ * body is judged by S-FnBody at the call, never here (spec 1.2, #95).
540
+ */
541
+ export function collectLocalFunctions(sf, file, consts, externals) {
542
+ const out = [];
543
+ for (const st of sf.statements) {
544
+ if (ts.isFunctionDeclaration(st) && st.name && st.body && !st.modifiers?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword)) {
545
+ out.push(new FoldableFunction(st.name.text, st, file, consts, externals));
546
+ continue;
547
+ }
548
+ if (!ts.isVariableStatement(st) || (st.declarationList.flags & ts.NodeFlags.Const) === 0)
549
+ continue;
550
+ for (const d of st.declarationList.declarations) {
551
+ if (ts.isIdentifier(d.name) && d.initializer && isFunctionInitializer(d.initializer)) {
552
+ out.push(new FoldableFunction(d.name.text, d.initializer, file, consts, externals));
553
+ }
554
+ }
555
+ }
556
+ return out;
557
+ }
558
+ //# sourceMappingURL=fold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold.js","sourceRoot":"","sources":["../src/fold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The authoring-helper allowlist and the owned-specifier prefixes, the two
3
+ * host-installed lists F-Host-Interface items 4 and 5 name. Written from
4
+ * hosts.md (#50); the reference ships neither list.
5
+ */
6
+ export interface FoldableHelperDef {
7
+ readonly name: string;
8
+ /** Where the host defines it, for the audit trail F-Host-Admission asks for. */
9
+ readonly module: string;
10
+ /** Why it satisfies F-Host-Admission: pure, deterministic, same at fold time as at run time. */
11
+ readonly note: string;
12
+ }
13
+ export declare function registerHelpers(defs: readonly FoldableHelperDef[]): void;
14
+ export declare const FOLDABLE_AUTHORING_HELPERS: readonly FoldableHelperDef[];
15
+ /**
16
+ * The name half of F-Eval-CallHelper. Provenance, that the name is bound by
17
+ * an import from the host, is revival's question (F-Div-Provenance).
18
+ */
19
+ export declare function isFoldableHelperName(name: string): boolean;
20
+ export declare function registerHostSpecifiers(prefixes: readonly string[]): void;
21
+ /** F-Host-Trust arm 1, the text-matched half. */
22
+ export declare function isHostOwnedSpecifier(specifier: string): boolean;
23
+ //# sourceMappingURL=foldable-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foldable-helpers.d.ts","sourceRoot":"","sources":["../src/foldable-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI,CAIxE;AACD,eAAO,MAAM,0BAA0B,EAAE,SAAS,iBAAiB,EAAY,CAAC;AAEhF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAGD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAExE;AACD,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/D"}
@@ -0,0 +1,25 @@
1
+ const HELPERS = [];
2
+ const HELPER_NAMES = new Set();
3
+ export function registerHelpers(defs) {
4
+ HELPERS.splice(0, HELPERS.length, ...defs);
5
+ HELPER_NAMES.clear();
6
+ for (const d of defs)
7
+ HELPER_NAMES.add(d.name);
8
+ }
9
+ export const FOLDABLE_AUTHORING_HELPERS = HELPERS;
10
+ /**
11
+ * The name half of F-Eval-CallHelper. Provenance, that the name is bound by
12
+ * an import from the host, is revival's question (F-Div-Provenance).
13
+ */
14
+ export function isFoldableHelperName(name) {
15
+ return HELPER_NAMES.has(name);
16
+ }
17
+ const HOST_PACKAGE_SPECIFIERS = [];
18
+ export function registerHostSpecifiers(prefixes) {
19
+ HOST_PACKAGE_SPECIFIERS.splice(0, HOST_PACKAGE_SPECIFIERS.length, ...prefixes);
20
+ }
21
+ /** F-Host-Trust arm 1, the text-matched half. */
22
+ export function isHostOwnedSpecifier(specifier) {
23
+ return HOST_PACKAGE_SPECIFIERS.some((p) => specifier === p || specifier.startsWith(p.endsWith("-") ? p : `${p}/`));
24
+ }
25
+ //# sourceMappingURL=foldable-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foldable-helpers.js","sourceRoot":"","sources":["../src/foldable-helpers.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,GAAwB,EAAE,CAAC;AACxC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;AACvC,MAAM,UAAU,eAAe,CAAC,IAAkC;IAChE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AACD,MAAM,CAAC,MAAM,0BAA0B,GAAiC,OAAO,CAAC;AAEhF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,uBAAuB,GAAa,EAAE,CAAC;AAC7C,MAAM,UAAU,sBAAsB,CAAC,QAA2B;IAChE,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,uBAAuB,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;AACjF,CAAC;AACD,iDAAiD;AACjD,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrH,CAAC"}