@elaraai/east 1.0.68 → 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 (77) 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/expr/block.d.ts +148 -0
  40. package/dist/src/expr/block.d.ts.map +1 -1
  41. package/dist/src/expr/block.js +168 -4
  42. package/dist/src/expr/block.js.map +1 -1
  43. package/dist/src/expr/index.d.ts +155 -2
  44. package/dist/src/expr/index.d.ts.map +1 -1
  45. package/dist/src/expr/index.js +155 -2
  46. package/dist/src/expr/index.js.map +1 -1
  47. package/dist/src/functions.crossimport.spec.d.ts +6 -0
  48. package/dist/src/functions.crossimport.spec.d.ts.map +1 -0
  49. package/dist/src/functions.crossimport.spec.js +45 -0
  50. package/dist/src/functions.crossimport.spec.js.map +1 -0
  51. package/dist/src/functions.d.ts +4103 -0
  52. package/dist/src/functions.d.ts.map +1 -0
  53. package/dist/src/functions.js +443 -0
  54. package/dist/src/functions.js.map +1 -0
  55. package/dist/src/functions.spec.d.ts +6 -0
  56. package/dist/src/functions.spec.d.ts.map +1 -0
  57. package/dist/src/functions.spec.js +123 -0
  58. package/dist/src/functions.spec.js.map +1 -0
  59. package/dist/src/index.d.ts +2 -0
  60. package/dist/src/index.d.ts.map +1 -1
  61. package/dist/src/index.js +2 -0
  62. package/dist/src/index.js.map +1 -1
  63. package/dist/src/naming.d.ts +50 -0
  64. package/dist/src/naming.d.ts.map +1 -0
  65. package/dist/src/naming.js +194 -0
  66. package/dist/src/naming.js.map +1 -0
  67. package/dist/src/naming.spec.d.ts +6 -0
  68. package/dist/src/naming.spec.d.ts.map +1 -0
  69. package/dist/src/naming.spec.js +154 -0
  70. package/dist/src/naming.spec.js.map +1 -0
  71. package/dist/src/serialization/beast2/index.spec.js +25 -0
  72. package/dist/src/serialization/beast2/index.spec.js.map +1 -1
  73. package/dist/src/serialization/beast2/shared.d.ts +1 -1
  74. package/dist/src/serialization/beast2/shared.d.ts.map +1 -1
  75. package/dist/src/serialization/beast2/shared.js +9 -1
  76. package/dist/src/serialization/beast2/shared.js.map +1 -1
  77. package/package.json +11 -2
@@ -27,8 +27,10 @@ export { RecursiveExpr } from './recursive.js';
27
27
  export { FunctionExpr } from './function.js';
28
28
  export { AsyncFunctionExpr } from './asyncfunction.js';
29
29
  // Import factory implementation
30
- import { from, equal, notEqual, less, lessEqual, print, is, greaterEqual, greater, func, str, platform, asyncFunction, asyncPlatform, genericPlatform, asyncGenericPlatform, compile, compileAsync, equals, eq, notEquals, ne, lessThan, lt, lessThanOrEqual, lte, le, greaterThan, gt, greaterThanOrEqual, gte, ge, diff, applyPatch, composePatch, invertPatch } from './block.js';
31
- export { BlockBuilder, equals, eq, notEquals, ne, lessThan, lt, lessThanOrEqual, lte, le, greaterThan, gt, greaterThanOrEqual, gte, ge, diff, applyPatch, composePatch, invertPatch } from './block.js';
30
+ import { from, equal, notEqual, less, lessEqual, print, is, greaterEqual, greater, func, str, platform, asyncFunction, asyncPlatform, genericPlatform, asyncGenericPlatform, compile, compileAsync, equals, eq, notEquals, ne, lessThan, lt, lessThanOrEqual, lte, le, greaterThan, gt, greaterThanOrEqual, gte, ge, diff, applyPatch, composePatch, invertPatch, builtin, as, wrapRecursive, error } from './block.js';
31
+ import { toSource } from '../codegen/index.js';
32
+ import { importFunction, exportFunctions, encodeFunctionManifest, decodeFunctionManifest, linkImports, platformDependencies } from '../functions.js';
33
+ export { BlockBuilder, PLATFORM_DECLARATION, isPlatformDeclaration, equals, eq, notEquals, ne, lessThan, lt, lessThanOrEqual, lte, le, greaterThan, gt, greaterThanOrEqual, gte, ge, diff, applyPatch, composePatch, invertPatch } from './block.js';
32
34
  // Import standard libraries
33
35
  import IntegerLib from './libs/integer.js';
34
36
  import FloatLib from './libs/float.js';
