@procedures/compiler 0.0.0-stage → 0.2.3
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.
- package/LICENSE +21 -0
- package/README.md +254 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/checks.d.ts +24 -0
- package/dist/checks.d.ts.map +1 -0
- package/dist/checks.js +123 -0
- package/dist/checks.js.map +1 -0
- package/dist/codegen-closure.d.ts +19 -0
- package/dist/codegen-closure.d.ts.map +1 -0
- package/dist/codegen-closure.js +200 -0
- package/dist/codegen-closure.js.map +1 -0
- package/dist/codegen-text.d.ts +44 -0
- package/dist/codegen-text.d.ts.map +1 -0
- package/dist/codegen-text.js +360 -0
- package/dist/codegen-text.js.map +1 -0
- package/dist/diagnostics.d.ts +67 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +38 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/effects.d.ts +63 -0
- package/dist/effects.d.ts.map +1 -0
- package/dist/effects.js +185 -0
- package/dist/effects.js.map +1 -0
- package/dist/explain.d.ts +58 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/explain.js +144 -0
- package/dist/explain.js.map +1 -0
- package/dist/facts.d.ts +66 -0
- package/dist/facts.d.ts.map +1 -0
- package/dist/facts.js +102 -0
- package/dist/facts.js.map +1 -0
- package/dist/fold.d.ts +27 -0
- package/dist/fold.d.ts.map +1 -0
- package/dist/fold.js +128 -0
- package/dist/fold.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptor.d.ts +51 -0
- package/dist/interceptor.d.ts.map +1 -0
- package/dist/interceptor.js +116 -0
- package/dist/interceptor.js.map +1 -0
- package/dist/ir.d.ts +240 -0
- package/dist/ir.d.ts.map +1 -0
- package/dist/ir.js +74 -0
- package/dist/ir.js.map +1 -0
- package/dist/mermaid.d.ts +53 -0
- package/dist/mermaid.d.ts.map +1 -0
- package/dist/mermaid.js +423 -0
- package/dist/mermaid.js.map +1 -0
- package/dist/module.d.ts +20 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +124 -0
- package/dist/module.js.map +1 -0
- package/dist/normalize.d.ts +43 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +529 -0
- package/dist/normalize.js.map +1 -0
- package/dist/openrpc.d.ts +63 -0
- package/dist/openrpc.d.ts.map +1 -0
- package/dist/openrpc.js +57 -0
- package/dist/openrpc.js.map +1 -0
- package/dist/print.d.ts +8 -0
- package/dist/print.d.ts.map +1 -0
- package/dist/print.js +148 -0
- package/dist/print.js.map +1 -0
- package/dist/procedures/program/check.d.ts +14 -0
- package/dist/procedures/program/check.d.ts.map +1 -0
- package/dist/procedures/program/check.js +30 -0
- package/dist/procedures/program/check.js.map +1 -0
- package/dist/procedures/program/compile.d.ts +14 -0
- package/dist/procedures/program/compile.d.ts.map +1 -0
- package/dist/procedures/program/compile.js +35 -0
- package/dist/procedures/program/compile.js.map +1 -0
- package/dist/procedures/program/diagram.d.ts +14 -0
- package/dist/procedures/program/diagram.d.ts.map +1 -0
- package/dist/procedures/program/diagram.js +23 -0
- package/dist/procedures/program/diagram.js.map +1 -0
- package/dist/procedures/program/effects-output.d.ts +8 -0
- package/dist/procedures/program/effects-output.d.ts.map +1 -0
- package/dist/procedures/program/effects-output.js +13 -0
- package/dist/procedures/program/effects-output.js.map +1 -0
- package/dist/procedures/program/explain.d.ts +14 -0
- package/dist/procedures/program/explain.d.ts.map +1 -0
- package/dist/procedures/program/explain.js +43 -0
- package/dist/procedures/program/explain.js.map +1 -0
- package/dist/procedures/program/index.d.ts +5 -0
- package/dist/procedures/program/index.d.ts.map +1 -0
- package/dist/procedures/program/index.js +5 -0
- package/dist/procedures/program/index.js.map +1 -0
- package/dist/procedures/sdk/index.d.ts +3 -0
- package/dist/procedures/sdk/index.d.ts.map +1 -0
- package/dist/procedures/sdk/index.js +3 -0
- package/dist/procedures/sdk/index.js.map +1 -0
- package/dist/procedures/sdk/manifest.d.ts +11 -0
- package/dist/procedures/sdk/manifest.d.ts.map +1 -0
- package/dist/procedures/sdk/manifest.js +15 -0
- package/dist/procedures/sdk/manifest.js.map +1 -0
- package/dist/procedures/sdk/openrpc.d.ts +11 -0
- package/dist/procedures/sdk/openrpc.d.ts.map +1 -0
- package/dist/procedures/sdk/openrpc.js +13 -0
- package/dist/procedures/sdk/openrpc.js.map +1 -0
- package/dist/procedures/sdk/typescript.d.ts +11 -0
- package/dist/procedures/sdk/typescript.d.ts.map +1 -0
- package/dist/procedures/sdk/typescript.js +14 -0
- package/dist/procedures/sdk/typescript.js.map +1 -0
- package/dist/program.d.ts +84 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +108 -0
- package/dist/program.js.map +1 -0
- package/dist/refs.d.ts +9 -0
- package/dist/refs.d.ts.map +1 -0
- package/dist/refs.js +9 -0
- package/dist/refs.js.map +1 -0
- package/dist/register.d.ts +6 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +8 -0
- package/dist/register.js.map +1 -0
- package/dist/runtime.d.ts +68 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +138 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema.d.ts +41 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +325 -0
- package/dist/schema.js.map +1 -0
- package/dist/scopes.d.ts +25 -0
- package/dist/scopes.d.ts.map +1 -0
- package/dist/scopes.js +202 -0
- package/dist/scopes.js.map +1 -0
- package/dist/types.d.ts +129 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +157 -0
- package/dist/types.js.map +1 -0
- package/dist/typescript-sdk.d.ts +34 -0
- package/dist/typescript-sdk.d.ts.map +1 -0
- package/dist/typescript-sdk.js +231 -0
- package/dist/typescript-sdk.js.map +1 -0
- package/package.json +83 -3
- package/src/checks.ts +128 -0
- package/src/codegen-closure.ts +224 -0
- package/src/codegen-text.ts +396 -0
- package/src/diagnostics.ts +98 -0
- package/src/effects.ts +231 -0
- package/src/explain.ts +194 -0
- package/src/facts.ts +161 -0
- package/src/fold.ts +136 -0
- package/src/index.ts +35 -0
- package/src/interceptor.ts +149 -0
- package/src/ir.ts +330 -0
- package/src/mermaid.ts +460 -0
- package/src/module.ts +171 -0
- package/src/normalize.ts +694 -0
- package/src/openrpc.ts +104 -0
- package/src/print.ts +143 -0
- package/src/procedures/program/check.ts +31 -0
- package/src/procedures/program/compile.ts +36 -0
- package/src/procedures/program/diagram.ts +25 -0
- package/src/procedures/program/effects-output.ts +16 -0
- package/src/procedures/program/explain.ts +46 -0
- package/src/procedures/program/index.ts +4 -0
- package/src/procedures/sdk/index.ts +2 -0
- package/src/procedures/sdk/manifest.ts +17 -0
- package/src/procedures/sdk/openrpc.ts +16 -0
- package/src/procedures/sdk/typescript.ts +17 -0
- package/src/program.ts +181 -0
- package/src/refs.ts +9 -0
- package/src/register.ts +10 -0
- package/src/runtime.ts +188 -0
- package/src/schema.ts +318 -0
- package/src/scopes.ts +196 -0
- package/src/types.ts +318 -0
- package/src/typescript-sdk.ts +282 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../src/explain.ts"],"names":[],"mappings":"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"}
|
package/dist/facts.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The facts about procedures that the compiler reads. They are the manifest entry of a path,
|
|
3
|
+
* the expose rule, the raw-input rule and the body of a defined procedure.
|
|
4
|
+
*
|
|
5
|
+
* A browser has only a manifest (`procedure.manifest`, roadmap R17). A host has the registry.
|
|
6
|
+
* The two functions of this module give the same facts from each source, so the passes do not
|
|
7
|
+
* know the source.
|
|
8
|
+
*/
|
|
9
|
+
import { type AnyProcedure, type ProcedureEntry, type ProcedureManifest, type ProcedurePath } from "@procedures/client/browser";
|
|
10
|
+
/** The procedure facts of the compiler. */
|
|
11
|
+
export interface ProcedureFacts {
|
|
12
|
+
/** The hash of the manifest that the host gives (`procedure.manifest`). */
|
|
13
|
+
readonly hash: string;
|
|
14
|
+
/** The keys of the procedures that take raw input, without the control-flow procedures. */
|
|
15
|
+
readonly rawKeys: readonly string[];
|
|
16
|
+
/** The manifest entry of a path, or undefined when the source does not have the path. */
|
|
17
|
+
entry(path: ProcedurePath): ProcedureEntry | undefined;
|
|
18
|
+
/** True when the host lets a data-driven procedure call the path. */
|
|
19
|
+
exposed(path: ProcedurePath): boolean;
|
|
20
|
+
/** True when hydration gives the procedure its input raw (`rawInputRule()` of the client). */
|
|
21
|
+
rawInput(path: ProcedurePath): boolean;
|
|
22
|
+
/** The program of a procedure that `procedure.define` made, when the source can see it. */
|
|
23
|
+
body(path: ProcedurePath): unknown;
|
|
24
|
+
/** The core procedure at the path, when the entry describes exactly that procedure. */
|
|
25
|
+
core(path: ProcedurePath): AnyProcedure | undefined;
|
|
26
|
+
}
|
|
27
|
+
/** A registry, as the compiler reads it. */
|
|
28
|
+
export interface RegistryLike {
|
|
29
|
+
get(path: ProcedurePath): AnyProcedure | undefined;
|
|
30
|
+
getAll(): AnyProcedure[];
|
|
31
|
+
}
|
|
32
|
+
/** The options of the fact sources. */
|
|
33
|
+
export interface FactsOptions {
|
|
34
|
+
/** The expose rule of the host. The default exposes each procedure. */
|
|
35
|
+
readonly expose?: ((path: ProcedurePath) => boolean) | undefined;
|
|
36
|
+
}
|
|
37
|
+
/** True when an entry takes its input raw: the rule of `takesRawInput()`, from the manifest. */
|
|
38
|
+
export declare function entryTakesRawInput(entry: ProcedureEntry): boolean;
|
|
39
|
+
/** True when the path elements are strings: only such a path can name a procedure. */
|
|
40
|
+
export declare function isStringPath(path: readonly unknown[]): path is ProcedurePath;
|
|
41
|
+
/**
|
|
42
|
+
* This function gives the core procedure that an entry describes. The entry must be the same as
|
|
43
|
+
* the description of the core procedure: a host can register a different procedure at a core path.
|
|
44
|
+
*/
|
|
45
|
+
export declare function coreProcedureOf(entry: ProcedureEntry | undefined): AnyProcedure | undefined;
|
|
46
|
+
/** The facts of a manifest. The manifest has only the procedures that its host exposes. */
|
|
47
|
+
export declare function manifestFacts(manifest: ProcedureManifest, options?: FactsOptions): ProcedureFacts;
|
|
48
|
+
/**
|
|
49
|
+
* The facts of a registry. The entries include the procedures that the host does not expose, so
|
|
50
|
+
* the check can tell "not exposed" from "unknown". The hash is the hash of `procedure.manifest` on
|
|
51
|
+
* the host: the manifest of the exposed procedures.
|
|
52
|
+
*/
|
|
53
|
+
export declare function registryFacts(registry: RegistryLike, options?: FactsOptions): ProcedureFacts;
|
|
54
|
+
/**
|
|
55
|
+
* The facts with the procedures that the program defines (`procedure.define` with a literal path
|
|
56
|
+
* and body). A later call of such a path is known, and its body gives its effects.
|
|
57
|
+
*/
|
|
58
|
+
export declare function withDefinitions(facts: ProcedureFacts, definitions: ReadonlyMap<string, Definition>): ProcedureFacts;
|
|
59
|
+
/** A procedure that the program defines with `procedure.define`. */
|
|
60
|
+
export interface Definition {
|
|
61
|
+
readonly entry: ProcedureEntry;
|
|
62
|
+
readonly body: unknown;
|
|
63
|
+
/** The pointer of the aggregation in the program. */
|
|
64
|
+
readonly pointer: string;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=facts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../src/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAUL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAEpC,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yFAAyF;IACzF,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,SAAS,CAAC;IACvD,qEAAqE;IACrE,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;IACtC,8FAA8F;IAC9F,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;IACvC,2FAA2F;IAC3F,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;IACnC,uFAAuF;IACvF,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;CACrD;AAED,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;IACnD,MAAM,IAAI,YAAY,EAAE,CAAC;CAC1B;AAED,uCAAuC;AACvC,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAClE;AAED,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAGjE;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,IAAI,aAAa,CAE5E;AAcD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAI3F;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,GAAE,YAAiB,GAAG,cAAc,CAkBrG;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,GAAE,YAAiB,GAAG,cAAc,CAahG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,cAAc,CAmBnH;AAED,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B"}
|
package/dist/facts.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The facts about procedures that the compiler reads. They are the manifest entry of a path,
|
|
3
|
+
* the expose rule, the raw-input rule and the body of a defined procedure.
|
|
4
|
+
*
|
|
5
|
+
* A browser has only a manifest (`procedure.manifest`, roadmap R17). A host has the registry.
|
|
6
|
+
* The two functions of this module give the same facts from each source, so the passes do not
|
|
7
|
+
* know the source.
|
|
8
|
+
*/
|
|
9
|
+
import { allCoreProcedures, describeProcedureEntry, describeRegistry, hashOf, isControlFlowPath, pathToKey, runtimeProgramOf, RAW_INPUT_TAG, RUNS_REFS_TAG, } from "@procedures/client/browser";
|
|
10
|
+
/** True when an entry takes its input raw: the rule of `takesRawInput()`, from the manifest. */
|
|
11
|
+
export function entryTakesRawInput(entry) {
|
|
12
|
+
const tags = entry.tags ?? [];
|
|
13
|
+
return isControlFlowPath(entry.path) || tags.includes(RUNS_REFS_TAG) || tags.includes(RAW_INPUT_TAG);
|
|
14
|
+
}
|
|
15
|
+
/** True when the path elements are strings: only such a path can name a procedure. */
|
|
16
|
+
export function isStringPath(path) {
|
|
17
|
+
return path.every((segment) => typeof segment === "string");
|
|
18
|
+
}
|
|
19
|
+
let coreDescriptions;
|
|
20
|
+
/** The core procedures by key, with the hash of their manifest entries. */
|
|
21
|
+
function coreByKey() {
|
|
22
|
+
if (!coreDescriptions) {
|
|
23
|
+
coreDescriptions = new Map(allCoreProcedures.map((procedure) => [pathToKey(procedure.path), { procedure, hash: hashOf(describeProcedureEntry(procedure)) }]));
|
|
24
|
+
}
|
|
25
|
+
return coreDescriptions;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* This function gives the core procedure that an entry describes. The entry must be the same as
|
|
29
|
+
* the description of the core procedure: a host can register a different procedure at a core path.
|
|
30
|
+
*/
|
|
31
|
+
export function coreProcedureOf(entry) {
|
|
32
|
+
if (!entry)
|
|
33
|
+
return undefined;
|
|
34
|
+
const core = coreByKey().get(entry.key);
|
|
35
|
+
return core && core.hash === hashOf(entry) ? core.procedure : undefined;
|
|
36
|
+
}
|
|
37
|
+
/** The facts of a manifest. The manifest has only the procedures that its host exposes. */
|
|
38
|
+
export function manifestFacts(manifest, options = {}) {
|
|
39
|
+
const byKey = new Map(manifest.procedures.map((entry) => [entry.key, entry]));
|
|
40
|
+
const expose = options.expose;
|
|
41
|
+
const rawKeys = manifest.procedures.filter((entry) => entryTakesRawInput(entry) && !isControlFlowPath(entry.path)).map((entry) => entry.key);
|
|
42
|
+
// The key of a path, as the registry finds it: the segments joined with dots, also for a segment that is not a string
|
|
43
|
+
const lookup = (path) => byKey.get(pathToKey(path));
|
|
44
|
+
return {
|
|
45
|
+
hash: manifest.hash,
|
|
46
|
+
rawKeys,
|
|
47
|
+
entry: lookup,
|
|
48
|
+
exposed: (path) => (expose ? expose(path) : true),
|
|
49
|
+
rawInput: (path) => {
|
|
50
|
+
const entry = lookup(path);
|
|
51
|
+
return entry ? entryTakesRawInput(entry) : isControlFlowPath(path);
|
|
52
|
+
},
|
|
53
|
+
body: () => undefined,
|
|
54
|
+
core: (path) => coreProcedureOf(lookup(path)),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The facts of a registry. The entries include the procedures that the host does not expose, so
|
|
59
|
+
* the check can tell "not exposed" from "unknown". The hash is the hash of `procedure.manifest` on
|
|
60
|
+
* the host: the manifest of the exposed procedures.
|
|
61
|
+
*/
|
|
62
|
+
export function registryFacts(registry, options = {}) {
|
|
63
|
+
const manifest = describeRegistry(registry, { withoutHandler: true });
|
|
64
|
+
const expose = options.expose;
|
|
65
|
+
const exposedEntries = manifest.procedures.filter((entry) => entry.hasHandler && (!expose || expose(entry.path)));
|
|
66
|
+
const facts = manifestFacts({ ...manifest, hash: hashOf(exposedEntries) }, options);
|
|
67
|
+
return {
|
|
68
|
+
...facts,
|
|
69
|
+
body: (path) => {
|
|
70
|
+
if (!isStringPath(path))
|
|
71
|
+
return undefined;
|
|
72
|
+
const procedure = registry.get(path);
|
|
73
|
+
return procedure ? runtimeProgramOf(procedure) : undefined;
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The facts with the procedures that the program defines (`procedure.define` with a literal path
|
|
79
|
+
* and body). A later call of such a path is known, and its body gives its effects.
|
|
80
|
+
*/
|
|
81
|
+
export function withDefinitions(facts, definitions) {
|
|
82
|
+
if (definitions.size === 0)
|
|
83
|
+
return facts;
|
|
84
|
+
const defined = (path) => (isStringPath(path) ? definitions.get(pathToKey(path)) : undefined);
|
|
85
|
+
const definedRaw = [...definitions.values()].filter((definition) => entryTakesRawInput(definition.entry)).map((definition) => definition.entry.key);
|
|
86
|
+
return {
|
|
87
|
+
hash: facts.hash,
|
|
88
|
+
rawKeys: [...new Set([...facts.rawKeys, ...definedRaw])],
|
|
89
|
+
entry: (path) => defined(path)?.entry ?? facts.entry(path),
|
|
90
|
+
exposed: (path) => facts.exposed(path),
|
|
91
|
+
rawInput: (path) => {
|
|
92
|
+
const definition = defined(path);
|
|
93
|
+
return definition ? entryTakesRawInput(definition.entry) : facts.rawInput(path);
|
|
94
|
+
},
|
|
95
|
+
body: (path) => {
|
|
96
|
+
const definition = defined(path);
|
|
97
|
+
return definition ? definition.body : facts.body(path);
|
|
98
|
+
},
|
|
99
|
+
core: (path) => (defined(path) ? undefined : facts.core(path)),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facts.js","sourceRoot":"","sources":["../src/facts.ts"],"names":[],"mappings":"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"}
|
package/dist/fold.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fold pass (optional): a pure core call with a literal input becomes its value.
|
|
3
|
+
*
|
|
4
|
+
* The pass folds a call only when all of these conditions are true:
|
|
5
|
+
*
|
|
6
|
+
* - The manifest entry is the description of a core procedure of `@procedures/client`. Thus the
|
|
7
|
+
* host has the same code.
|
|
8
|
+
* - Its effects are `reads: []` and `writes: []`.
|
|
9
|
+
* - It does not take raw input, and it is not data-driven.
|
|
10
|
+
* - Its value is a primitive.
|
|
11
|
+
*
|
|
12
|
+
* The pass starts the procedure here with `invokeProcedure()`, so the validation and the output
|
|
13
|
+
* schema apply. A call that fails stays a call: the run gives its error.
|
|
14
|
+
*
|
|
15
|
+
* A folded call does not start at run time: an interceptor, a trace and the admission do not see
|
|
16
|
+
* it. A host that needs each call in its trace does not fold.
|
|
17
|
+
*/
|
|
18
|
+
import type { IRNode } from "./ir.js";
|
|
19
|
+
import type { ProcedureFacts } from "./facts.js";
|
|
20
|
+
/** The result of the pass: the new tree and the pointers of the folded calls. */
|
|
21
|
+
export interface FoldResult {
|
|
22
|
+
readonly root: IRNode;
|
|
23
|
+
readonly folded: readonly string[];
|
|
24
|
+
}
|
|
25
|
+
/** This function folds the pure core calls with literal inputs. */
|
|
26
|
+
export declare function foldProgram(root: IRNode, facts: ProcedureFacts): Promise<FoldResult>;
|
|
27
|
+
//# sourceMappingURL=fold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold.d.ts","sourceRoot":"","sources":["../src/fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAa,MAAM,EAA0B,MAAM,SAAS,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmCjD,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,mEAAmE;AACnE,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAyE1F"}
|
package/dist/fold.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fold pass (optional): a pure core call with a literal input becomes its value.
|
|
3
|
+
*
|
|
4
|
+
* The pass folds a call only when all of these conditions are true:
|
|
5
|
+
*
|
|
6
|
+
* - The manifest entry is the description of a core procedure of `@procedures/client`. Thus the
|
|
7
|
+
* host has the same code.
|
|
8
|
+
* - Its effects are `reads: []` and `writes: []`.
|
|
9
|
+
* - It does not take raw input, and it is not data-driven.
|
|
10
|
+
* - Its value is a primitive.
|
|
11
|
+
*
|
|
12
|
+
* The pass starts the procedure here with `invokeProcedure()`, so the validation and the output
|
|
13
|
+
* schema apply. A call that fails stays a call: the run gives its error.
|
|
14
|
+
*
|
|
15
|
+
* A folded call does not start at run time: an interceptor, a trace and the admission do not see
|
|
16
|
+
* it. A host that needs each call in its trace does not fold.
|
|
17
|
+
*/
|
|
18
|
+
import { invokeProcedure, isReadOnly, outputValue, effectsOf } from "@procedures/client/browser";
|
|
19
|
+
import { mergeExtra } from "./normalize.js";
|
|
20
|
+
/** The value of a node when it is fully known before the run. */
|
|
21
|
+
function staticValue(node) {
|
|
22
|
+
switch (node.kind) {
|
|
23
|
+
case "literal":
|
|
24
|
+
return { known: true, value: node.value };
|
|
25
|
+
case "object": {
|
|
26
|
+
const entries = [];
|
|
27
|
+
for (const entry of node.entries) {
|
|
28
|
+
const value = staticValue(entry.value);
|
|
29
|
+
if (!value.known)
|
|
30
|
+
return value;
|
|
31
|
+
entries.push([entry.key, value.value]);
|
|
32
|
+
}
|
|
33
|
+
return { known: true, value: Object.fromEntries(entries) };
|
|
34
|
+
}
|
|
35
|
+
case "array": {
|
|
36
|
+
const values = [];
|
|
37
|
+
for (const item of node.items) {
|
|
38
|
+
const value = staticValue(item);
|
|
39
|
+
if (!value.known)
|
|
40
|
+
return value;
|
|
41
|
+
values.push(value.value);
|
|
42
|
+
}
|
|
43
|
+
return { known: true, value: values };
|
|
44
|
+
}
|
|
45
|
+
default:
|
|
46
|
+
return { known: false };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function isPrimitive(value) {
|
|
50
|
+
return value === null || (typeof value !== "object" && typeof value !== "function" && typeof value !== "symbol");
|
|
51
|
+
}
|
|
52
|
+
/** This function folds the pure core calls with literal inputs. */
|
|
53
|
+
export async function foldProgram(root, facts) {
|
|
54
|
+
const folded = [];
|
|
55
|
+
const items = async (spec) => spec.kind === "list" ? { kind: "list", items: await Promise.all(spec.items.map(fold)) } : { kind: "value", value: await fold(spec.value) };
|
|
56
|
+
const tryFold = async (node) => {
|
|
57
|
+
const input = staticValue(node.input);
|
|
58
|
+
if (!input.known)
|
|
59
|
+
return node;
|
|
60
|
+
const entry = facts.entry(node.path);
|
|
61
|
+
const procedure = facts.core(node.path);
|
|
62
|
+
if (!entry || !procedure || entry.dataDriven || facts.rawInput(node.path))
|
|
63
|
+
return node;
|
|
64
|
+
const effects = effectsOf(procedure);
|
|
65
|
+
if (!isReadOnly(effects) || (effects?.reads ?? ["unknown"]).length > 0)
|
|
66
|
+
return node;
|
|
67
|
+
try {
|
|
68
|
+
const value = await outputValue(await invokeProcedure(procedure, mergeExtra(input.value, node.extra)), node.path);
|
|
69
|
+
if (!isPrimitive(value))
|
|
70
|
+
return node;
|
|
71
|
+
folded.push(node.pointer);
|
|
72
|
+
const literal = { kind: "literal", value, origin: "fold", pointer: node.pointer };
|
|
73
|
+
return literal;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return node;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const fold = async (node) => {
|
|
80
|
+
switch (node.kind) {
|
|
81
|
+
case "literal":
|
|
82
|
+
case "reference":
|
|
83
|
+
case "fail":
|
|
84
|
+
return node;
|
|
85
|
+
case "object":
|
|
86
|
+
return { ...node, entries: await Promise.all(node.entries.map(async (entry) => ({ key: entry.key, value: await fold(entry.value) }))) };
|
|
87
|
+
case "array":
|
|
88
|
+
return { ...node, items: await Promise.all(node.items.map(fold)) };
|
|
89
|
+
case "call":
|
|
90
|
+
return tryFold({ ...node, input: await fold(node.input) });
|
|
91
|
+
case "deferred":
|
|
92
|
+
return { ...node, input: await fold(node.input) };
|
|
93
|
+
case "dynamic":
|
|
94
|
+
return node;
|
|
95
|
+
case "chain": {
|
|
96
|
+
const steps = [];
|
|
97
|
+
for (const step of node.steps)
|
|
98
|
+
steps.push({ ...step, node: await fold(step.node) });
|
|
99
|
+
return { ...node, steps, initialInput: node.initialInput ? await fold(node.initialInput) : undefined };
|
|
100
|
+
}
|
|
101
|
+
case "parallel":
|
|
102
|
+
return { ...node, tasks: await Promise.all(node.tasks.map(fold)) };
|
|
103
|
+
case "conditional":
|
|
104
|
+
return {
|
|
105
|
+
...node,
|
|
106
|
+
condition: await fold(node.condition),
|
|
107
|
+
then: node.then ? await fold(node.then) : undefined,
|
|
108
|
+
else: node.else ? await fold(node.else) : undefined,
|
|
109
|
+
};
|
|
110
|
+
case "try":
|
|
111
|
+
return { ...node, try: await fold(node.try), catch: await fold(node.catch) };
|
|
112
|
+
case "and":
|
|
113
|
+
case "or":
|
|
114
|
+
return { ...node, values: await Promise.all(node.values.map(fold)) };
|
|
115
|
+
case "map":
|
|
116
|
+
return { ...node, items: await items(node.items), fn: node.fn ? await fold(node.fn) : undefined };
|
|
117
|
+
case "reduce":
|
|
118
|
+
return {
|
|
119
|
+
...node,
|
|
120
|
+
items: node.items ? await items(node.items) : undefined,
|
|
121
|
+
initial: await fold(node.initial),
|
|
122
|
+
fn: node.fn ? await fold(node.fn) : undefined,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
return { root: await fold(root), folded };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=fold.js.map
|
package/dist/fold.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold.js","sourceRoot":"","sources":["../src/fold.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export * from "./module.js";
|
|
2
|
+
export * from "./types.js";
|
|
3
|
+
export { checkProgram, compileProgram } from "./program.js";
|
|
4
|
+
export { programCheckInterceptor } from "./interceptor.js";
|
|
5
|
+
export { toMermaid, diagramProgram, mermaidText } from "./mermaid.js";
|
|
6
|
+
export type { MermaidOptions, DiagramResult } from "./mermaid.js";
|
|
7
|
+
export { explainProgram } from "./explain.js";
|
|
8
|
+
export type { CallExplanation, CallKind, ProgramExplanation } from "./explain.js";
|
|
9
|
+
export { toOpenRpc, OPENRPC_VERSION } from "./openrpc.js";
|
|
10
|
+
export type { OpenRpcDocument, OpenRpcMethod, OpenRpcContentDescriptor, OpenRpcOptions } from "./openrpc.js";
|
|
11
|
+
export { toTypeScriptSdk, schemaToType } from "./typescript-sdk.js";
|
|
12
|
+
export type { TypeScriptSdkOptions } from "./typescript-sdk.js";
|
|
13
|
+
export type { ProgramCheckOptions, ObservableRegistry } from "./interceptor.js";
|
|
14
|
+
export type { CheckOptions, CheckResult, CompileOptions, CompileResult, MustEffects } from "./program.js";
|
|
15
|
+
export { manifestFacts, registryFacts, withDefinitions, coreProcedureOf, entryTakesRawInput } from "./facts.js";
|
|
16
|
+
export type { ProcedureFacts, RegistryLike, FactsOptions, Definition } from "./facts.js";
|
|
17
|
+
export { normalize, findDefinitions, MAX_REF_DEPTH } from "./normalize.js";
|
|
18
|
+
export type { NormalizeOptions, NormalizeResult } from "./normalize.js";
|
|
19
|
+
export { resolveScopes } from "./scopes.js";
|
|
20
|
+
export { inferEffects, toEffects, NO_EFFECTS, UNKNOWN_EFFECTS } from "./effects.js";
|
|
21
|
+
export type { EffectSummary, EffectsAnalysis, MayEffects, MustEffects as MustEffectSets, BodyEffects } from "./effects.js";
|
|
22
|
+
export { checkCalls } from "./checks.js";
|
|
23
|
+
export { checkShape, shapeOf } from "./schema.js";
|
|
24
|
+
export type { Shape, SchemaIssue } from "./schema.js";
|
|
25
|
+
export { foldProgram } from "./fold.js";
|
|
26
|
+
export { compileClosure } from "./codegen-closure.js";
|
|
27
|
+
export { emitText } from "./codegen-text.js";
|
|
28
|
+
export type { ProgramText, SourceMapLine, TextOptions } from "./codegen-text.js";
|
|
29
|
+
export { printIR } from "./print.js";
|
|
30
|
+
export { hasErrors, sortDiagnostics } from "./diagnostics.js";
|
|
31
|
+
export type { Diagnostic, DiagnosticCode, Severity } from "./diagnostics.js";
|
|
32
|
+
export { childPointer, childrenOf, isCallLike, isControl, walk } from "./ir.js";
|
|
33
|
+
export type * from "./ir.js";
|
|
34
|
+
export type { CompiledProgram, ProgramContext, RuntimeFrame } from "./runtime.js";
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChH,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,IAAI,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3H,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAChF,mBAAmB,SAAS,CAAC;AAC7B,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// The root registers nothing: import "<package>/register", or give the module to createRegistry()
|
|
2
|
+
export * from "./module.js";
|
|
3
|
+
export * from "./types.js";
|
|
4
|
+
export { checkProgram, compileProgram } from "./program.js";
|
|
5
|
+
export { programCheckInterceptor } from "./interceptor.js";
|
|
6
|
+
export { toMermaid, diagramProgram, mermaidText } from "./mermaid.js";
|
|
7
|
+
export { explainProgram } from "./explain.js";
|
|
8
|
+
export { toOpenRpc, OPENRPC_VERSION } from "./openrpc.js";
|
|
9
|
+
export { toTypeScriptSdk, schemaToType } from "./typescript-sdk.js";
|
|
10
|
+
export { manifestFacts, registryFacts, withDefinitions, coreProcedureOf, entryTakesRawInput } from "./facts.js";
|
|
11
|
+
export { normalize, findDefinitions, MAX_REF_DEPTH } from "./normalize.js";
|
|
12
|
+
export { resolveScopes } from "./scopes.js";
|
|
13
|
+
export { inferEffects, toEffects, NO_EFFECTS, UNKNOWN_EFFECTS } from "./effects.js";
|
|
14
|
+
export { checkCalls } from "./checks.js";
|
|
15
|
+
export { checkShape, shapeOf } from "./schema.js";
|
|
16
|
+
export { foldProgram } from "./fold.js";
|
|
17
|
+
export { compileClosure } from "./codegen-closure.js";
|
|
18
|
+
export { emitText } from "./codegen-text.js";
|
|
19
|
+
export { printIR } from "./print.js";
|
|
20
|
+
export { hasErrors, sortDiagnostics } from "./diagnostics.js";
|
|
21
|
+
export { childPointer, childrenOf, isCallLike, isControl, walk } from "./ir.js";
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIpE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The check before the run, as an interceptor of a host (roadmap R22).
|
|
3
|
+
*
|
|
4
|
+
* A host calls a data-driven procedure (`client.chain`, `client.map`, a procedure that
|
|
5
|
+
* `procedure.define` made) with a program in its input. Without the check, the interpreter finds
|
|
6
|
+
* a problem only when it arrives there: step 1 can write a file before step 3 meets a refusal.
|
|
7
|
+
* The interceptor checks the whole program before the first step. When the check finds an error,
|
|
8
|
+
* the host refuses the call, and no step starts.
|
|
9
|
+
*
|
|
10
|
+
* The check is conservative. It refuses a call that a branch can make, also a branch that does
|
|
11
|
+
* not run. A `client.tryCatch` around a refused call does not help: the program does not start.
|
|
12
|
+
*
|
|
13
|
+
* A call of `procedure.define` gets the check of its body. The host refuses a body with an
|
|
14
|
+
* error, and gives the effects of the body to `procedure.define`, which keeps them as
|
|
15
|
+
* `inferredEffects`. Then the tool of a defined procedure has the right hints.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const server = new ProcedureServer({
|
|
20
|
+
* registry,
|
|
21
|
+
* expose,
|
|
22
|
+
* interceptors: [programCheckInterceptor({ registry, expose })],
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { type AnyProcedure, type Interceptor, type Invocation, type ProcedurePath } from "@procedures/client/browser";
|
|
27
|
+
import { type RegistryLike } from "./facts.js";
|
|
28
|
+
import { type CheckResult } from "./program.js";
|
|
29
|
+
import type { Diagnostic } from "./diagnostics.js";
|
|
30
|
+
/** A registry that tells when its procedures change, so the interceptor can make its facts again. */
|
|
31
|
+
export interface ObservableRegistry extends RegistryLike {
|
|
32
|
+
on?(event: "register" | "unregister", listener: (procedure: AnyProcedure) => void): void;
|
|
33
|
+
}
|
|
34
|
+
/** The options of `programCheckInterceptor()`. */
|
|
35
|
+
export interface ProgramCheckOptions {
|
|
36
|
+
/** The registry of the host. */
|
|
37
|
+
readonly registry: ObservableRegistry;
|
|
38
|
+
/** The expose rule of the host. The default exposes each procedure. */
|
|
39
|
+
readonly expose?: ((path: ProcedurePath) => boolean) | undefined;
|
|
40
|
+
/** The diagnostics that refuse a program. The default refuses each error. */
|
|
41
|
+
readonly refuses?: ((diagnostic: Diagnostic) => boolean) | undefined;
|
|
42
|
+
/** This function gets each result of the check (for logs and tests). */
|
|
43
|
+
readonly onCheck?: ((invocation: Invocation, result: CheckResult) => void) | undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* This function gives an interceptor that checks the program of each call of the host to a
|
|
47
|
+
* data-driven procedure, before the procedure starts. A nested call is a part of a program that
|
|
48
|
+
* the check examined already, so the interceptor does not check it again.
|
|
49
|
+
*/
|
|
50
|
+
export declare function programCheckInterceptor(options: ProgramCheckOptions): Interceptor;
|
|
51
|
+
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAML,KAAK,YAAY,EAEjB,KAAK,WAAW,EAChB,KAAK,UAAU,EAEf,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,qGAAqG;AACrG,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC;CAC1F;AAED,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACjE,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACrE,wEAAwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACxF;AA6CD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,GAAG,WAAW,CAwCjF"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The check before the run, as an interceptor of a host (roadmap R22).
|
|
3
|
+
*
|
|
4
|
+
* A host calls a data-driven procedure (`client.chain`, `client.map`, a procedure that
|
|
5
|
+
* `procedure.define` made) with a program in its input. Without the check, the interpreter finds
|
|
6
|
+
* a problem only when it arrives there: step 1 can write a file before step 3 meets a refusal.
|
|
7
|
+
* The interceptor checks the whole program before the first step. When the check finds an error,
|
|
8
|
+
* the host refuses the call, and no step starts.
|
|
9
|
+
*
|
|
10
|
+
* The check is conservative. It refuses a call that a branch can make, also a branch that does
|
|
11
|
+
* not run. A `client.tryCatch` around a refused call does not help: the program does not start.
|
|
12
|
+
*
|
|
13
|
+
* A call of `procedure.define` gets the check of its body. The host refuses a body with an
|
|
14
|
+
* error, and gives the effects of the body to `procedure.define`, which keeps them as
|
|
15
|
+
* `inferredEffects`. Then the tool of a defined procedure has the right hints.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const server = new ProcedureServer({
|
|
20
|
+
* registry,
|
|
21
|
+
* expose,
|
|
22
|
+
* interceptors: [programCheckInterceptor({ registry, expose })],
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { INFERRED_EFFECTS_METADATA_KEY, InvocationError, effectsValue, isDataDriven, pathToKey, } from "@procedures/client/browser";
|
|
27
|
+
import { registryFacts } from "./facts.js";
|
|
28
|
+
import { checkProgram } from "./program.js";
|
|
29
|
+
/** The error code of the interpreter for the same problem, so a client sees one code. */
|
|
30
|
+
function codeOf(diagnostic) {
|
|
31
|
+
switch (diagnostic.code) {
|
|
32
|
+
case "not-exposed":
|
|
33
|
+
return "NOT_EXPOSED";
|
|
34
|
+
case "unknown-procedure":
|
|
35
|
+
return "NOT_FOUND";
|
|
36
|
+
case "capability-refused":
|
|
37
|
+
case "effects-unknown":
|
|
38
|
+
return "FORBIDDEN";
|
|
39
|
+
default:
|
|
40
|
+
return "VALIDATION_ERROR";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const REASONS = ["effects-undeclared", "effects-exceeded", "clearance", "deadline"];
|
|
44
|
+
/** The reason of a `FORBIDDEN` refusal: the diagnostic names it in its message. */
|
|
45
|
+
function reasonOf(diagnostic) {
|
|
46
|
+
if (diagnostic.code === "effects-unknown")
|
|
47
|
+
return "effects-undeclared";
|
|
48
|
+
if (diagnostic.code !== "capability-refused")
|
|
49
|
+
return undefined;
|
|
50
|
+
return REASONS.find((reason) => diagnostic.message.includes(`(${reason})`));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The place of a problem for the caller. The check examines `{ $proc, input }`, and the caller
|
|
54
|
+
* sent only the input, so a pointer into the input loses its `/input` part.
|
|
55
|
+
*/
|
|
56
|
+
function placeOf(pointer) {
|
|
57
|
+
if (pointer === "" || pointer === "/$proc")
|
|
58
|
+
return "the call";
|
|
59
|
+
if (pointer === "/input")
|
|
60
|
+
return "the input";
|
|
61
|
+
if (pointer.startsWith("/input/"))
|
|
62
|
+
return `${pointer.slice("/input".length)} of the input`;
|
|
63
|
+
return pointer;
|
|
64
|
+
}
|
|
65
|
+
/** The text of a refusal: the first problem with its place, and the number of the others. */
|
|
66
|
+
function messageOf(refused) {
|
|
67
|
+
const first = refused[0];
|
|
68
|
+
const where = placeOf(first.pointer);
|
|
69
|
+
const more = refused.length > 1 ? ` The check found ${refused.length - 1} more problem${refused.length > 2 ? "s" : ""}.` : "";
|
|
70
|
+
return `The check before the run refused the program, and no step started. ${first.code} at ${where}: ${first.message}${more}`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* This function gives an interceptor that checks the program of each call of the host to a
|
|
74
|
+
* data-driven procedure, before the procedure starts. A nested call is a part of a program that
|
|
75
|
+
* the check examined already, so the interceptor does not check it again.
|
|
76
|
+
*/
|
|
77
|
+
export function programCheckInterceptor(options) {
|
|
78
|
+
const refuses = options.refuses ?? ((diagnostic) => diagnostic.severity === "error");
|
|
79
|
+
// The facts of the registry cost a description of each procedure: keep them until it changes
|
|
80
|
+
let facts;
|
|
81
|
+
const reset = () => {
|
|
82
|
+
facts = undefined;
|
|
83
|
+
};
|
|
84
|
+
options.registry.on?.("register", reset);
|
|
85
|
+
options.registry.on?.("unregister", reset);
|
|
86
|
+
return async (invocation, next) => {
|
|
87
|
+
if (pathToKey(invocation.path) === "procedure.define") {
|
|
88
|
+
const aggregation = invocation.input?.aggregation;
|
|
89
|
+
if (aggregation === undefined)
|
|
90
|
+
return next();
|
|
91
|
+
facts ??= registryFacts(options.registry, { expose: options.expose });
|
|
92
|
+
const body = checkProgram(aggregation, { facts, expose: options.expose, mode: "body" });
|
|
93
|
+
options.onCheck?.(invocation, body);
|
|
94
|
+
// A nested definition is a part of a program that the check examined already
|
|
95
|
+
const refused = invocation.depth === 0 ? body.diagnostics.filter(refuses) : [];
|
|
96
|
+
if (refused.length > 0) {
|
|
97
|
+
const placed = refused.map((diagnostic) => ({ ...diagnostic, pointer: `/input/aggregation${diagnostic.pointer}` }));
|
|
98
|
+
throw new InvocationError(codeOf(placed[0]), messageOf(placed), invocation.path, reasonOf(placed[0]));
|
|
99
|
+
}
|
|
100
|
+
const effects = effectsValue(body.effects);
|
|
101
|
+
return effects ? next({ metadata: { ...invocation.metadata, [INFERRED_EFFECTS_METADATA_KEY]: effects } }) : next();
|
|
102
|
+
}
|
|
103
|
+
if (invocation.depth !== 0 || !isDataDriven(invocation.procedure))
|
|
104
|
+
return next();
|
|
105
|
+
facts ??= registryFacts(options.registry, { expose: options.expose });
|
|
106
|
+
const result = checkProgram({ $proc: invocation.path, input: invocation.input }, { facts, expose: options.expose, capability: invocation.capability });
|
|
107
|
+
options.onCheck?.(invocation, result);
|
|
108
|
+
const refused = result.diagnostics.filter(refuses);
|
|
109
|
+
if (refused.length > 0) {
|
|
110
|
+
const first = refused[0];
|
|
111
|
+
throw new InvocationError(codeOf(first), messageOf(refused), invocation.path, reasonOf(first));
|
|
112
|
+
}
|
|
113
|
+
return next();
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"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"}
|