@procedures/client 0.25.0 → 0.26.1

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 (48) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +10 -0
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/browser.d.ts +2 -2
  5. package/dist/browser.d.ts.map +1 -1
  6. package/dist/browser.js +2 -0
  7. package/dist/browser.js.map +1 -1
  8. package/dist/client/client.d.ts +7 -1
  9. package/dist/client/client.d.ts.map +1 -1
  10. package/dist/client/client.js +30 -19
  11. package/dist/client/client.js.map +1 -1
  12. package/dist/procedures/core/index.d.ts +7 -7
  13. package/dist/procedures/core/index.d.ts.map +1 -1
  14. package/dist/procedures/core/index.js +53 -178
  15. package/dist/procedures/core/index.js.map +1 -1
  16. package/dist/procedures/core/operands.d.ts +12 -13
  17. package/dist/procedures/core/operands.d.ts.map +1 -1
  18. package/dist/procedures/core/operands.js +22 -38
  19. package/dist/procedures/core/operands.js.map +1 -1
  20. package/dist/procedures/define-procedure.d.ts.map +1 -1
  21. package/dist/procedures/define-procedure.js +6 -6
  22. package/dist/procedures/define-procedure.js.map +1 -1
  23. package/dist/procedures/envelope.d.ts +20 -11
  24. package/dist/procedures/envelope.d.ts.map +1 -1
  25. package/dist/procedures/envelope.js +51 -20
  26. package/dist/procedures/envelope.js.map +1 -1
  27. package/dist/procedures/index.d.ts +3 -1
  28. package/dist/procedures/index.d.ts.map +1 -1
  29. package/dist/procedures/index.js +3 -1
  30. package/dist/procedures/index.js.map +1 -1
  31. package/dist/procedures/program.d.ts +251 -0
  32. package/dist/procedures/program.d.ts.map +1 -0
  33. package/dist/procedures/program.js +1120 -0
  34. package/dist/procedures/program.js.map +1 -0
  35. package/dist/procedures/ref.d.ts +7 -94
  36. package/dist/procedures/ref.d.ts.map +1 -1
  37. package/dist/procedures/ref.js +16 -279
  38. package/dist/procedures/ref.js.map +1 -1
  39. package/package.json +3 -1
  40. package/src/browser.ts +23 -0
  41. package/src/client/client.ts +35 -23
  42. package/src/procedures/core/index.ts +56 -216
  43. package/src/procedures/core/operands.ts +24 -44
  44. package/src/procedures/define-procedure.ts +5 -7
  45. package/src/procedures/envelope.ts +60 -24
  46. package/src/procedures/index.ts +34 -4
  47. package/src/procedures/program.ts +1371 -0
  48. package/src/procedures/ref.ts +19 -357
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Programs on the coeval kernel (coeval decisions D9, D10 and D13, roadmap item M14).
3
+ *
4
+ * A program runs as a run document of `@mark1russell7/coeval`. This module holds the parts that
5
+ * are the program format's own:
6
+ *
7
+ * - The world of a program: a call kind for each procedure path (an open world), the kinds of
8
+ * the control-flow procedures with their parts and their names, and the kinds `lit`, `ref`,
9
+ * `program.data`, `program.record`, `program.deferred` and `program.fail`.
10
+ * - The desugarer: it changes the `$proc` form into a run document. The rules of hydration
11
+ * (implicit chains, `$when`, `$literal`, the limits) decide the shape of the document.
12
+ * - The runners of the kinds, and the boundary: each call is an effect, and the host does it
13
+ * with the client (`client.call`). Thus `invokeProcedure()` stays the authority for the
14
+ * admission, the validation, the interceptors and the exposure rules of each call.
15
+ *
16
+ * The kernel does the rest: the order of the parts, the names of a scope, the references, the
17
+ * parts at the same time, the error values and the static check.
18
+ */
19
+ import { type EvalError, type Json, type Key, type Machine, type World } from "@mark1russell7/coeval";
20
+ import { type AnyProcedureRef, type HydrateOptions, type HydrationEvent, type RefExecutor, type RefScope } from "./ref.js";
21
+ import type { ProcedurePath } from "./types.js";
22
+ /**
23
+ * This function gives the key of a `$proc` name in the names of the kernel. The kernel name
24
+ * `last` is the result of the step before, so a step with the name `last` gets the key `$last`
25
+ * (and `$last` gets `$$last`). The change is one to one, so no two names get the same key.
26
+ */
27
+ export declare function nameKey(name: string): string;
28
+ /** This function gives the `$proc` name of a key of the kernel names (the inverse of `nameKey()`). */
29
+ export declare function nameOfKey(key: string): string;
30
+ /**
31
+ * This function gives the names of the kernel for a scope of the `$proc` form. The outer scopes
32
+ * come first, so an inner name wins. The innermost `last` wins too, as `lookupOutputRef()` reads it.
33
+ */
34
+ export declare function namesOfScope(scope: RefScope | undefined): Record<string, unknown>;
35
+ /** This function gives a scope of the `$proc` form for the names of the kernel, for `withScope()`. */
36
+ export declare function scopeOfNames(names: Readonly<Record<string, unknown>>): RefScope;
37
+ /**
38
+ * The world of a program. It is open: each path that starts with a key that the world does not
39
+ * have is a call. A path that starts with a key of the world goes under the namespace `procs`.
40
+ */
41
+ export declare const PROGRAM_WORLD: World;
42
+ /** A run document. Its value can hold values of the host (a literal of a `Date`, a `Map` or a runtime ref). */
43
+ export interface ProgramDocument {
44
+ readonly type: Json;
45
+ readonly value: unknown;
46
+ readonly name?: string;
47
+ readonly own?: Readonly<Record<string, string>>;
48
+ }
49
+ /**
50
+ * The origin of a document of the desugarer: the object of the `$proc` form, its JSON pointer
51
+ * (RFC 6901) in the program, and the facts that the run needs about its position.
52
+ */
53
+ export interface DocumentOrigin {
54
+ /** The object of the program: a call, a `$ref`, or the input of a control-flow procedure. */
55
+ readonly source: unknown;
56
+ /** The JSON pointer of the source in the program. The empty string is the root. */
57
+ readonly pointer: string;
58
+ /** True when the position has a scope: a raw call then gets the scope (`withScope()`). */
59
+ readonly scoped: boolean;
60
+ /** For a call: the nearest call whose input holds it, in the same hydration. */
61
+ readonly consumer?: AnyProcedureRef | undefined;
62
+ /** For a `$ref` in the input of a deferred call: an unknown name stays data for the runner. */
63
+ readonly deferred?: boolean | undefined;
64
+ /** True for the `client.chain` call that an array of calls makes (an implicit chain). */
65
+ readonly synthesized?: boolean | undefined;
66
+ /** For a call: its path, its input and its `$name`, as `normalizeRef()` gives them. */
67
+ readonly call?: {
68
+ readonly path: ProcedurePath;
69
+ readonly input: unknown;
70
+ readonly $name?: string | undefined;
71
+ } | undefined;
72
+ }
73
+ /**
74
+ * This function gives the document at a place of a run document, for example the place of an issue
75
+ * of `check()` of coeval. A part that is the whole value of its document has the same place as its
76
+ * document: the function gives the deepest document at the place.
77
+ */
78
+ export declare function documentAt(doc: unknown, place: readonly Key[]): unknown;
79
+ /** This function gives the origin of a document that the desugarer made, or undefined. */
80
+ export declare function originOf(doc: unknown): DocumentOrigin | undefined;
81
+ /** The settings of one desugaring: the rules of one hydration. */
82
+ export interface DesugarOptions {
83
+ /** True for a procedure that takes its input raw (`rawInputRule()`). The default knows the control-flow paths. */
84
+ readonly rawInput?: ((path: ProcedurePath) => boolean) | undefined;
85
+ /** The context names of the runner (`HydrateOptions.contextStack`). */
86
+ readonly contextStack?: readonly string[] | undefined;
87
+ /** The most nested calls (`HydrateOptions.maxDepth`, default 10). */
88
+ readonly maxDepth?: number | undefined;
89
+ /** True when the hydration has a scope. Without a scope, a `$ref` object is data. */
90
+ readonly scoped?: boolean | undefined;
91
+ /**
92
+ * True: the operands of a control-flow call in the program become documents too, for a static
93
+ * check. The default (false) keeps them data: the procedure gets them raw, and it runs them.
94
+ */
95
+ readonly expand?: boolean | undefined;
96
+ }
97
+ /**
98
+ * This function desugars the input of a control-flow procedure: its operands become documents,
99
+ * and the other fields stay data. It gives undefined when the input does not have the shape of
100
+ * the procedure. The operands of a procedure without a scope have no scope (`scopeOf()`), except
101
+ * the operands that the procedure gives names: the steps of a chain, `catch` and `fn`.
102
+ */
103
+ export declare function desugarControlValue(name: string, input: unknown, options?: DesugarOptions): Record<string, unknown> | undefined;
104
+ /** This function desugars a value of a hydration: the root of `hydrateInput()`. Data gives undefined. */
105
+ export declare function desugarInput(input: unknown, options?: DesugarOptions): ProgramDocument | undefined;
106
+ /**
107
+ * This function desugars a program: the root call of `client.exec()` (`prepareRootCall()`). A
108
+ * `$when` on the root call does not apply: the caller starts the root call now. Its input is a new
109
+ * hydration.
110
+ */
111
+ export declare function desugarProgram(program: AnyProcedureRef, options?: DesugarOptions): ProgramDocument;
112
+ /** Where a call is: the root call of a program, an operand of control flow, or a call in an input. */
113
+ export type CallPosition = "root" | "operand" | "nested";
114
+ /** The payload of the effect of a call. */
115
+ export interface CallEffect {
116
+ readonly position: CallPosition;
117
+ /** The input of the call: hydrated, or raw with the scope of the caller. */
118
+ readonly input: unknown;
119
+ /** The call object of the program. */
120
+ readonly source: unknown;
121
+ /** The nearest call whose input holds the call (for `HydrationEvent.consumer`). */
122
+ readonly consumer: AnyProcedureRef | undefined;
123
+ }
124
+ /** What a machine of programs needs from its host. */
125
+ export interface ProgramHost {
126
+ /** True for a procedure that takes its input raw. The procedure in the registry decides at the time of the call. */
127
+ readonly rawInput: (path: ProcedurePath) => boolean;
128
+ /** True: the documents of a value start at the same time (`HydrateOptions.parallel`). */
129
+ readonly parallel?: boolean | undefined;
130
+ }
131
+ /** The parent context that the control-flow procedures give to their operand calls. */
132
+ export declare function parentContext(input: {
133
+ cwd?: unknown;
134
+ node?: unknown;
135
+ }): Record<string, unknown>;
136
+ /** The value that a failed result throws at the boundary: the error of the host, or an error with the reason. */
137
+ export declare function thrownValue(error: EvalError): unknown;
138
+ /**
139
+ * This function makes the machine of a run of programs: the world of a program, its evaluators
140
+ * and its runners. The kernel capabilities permit each call: the authority is `invokeProcedure()`,
141
+ * through the host of each effect.
142
+ */
143
+ export declare function programMachine(host: ProgramHost): Machine;
144
+ /**
145
+ * This function adds an observer of every hydration in this process (or worker), and gives the
146
+ * function that removes it. A host that does not call `hydrateInput` itself (the Composer of
147
+ * the site runs `client.exec()`) uses it for its trace. The observer gets the events of all
148
+ * concurrent hydrations: use it where one program runs at a time. For the events of one program,
149
+ * give `onRef` to that program: `client.exec(ref, input, { onRef })` (docs review DOC-10).
150
+ */
151
+ export declare function observeHydration(observer: (event: HydrationEvent) => void): () => void;
152
+ /** The options of a run of a document. */
153
+ export interface RunDocumentOptions {
154
+ /** The function that does a call. */
155
+ readonly executor: RefExecutor;
156
+ /** The function that does the root call of a program. The default is `executor`. */
157
+ readonly rootExecutor?: ((path: ProcedurePath, input: unknown) => unknown) | undefined;
158
+ /** The raw-input rule (`rawInputRule()`). The default knows the control-flow paths. */
159
+ readonly rawInput?: ((path: ProcedurePath) => boolean) | undefined;
160
+ /** The observer of the calls that start in the run. */
161
+ readonly onRef?: ((event: HydrationEvent) => void) | undefined;
162
+ /** The scope of the run: its names are the names of the root. */
163
+ readonly scope?: RefScope | undefined;
164
+ /** True: the documents of a value start at the same time. */
165
+ readonly parallel?: boolean | undefined;
166
+ }
167
+ /**
168
+ * This function runs a document on the kernel (`prepare(...).run(...)`). Each call is an effect:
169
+ * the host does it with the executor. A failed run throws the error of the host (the cause of the
170
+ * error value), so a caller gets the same error as from the call itself.
171
+ */
172
+ export declare function runDocument(doc: ProgramDocument, options: RunDocumentOptions & {
173
+ readonly self?: unknown;
174
+ }): Promise<unknown>;
175
+ /**
176
+ * Hydrate an input tree by executing any nested procedure references.
177
+ *
178
+ * The input becomes a run document (`desugarInput()`), and the kernel runs it. Each call of the
179
+ * input is an effect: the executor does it, and its result takes the place of the call.
180
+ *
181
+ * The rules:
182
+ * - A ref with `$when: "$immediate"` (the default) runs. A ref whose procedure takes its input
183
+ * raw (see `HydrateOptions.rawInput`) gets its input unchanged, with the scope attached.
184
+ * - A ref with `$when: "$never"` stays as it is, with its whole subtree.
185
+ * - A ref with `$when: "$parent"` or `$when: "<name>"` stays data for its runner. Its procedure
186
+ * gets that ref later. The immediate refs of its input run now, unless the procedure takes its
187
+ * input raw. A named ref runs now only when `contextStack` has the name.
188
+ * - A `$ref` object gives a value from the scope. `{ $literal: value }` gives the value unchanged.
189
+ * - An array whose items are all refs that run now, outside the input of a ref, runs as one
190
+ * `client.chain`. An array with a deferred ref is a list.
191
+ * - Values that are not plain data (`Date`, `Map`, typed arrays, class instances) stay unchanged.
192
+ * A subtree without refs stays the same object.
193
+ *
194
+ * @param input - The input object potentially containing procedure references
195
+ * @param executor - Function to execute procedure references
196
+ * @param options - Hydration options
197
+ * @returns The hydrated input with executed procedure refs replaced by their results
198
+ */
199
+ export declare function hydrateInput<T>(input: T, executor: RefExecutor, options?: HydrateOptions): Promise<T>;
200
+ /**
201
+ * Execute a deferred procedure reference.
202
+ *
203
+ * This is a helper for procedures that receive deferred refs (via $when) and need to execute
204
+ * them with additional context. The fields of `additionalInput` go over the input of the ref. A
205
+ * procedure that takes its input raw gets it with the scope. Another procedure gets it hydrated
206
+ * (`hydrateInput()`), with the options (for example the runner's `contextStack`).
207
+ *
208
+ * @param ref - The procedure reference to execute
209
+ * @param executor - Function to execute the procedure
210
+ * @param additionalInput - Additional input to merge (e.g., cwd for dag.traverse)
211
+ * @param options - Hydration options for the input of the ref
212
+ * @returns The result of executing the procedure
213
+ */
214
+ export declare function executeRef<TOutput = unknown>(ref: AnyProcedureRef, executor: RefExecutor, additionalInput?: Record<string, unknown>, options?: HydrateOptions): Promise<TOutput>;
215
+ /** The options of `runProgram()`. */
216
+ export interface RunProgramOptions extends RunDocumentOptions {
217
+ }
218
+ /**
219
+ * This function runs a program: its root call is the root document of one kernel run. A `$when`
220
+ * on the root call does not apply. A procedure that takes its input raw gets its input with the
221
+ * scope. Another procedure gets its input hydrated as a root: a list of calls is an implicit chain.
222
+ * `client.exec()` and the body of a procedure that `procedure.define` made use it (docs review DOC-3).
223
+ */
224
+ export declare function runProgram(program: AnyProcedureRef, options: RunProgramOptions): Promise<unknown>;
225
+ /**
226
+ * The path and the input of the root call of a program: the call that `client.exec()` starts.
227
+ * The kernel runs the program (`runProgram()`) up to its root call, and the function gives the
228
+ * path and the input of that call. The caller then starts the call.
229
+ */
230
+ export declare function prepareRootCall(ref: AnyProcedureRef, executor: RefExecutor, options?: Pick<HydrateOptions, "rawInput" | "onRef" | "scope">): Promise<{
231
+ path: ProcedurePath;
232
+ input: unknown;
233
+ }>;
234
+ /** The options of `runOperand()`. */
235
+ export interface RunOperandOptions extends RunDocumentOptions {
236
+ /** The parent context that the operand call gets in its input (`cwd`, `node`). */
237
+ readonly extra?: Record<string, unknown> | undefined;
238
+ }
239
+ /**
240
+ * This function runs an operand of a control-flow procedure (`callOperand()`, `evaluateOperand()`).
241
+ * A call is an operand call: only `$never` holds it back, its input is a new hydration, and it gets
242
+ * the parent context. Another value is a new hydration.
243
+ */
244
+ export declare function runOperand(value: unknown, options: RunOperandOptions): Promise<unknown>;
245
+ /**
246
+ * This function runs a control-flow procedure on the kernel: its input becomes a document of its
247
+ * kind, and the runner of the kind runs the operands. The input is raw: its scope (`scopeOf()`)
248
+ * gives the names of the caller.
249
+ */
250
+ export declare function runControl(name: string, input: unknown, options: RunDocumentOptions): Promise<unknown>;
251
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/procedures/program.ts"],"names":[],"mappings":"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"}