@@ -332,6 +334,157 @@ export const East = {
332
334
  * ```
333
335
  */
334
336
  asyncGenericPlatform,
337
+ /**
338
+ * Prints an East function (or its IR) as the TypeScript module that
339
+ * rebuilds it — the `East.function` builder surface, the type constructors
340
+ * hoisted to constants. The python twin is `east.codegen.to_python_source`;
341
+ * `east-node transpile` is the CLI. Rebuilding the printed module yields
342
+ * the same IR under `east-c ir normalize`.
343
+ *
344
+ * @param fnOrIr - An `East.function` result, its `toIR()`, or an IR value
345
+ * @param options - `name` (the export, default `main`) and `importFrom`
346
+ * (the module specifier, default `@elaraai/east`)
347
+ * @returns The module source
348
+ *
349
+ * @example
350
+ * ```ts
351
+ * const double = East.function([IntegerType], IntegerType, ($, x) => x.multiply(2n));
352
+ * East.toSource(double);
353
+ * // export const main = East.function([IntegerType], IntegerType, ($, _0) => {
354
+ * // return _0.multiply(2n);
355
+ * // });
356
+ * ```
357
+ */
358
+ toSource,
359
+ /**
360
+ * Refers to a function exported by another package — authored in either
361
+ * language — as a typed, callable function expression. Unresolved it is a
362
+ * `Platform` node named `east.importFunction`; `East.linkImports` (which
363
+ * `e3 export` runs on every task) embeds the exported IR after checking
364
+ * the declared type equals the exported type exactly. Python's
365
+ * `East.import_function`.
366
+ *
367
+ * @param pkg - The exporting package's name (its manifest's `package`)
368
+ * @param name - The function's name in that package
369
+ * @param type - The declared `FunctionType` / `AsyncFunctionType`
370
+ * @returns A callable function expression of `type`
371
+ *
372
+ * @example
373
+ * ```ts
374
+ * const score = East.importFunction("pricing", "score", FunctionType([RowType], FloatType));
375
+ * const total = East.function([ArrayType(RowType)], FloatType, ($, rows) => rows.map(($, r) => score(r)).sum());
376
+ * ```
377
+ */
378
+ importFunction,
379
+ /**
380
+ * Builds a package's function manifest — each function's IR, declared
381
+ * type and platform dependencies — for other packages (in either language)
382
+ * to import. Functions must be closed values: no captures, no unresolved
383
+ * imports. Python's `East.export_functions`; the CLIs are `east-node
384
+ * export-functions` / `east-py export-functions`.
385
+ *
386
+ * @param pkg - The package name importers will use
387
+ * @param version - Its version
388
+ * @param functions - Name → `East.function` result
389
+ * @param options - `providers`: platform name → the package implementing it
390
+ * @returns The manifest value (`East.encodeFunctionManifest` writes it)
391
+ *
392
+ * @example
393
+ * ```ts
394
+ * const manifest = East.exportFunctions("maths", "1.0.0", { double, halve });
395
+ * writeFileSync("maths.functions.beast2", East.encodeFunctionManifest(manifest));
396
+ * ```
397
+ */
398
+ exportFunctions,
399
+ /** Encodes a function manifest as beast2 (readable by either language). */
400
+ encodeFunctionManifest,
401
+ /** Decodes a function manifest written by either language. */
402
+ decodeFunctionManifest,
403
+ /**
404
+ * Resolves every `East.importFunction` in a function against the given
405
+ * manifests: exact type check, then the exported IR embedded as a
406
+ * `Let`-bound constant. Returns the linked IR and the imports resolved
407
+ * (with their platform dependencies, which `e3 export` validates against
408
+ * the task's runner). Python's `East.link_imports`.
409
+ *
410
+ * @param fnOrIr - The importing function (or its IR)
411
+ * @param manifests - The exporting packages' manifests
412
+ * @returns `{ ir, imports }`
413
+ *
414
+ * @example
415
+ * ```ts
416
+ * const { ir } = East.linkImports(total, [East.decodeFunctionManifest(readFileSync("pricing.functions.beast2"))]);
417
+ * East.compile(new EastIR(ir), [])(rows);
418
+ * ```
419
+ */
420
+ linkImports,
421
+ /**
422
+ * The platform functions a function calls — name, signature, asyncness —
423
+ * in first-use order. What an export manifest records per function.
424
+ *
425
+ * @param fnOrIr - The function (or its IR)
426
+ * @param providers - Platform name → the package implementing it, recorded when given
427
+ * @returns The dependencies
428
+ */
429
+ platformDependencies,
430
+ /**
431
+ * Calls an East builtin by name — the raw spelling for a builtin the
432
+ * surface has no method for (see `RAW_ONLY`).
433
+ *
434
+ * @param name - The builtin's IR name
435
+ * @param typeParameters - Its type parameters, in declaration order
436
+ * @param args - Its arguments in IR order
437
+ * @param outputType - The type of the result
438
+ * @returns The builtin call expression
439
+ *
440
+ * @example
441
+ * ```ts
442
+ * East.builtin("ArraySize", [IntegerType], [xs], IntegerType)
443
+ * ```
444
+ */
445
+ builtin,
446
+ /**
447
+ * Widens a value to a declared supertype explicitly (an `As` node) —
448
+ * python's `East.as_`.
449
+ *
450
+ * @param value - The value or expression to widen
451
+ * @param type - The wider type
452
+ * @returns The value as an expression of `type`
453
+ *
454
+ * @example
455
+ * ```ts
456
+ * East.as(East.value(variant("circle", 2.0)), VariantType({ circle: FloatType, square: FloatType }))
457
+ * ```
458
+ */
459
+ as,
460
+ /**
461
+ * Wraps a value of a recursive type's node type in the recursive type
462
+ * (a `WrapRecursive` node); `.unwrap()` is its inverse.
463
+ *
464
+ * @param value - The value or expression of the node type
465
+ * @param type - The recursive type
466
+ * @returns A `RecursiveExpr` of `type`
467
+ *
468
+ * @example
469
+ * ```ts
470
+ * East.wrapRecursive(variant("nil", null), ListType)
471
+ * ```
472
+ */
473
+ wrapRecursive,
474
+ /**
475
+ * Raises an East runtime error with the given message — the Never-typed
476
+ * error EXPRESSION (the statement form is `$.error`).
477
+ *
478
+ * @param message - The error message
479
+ * @returns A `NeverExpr`
480
+ *
481
+ * @example
482
+ * ```ts
483
+ * const checked = East.function([IntegerType], IntegerType, ($, x) =>
484
+ * East.less(x, 0n).ifElse(() => East.error("negative"), () => x));
485
+ * ```
486
+ */
487
+ error,
335
488
  /**
336
489
  * Converts any East expression to its string representation.
337
490
  * Uses the East serialization format (not JSON).
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/expr/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/expr/index.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.crossimport.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.crossimport.spec.d.ts","sourceRoot":"","sources":["../../src/functions.crossimport.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,45 @@
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
+ * python → TypeScript (#628): functions authored in python
7
+ * (`libs/east-py/packages/east-py/tests/fixtures/crosslang_functions.py`,
8
+ * whose manifest `east-py` checks in at `test/fixtures/py-functions.beast2`
9
+ * and keeps current) import into a TypeScript function by name, link into
10
+ * pure IR, and run on the reference compiler with no python present. The
11
+ * other direction lives in east-py's `test_cross_import.py`.
12
+ */
13
+ import { describe, test } from "node:test";
14
+ import assert from "node:assert/strict";
15
+ import { readFileSync } from "node:fs";
16
+ import { East, EastIR, ArrayType, FloatType, FunctionType, IntegerType, StringType, StructType, } from "./index.js";
17
+ const FIXTURE = new URL("../../test/fixtures/py-functions.beast2", import.meta.url);
18
+ const Row = StructType({ qty: IntegerType, price: FloatType });
19
+ describe("cross-language import: python-authored functions in TypeScript", () => {
20
+ const manifest = East.decodeFunctionManifest(new Uint8Array(readFileSync(FIXTURE)));
21
+ test("the manifest names the package and its functions", () => {
22
+ assert.equal(manifest.package, "crosslang_py");
23
+ assert.deepEqual(manifest.functions.map(f => f.name), ["greet", "score", "total"]);
24
+ assert.deepEqual(manifest.functions.map(f => f.platforms.length), [0, 0, 0]);
25
+ });
26
+ test("imported python functions link and run, alone and inside callbacks", () => {
27
+ const score = East.importFunction("crosslang_py", "score", FunctionType([Row], FloatType));
28
+ const total = East.importFunction("crosslang_py", "total", FunctionType([ArrayType(Row)], FloatType));
29
+ const greet = East.importFunction("crosslang_py", "greet", FunctionType([StringType, IntegerType], StringType));
30
+ const user = East.function([ArrayType(Row), StringType], StringType, ($, rows, name) => {
31
+ const best = $.const(rows.map(($, r) => score(r)).reduce(($, acc, x) => East.greater(x, acc).ifElse($ => x, $ => acc), 0.0));
32
+ return greet(name, 2n).concat(" ").concat(East.print(total(rows))).concat(" ").concat(East.print(best));
33
+ });
34
+ const { ir, imports } = East.linkImports(user, [manifest]);
35
+ assert.deepEqual(imports.map(i => i.name), ["score", "greet", "total"]);
36
+ const run = new EastIR(ir).compile([]);
37
+ assert.equal(run([{ qty: 2n, price: 1.5 }, { qty: 3n, price: 2.0 }], "hi"), "hi!hi! 9.0 6.0");
38
+ });
39
+ test("a wrong declared type is refused with both types named", () => {
40
+ const score = East.importFunction("crosslang_py", "score", FunctionType([Row], IntegerType));
41
+ const user = East.function([Row], IntegerType, ($, r) => score(r));
42
+ assert.throws(() => East.linkImports(user, [manifest]), /crosslang_py\.score is imported as .* but exported as/);
43
+ });
44
+ });
45
+ //# sourceMappingURL=functions.crossimport.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.crossimport.spec.js","sourceRoot":"","sources":["../../src/functions.crossimport.spec.ts"],"names":[],"mappings":"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"}