@elaraai/east 1.0.67 → 1.0.69

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 (79) hide show
  1. package/dist/src/ast.d.ts +2 -0
  2. package/dist/src/ast.d.ts.map +1 -1
  3. package/dist/src/ast_to_ir.d.ts +7 -3
  4. package/dist/src/ast_to_ir.d.ts.map +1 -1
  5. package/dist/src/ast_to_ir.js +62 -15
  6. package/dist/src/ast_to_ir.js.map +1 -1
  7. package/dist/src/codegen/codegen.spec.d.ts +6 -0
  8. package/dist/src/codegen/codegen.spec.d.ts.map +1 -0
  9. package/dist/src/codegen/codegen.spec.js +763 -0
  10. package/dist/src/codegen/codegen.spec.js.map +1 -0
  11. package/dist/src/codegen/doc.d.ts +111 -0
  12. package/dist/src/codegen/doc.d.ts.map +1 -0
  13. package/dist/src/codegen/doc.js +350 -0
  14. package/dist/src/codegen/doc.js.map +1 -0
  15. package/dist/src/codegen/doc.spec.d.ts +6 -0
  16. package/dist/src/codegen/doc.spec.d.ts.map +1 -0
  17. package/dist/src/codegen/doc.spec.js +86 -0
  18. package/dist/src/codegen/doc.spec.js.map +1 -0
  19. package/dist/src/codegen/index.d.ts +15 -0
  20. package/dist/src/codegen/index.d.ts.map +1 -0
  21. package/dist/src/codegen/index.js +15 -0
  22. package/dist/src/codegen/index.js.map +1 -0
  23. package/dist/src/codegen/printer.d.ts +63 -0
  24. package/dist/src/codegen/printer.d.ts.map +1 -0
  25. package/dist/src/codegen/printer.js +1529 -0
  26. package/dist/src/codegen/printer.js.map +1 -0
  27. package/dist/src/codegen/spellings.d.ts +73 -0
  28. package/dist/src/codegen/spellings.d.ts.map +1 -0
  29. package/dist/src/codegen/spellings.js +298 -0
  30. package/dist/src/codegen/spellings.js.map +1 -0
  31. package/dist/src/codegen/spellings.spec.d.ts +6 -0
  32. package/dist/src/codegen/spellings.spec.d.ts.map +1 -0
  33. package/dist/src/codegen/spellings.spec.js +191 -0
  34. package/dist/src/codegen/spellings.spec.js.map +1 -0
  35. package/dist/src/codegen/types.d.ts +67 -0
  36. package/dist/src/codegen/types.d.ts.map +1 -0
  37. package/dist/src/codegen/types.js +173 -0
  38. package/dist/src/codegen/types.js.map +1 -0
  39. package/dist/src/compile.js +10 -10
  40. package/dist/src/compile.js.map +1 -1
  41. package/dist/src/expr/block.d.ts +148 -0
  42. package/dist/src/expr/block.d.ts.map +1 -1
  43. package/dist/src/expr/block.js +168 -4
  44. package/dist/src/expr/block.js.map +1 -1
  45. package/dist/src/expr/index.d.ts +155 -2
  46. package/dist/src/expr/index.d.ts.map +1 -1
  47. package/dist/src/expr/index.js +155 -2
  48. package/dist/src/expr/index.js.map +1 -1
  49. package/dist/src/functions.crossimport.spec.d.ts +6 -0
  50. package/dist/src/functions.crossimport.spec.d.ts.map +1 -0
  51. package/dist/src/functions.crossimport.spec.js +45 -0
  52. package/dist/src/functions.crossimport.spec.js.map +1 -0
  53. package/dist/src/functions.d.ts +4103 -0
  54. package/dist/src/functions.d.ts.map +1 -0
  55. package/dist/src/functions.js +443 -0
  56. package/dist/src/functions.js.map +1 -0
  57. package/dist/src/functions.spec.d.ts +6 -0
  58. package/dist/src/functions.spec.d.ts.map +1 -0
  59. package/dist/src/functions.spec.js +123 -0
  60. package/dist/src/functions.spec.js.map +1 -0
  61. package/dist/src/index.d.ts +2 -0
  62. package/dist/src/index.d.ts.map +1 -1
  63. package/dist/src/index.js +2 -0
  64. package/dist/src/index.js.map +1 -1
  65. package/dist/src/naming.d.ts +50 -0
  66. package/dist/src/naming.d.ts.map +1 -0
  67. package/dist/src/naming.js +194 -0
  68. package/dist/src/naming.js.map +1 -0
  69. package/dist/src/naming.spec.d.ts +6 -0
  70. package/dist/src/naming.spec.d.ts.map +1 -0
  71. package/dist/src/naming.spec.js +154 -0
  72. package/dist/src/naming.spec.js.map +1 -0
  73. package/dist/src/serialization/beast2/index.spec.js +25 -0
  74. package/dist/src/serialization/beast2/index.spec.js.map +1 -1
  75. package/dist/src/serialization/beast2/shared.d.ts +1 -1
  76. package/dist/src/serialization/beast2/shared.d.ts.map +1 -1
  77. package/dist/src/serialization/beast2/shared.js +9 -1
  78. package/dist/src/serialization/beast2/shared.js.map +1 -1
  79. package/package.json +11 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../src/functions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9K,OAAO,EAAmD,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAU,KAAK,EAAE,EAA2E,MAAM,SAAS,CAAC;AAMnH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGzE,2EAA2E;AAC3E,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQjC,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK7B,CAAC;AAEH,uGAAuG;AACvG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
