@procedures/compiler 0.0.0-stage → 0.3.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 (175) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE +21 -0
  3. package/README.md +254 -2
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/checks.d.ts +24 -0
  6. package/dist/checks.d.ts.map +1 -0
  7. package/dist/checks.js +123 -0
  8. package/dist/checks.js.map +1 -0
  9. package/dist/codegen-closure.d.ts +19 -0
  10. package/dist/codegen-closure.d.ts.map +1 -0
  11. package/dist/codegen-closure.js +200 -0
  12. package/dist/codegen-closure.js.map +1 -0
  13. package/dist/codegen-text.d.ts +44 -0
  14. package/dist/codegen-text.d.ts.map +1 -0
  15. package/dist/codegen-text.js +360 -0
  16. package/dist/codegen-text.js.map +1 -0
  17. package/dist/diagnostics.d.ts +67 -0
  18. package/dist/diagnostics.d.ts.map +1 -0
  19. package/dist/diagnostics.js +38 -0
  20. package/dist/diagnostics.js.map +1 -0
  21. package/dist/effects.d.ts +63 -0
  22. package/dist/effects.d.ts.map +1 -0
  23. package/dist/effects.js +185 -0
  24. package/dist/effects.js.map +1 -0
  25. package/dist/explain.d.ts +58 -0
  26. package/dist/explain.d.ts.map +1 -0
  27. package/dist/explain.js +144 -0
  28. package/dist/explain.js.map +1 -0
  29. package/dist/facts.d.ts +66 -0
  30. package/dist/facts.d.ts.map +1 -0
  31. package/dist/facts.js +102 -0
  32. package/dist/facts.js.map +1 -0
  33. package/dist/fold.d.ts +27 -0
  34. package/dist/fold.d.ts.map +1 -0
  35. package/dist/fold.js +128 -0
  36. package/dist/fold.js.map +1 -0
  37. package/dist/index.d.ts +35 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +22 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/interceptor.d.ts +51 -0
  42. package/dist/interceptor.d.ts.map +1 -0
  43. package/dist/interceptor.js +116 -0
  44. package/dist/interceptor.js.map +1 -0
  45. package/dist/ir.d.ts +240 -0
  46. package/dist/ir.d.ts.map +1 -0
  47. package/dist/ir.js +74 -0
  48. package/dist/ir.js.map +1 -0
  49. package/dist/mermaid.d.ts +53 -0
  50. package/dist/mermaid.d.ts.map +1 -0
  51. package/dist/mermaid.js +423 -0
  52. package/dist/mermaid.js.map +1 -0
  53. package/dist/module.d.ts +20 -0
  54. package/dist/module.d.ts.map +1 -0
  55. package/dist/module.js +124 -0
  56. package/dist/module.js.map +1 -0
  57. package/dist/normalize.d.ts +43 -0
  58. package/dist/normalize.d.ts.map +1 -0
  59. package/dist/normalize.js +529 -0
  60. package/dist/normalize.js.map +1 -0
  61. package/dist/openrpc.d.ts +63 -0
  62. package/dist/openrpc.d.ts.map +1 -0
  63. package/dist/openrpc.js +57 -0
  64. package/dist/openrpc.js.map +1 -0
  65. package/dist/print.d.ts +8 -0
  66. package/dist/print.d.ts.map +1 -0
  67. package/dist/print.js +148 -0
  68. package/dist/print.js.map +1 -0
  69. package/dist/procedures/program/check.d.ts +14 -0
  70. package/dist/procedures/program/check.d.ts.map +1 -0
  71. package/dist/procedures/program/check.js +30 -0
  72. package/dist/procedures/program/check.js.map +1 -0
  73. package/dist/procedures/program/compile.d.ts +14 -0
  74. package/dist/procedures/program/compile.d.ts.map +1 -0
  75. package/dist/procedures/program/compile.js +35 -0
  76. package/dist/procedures/program/compile.js.map +1 -0
  77. package/dist/procedures/program/diagram.d.ts +14 -0
  78. package/dist/procedures/program/diagram.d.ts.map +1 -0
  79. package/dist/procedures/program/diagram.js +23 -0
  80. package/dist/procedures/program/diagram.js.map +1 -0
  81. package/dist/procedures/program/effects-output.d.ts +8 -0
  82. package/dist/procedures/program/effects-output.d.ts.map +1 -0
  83. package/dist/procedures/program/effects-output.js +13 -0
  84. package/dist/procedures/program/effects-output.js.map +1 -0
  85. package/dist/procedures/program/explain.d.ts +14 -0
  86. package/dist/procedures/program/explain.d.ts.map +1 -0
  87. package/dist/procedures/program/explain.js +43 -0
  88. package/dist/procedures/program/explain.js.map +1 -0
  89. package/dist/procedures/program/index.d.ts +5 -0
  90. package/dist/procedures/program/index.d.ts.map +1 -0
  91. package/dist/procedures/program/index.js +5 -0
  92. package/dist/procedures/program/index.js.map +1 -0
  93. package/dist/procedures/sdk/index.d.ts +3 -0
  94. package/dist/procedures/sdk/index.d.ts.map +1 -0
  95. package/dist/procedures/sdk/index.js +3 -0
  96. package/dist/procedures/sdk/index.js.map +1 -0
  97. package/dist/procedures/sdk/manifest.d.ts +11 -0
  98. package/dist/procedures/sdk/manifest.d.ts.map +1 -0
  99. package/dist/procedures/sdk/manifest.js +15 -0
  100. package/dist/procedures/sdk/manifest.js.map +1 -0
  101. package/dist/procedures/sdk/openrpc.d.ts +11 -0
  102. package/dist/procedures/sdk/openrpc.d.ts.map +1 -0
  103. package/dist/procedures/sdk/openrpc.js +13 -0
  104. package/dist/procedures/sdk/openrpc.js.map +1 -0
  105. package/dist/procedures/sdk/typescript.d.ts +11 -0
  106. package/dist/procedures/sdk/typescript.d.ts.map +1 -0
  107. package/dist/procedures/sdk/typescript.js +14 -0
  108. package/dist/procedures/sdk/typescript.js.map +1 -0
  109. package/dist/program.d.ts +84 -0
  110. package/dist/program.d.ts.map +1 -0
  111. package/dist/program.js +108 -0
  112. package/dist/program.js.map +1 -0
  113. package/dist/refs.d.ts +9 -0
  114. package/dist/refs.d.ts.map +1 -0
  115. package/dist/refs.js +9 -0
  116. package/dist/refs.js.map +1 -0
  117. package/dist/register.d.ts +6 -0
  118. package/dist/register.d.ts.map +1 -0
  119. package/dist/register.js +8 -0
  120. package/dist/register.js.map +1 -0
  121. package/dist/runtime.d.ts +68 -0
  122. package/dist/runtime.d.ts.map +1 -0
  123. package/dist/runtime.js +138 -0
  124. package/dist/runtime.js.map +1 -0
  125. package/dist/schema.d.ts +41 -0
  126. package/dist/schema.d.ts.map +1 -0
  127. package/dist/schema.js +325 -0
  128. package/dist/schema.js.map +1 -0
  129. package/dist/scopes.d.ts +25 -0
  130. package/dist/scopes.d.ts.map +1 -0
  131. package/dist/scopes.js +202 -0
  132. package/dist/scopes.js.map +1 -0
  133. package/dist/types.d.ts +129 -0
  134. package/dist/types.d.ts.map +1 -0
  135. package/dist/types.js +157 -0
  136. package/dist/types.js.map +1 -0
  137. package/dist/typescript-sdk.d.ts +34 -0
  138. package/dist/typescript-sdk.d.ts.map +1 -0
  139. package/dist/typescript-sdk.js +231 -0
  140. package/dist/typescript-sdk.js.map +1 -0
  141. package/package.json +83 -3
  142. package/src/checks.ts +128 -0
  143. package/src/codegen-closure.ts +224 -0
  144. package/src/codegen-text.ts +396 -0
  145. package/src/diagnostics.ts +98 -0
  146. package/src/effects.ts +231 -0
  147. package/src/explain.ts +194 -0
  148. package/src/facts.ts +161 -0
  149. package/src/fold.ts +136 -0
  150. package/src/index.ts +35 -0
  151. package/src/interceptor.ts +149 -0
  152. package/src/ir.ts +330 -0
  153. package/src/mermaid.ts +460 -0
  154. package/src/module.ts +171 -0
  155. package/src/normalize.ts +694 -0
  156. package/src/openrpc.ts +104 -0
  157. package/src/print.ts +143 -0
  158. package/src/procedures/program/check.ts +31 -0
  159. package/src/procedures/program/compile.ts +36 -0
  160. package/src/procedures/program/diagram.ts +25 -0
  161. package/src/procedures/program/effects-output.ts +16 -0
  162. package/src/procedures/program/explain.ts +46 -0
  163. package/src/procedures/program/index.ts +4 -0
  164. package/src/procedures/sdk/index.ts +2 -0
  165. package/src/procedures/sdk/manifest.ts +17 -0
  166. package/src/procedures/sdk/openrpc.ts +16 -0
  167. package/src/procedures/sdk/typescript.ts +17 -0
  168. package/src/program.ts +181 -0
  169. package/src/refs.ts +9 -0
  170. package/src/register.ts +10 -0
  171. package/src/runtime.ts +188 -0
  172. package/src/schema.ts +318 -0
  173. package/src/scopes.ts +196 -0
  174. package/src/types.ts +318 -0
  175. package/src/typescript-sdk.ts +282 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The normalize pass: the JSON of a program to the IR.
