@mark1russell7/coeval 0.3.1 → 0.3.2
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/build/index.d.ts.map +1 -1
- package/build/index.js +113 -37
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/doc.ts +7 -3
- package/src/evaluate.ts +46 -17
- package/src/formula.ts +12 -5
- package/src/parts.ts +7 -1
- package/src/static.ts +27 -14
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["Shape","Part"],"sources":["../src/doc.ts","../src/errors.ts","../src/world.ts","../src/ladder.ts","../src/deref.ts","../src/classify.ts","../src/parts.ts","../src/evaluate.ts","../src/stdlib.ts","../src/order.ts","../src/context.ts","../src/static.ts","../src/formula.ts"],"mappings":";;KACY,mDAAmD;YAAmC,cAAA;;;KAGtF;YAAuC,cAAA;;;KAGvC;;;;;;;;;;;KAYA,4BAA4B;WAAmB;WAAsB,gBAAgB;;;;;;KAMrF;;WAED,MAAM;;WAEN,OAAO;;WAEP;;WAEA,MAAM,SAAS;;;qBAIb;;;;;;;;wBASG,SAAS,iBAAiB,SAAS;;;;;;;;wBAanC,MAAM,QAAQ,YAAY,cAAc;;;;;;;wBAUxC,MAAM,iBAAiB,SAAS;;;;;;;;wBAWhC,UAAU,iBAAiB,SAAS;;;;;;;wBAcpC,SAAS,MAAM,mBAAmB;;;;;;;wBAalC,SAAS,MAAM;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["Shape","Part"],"sources":["../src/doc.ts","../src/errors.ts","../src/world.ts","../src/ladder.ts","../src/deref.ts","../src/classify.ts","../src/parts.ts","../src/evaluate.ts","../src/stdlib.ts","../src/order.ts","../src/context.ts","../src/static.ts","../src/formula.ts"],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -70,6 +70,7 @@ function typePath(type) {
|
|
|
70
70
|
* @returns The text, for example `git.push`.
|
|
71
71
|
*/
|
|
72
72
|
function typeName(type) {
|
|
73
|
+
if (typeof type === "string") return type;
|
|
73
74
|
return typePath(type)?.join(".") ?? "(computed)";
|
|
74
75
|
}
|
|
75
76
|
function headerFits(value) {
|
|
@@ -88,9 +89,9 @@ function headerFits(value) {
|
|
|
88
89
|
* @returns `true` when the value has the form of an envelope.
|
|
89
90
|
*/
|
|
90
91
|
function isEnvelope(value) {
|
|
91
|
-
if (
|
|
92
|
-
for (const key in value) if (
|
|
93
|
-
return
|
|
92
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
93
|
+
for (const key in value) if (key !== "type" && key !== "value" && key !== "name" && key !== "own" && Object.hasOwn(value, key)) return false;
|
|
94
|
+
return isRecord(value) && headerFits(value);
|
|
94
95
|
}
|
|
95
96
|
/**
|
|
96
97
|
* This function reads a stored document: an envelope that also has the keys of a store, for example `{ _id, type,
|
|
@@ -1018,14 +1019,17 @@ var Bad = class {
|
|
|
1018
1019
|
this.at = at;
|
|
1019
1020
|
}
|
|
1020
1021
|
};
|
|
1022
|
+
/** This function sets an own data property. Only the key `__proto__` needs `defineProperty`. */
|
|
1021
1023
|
function setOwn$1(target, key, value) {
|
|
1022
|
-
Object.defineProperty(target, key, {
|
|
1024
|
+
if (key === "__proto__") Object.defineProperty(target, key, {
|
|
1023
1025
|
value,
|
|
1024
1026
|
enumerable: true,
|
|
1025
1027
|
writable: true,
|
|
1026
1028
|
configurable: true
|
|
1027
1029
|
});
|
|
1030
|
+
else target[key] = value;
|
|
1028
1031
|
}
|
|
1032
|
+
const NO_SLOTS = Object.freeze([]);
|
|
1029
1033
|
function hasSlots(template) {
|
|
1030
1034
|
return template.t !== "data";
|
|
1031
1035
|
}
|
|
@@ -1038,6 +1042,12 @@ function hasSlots(template) {
|
|
|
1038
1042
|
* @returns The parts and a way to fill their places, or the reason why the value does not have the shape.
|
|
1039
1043
|
*/
|
|
1040
1044
|
function splitParts(shape, value) {
|
|
1045
|
+
if (shape === void 0 || shape.shape === "none") return {
|
|
1046
|
+
ok: true,
|
|
1047
|
+
parts: NO_SLOTS,
|
|
1048
|
+
data: value,
|
|
1049
|
+
fill: () => value
|
|
1050
|
+
};
|
|
1041
1051
|
const parts = [];
|
|
1042
1052
|
const slot = (item, path, of) => {
|
|
1043
1053
|
parts.push({
|
|
@@ -1551,32 +1561,73 @@ function finish(c, meta, code, run) {
|
|
|
1551
1561
|
run: tracedRun
|
|
1552
1562
|
};
|
|
1553
1563
|
}
|
|
1564
|
+
/**
|
|
1565
|
+
* This function finds the evaluator of the verb `eval` without the record of the rungs, for a compilation without a
|
|
1566
|
+
* trace. It gives the same evaluator as `ask`: the own entry, then the kind, then the default of the world.
|
|
1567
|
+
*/
|
|
1568
|
+
function evaluatorOf(world, envelope, found) {
|
|
1569
|
+
const own = envelope?.own;
|
|
1570
|
+
const ownName = own !== void 0 && Object.hasOwn(own, "eval") ? own["eval"] : void 0;
|
|
1571
|
+
if (ownName !== void 0) return {
|
|
1572
|
+
name: ownName,
|
|
1573
|
+
unknown: false
|
|
1574
|
+
};
|
|
1575
|
+
if (!found.ok) return { unknown: true };
|
|
1576
|
+
const verbs = found.kind.verbs;
|
|
1577
|
+
const name = Object.hasOwn(verbs, "eval") ? verbs["eval"] : Object.hasOwn(world.defaults, "eval") ? world.defaults["eval"] : void 0;
|
|
1578
|
+
return name === void 0 ? { unknown: false } : {
|
|
1579
|
+
name,
|
|
1580
|
+
unknown: false
|
|
1581
|
+
};
|
|
1582
|
+
}
|
|
1583
|
+
/** The meta of a node of a compilation without a trace. Only a trace reads the meta of a node. */
|
|
1584
|
+
const NO_META = Object.freeze({
|
|
1585
|
+
path: [],
|
|
1586
|
+
doc: {
|
|
1587
|
+
type: "?",
|
|
1588
|
+
value: null
|
|
1589
|
+
},
|
|
1590
|
+
declared: false,
|
|
1591
|
+
answer: NO_ANSWER,
|
|
1592
|
+
side: "derive"
|
|
1593
|
+
});
|
|
1554
1594
|
function compileNode(c, value, place, declared, depth) {
|
|
1555
1595
|
const envelope = isEnvelope(value) ? value : void 0;
|
|
1556
1596
|
const doc = envelope ?? {
|
|
1557
1597
|
type: declared ?? "?",
|
|
1558
1598
|
value
|
|
1559
1599
|
};
|
|
1560
|
-
const meta0 = {
|
|
1600
|
+
const meta0 = c.traced ? {
|
|
1561
1601
|
path: place.map(String),
|
|
1562
1602
|
doc,
|
|
1563
1603
|
declared: envelope === void 0,
|
|
1564
1604
|
answer: NO_ANSWER,
|
|
1565
1605
|
side: "derive"
|
|
1566
|
-
};
|
|
1606
|
+
} : NO_META;
|
|
1567
1607
|
if (envelope === void 0 && declared === void 0) return failing(c, meta0, place, "#PART?", "The value has no envelope, and its position declares no type.");
|
|
1568
1608
|
if (depth > c.maxDepth) return failing(c, meta0, place, "#DEPTH!", `The nesting is deeper than ${c.maxDepth} documents.`);
|
|
1569
|
-
const
|
|
1570
|
-
const found = lookupKind(
|
|
1609
|
+
const world = c.machine.world;
|
|
1610
|
+
const found = lookupKind(world, doc.type);
|
|
1571
1611
|
const kind = found.ok ? found.kind : void 0;
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1612
|
+
let meta = meta0;
|
|
1613
|
+
let name;
|
|
1614
|
+
let unknown;
|
|
1615
|
+
if (c.traced) {
|
|
1616
|
+
const answer = ask(world, envelope ?? {}, "eval", declared === void 0 ? {} : { declaredType: declared });
|
|
1617
|
+
meta = {
|
|
1618
|
+
...meta0,
|
|
1619
|
+
answer,
|
|
1620
|
+
side: kind?.side ?? "derive"
|
|
1621
|
+
};
|
|
1622
|
+
name = answer.evaluator;
|
|
1623
|
+
unknown = answer.error === "unknown-kind";
|
|
1624
|
+
} else {
|
|
1625
|
+
const quick = evaluatorOf(world, envelope, found);
|
|
1626
|
+
name = quick.name;
|
|
1627
|
+
unknown = quick.unknown;
|
|
1628
|
+
}
|
|
1577
1629
|
const kindText = typeName(doc.type);
|
|
1578
|
-
if (
|
|
1579
|
-
const name = answer.evaluator;
|
|
1630
|
+
if (unknown) return failing(c, meta, place, "#KIND?", `The world has no kind ${kindText}.`);
|
|
1580
1631
|
const runners = c.machine.runners ?? {};
|
|
1581
1632
|
const runner = name !== void 0 && Object.hasOwn(runners, name) ? runners[name] : void 0;
|
|
1582
1633
|
const evaluator = name !== void 0 && Object.hasOwn(c.machine.evaluators, name) ? c.machine.evaluators[name] : void 0;
|
|
@@ -1587,12 +1638,18 @@ function compileNode(c, value, place, declared, depth) {
|
|
|
1587
1638
|
return failing(c, meta, place, "#VALUE!", `${split.reason}${at} The kind is ${kindText}.`);
|
|
1588
1639
|
}
|
|
1589
1640
|
const parts = split.parts.map((slot) => {
|
|
1590
|
-
const
|
|
1591
|
-
const
|
|
1592
|
-
|
|
1641
|
+
const item = slot.item;
|
|
1642
|
+
const compiled = compileNode(c, item, place.concat(slot.path), slot.of, depth + 1);
|
|
1643
|
+
const header = typeof item?.name === "string" && isEnvelope(item) ? item.name : void 0;
|
|
1644
|
+
return header === void 0 ? {
|
|
1593
1645
|
key: slot.key,
|
|
1594
1646
|
path: slot.path,
|
|
1595
|
-
|
|
1647
|
+
code: compiled.code,
|
|
1648
|
+
run: compiled.run
|
|
1649
|
+
} : {
|
|
1650
|
+
key: slot.key,
|
|
1651
|
+
path: slot.path,
|
|
1652
|
+
name: header,
|
|
1596
1653
|
code: compiled.code,
|
|
1597
1654
|
run: compiled.run
|
|
1598
1655
|
};
|
|
@@ -1608,7 +1665,6 @@ function compileNode(c, value, place, declared, depth) {
|
|
|
1608
1665
|
machine: c.machine,
|
|
1609
1666
|
fill: (items) => split.parts.length === 0 ? doc.value : split.fill(items)
|
|
1610
1667
|
};
|
|
1611
|
-
const who = `the evaluator ${name}`;
|
|
1612
1668
|
if (runner !== void 0) {
|
|
1613
1669
|
const inner = isCompiledRunner(runner) ? runner.compileRun(input) : interpretRun(runner, input, split.fill);
|
|
1614
1670
|
const run = function* (ctx, rt) {
|
|
@@ -1626,7 +1682,7 @@ function compileNode(c, value, place, declared, depth) {
|
|
|
1626
1682
|
try {
|
|
1627
1683
|
return placed(inner(ctx, rt), place);
|
|
1628
1684
|
} catch (error) {
|
|
1629
|
-
return placed(thrown(error,
|
|
1685
|
+
return placed(thrown(error, `the evaluator ${name}`), place);
|
|
1630
1686
|
}
|
|
1631
1687
|
};
|
|
1632
1688
|
return finish(c, meta, code, function* (ctx, rt) {
|
|
@@ -1729,8 +1785,8 @@ function prepare(machine, doc, options = {}) {
|
|
|
1729
1785
|
machine,
|
|
1730
1786
|
traced: c.traced,
|
|
1731
1787
|
root: compiled,
|
|
1732
|
-
evaluate(context = makeContext(), evalOptions
|
|
1733
|
-
const s = new Session(machine, false, c.traced, void 0, void 0, evalOptions
|
|
1788
|
+
evaluate(context = makeContext(), evalOptions) {
|
|
1789
|
+
const s = new Session(machine, false, c.traced, void 0, void 0, evalOptions?.effects);
|
|
1734
1790
|
return root.code(rootContext(machine, context), s);
|
|
1735
1791
|
},
|
|
1736
1792
|
run(context = makeContext(), runOptions = {}) {
|
|
@@ -2727,6 +2783,13 @@ function scopesOf(rules, value, slots) {
|
|
|
2727
2783
|
later
|
|
2728
2784
|
};
|
|
2729
2785
|
}
|
|
2786
|
+
/** The names of a walk without names. A walk does not change a set at any time: it makes a new set to add names. */
|
|
2787
|
+
const NO_NAMES = /* @__PURE__ */ new Set();
|
|
2788
|
+
/** This function gives the options of a walk without the names of the host. */
|
|
2789
|
+
function withoutNames(options) {
|
|
2790
|
+
const { names: _host, ...rest } = options;
|
|
2791
|
+
return rest;
|
|
2792
|
+
}
|
|
2730
2793
|
/**
|
|
2731
2794
|
* This function visits each document of a document: the root and each part at each depth, by the contracts of the
|
|
2732
2795
|
* kinds. A part of a kind that the world does not have is not visited. The walk uses no stack of the host for the
|
|
@@ -2738,14 +2801,15 @@ function scopesOf(rules, value, slots) {
|
|
|
2738
2801
|
* @param options - The type of a bare root value, the names of the host, and a function for the problems.
|
|
2739
2802
|
*/
|
|
2740
2803
|
function walk(world, doc, visit, options = {}) {
|
|
2804
|
+
const names = options.names === void 0 || options.names.length === 0 ? NO_NAMES : new Set(options.names);
|
|
2741
2805
|
const stack = [{
|
|
2742
2806
|
value: doc,
|
|
2743
2807
|
place: [],
|
|
2744
2808
|
at: [],
|
|
2745
2809
|
declared: options.declaredType,
|
|
2746
2810
|
depth: 0,
|
|
2747
|
-
names
|
|
2748
|
-
later:
|
|
2811
|
+
names,
|
|
2812
|
+
later: NO_NAMES
|
|
2749
2813
|
}];
|
|
2750
2814
|
while (stack.length > 0) {
|
|
2751
2815
|
const item = stack.pop();
|
|
@@ -2765,15 +2829,21 @@ function walk(world, doc, visit, options = {}) {
|
|
|
2765
2829
|
};
|
|
2766
2830
|
const found = lookupKind(world, doc.type);
|
|
2767
2831
|
const kind = found.ok ? found.kind : void 0;
|
|
2768
|
-
if (visit({
|
|
2832
|
+
if (visit(kind === void 0 ? {
|
|
2769
2833
|
place: item.place,
|
|
2770
2834
|
at: item.at,
|
|
2771
2835
|
doc,
|
|
2772
2836
|
declared: envelope === void 0,
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2837
|
+
depth: item.depth,
|
|
2838
|
+
names: item.names,
|
|
2839
|
+
later: item.later
|
|
2840
|
+
} : {
|
|
2841
|
+
place: item.place,
|
|
2842
|
+
at: item.at,
|
|
2843
|
+
doc,
|
|
2844
|
+
declared: envelope === void 0,
|
|
2845
|
+
kind,
|
|
2846
|
+
typePath: found.ok ? found.path : [],
|
|
2777
2847
|
depth: item.depth,
|
|
2778
2848
|
names: item.names,
|
|
2779
2849
|
later: item.later
|
|
@@ -2819,7 +2889,6 @@ function walk(world, doc, visit, options = {}) {
|
|
|
2819
2889
|
*/
|
|
2820
2890
|
function refsOf(world, doc, options = {}) {
|
|
2821
2891
|
const out = [];
|
|
2822
|
-
const { names: _host, ...rest } = options;
|
|
2823
2892
|
walk(world, doc, (v) => {
|
|
2824
2893
|
if (!isRef(v.doc)) return void 0;
|
|
2825
2894
|
const path = v.doc.value;
|
|
@@ -2834,7 +2903,7 @@ function refsOf(world, doc, options = {}) {
|
|
|
2834
2903
|
free: !bound
|
|
2835
2904
|
});
|
|
2836
2905
|
return "skip";
|
|
2837
|
-
},
|
|
2906
|
+
}, options.names === void 0 ? options : withoutNames(options));
|
|
2838
2907
|
return out;
|
|
2839
2908
|
}
|
|
2840
2909
|
function setAt(value, path, next) {
|
|
@@ -3021,13 +3090,18 @@ function jsTruthy(value) {
|
|
|
3021
3090
|
function strictTruthy(value) {
|
|
3022
3091
|
return typeof value === "boolean" ? value : void 0;
|
|
3023
3092
|
}
|
|
3093
|
+
/**
|
|
3094
|
+
* This function sets an own data property. Only the key `__proto__` needs `defineProperty`: an assignment to it
|
|
3095
|
+
* changes the prototype. An assignment is faster for each other key of a new plain object.
|
|
3096
|
+
*/
|
|
3024
3097
|
function setOwn(target, key, value) {
|
|
3025
|
-
Object.defineProperty(target, key, {
|
|
3098
|
+
if (key === "__proto__") Object.defineProperty(target, key, {
|
|
3026
3099
|
value,
|
|
3027
3100
|
enumerable: true,
|
|
3028
3101
|
writable: true,
|
|
3029
3102
|
configurable: true
|
|
3030
3103
|
});
|
|
3104
|
+
else target[key] = value;
|
|
3031
3105
|
}
|
|
3032
3106
|
function compiled(compile) {
|
|
3033
3107
|
return { compile };
|
|
@@ -3210,16 +3284,18 @@ function formulaEvaluators(profile = {}) {
|
|
|
3210
3284
|
};
|
|
3211
3285
|
}),
|
|
3212
3286
|
"formula.record": compiled(({ value }) => {
|
|
3213
|
-
const fields =
|
|
3287
|
+
const fields = partsOf(value);
|
|
3288
|
+
const keys = Object.keys(fields);
|
|
3289
|
+
const codes = keys.map((key) => fields[key].code);
|
|
3214
3290
|
return (ctx, rt) => {
|
|
3215
3291
|
const out = {};
|
|
3216
|
-
for (
|
|
3217
|
-
const result =
|
|
3292
|
+
for (let index = 0; index < keys.length; index += 1) {
|
|
3293
|
+
const result = codes[index](ctx, rt);
|
|
3218
3294
|
if (!result.ok) {
|
|
3219
3295
|
if (omit !== void 0 && omit(result.error)) continue;
|
|
3220
3296
|
return result;
|
|
3221
3297
|
}
|
|
3222
|
-
setOwn(out,
|
|
3298
|
+
setOwn(out, keys[index], result.value);
|
|
3223
3299
|
}
|
|
3224
3300
|
return ok(out);
|
|
3225
3301
|
};
|