@@ -0,0 +1,443 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Cross-language East functions (#628): export, import, link.
7
+ *
8
+ * A function authored in one host language is exported as pure IR — its
9
+ * `Function` node, the declared `FunctionType`, and the platform functions
10
+ * it calls — in a **function manifest** (`FunctionManifestType`, one beast2
11
+ * value per package). Code in the other language refers to it with
12
+ * `East.importFunction(package, name, type)`: a typed, callable function
13
+ * expression whose IR is a `Platform` node named {@link IMPORT_PLATFORM}
14
+ * carrying the package and function names — no new IR node kind, and loud
15
+ * if it ever reaches a compiler unresolved. `linkImports` resolves every
16
+ * such node against the manifests: the declared type must equal the
17
+ * exported type exactly, and the exported IR is embedded as a `Let`-bound
18
+ * constant at the top of the importing function's body (nested uses
19
+ * capture it), so the linked program is self-contained IR that runs on any
20
+ * runner. The python twin is `east.functions` (`East.export_functions`,
21
+ * `East.import_function`, `East.link_imports`).
22
+ *
23
+ * @packageDocumentation
24
+ */
25
+ import { ArrayType, BooleanType, NullType, OptionType, StringType, StructType } from "./types.js";
26
+ import { EastTypeType, isTypeValueEqual, toEastTypeValue } from "./type_of_type.js";
27
+ import { IRType } from "./ir.js";
28
+ import { walkIR, literalValueOf } from "./walker.js";
29
+ import { variant, some, none } from "./containers/variant.js";
30
+ import { printTypeValue } from "./compile.js";
31
+ import { encodeBeast2For, decodeBeast2For } from "./serialization/beast2/index.js";
32
+ import { Expr } from "./expr/expr.js";
33
+ import { get_location_id } from "./location.js";
34
+ /** The platform name an unresolved `East.importFunction` carries in IR. */
35
+ export const IMPORT_PLATFORM = "east.importFunction";
36
+ /**
37
+ * One platform function an exported function calls: its name and
38
+ * signature as the IR emits them, and — when the exporter could tell —
39
+ * the platform package that implements it (`provider`).
40
+ *
41
+ * Fields are declared alphabetically in both languages so the wire layout
42
+ * cannot depend on declaration order.
43
+ */
44
+ export const PlatformDependencyType = StructType({
45
+ async: BooleanType,
46
+ inputs: ArrayType(EastTypeType),
47
+ name: StringType,
48
+ optional: BooleanType,
49
+ output: EastTypeType,
50
+ provider: OptionType(StringType),
51
+ type_parameters: ArrayType(EastTypeType),
52
+ });
53
+ /** One exported function: its IR, declared type, and platform dependencies. */
54
+ export const FunctionExportType = StructType({
55
+ ir: IRType,
56
+ name: StringType,
57
+ platforms: ArrayType(PlatformDependencyType),
58
+ type: EastTypeType,
59
+ });
60
+ /** A package's exported functions — what `east-py export-functions` / `East.exportFunctions` write. */
61
+ export const FunctionManifestType = StructType({
62
+ functions: ArrayType(FunctionExportType),
63
+ package: StringType,
64
+ version: StringType,
65
+ });
66
+ // ── the IR behind a function ────────────────────────────────────────────────
67
+ /**
68
+ * The IR value behind an `East.function` result, an `EastIR` bundle, or an
69
+ * IR value: what every function-level API here takes.
70
+ *
71
+ * @param fnOrIr - A built function expression, its `toIR()`, or an IR node
72
+ * @returns The IR node
73
+ * @throws {TypeError} For anything else
74
+ */
75
+ export function functionIR(fnOrIr) {
76
+ if (fnOrIr instanceof Expr) {
77
+ const toIR = fnOrIr.toIR;
78
+ if (typeof toIR !== "function")
79
+ throw new TypeError("expected a function expression, not a plain expression");
80
+ return toIR.call(fnOrIr).ir;
81
+ }
82
+ const v = fnOrIr;
83
+ if (v !== null && typeof v === "object" && v.ir !== undefined && typeof v.ir.type === "string") {
84
+ return v.ir; // an EastIR / AsyncEastIR
85
+ }
86
+ if (v !== null && typeof v === "object" && typeof v.type === "string" && "value" in v) {
87
+ return v;
88
+ }
89
+ throw new TypeError("expected an East.function result, an EastIR, or an IR value");
90
+ }
91
+ /**
92
+ * The `Function` / `AsyncFunction` node of a function's IR: the root, or the
93
+ * last statement of the `Block[Let…, Function]` a python build with hoisted
94
+ * constants emits.
95
+ */
96
+ function rootFunction(ir, what) {
97
+ let root = ir;
98
+ if (root.type === "Block") {
99
+ const statements = root.value.statements;
100
+ root = statements[statements.length - 1];
101
+ }
102
+ if (root.type !== "Function" && root.type !== "AsyncFunction") {
103
+ throw new Error(`${what}: expected a function's IR, got a ${ir.type} node`);
104
+ }
105
+ return root;
106
+ }
107
+ // ── platform dependencies ───────────────────────────────────────────────────
108
+ /**
109
+ * The platform functions an IR calls, in first-use order — the name,
110
+ * signature and asyncness each `Platform` node carries. Unresolved imports
111
+ * ({@link IMPORT_PLATFORM}) are not dependencies and are skipped.
112
+ *
113
+ * @param fnOrIr - A function expression, its `toIR()`, or an IR value
114
+ * @param providers - Platform name → the package that implements it, when known
115
+ * @returns The dependencies
116
+ */
117
+ export function platformDependencies(fnOrIr, providers = {}) {
118
+ const ir = functionIR(fnOrIr);
119
+ const seen = new Map();
120
+ walkIR(ir, node => {
121
+ if (node.type !== "Platform")
122
+ return;
123
+ const p = node.value;
124
+ if (p.name === IMPORT_PLATFORM || seen.has(p.name))
125
+ return;
126
+ const provider = Object.prototype.hasOwnProperty.call(providers, p.name) ? some(providers[p.name]) : none;
127
+ seen.set(p.name, {
128
+ async: p.async,
129
+ inputs: p.arguments.map(a => a.value.type),
130
+ name: p.name,
131
+ optional: p.optional,
132
+ output: p.type,
133
+ provider,
134
+ type_parameters: [...p.type_parameters],
135
+ });
136
+ });
137
+ return [...seen.values()];
138
+ }
139
+ /**
140
+ * Builds a package's function manifest from its named functions.
141
+ *
142
+ * Every function exports as a closed value: a function with captures (a
143
+ * closure over the enclosing body) is rejected, as is one that itself holds
144
+ * an unresolved import — link before exporting; v1 does not chain. The
145
+ * exported IR carries no location ids (a manifest has no source map).
146
+ *
147
+ * @param pkg - The exporting package's name (what importers name)
148
+ * @param version - Its version
149
+ * @param functions - Name → `East.function` result, `EastIR`, or IR value
150
+ * @param options - Platform providers to record
151
+ * @returns The manifest value (encode it with {@link encodeFunctionManifest})
152
+ * @throws {Error} For a function that is not a closed value
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * const double = East.function([IntegerType], IntegerType, ($, x) => x.multiply(2n));
157
+ * const manifest = East.exportFunctions("maths", "1.0.0", { double });
158
+ * writeFileSync("maths.functions.beast2", East.encodeFunctionManifest(manifest));
159
+ * ```
160
+ */
161
+ export function exportFunctions(pkg, version, functions, options = {}) {
162
+ if (!pkg)
163
+ throw new Error("exportFunctions: the package name is empty");
164
+ const exports = [];
165
+ for (const name of Object.keys(functions).sort()) {
166
+ const ir = functionIR(functions[name]);
167
+ const root = rootFunction(ir, `exportFunctions: ${name}`);
168
+ const captures = root.value.captures.map(v => v.value.name);
169
+ if (captures.length > 0) {
170
+ throw new Error(`exportFunctions: ${name} captures ${captures.join(", ")} — an exported function is a closed value; ` +
171
+ `only functions with no captures export`);
172
+ }
173
+ let imports = 0;
174
+ walkIR(ir, node => { if (node.type === "Platform" && node.value.name === IMPORT_PLATFORM)
175
+ imports += 1; });
176
+ if (imports > 0) {
177
+ throw new Error(`exportFunctions: ${name} holds ${imports} unresolved import(s) — link it (linkImports) before exporting; exports do not chain`);
178
+ }
179
+ exports.push({
180
+ ir: stripLocations(ir),
181
+ name,
182
+ platforms: platformDependencies(ir, options.providers ?? {}),
183
+ type: root.value.type,
184
+ });
185
+ }
186
+ return { functions: exports, package: pkg, version };
187
+ }
188
+ /**
189
+ * The IR with every `loc_id` zeroed. A manifest carries no source map, so
190
+ * the exporter's location ids would only collide with the importer's; an
191
+ * embedded function reports no location instead.
192
+ */
193
+ function stripLocations(ir) {
194
+ const stripped = mapChildren(ir, stripLocations);
195
+ return variant(stripped.type, { ...stripped.value, loc_id: 0n });
196
+ }
197
+ // The codec is built on first use, not at import: building a beast2 codec
198
+ // for a type that holds `IRType` assigns recursive type ids, and doing that
199
+ // while the package loads would renumber the ids every later type gets.
200
+ let manifestCodec = null;
201
+ function codec() {
202
+ manifestCodec ??= { encode: encodeBeast2For(FunctionManifestType), decode: decodeBeast2For(FunctionManifestType) };
203
+ return manifestCodec;
204
+ }
205
+ /**
206
+ * Encodes a function manifest as beast2 — the file `east-node
207
+ * export-functions` / `east-py export-functions` write and `e3 export` /
208
+ * `linkImports` read, in either language.
209
+ */
210
+ export function encodeFunctionManifest(manifest) {
211
+ return codec().encode(manifest);
212
+ }
213
+ /** Decodes a function manifest written by either language. */
214
+ export function decodeFunctionManifest(data) {
215
+ return codec().decode(data);
216
+ }
217
+ export function importFunction(pkg, name, type) {
218
+ if (type.type !== "Function" && type.type !== "AsyncFunction") {
219
+ throw new TypeError(`importFunction: ${pkg}.${name} needs a FunctionType or AsyncFunctionType, got ${type.type}`);
220
+ }
221
+ if (!pkg || !name)
222
+ throw new TypeError("importFunction: the package and function names are required");
223
+ const literal = (s) => ({ ast_type: "Value", type: StringType, loc_id: get_location_id(), value: s });
224
+ return Expr.fromAst({
225
+ ast_type: "Platform",
226
+ type,
227
+ loc_id: get_location_id(),
228
+ name: IMPORT_PLATFORM,
229
+ type_parameters: [],
230
+ arguments: [literal(pkg), literal(name)],
231
+ async: false,
232
+ optional: false,
233
+ });
234
+ }
235
+ /** The (package, name) an import node names — both must be string literals. */
236
+ function importTarget(node) {
237
+ const args = node.value.arguments;
238
+ if (args.length !== 2 || args[0].type !== "Value" || args[1].type !== "Value") {
239
+ throw new Error(`${IMPORT_PLATFORM}: the package and function names must be string literals`);
240
+ }
241
+ return { pkg: String(literalValueOf(args[0])), name: String(literalValueOf(args[1])) };
242
+ }
243
+ // ── link ────────────────────────────────────────────────────────────────────
244
+ /**
245
+ * Resolves every `East.importFunction` reference in a function's IR against
246
+ * the given manifests and embeds the exported IR.
247
+ *
248
+ * For each distinct (package, function): the manifest for the package must
249
+ * be present, the function must be in it, and the reference's declared type
250
+ * must equal the exported type exactly — each failure is an error naming the
251
+ * import (and, for a type mismatch, both types). The exported IR becomes a
252
+ * `Let`-bound constant at the top of the importing function's body; a use
253
+ * inside a nested function captures it, so the nested functions' `captures`
254
+ * are extended. The result is self-contained IR with no import left.
255
+ *
256
+ * @param fnOrIr - A function expression, its `toIR()`, or an IR value
257
+ * @param manifests - The exporting packages' manifests
258
+ * @returns The linked IR and the imports it resolved (with their platform dependencies)
259
+ * @throws {Error} For an unresolvable import or a type mismatch
260
+ */
261
+ export function linkImports(fnOrIr, manifests) {
262
+ const ir = functionIR(fnOrIr);
263
+ const byPackage = new Map();
264
+ for (const m of manifests)
265
+ byPackage.set(m.package, m);
266
+ // Which imports the IR holds, and whether any use sits inside a nested
267
+ // function (the binding is then captured).
268
+ const targets = new Map();
269
+ const keyOf = (pkg, name) => `${pkg} ${name}`;
270
+ const scan = (node, depth) => {
271
+ if (node.type === "Platform" && node.value.name === IMPORT_PLATFORM) {
272
+ const { pkg, name } = importTarget(node);
273
+ const key = keyOf(pkg, name);
274
+ const hit = targets.get(key);
275
+ if (hit === undefined) {
276
+ targets.set(key, { pkg, name, type: node.value.type, nested: depth > 0 });
277
+ }
278
+ else {
279
+ if (!isTypeValueEqual(hit.type, node.value.type)) {
280
+ throw new Error(`linkImports: ${pkg}.${name} is imported at two types — ${printTypeValue(hit.type)} and ${printTypeValue(node.value.type)}`);
281
+ }
282
+ hit.nested = hit.nested || depth > 0;
283
+ }
284
+ return;
285
+ }
286
+ const nested = node.type === "Function" || node.type === "AsyncFunction";
287
+ for (const child of children(node))
288
+ scan(child, nested ? depth + 1 : depth);
289
+ };
290
+ const root = rootFunction(ir, "linkImports");
291
+ scan(root.value.body, 0);
292
+ if (targets.size === 0)
293
+ return { ir, imports: [] };
294
+ // Resolve each against its manifest: present, named, and typed exactly.
295
+ const bindings = new Map();
296
+ const imports = [];
297
+ let index = 0;
298
+ for (const [key, target] of targets) {
299
+ const manifest = byPackage.get(target.pkg);
300
+ if (manifest === undefined) {
301
+ throw new Error(`linkImports: no function manifest for package "${target.pkg}" (imported ${target.pkg}.${target.name}) — ` +
302
+ `export it (east-py export-functions / East.exportFunctions) and pass the manifest to the linker`);
303
+ }
304
+ const exported = manifest.functions.find(f => f.name === target.name);
305
+ if (exported === undefined) {
306
+ const names = manifest.functions.map(f => f.name).join(", ") || "(none)";
307
+ throw new Error(`linkImports: package "${target.pkg}" exports no function "${target.name}" — it exports ${names}`);
308
+ }
309
+ if (!isTypeValueEqual(target.type, exported.type)) {
310
+ throw new Error(`linkImports: ${target.pkg}.${target.name} is imported as ${printTypeValue(target.type)} ` +
311
+ `but exported as ${printTypeValue(exported.type)}`);
312
+ }
313
+ const variable = variant("Variable", {
314
+ type: target.type,
315
+ name: `_import${index}_${identifier(target.pkg)}_${identifier(target.name)}`,
316
+ loc_id: 0n,
317
+ mutable: false,
318
+ captured: target.nested,
319
+ });
320
+ index += 1;
321
+ bindings.set(key, { variable, export: exported });
322
+ imports.push({ package: target.pkg, name: target.name, type: target.type, platforms: [...exported.platforms] });
323
+ }
324
+ const byVariable = new Map();
325
+ for (const b of bindings.values())
326
+ byVariable.set(b.variable.value.name, b.variable);
327
+ // Rewrite: references in place, captures on every enclosing nested function.
328
+ const rebuild = (node, captureStack) => {
329
+ if (node.type === "Platform" && node.value.name === IMPORT_PLATFORM) {
330
+ const { pkg, name } = importTarget(node);
331
+ const binding = bindings.get(keyOf(pkg, name));
332
+ for (const set of captureStack)
333
+ set.add(binding.variable.value.name);
334
+ return variant("Variable", { ...binding.variable.value, loc_id: node.value.loc_id });
335
+ }
336
+ if (node.type === "Function" || node.type === "AsyncFunction") {
337
+ const mine = new Set();
338
+ const body = rebuild(node.value.body, [...captureStack, mine]);
339
+ const extra = [...mine].map(n => byVariable.get(n));
340
+ return variant(node.type, { ...node.value, body, captures: [...node.value.captures, ...extra] });
341
+ }
342
+ return mapChildren(node, child => rebuild(child, captureStack));
343
+ };
344
+ const body = rebuild(root.value.body, []);
345
+ const lets = [...bindings.values()].map(b => variant("Let", {
346
+ type: toEastTypeValue(NullType),
347
+ loc_id: 0n,
348
+ variable: b.variable,
349
+ value: b.export.ir,
350
+ }));
351
+ const statements = body.type === "Block" ? [...lets, ...body.value.statements] : [...lets, body];
352
+ const linkedBody = variant("Block", {
353
+ type: (statements[statements.length - 1]).value.type,
354
+ loc_id: body.value.loc_id,
355
+ statements,
356
+ });
357
+ const linkedRoot = variant(root.type, { ...root.value, body: linkedBody });
358
+ let linked = linkedRoot;
359
+ if (ir.type === "Block") {
360
+ const outer = ir.value.statements;
361
+ linked = variant("Block", { ...ir.value, statements: [...outer.slice(0, -1), linkedRoot] });
362
+ }
363
+ return { ir: linked, imports };
364
+ }
365
+ /** A name as an identifier fragment. */
366
+ function identifier(name) {
367
+ return name.replace(/[^A-Za-z0-9_]+/g, "_");
368
+ }
369
+ // ── IR children ─────────────────────────────────────────────────────────────
370
+ /** The child IR nodes of a node, in the walker's order. */
371
+ function children(node) {
372
+ const out = [];
373
+ mapChildren(node, child => { out.push(child); return child; });
374
+ return out;
375
+ }
376
+ /**
377
+ * A node with its child IR nodes replaced by `f(child)` — the walker's
378
+ * cases as a rebuild. Leaves come back as they are.
379
+ */
380
+ function mapChildren(node, f) {
381
+ const v = node.value;
382
+ const re = (payload) => variant(node.type, { ...v, ...payload });
383
+ switch (node.type) {
384
+ case "Variable":
385
+ case "Continue":
386
+ case "Break":
387
+ case "Value":
388
+ return node;
389
+ case "Error":
390
+ return re({ message: f(v.message) });
391
+ case "TryCatch":
392
+ return re({ try_body: f(v.try_body), catch_body: f(v.catch_body), finally_body: f(v.finally_body) });
393
+ case "Let":
394
+ case "Assign":
395
+ case "As":
396
+ case "NewRef":
397
+ case "Variant":
398
+ case "UnwrapRecursive":
399
+ case "WrapRecursive":
400
+ case "Return":
401
+ return re({ value: f(v.value) });
402
+ case "Function":
403
+ case "AsyncFunction":
404
+ return re({ body: f(v.body) });
405
+ case "Call":
406
+ case "CallAsync":
407
+ return re({ function: f(v.function), arguments: v.arguments.map(f) });
408
+ case "NewArray":
409
+ case "NewSet":
410
+ case "NewVector":
411
+ case "NewMatrix":
412
+ return re({ values: v.values.map(f) });
413
+ case "NewDict":
414
+ return re({ values: v.values.map(e => ({ key: f(e.key), value: f(e.value) })) });
415
+ case "Struct":
416
+ return re({ fields: v.fields.map(x => ({ name: x.name, value: f(x.value) })) });
417
+ case "GetField":
418
+ return re({ struct: f(v.struct) });
419
+ case "Block":
420
+ return re({ statements: v.statements.map(f) });
421
+ case "IfElse":
422
+ return re({
423
+ ifs: v.ifs.map(b => ({ predicate: f(b.predicate), body: f(b.body) })),
424
+ else_body: f(v.else_body),
425
+ });
426
+ case "Match":
427
+ return re({ variant: f(v.variant), cases: v.cases.map(c => ({ ...c, body: f(c.body) })) });
428
+ case "While":
429
+ return re({ predicate: f(v.predicate), body: f(v.body) });
430
+ case "ForArray":
431
+ return re({ array: f(v.array), body: f(v.body) });
432
+ case "ForSet":
433
+ return re({ set: f(v.set), body: f(v.body) });
434
+ case "ForDict":
435
+ return re({ dict: f(v.dict), body: f(v.body) });
436
+ case "Builtin":
437
+ case "Platform":
438
+ return re({ arguments: v.arguments.map(f) });
439
+ default:
440
+ throw new Error(`mapChildren: unknown IR node kind ${node.type}`);
441
+ }
442
+ }
443
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=functions.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.spec.d.ts","sourceRoot":"","sources":["../../src/functions.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Cross-language functions (#628): export a manifest, import by name,
7
+ * link into self-contained IR, and run it.
8
+ */
9
+ import { describe, test } from "node:test";
10
+ import assert from "node:assert/strict";
11
+ import { East, EastIR, some, none, equalFor, ArrayType, FloatType, FunctionType, IntegerType, NullType, StringType, StructType, FunctionManifestType, IMPORT_PLATFORM, toSource, walkIR, } from "./index.js";
12
+ const Row = StructType({ qty: IntegerType, price: FloatType });
13
+ const score = East.function([Row], FloatType, ($, r) => r.qty.toFloat().multiply(r.price));
14
+ const double = East.function([IntegerType], IntegerType, ($, x) => x.multiply(2n));
15
+ const log = East.platform("log", [StringType], NullType);
16
+ const shout = East.function([StringType], NullType, ($, s) => { $(log(s.upperCase())); });
17
+ function countImports(ir) {
18
+ let n = 0;
19
+ walkIR(ir, node => { if (node.type === "Platform" && node.value.name === IMPORT_PLATFORM)
20
+ n += 1; });
21
+ return n;
22
+ }
23
+ describe("functions: export", () => {
24
+ test("a manifest carries each function's IR, declared type and platform dependencies, sorted by name", () => {
25
+ const manifest = East.exportFunctions("pricing", "1.2.3", { score, double, shout }, { providers: { log: "@elaraai/east-node-std" } });
26
+ assert.equal(manifest.package, "pricing");
27
+ assert.equal(manifest.version, "1.2.3");
28
+ assert.deepEqual(manifest.functions.map(f => f.name), ["double", "score", "shout"]);
29
+ const [d, s, sh] = manifest.functions;
30
+ assert.equal(d.ir.type, "Function");
31
+ assert.equal(s.type.type, "Function");
32
+ assert.deepEqual(d.platforms, []);
33
+ assert.equal(sh.platforms.length, 1);
34
+ assert.equal(sh.platforms[0].name, "log");
35
+ assert.equal(sh.platforms[0].async, false);
36
+ assert.deepEqual(sh.platforms[0].provider, some("@elaraai/east-node-std"));
37
+ assert.equal(sh.platforms[0].inputs.length, 1);
38
+ });
39
+ test("the manifest round trips through beast2", () => {
40
+ const manifest = East.exportFunctions("pricing", "1.0.0", { score, shout });
41
+ const back = East.decodeFunctionManifest(East.encodeFunctionManifest(manifest));
42
+ assert.ok(equalFor(FunctionManifestType)(back, manifest));
43
+ assert.deepEqual(back.functions[1].platforms[0].provider, none);
44
+ });
45
+ test("a closure and an unlinked importer are refused", () => {
46
+ const outer = East.function([IntegerType], IntegerType, ($, n) => {
47
+ const k = $.const(n.add(1n));
48
+ const inner = $.const(East.function([IntegerType], IntegerType, ($, x) => x.add(k)));
49
+ return inner(n);
50
+ });
51
+ // the nested closure is not reachable as a value here; export the outer (closed) fine
52
+ assert.doesNotThrow(() => East.exportFunctions("p", "1", { outer }));
53
+ const imported = East.importFunction("pricing", "double", FunctionType([IntegerType], IntegerType));
54
+ const user = East.function([IntegerType], IntegerType, ($, x) => imported(x));
55
+ assert.throws(() => East.exportFunctions("p", "1", { user }), /unresolved import/);
56
+ });
57
+ });
58
+ describe("functions: import and link", () => {
59
+ const manifest = East.exportFunctions("pricing", "1.0.0", { score, double, shout }, { providers: { log: "@elaraai/east-node-std" } });
60
+ test("an import is a callable expression whose IR is the east.importFunction platform node", () => {
61
+ const imported = East.importFunction("pricing", "double", FunctionType([IntegerType], IntegerType));
62
+ const user = East.function([IntegerType], IntegerType, ($, x) => imported(x).add(1n));
63
+ assert.equal(countImports(user.toIR().ir), 1);
64
+ assert.throws(() => East.compile(user, []), /east\.importFunction/);
65
+ });
66
+ test("linking embeds the exported IR and the program runs on the reference compiler", () => {
67
+ const imported = East.importFunction("pricing", "double", FunctionType([IntegerType], IntegerType));
68
+ const user = East.function([IntegerType], IntegerType, ($, x) => imported(x).add(1n));
69
+ const { ir, imports } = East.linkImports(user, [manifest]);
70
+ assert.equal(countImports(ir), 0);
71
+ assert.deepEqual(imports.map(i => `${i.package}.${i.name}`), ["pricing.double"]);
72
+ assert.equal(new EastIR(ir).compile([])(20n), 41n);
73
+ });
74
+ test("a use inside a callback captures the binding; several imports and repeated uses link once each", () => {
75
+ const s = East.importFunction("pricing", "score", FunctionType([Row], FloatType));
76
+ const d = East.importFunction("pricing", "double", FunctionType([IntegerType], IntegerType));
77
+ const user = East.function([ArrayType(Row)], FloatType, ($, rows) => {
78
+ const total = $.const(rows.map(($, r) => s(r)).sum());
79
+ const n = $.const(d(d(rows.size())));
80
+ return total.add(n.toFloat()).add(s(East.value({ qty: 1n, price: 0.5 }, Row)));
81
+ });
82
+ const { ir, imports } = East.linkImports(user, [manifest]);
83
+ assert.deepEqual(imports.map(i => i.name), ["score", "double"]);
84
+ const run = new EastIR(ir).compile([]);
85
+ // (2*1.5 + 3*2.0) + 4*2 + 0.5
86
+ assert.equal(run([{ qty: 2n, price: 1.5 }, { qty: 3n, price: 2.0 }]), 3 + 6 + 8 + 0.5);
87
+ // the printed source rebuilds the linked program (no imports left)
88
+ assert.doesNotMatch(toSource(ir), /importFunction/);
89
+ });
90
+ test("an import of a platform-calling function carries its dependencies and runs with the platform", () => {
91
+ const sh = East.importFunction("pricing", "shout", FunctionType([StringType], NullType));
92
+ const user = East.function([StringType], NullType, ($, s) => { $(sh(s)); });
93
+ const { ir, imports } = East.linkImports(user, [manifest]);
94
+ assert.equal(imports[0].platforms[0].name, "log");
95
+ assert.deepEqual(imports[0].platforms[0].provider, some("@elaraai/east-node-std"));
96
+ const seen = [];
97
+ new EastIR(ir).compile([log.implement((s) => { seen.push(s); })])("hi");
98
+ assert.deepEqual(seen, ["HI"]);
99
+ });
100
+ test("a missing manifest, a missing function and a type mismatch are build errors naming the import", () => {
101
+ const wrongType = East.importFunction("pricing", "double", FunctionType([FloatType], FloatType));
102
+ const user = East.function([FloatType], FloatType, ($, x) => wrongType(x));
103
+ assert.throws(() => East.linkImports(user, []), /no function manifest for package "pricing"/);
104
+ assert.throws(() => East.linkImports(user, [manifest]), /imported as .*Float.* but exported as .*Integer/);
105
+ const missing = East.importFunction("pricing", "nope", FunctionType([IntegerType], IntegerType));
106
+ const user2 = East.function([IntegerType], IntegerType, ($, x) => missing(x));
107
+ assert.throws(() => East.linkImports(user2, [manifest]), /exports no function "nope" — it exports double, score, shout/);
108
+ });
109
+ test("a function without imports links to itself", () => {
110
+ const bundle = double.toIR();
111
+ const { ir, imports } = East.linkImports(bundle, [manifest]);
112
+ assert.deepEqual(imports, []);
113
+ assert.equal(ir, bundle.ir);
114
+ });
115
+ test("the import prints as East.importFunction and the printed module rebuilds it", () => {
116
+ const imported = East.importFunction("pricing", "double", FunctionType([IntegerType], IntegerType));
117
+ const user = East.function([IntegerType], IntegerType, ($, x) => imported(x));
118
+ const source = toSource(user);
119
+ assert.match(source, /East\.importFunction\("pricing", "double", FunctionType\(\[IntegerType\], IntegerType\)\)/);
120
+ assert.throws(() => East.importFunction("pricing", "double", IntegerType), /needs a FunctionType/);
121
+ });
122
+ });
123
+ //# sourceMappingURL=functions.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.spec.js","sourceRoot":"","sources":["../../src/functions.spec.ts"],"names":[],"mappings":"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"}