3
+ *
4
+ * The pass follows the interpreter of `@procedures/client` step by step:
5
+ *
6
+ * - `hydrateValue()` and `hydrateRef()` of `ref.ts` for a value and a call in an input.
7
+ * - `prepareRootCall()` for the root call (`client.exec()` and the body of a defined procedure).
8
+ * - `evaluateOperand()` and `callOperand()` of `core/operands.ts` for an operand of control flow.
9
+ * - The handlers of `core/index.ts` for each control-flow procedure.
10
+ *
11
+ * Each rule of the interpreter has its place here. The rules are the order of the keys, an
12
+ * implicit chain, the raw-input rule, `$when` and `$literal`. They also include a `$ref` with
13
+ * and without a scope, the hydration limits and the parent context (`cwd`, `node`) of an operand.
14
+ */
15
+ import { type Pointer, type ProgramIR } from "./ir.js";
16
+ import { type Definition, type ProcedureFacts } from "./facts.js";
17
+ import type { Diagnostic } from "./diagnostics.js";
18
+ /** The default limit of nested calls in one hydration (`HydrateOptions.maxDepth` of the client). */
19
+ export declare const MAX_REF_DEPTH = 10;
20
+ /** The message of `client.exec()` for a program that is not a call. */
21
+ export declare const ROOT_NOT_CALL_MESSAGE = "exec() requires a ProcedureRef, $proc JSON, or procedure path array";
22
+ /** The options of the pass. */
23
+ export interface NormalizeOptions {
24
+ readonly mode: "exec" | "body";
25
+ /** The pointer of the program in a bigger document (the body of a definition). */
26
+ readonly base?: Pointer | undefined;
27
+ }
28
+ /** The result of the pass. */
29
+ export interface NormalizeResult {
30
+ readonly ir: ProgramIR;
31
+ readonly diagnostics: Diagnostic[];
32
+ }
33
+ /** This function makes the IR of a program. */
34
+ export declare function normalize(program: unknown, facts: ProcedureFacts, options: NormalizeOptions): NormalizeResult;
35
+ /** The input of an operand call with the parent context: `callOperand()` of the client. */
36
+ export declare function mergeExtra(input: unknown, extra: Readonly<Record<string, unknown>>): unknown;
37
+ /**
38
+ * This function finds each `procedure.define` call of a program with a literal path and a body
39
+ * that is a call. A later call of such a path is known to the compiler, and its body gives the
40
+ * effects of the call.
41
+ */
42
+ export declare function findDefinitions(program: unknown): Map<string, Definition>;
43
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkBH,OAAO,EAAsJ,KAAK,OAAO,EAAE,KAAK,SAAS,EAAsB,MAAM,SAAS,CAAC;AAC/N,OAAO,EAAgB,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhF,OAAO,KAAK,EAAE,UAAU,EAA4B,MAAM,kBAAkB,CAAC;AAE7E,oGAAoG;AACpG,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,wEAAwE,CAAC;AAqB3G,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACrC;AAED,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;CACpC;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAI7G;AAMD,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAG5F;AAwiBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CA+CzE"}
@@ -0,0 +1,529 @@
1
+ /**
2
+ * The normalize pass: the JSON of a program to the IR.
3
+ *
4
+ * The pass follows the interpreter of `@procedures/client` step by step:
5
+ *
6
+ * - `hydrateValue()` and `hydrateRef()` of `ref.ts` for a value and a call in an input.
7
+ * - `prepareRootCall()` for the root call (`client.exec()` and the body of a defined procedure).
8
+ * - `evaluateOperand()` and `callOperand()` of `core/operands.ts` for an operand of control flow.
9
+ * - The handlers of `core/index.ts` for each control-flow procedure.
10
+ *
11
+ * Each rule of the interpreter has its place here. The rules are the order of the keys, an
12
+ * implicit chain, the raw-input rule, `$when` and `$literal`. They also include a `$ref` with
13
+ * and without a scope, the hydration limits and the parent context (`cwd`, `node`) of an operand.
14
+ */
15
+ import { getRefWhen, isAnyProcedureRef, isControlFlowPath, isLiteral, isPlainObject, normalizeRef, pathToKey, shouldExecuteRef, MAX_DATA_DEPTH, PURE_EFFECTS, WHEN_NEVER, } from "@procedures/client/browser";
16
+ import { childPointer } from "./ir.js";
17
+ import { isStringPath } from "./facts.js";
18
+ import { isOutputRef } from "./refs.js";
19
+ /** The default limit of nested calls in one hydration (`HydrateOptions.maxDepth` of the client). */
20
+ export const MAX_REF_DEPTH = 10;
21
+ /** The message of `client.exec()` for a program that is not a call. */
22
+ export const ROOT_NOT_CALL_MESSAGE = "exec() requires a ProcedureRef, $proc JSON, or procedure path array";
23
+ const NO_EXTRA = Object.freeze({});
24
+ /** This function makes the IR of a program. */
25
+ export function normalize(program, facts, options) {
26
+ const normalizer = new Normalizer(facts);
27
+ const ir = normalizer.program(program, options.mode, options.base ?? "");
28
+ return { ir, diagnostics: normalizer.diagnostics };
29
+ }
30
+ function hasKeys(value) {
31
+ return Object.keys(value).length > 0;
32
+ }
33
+ /** The input of an operand call with the parent context: `callOperand()` of the client. */
34
+ export function mergeExtra(input, extra) {
35
+ if (!hasKeys(extra))
36
+ return input;
37
+ return { ...(typeof input === "object" && input !== null && !Array.isArray(input) ? input : {}), ...extra };
38
+ }
39
+ /** The parent context that a control-flow procedure gives to its operands: `parentContext()` of the client. */
40
+ function parentContext(input) {
41
+ const cwd = input["cwd"];
42
+ const node = input["node"];
43
+ if (!cwd && !node)
44
+ return NO_EXTRA;
45
+ return { ...(cwd ? { cwd } : {}), ...(node ? { node } : {}) };
46
+ }
47
+ function typeName(value) {
48
+ if (value === null)
49
+ return "null";
50
+ if (Array.isArray(value))
51
+ return "array";
52
+ return typeof value;
53
+ }
54
+ /** The text of a path for a message. */
55
+ function keyText(path) {
56
+ return path.map((segment) => String(segment)).join(".");
57
+ }
58
+ class Normalizer {
59
+ facts;
60
+ diagnostics = [];
61
+ bindingCount = 0;
62
+ /** The control-flow calls on the path (a call object that contains itself through its operands). */
63
+ flowStack = new Set();
64
+ constructor(facts) {
65
+ this.facts = facts;
66
+ }
67
+ program(program, mode, base) {
68
+ if (mode === "body") {
69
+ const input = this.binding("input", "input", base);
70
+ const root = isAnyProcedureRef(program) ? this.rootCall(program, true, base) : this.hydrateRoot(program, true, base);
71
+ return { mode, root, input, bindingCount: this.bindingCount, program };
72
+ }
73
+ let root;
74
+ if (isAnyProcedureRef(program)) {
75
+ root = this.rootCall(program, false, base);
76
+ }
77
+ else if (Array.isArray(program) && program.every((segment) => typeof segment === "string")) {
78
+ // client.exec(path) starts the procedure with the input {}
79
+ root = this.rootCall({ $proc: program, input: {} }, false, base);
80
+ }
81
+ else {
82
+ this.report("error", "root-not-call", "The program must be a call ({ $proc, input }): client.exec() starts only a call.", base);
83
+ root = { kind: "fail", pointer: base, message: ROOT_NOT_CALL_MESSAGE };
84
+ }
85
+ return { mode, root, input: undefined, bindingCount: this.bindingCount, program };
86
+ }
87
+ // ===========================================================================
88
+ // Helpers
89
+ // ===========================================================================
90
+ binding(kind, name, pointer) {
91
+ return { id: this.bindingCount++, kind, name, pointer };
92
+ }
93
+ report(severity, code, message, pointer) {
94
+ this.diagnostics.push({ severity, code, message, pointer });
95
+ }
96
+ literal(value, origin, pointer) {
97
+ return { kind: "literal", value, origin, pointer };
98
+ }
99
+ fail(code, message, pointer, explanation) {
100
+ this.report("error", code, explanation, pointer);
101
+ return { kind: "fail", message, pointer };
102
+ }
103
+ /** This function reports a path that cannot name a procedure. */
104
+ checkPath(path, pointer) {
105
+ if (path.length === 0) {
106
+ this.report("error", "invalid-path", "The $proc path is empty.", pointer);
107
+ }
108
+ else if (!isStringPath(path) || path.some((segment) => segment.length === 0)) {
109
+ this.report("error", "invalid-path", `The $proc path ${JSON.stringify(path)} must have strings that are not empty.`, pointer);
110
+ }
111
+ }
112
+ warnName(ref, pointer, where) {
113
+ const name = normalizeRef(ref).$name;
114
+ if (name !== undefined && name !== "") {
115
+ this.report("warning", "name-not-bound", `The $name "${String(name)}" names ${where}. Only a step of client.chain puts its $name in the scope, so no $ref can read this name.`, pointer);
116
+ }
117
+ }
118
+ synthetic(binding, pointer) {
119
+ return { kind: "reference", text: "$passed", name: "$passed", fields: [], deferred: false, source: undefined, synthetic: true, binding, pointer };
120
+ }
121
+ // ===========================================================================
122
+ // The root call and the hydration (ref.ts)
123
+ // ===========================================================================
124
+ /** `prepareRootCall()`: the root call starts also with `$when`, and its input is a hydration root. */
125
+ rootCall(ref, scoped, pointer) {
126
+ const normalized = normalizeRef(ref);
127
+ const path = normalized.path;
128
+ this.checkPath(path, pointer);
129
+ this.warnName(ref, pointer, "the root call");
130
+ if (this.facts.rawInput(path)) {
131
+ return this.rawCall(ref, path, normalized.input, "root", scoped, NO_EXTRA, pointer, false);
132
+ }
133
+ const input = this.hydrateRoot(normalized.input, scoped, childPointer(pointer, "input"));
134
+ return { kind: "call", path, key: keyText(path), position: "root", input, extra: NO_EXTRA, name: undefined, pointer };
135
+ }
136
+ /** `hydrateInput()`: a new hydration, at depth 0, where an array of calls is an implicit chain. */
137
+ hydrateRoot(value, scoped, pointer) {
138
+ return this.value(value, { scoped, refDepth: 0, skipImplicitChain: false, deferred: false, dataDepth: 0, ancestors: undefined }, pointer);
139
+ }
140
+ /** `hydrateValue()`. */
141
+ value(value, h, pointer) {
142
+ if (value === null || typeof value !== "object")
143
+ return this.literal(value, "data", pointer);
144
+ if (h.dataDepth > MAX_DATA_DEPTH) {
145
+ return this.fail("data-depth", `Hydration failed: the input has more than ${MAX_DATA_DEPTH} levels of nesting`, pointer, `The data nests deeper than ${MAX_DATA_DEPTH} levels: the hydration stops here with an error.`);
146
+ }
147
+ for (let current = h.ancestors; current; current = current.up) {
148
+ if (current.value === value) {
149
+ return this.fail("cyclic-input", "Hydration failed: the input is cyclic (an object contains itself)", pointer, "The input contains itself: the hydration stops here with an error.");
150
+ }
151
+ }
152
+ if (isLiteral(value))
153
+ return this.literal(value.$literal, "literal", pointer);
154
+ if (isOutputRef(value)) {
155
+ if (!h.scoped) {
156
+ this.report("warning", "unscoped-ref", `The $ref "${value.$ref}" is outside each scope, so it is data (for example a JSON Schema reference). A name can be read only in a chain step, map, reduce, the catch of tryCatch or a defined body. Write { "$literal": ... } for data.`, pointer);
157
+ return this.literal(value, "unscoped-ref", pointer);
158
+ }
159
+ const [name = "", ...fields] = value.$ref.split(".");
160
+ return { kind: "reference", text: value.$ref, name, fields, deferred: h.deferred, source: value, synthetic: false, binding: undefined, pointer };
161
+ }
162
+ if (isAnyProcedureRef(value))
163
+ return this.ref(value, h, pointer);
164
+ const inner = { value, up: h.ancestors };
165
+ const child = { ...h, ancestors: inner, dataDepth: h.dataDepth + 1 };
166
+ if (Array.isArray(value)) {
167
+ if (!h.skipImplicitChain && value.length > 0 && value.every((item) => isAnyProcedureRef(item))) {
168
+ if (value.every((item) => shouldExecuteRef(item, [], false))) {
169
+ return this.implicitChain(value, h, pointer);
170
+ }
171
+ const waiting = value.findIndex((item) => !shouldExecuteRef(item, [], false));
172
+ this.report("warning", "never-trap", `This array of calls is a list, not a chain: the call at ${childPointer(pointer, waiting)} waits ($when ${JSON.stringify(getRefWhen(value[waiting]))}). The other calls start as items of the list, without $name and $last.`, pointer);
173
+ }
174
+ const items = Array.from(value, (item, index) => this.value(item, child, childPointer(pointer, index)));
175
+ if (items.every((node, index) => node.kind === "literal" && node.value === value[index])) {
176
+ return this.literal(value, "data", pointer);
177
+ }
178
+ return { kind: "array", items, pointer };
179
+ }
180
+ if (!isPlainObject(value))
181
+ return this.literal(value, "data", pointer);
182
+ const entries = Object.entries(value).map(([key, item]) => ({ key, value: this.value(item, child, childPointer(pointer, key)), source: item }));
183
+ if (entries.every((entry) => entry.value.kind === "literal" && entry.value.value === entry.source)) {
184
+ return this.literal(value, "data", pointer);
185
+ }
186
+ return { kind: "object", entries: entries.map(({ key, value: node }) => ({ key, value: node })), pointer };
187
+ }
188
+ /** `hydrateRef()`: a call in an input. */
189
+ ref(value, h, pointer) {
190
+ const when = getRefWhen(value);
191
+ if (when === WHEN_NEVER)
192
+ return this.literal(value, "never", pointer);
193
+ if (h.refDepth >= MAX_REF_DEPTH) {
194
+ return this.fail("depth-limit", `Hydration depth exceeded maximum of ${MAX_REF_DEPTH}`, pointer, `Calls nest more than ${MAX_REF_DEPTH} levels in one input here: the hydration stops with an error. A chain step or another operand starts a new count.`);
195
+ }
196
+ const ref = normalizeRef(value);
197
+ const path = ref.path;
198
+ this.checkPath(path, pointer);
199
+ const raw = this.facts.rawInput(path);
200
+ const inner = { value, up: h.ancestors };
201
+ const inputPointer = childPointer(pointer, "input");
202
+ if (!shouldExecuteRef(value, [], false)) {
203
+ this.report("info", "deferred-call", `This call waits for its runner ($when ${JSON.stringify(when)}): hydration keeps it as data for the procedure that gets it.`, pointer);
204
+ if (raw)
205
+ return this.literal(value, "deferred", pointer);
206
+ const input = this.value(ref.input, { ...h, skipImplicitChain: true, deferred: true, refDepth: h.refDepth + 1, ancestors: inner, dataDepth: h.dataDepth + 1 }, inputPointer);
207
+ if (input.kind === "literal" && input.value === ref.input)
208
+ return this.literal(value, "deferred", pointer);
209
+ return { kind: "deferred", path, key: keyText(path), when, source: value, input, pointer };
210
+ }
211
+ this.warnName(value, pointer, "a call in an input");
212
+ if (raw)
213
+ return this.rawCall(value, path, ref.input, "nested", h.scoped, NO_EXTRA, pointer, false);
214
+ const input = this.value(ref.input, { ...h, skipImplicitChain: true, deferred: false, refDepth: h.refDepth + 1, ancestors: inner, dataDepth: h.dataDepth + 1 }, inputPointer);
215
+ return { kind: "call", path, key: keyText(path), position: "nested", input, extra: NO_EXTRA, name: undefined, pointer };
216
+ }
217
+ /** An array of calls that start during this hydration: `client.chain` gets it raw as its steps. */
218
+ implicitChain(steps, h, pointer) {
219
+ if (h.refDepth >= MAX_REF_DEPTH) {
220
+ return this.fail("depth-limit", `Hydration depth exceeded maximum of ${MAX_REF_DEPTH}`, pointer, `Calls nest more than ${MAX_REF_DEPTH} levels in one input here: the hydration stops with an error.`);
221
+ }
222
+ this.report("info", "implicit-chain", "This array of calls runs as one client.chain: its value is { results, final }, and the steps can use $name and $last.", pointer);
223
+ const ref = { $proc: ["client", "chain"], input: { steps } };
224
+ return this.rawCall(ref, ["client", "chain"], ref.input, "nested", h.scoped, NO_EXTRA, pointer, true);
225
+ }
226
+ // ===========================================================================
227
+ // Operands (core/operands.ts)
228
+ // ===========================================================================
229
+ /** `evaluateOperand()`: a call starts as an operand call, and another value is a new hydration. */
230
+ operand(value, scoped, extra, pointer, trap) {
231
+ if (isAnyProcedureRef(value))
232
+ return this.operandCall(value, scoped, extra, pointer, { trap });
233
+ return this.hydrateRoot(value, scoped, pointer);
234
+ }
235
+ /** `callOperand()`: only `$never` holds the call back, and its input is a new hydration. */
236
+ operandCall(ref, scoped, extra, pointer, options = {}) {
237
+ if (getRefWhen(ref) === WHEN_NEVER) {
238
+ if (options.trap)
239
+ this.report("warning", "never-trap", options.trap, pointer);
240
+ return this.literal(ref, "never", pointer);
241
+ }
242
+ const normalized = normalizeRef(ref);
243
+ const path = normalized.path;
244
+ this.checkPath(path, pointer);
245
+ if (!options.bindsName)
246
+ this.warnName(ref, pointer, "an operand that is not a chain step");
247
+ const inputPointer = childPointer(pointer, "input");
248
+ if (this.facts.rawInput(path)) {
249
+ if (options.passed) {
250
+ // passThrough gives the step the input { $literal: <the value> }, also when the procedure takes it raw
251
+ const input = { kind: "object", entries: [{ key: "$literal", value: options.passed }], pointer: inputPointer };
252
+ return this.dynamic(path, "operand", this.rawReason(path), input, extra, undefined, pointer);
253
+ }
254
+ return this.rawCall(ref, path, normalized.input, "operand", scoped, extra, pointer, false);
255
+ }
256
+ const input = options.passed ?? this.hydrateRoot(normalized.input, scoped, inputPointer);
257
+ if (hasKeys(extra) && input.kind === "literal" && (typeof input.value !== "object" || input.value === null || Array.isArray(input.value))) {
258
+ this.report("warning", "input-replaced", `Control flow adds ${Object.keys(extra).join(" and ")} to the input of this call. The input is ${typeName(input.value)}, not an object, so the call gets only { ${Object.keys(extra).join(", ")} }.`, inputPointer);
259
+ }
260
+ const name = typeof normalized.$name === "string" && normalized.$name !== "" ? normalized.$name : undefined;
261
+ return { kind: "call", path, key: keyText(path), position: "operand", input, extra, name, pointer };
262
+ }
263
+ rawReason(path) {
264
+ return (this.facts.entry(path)?.tags ?? []).includes("runs-refs") || isControlFlowPath(path) ? "runs-refs" : "raw-input";
265
+ }
266
+ dynamic(path, position, reason, input, extra, model, pointer) {
267
+ return { kind: "dynamic", path, key: keyText(path), position, reason, input, extra, model, scope: undefined, pointer };
268
+ }
269
+ /**
270
+ * A call whose procedure takes its input raw. The compiler models the core control-flow
271
+ * procedures. It calls the other procedures with the raw input (a dynamic node).
272
+ */
273
+ rawCall(ref, path, rawInput, position, scoped, extra, pointer, implicit) {
274
+ const inputPointer = implicit ? pointer : childPointer(pointer, "input");
275
+ let reason = this.rawReason(path);
276
+ if (isControlFlowPath(path)) {
277
+ if (!this.facts.core(path)) {
278
+ reason = "not-core";
279
+ }
280
+ else if (typeof ref === "object" && ref !== null && this.flowStack.has(ref)) {
281
+ reason = "cyclic";
282
+ }
283
+ else {
284
+ const effective = position === "operand" ? mergeExtra(rawInput, extra) : rawInput;
285
+ const at = (key) => (implicit && key === "steps" ? pointer : childPointer(inputPointer, key));
286
+ if (typeof ref === "object" && ref !== null)
287
+ this.flowStack.add(ref);
288
+ try {
289
+ const node = this.controlFlow(path[1], effective, scoped, position, pointer, implicit, at);
290
+ if (node)
291
+ return node;
292
+ }
293
+ finally {
294
+ if (typeof ref === "object" && ref !== null)
295
+ this.flowStack.delete(ref);
296
+ }
297
+ reason = "invalid-control-flow";
298
+ }
299
+ }
300
+ const model = this.modelOf(path, mergeExtra(rawInput, position === "operand" ? extra : NO_EXTRA), scoped, pointer);
301
+ return this.dynamic(path, position, reason, this.literal(rawInput, "data", inputPointer), position === "operand" ? extra : NO_EXTRA, model, pointer);
302
+ }
303
+ /** What `client.eval` runs, when its `procedure` is a literal path or call: one operand call in the scope of the caller. */
304
+ modelOf(path, input, scoped, pointer) {
305
+ if (keyText(path) !== "client.eval" || !this.facts.core(path) || !isPlainObject(input))
306
+ return undefined;
307
+ const procedure = input["procedure"];
308
+ const evalInput = input["input"];
309
+ const at = childPointer(pointer, "input");
310
+ if (Array.isArray(procedure) && procedure.every((segment) => typeof segment === "string")) {
311
+ return this.operandCall({ $proc: procedure, input: evalInput }, scoped, NO_EXTRA, at, { bindsName: true });
312
+ }
313
+ if (isAnyProcedureRef(procedure) && !isOutputRef(procedure)) {
314
+ const target = normalizeRef(procedure);
315
+ const refInput = target.input;
316
+ const finalInput = evalInput === undefined ? refInput : isPlainObject(refInput) && isPlainObject(evalInput) ? { ...refInput, ...evalInput } : evalInput;
317
+ return this.operandCall({ $proc: target.path, input: finalInput }, scoped, NO_EXTRA, at, { bindsName: true });
318
+ }
319
+ return undefined;
320
+ }
321
+ // ===========================================================================
322
+ // The control-flow procedures (core/index.ts)
323
+ // ===========================================================================
324
+ invalid(name, problem, pointer) {
325
+ this.report("error", "invalid-control-flow", `The input of client.${name} is not valid: ${problem}. The call fails with a validation error.`, pointer);
326
+ return undefined;
327
+ }
328
+ controlFlow(name, input, scoped, position, pointer, implicit, at) {
329
+ if (!isPlainObject(input))
330
+ return this.invalid(name, `the input is ${typeName(input)}, not an object`, pointer);
331
+ const extra = parentContext(input);
332
+ const base = { path: ["client", name], key: `client.${name}`, position, pointer };
333
+ switch (name) {
334
+ case "chain":
335
+ return this.chain(input, extra, base, implicit, at);
336
+ case "parallel": {
337
+ const tasks = input["tasks"];
338
+ if (!Array.isArray(tasks))
339
+ return this.invalid(name, "tasks must be an array", pointer);
340
+ const concurrency = input["concurrency"];
341
+ if (concurrency !== undefined && !(typeof concurrency === "number" && Number.isSafeInteger(concurrency) && concurrency >= 1)) {
342
+ return this.invalid(name, "concurrency must be an integer of 1 or more", pointer);
343
+ }
344
+ const failFast = input["failFast"];
345
+ if (failFast !== undefined && typeof failFast !== "boolean")
346
+ return this.invalid(name, "failFast must be a boolean", pointer);
347
+ const nodes = Array.from(tasks, (task, index) => this.operand(task, scoped, extra, childPointer(at("tasks"), index), "A $never task gives the call itself as its result: it does not start."));
348
+ return { kind: "parallel", ...base, tasks: nodes, concurrency: concurrency, failFast: failFast === true };
349
+ }
350
+ case "conditional": {
351
+ const condition = this.operand(input["condition"], scoped, extra, at("condition"), "A $never condition is the call object, so the condition is always true.");
352
+ const branch = (key) => input[key] === undefined ? undefined : this.operand(input[key], scoped, extra, at(key), `A $never ${key} branch gives the call itself: it does not start.`);
353
+ return { kind: "conditional", ...base, condition, then: branch("then"), else: branch("else") };
354
+ }
355
+ case "tryCatch": {
356
+ const tried = this.operand(input["try"], scoped, NO_EXTRA, at("try"), "A $never try operand gives the call itself: it does not start, so it never fails.");
357
+ const error = this.binding("error", "error", at("catch"));
358
+ const caught = this.operand(input["catch"], true, NO_EXTRA, at("catch"), "A $never catch operand gives the call itself: it does not start.");
359
+ return { kind: "try", ...base, try: tried, catch: caught, error };
360
+ }
361
+ case "and":
362
+ case "or": {
363
+ const values = input["values"];
364
+ if (!Array.isArray(values))
365
+ return this.invalid(name, "values must be an array", pointer);
366
+ const truth = name === "and" ? "truthy, so client.and goes on" : "truthy, so client.or stops there";
367
+ const nodes = Array.from(values, (value, index) => this.operand(value, scoped, extra, childPointer(at("values"), index), `A $never operand is the call object: it is ${truth}.`));
368
+ return { kind: name, ...base, values: nodes };
369
+ }
370
+ case "map":
371
+ return this.map(input, scoped, base, at);
372
+ case "reduce":
373
+ return this.reduce(input, scoped, base, at);
374
+ default:
375
+ return undefined;
376
+ }
377
+ }
378
+ chain(input, extra, base, implicit, at) {
379
+ const steps = input["steps"];
380
+ if (!Array.isArray(steps))
381
+ return this.invalid("chain", "steps must be an array", base.pointer);
382
+ const passThrough = input["passThrough"];
383
+ if (passThrough !== undefined && typeof passThrough !== "boolean")
384
+ return this.invalid("chain", "passThrough must be a boolean", base.pointer);
385
+ const initial = passThrough ? this.binding("initial", undefined, at("initialInput")) : undefined;
386
+ const initialInput = passThrough ? this.hydrateRoot(input["initialInput"], true, at("initialInput")) : undefined;
387
+ const result = [];
388
+ const names = new Set();
389
+ Array.from(steps).forEach((step, index) => {
390
+ const stepPointer = childPointer(at("steps"), index);
391
+ let node;
392
+ let name;
393
+ if (isAnyProcedureRef(step)) {
394
+ const normalized = normalizeRef(step);
395
+ if (getRefWhen(step) === WHEN_NEVER) {
396
+ this.report("warning", "never-trap", "A $never step gives the call itself as its result: it does not start.", stepPointer);
397
+ node = this.literal(step, "never", stepPointer);
398
+ }
399
+ else {
400
+ const usesPassed = passThrough === true && normalized.input === undefined;
401
+ const previous = index === 0 ? initial : result[index - 1]?.result;
402
+ const passed = usesPassed && previous ? this.synthetic(previous, childPointer(stepPointer, "input")) : undefined;
403
+ node = this.operandCall(step, true, extra, stepPointer, { passed, bindsName: true });
404
+ }
405
+ const stepName = normalized.$name;
406
+ if (typeof stepName === "string" && stepName !== "") {
407
+ name = stepName;
408
+ }
409
+ else if (stepName) {
410
+ this.report("warning", "name-not-bound", `The $name ${JSON.stringify(stepName)} is not a string, so no $ref can read it.`, stepPointer);
411
+ }
412
+ }
413
+ else {
414
+ node = this.hydrateRoot(step, true, stepPointer);
415
+ }
416
+ if (name !== undefined) {
417
+ if (names.has(name)) {
418
+ this.report("warning", "duplicate-name", `An earlier step has the $name "${name}" too. From this step, $ref "${name}" reads this result.`, stepPointer);
419
+ }
420
+ names.add(name);
421
+ }
422
+ result.push({ pointer: stepPointer, node, result: this.binding("step", name, stepPointer) });
423
+ });
424
+ return { kind: "chain", ...base, implicit, steps: result, passThrough: passThrough === true, initialInput, initial };
425
+ }
426
+ items(value, scoped, pointer) {
427
+ if (Array.isArray(value)) {
428
+ return { kind: "list", items: Array.from(value, (item, index) => this.hydrateRoot(item, scoped, childPointer(pointer, index))) };
429
+ }
430
+ return { kind: "value", value: this.hydrateRoot(value, scoped, pointer) };
431
+ }
432
+ map(input, scoped, base, at) {
433
+ const as = input["as"];
434
+ if (as !== undefined && typeof as !== "string")
435
+ return this.invalid("map", "as must be a string", base.pointer);
436
+ const fn = input["fn"];
437
+ if (fn !== undefined && !isAnyProcedureRef(fn)) {
438
+ return this.fail("fn-not-call", "client.map: fn must be one call ({ $proc, input }), or absent", at("fn"), "The fn of client.map must be one call ({ $proc, input }): client.map fails with an error.");
439
+ }
440
+ const items = this.items(input["items"], scoped, at("items"));
441
+ const item = this.binding("item", as ?? "item", at("fn"));
442
+ const index = this.binding("index", "index", at("fn"));
443
+ const fnNode = fn === undefined
444
+ ? undefined
445
+ : this.operandCall(fn, true, NO_EXTRA, at("fn"), { trap: "A $never fn gives the call itself for each item: it does not start." });
446
+ return { kind: "map", ...base, items, fn: fnNode, item, index };
447
+ }
448
+ reduce(input, scoped, base, at) {
449
+ const fn = input["fn"];
450
+ if (fn !== undefined && !isAnyProcedureRef(fn)) {
451
+ return this.fail("fn-not-call", "client.reduce: fn must be one call ({ $proc, input }), or absent", at("fn"), "The fn of client.reduce must be one call ({ $proc, input }): client.reduce fails with an error.");
452
+ }
453
+ const acc = this.binding("acc", "acc", at("fn"));
454
+ const item = this.binding("item", "item", at("fn"));
455
+ const index = this.binding("index", "index", at("fn"));
456
+ if (fn === undefined) {
457
+ // Without fn, the result is the hydrated accumulated value (or initial), and the items do not start
458
+ const accumulated = input["accumulated"];
459
+ const source = accumulated ?? input["initial"];
460
+ const initial = this.hydrateRoot(source, scoped, accumulated !== undefined && accumulated !== null ? at("accumulated") : at("initial"));
461
+ return { kind: "reduce", ...base, items: undefined, initial, fn: undefined, acc, item, index };
462
+ }
463
+ const items = this.items(input["items"], scoped, at("items"));
464
+ const initial = this.hydrateRoot(input["initial"], scoped, at("initial"));
465
+ const fnNode = this.operandCall(fn, true, NO_EXTRA, at("fn"), { trap: "A $never fn gives the call itself as the accumulator: it does not start." });
466
+ return { kind: "reduce", ...base, items, initial, fn: fnNode, acc, item, index };
467
+ }
468
+ }
469
+ // =============================================================================
470
+ // The definitions of a program
471
+ // =============================================================================
472
+ /**
473
+ * This function finds each `procedure.define` call of a program with a literal path and a body
474
+ * that is a call. A later call of such a path is known to the compiler, and its body gives the
475
+ * effects of the call.
476
+ */
477
+ export function findDefinitions(program) {
478
+ const definitions = new Map();
479
+ const visited = new Set();
480
+ const visit = (value, pointer, depth = 0) => {
481
+ // A define deeper than 3000 levels never starts: hydration stops at 1000 levels of data in one operand
482
+ if (value === null || typeof value !== "object" || visited.has(value) || depth > 3000)
483
+ return;
484
+ visited.add(value);
485
+ // A $literal and a $never call are data: a define in them does not start
486
+ if (isLiteral(value))
487
+ return;
488
+ if (isAnyProcedureRef(value) && getRefWhen(value) === WHEN_NEVER)
489
+ return;
490
+ if (isAnyProcedureRef(value)) {
491
+ const ref = normalizeRef(value);
492
+ const input = ref.input;
493
+ if (ref.path.length === 2 && ref.path[0] === "procedure" && ref.path[1] === "define" && isPlainObject(input)) {
494
+ const path = input["path"];
495
+ const aggregation = input["aggregation"];
496
+ if (Array.isArray(path) && path.length > 0 && path.every((segment) => typeof segment === "string" && segment.length > 0) && isAnyProcedureRef(aggregation)) {
497
+ const metadata = isPlainObject(input["metadata"]) ? input["metadata"] : undefined;
498
+ const tags = metadata && Array.isArray(metadata["tags"]) && metadata["tags"].every((tag) => typeof tag === "string") ? metadata["tags"] : undefined;
499
+ const entry = {
500
+ path: path,
501
+ key: pathToKey(path),
502
+ ...(typeof metadata?.["description"] === "string" ? { description: metadata["description"] } : {}),
503
+ ...(tags ? { tags } : {}),
504
+ effects: PURE_EFFECTS,
505
+ input: {},
506
+ output: {},
507
+ dataDriven: true,
508
+ runtime: true,
509
+ hasHandler: true,
510
+ };
511
+ definitions.set(entry.key, { entry, body: aggregation, pointer: childPointer(childPointer(pointer, "input"), "aggregation") });
512
+ }
513
+ }
514
+ visit(input, childPointer(pointer, "input"), depth + 1);
515
+ return;
516
+ }
517
+ if (Array.isArray(value)) {
518
+ value.forEach((item, index) => visit(item, childPointer(pointer, index), depth + 1));
519
+ return;
520
+ }
521
+ if (isPlainObject(value)) {
522
+ for (const [key, item] of Object.entries(value))
523
+ visit(item, childPointer(pointer, key), depth + 1);
524
+ }
525
+ };
526
+ visit(program, "");
527
+ return definitions;
528
+ }
529
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}