footprintjs 9.44.3 → 9.45.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.
- package/CLAUDE.md +2 -1
- package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
- package/dist/esm/lib/memory/SharedMemory.d.ts +11 -10
- package/dist/esm/lib/memory/SharedMemory.js +19 -20
- package/dist/esm/lib/memory/StageContext.d.ts +7 -1
- package/dist/esm/lib/memory/StageContext.js +27 -14
- package/dist/esm/lib/memory/TransactionBuffer.d.ts +4 -3
- package/dist/esm/lib/memory/TransactionBuffer.js +5 -4
- package/dist/esm/lib/memory/utils.d.ts +11 -7
- package/dist/esm/lib/memory/utils.js +46 -28
- package/dist/lib/memory/DiagnosticCollector.js +2 -2
- package/dist/lib/memory/SharedMemory.js +19 -20
- package/dist/lib/memory/StageContext.js +27 -14
- package/dist/lib/memory/TransactionBuffer.js +5 -4
- package/dist/lib/memory/utils.js +46 -28
- package/dist/types/lib/memory/SharedMemory.d.ts +11 -10
- package/dist/types/lib/memory/StageContext.d.ts +7 -1
- package/dist/types/lib/memory/TransactionBuffer.d.ts +4 -3
- package/dist/types/lib/memory/utils.d.ts +11 -7
- package/package.json +1 -1
package/dist/lib/memory/utils.js
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
* (`merge.ts`) at L0, and the verb law (`verbs.ts`) at L1 — `applySmartMerge`,
|
|
12
12
|
* `nextGeneration`, `applySmartMergeInto`, `dryFold`, `supersededByNextSet`.
|
|
13
13
|
* The log's scrub, `redactPatch`, moved to its owner `redaction.ts` in 9.33.0.
|
|
14
|
+
* The writers take an ADDRESS, a path prefix their caller computed, and never
|
|
15
|
+
* name one (C2: the engine decides where a stage writes, `StageContext · address`).
|
|
14
16
|
* Zero external dependencies.
|
|
15
17
|
*/
|
|
16
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -31,54 +33,70 @@ Object.defineProperty(exports, "dryFold", { enumerable: true, get: function () {
|
|
|
31
33
|
Object.defineProperty(exports, "nextGeneration", { enumerable: true, get: function () { return verbs_js_1.nextGeneration; } });
|
|
32
34
|
Object.defineProperty(exports, "supersededByNextSet", { enumerable: true, get: function () { return verbs_js_1.supersededByNextSet; } });
|
|
33
35
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
+
* The two places a value at `path` can sit: under `address` (`runPath`, absent
|
|
37
|
+
* for the root address `[]`) and at the root (`globalPath`). `address` is a
|
|
38
|
+
* path prefix the caller computed — for the engine, a frame's run namespace
|
|
39
|
+
* (`StageContext · address`, C2).
|
|
36
40
|
*/
|
|
37
|
-
function getRunAndGlobalPaths(
|
|
41
|
+
function getRunAndGlobalPaths(address = [], path = []) {
|
|
38
42
|
return {
|
|
39
|
-
runPath:
|
|
43
|
+
runPath: addressOf(address).length > 0 ? pathUnder(address, path) : undefined,
|
|
40
44
|
globalPath: [...path],
|
|
41
45
|
};
|
|
42
46
|
}
|
|
43
47
|
exports.getRunAndGlobalPaths = getRunAndGlobalPaths;
|
|
48
|
+
/** An address is an array. A run id still passed in its place (C2) is refused, never spread into its characters. */
|
|
49
|
+
function addressOf(address) {
|
|
50
|
+
if (Array.isArray(address))
|
|
51
|
+
return address;
|
|
52
|
+
throw new TypeError(`footprintjs: an address is an array path prefix, got ${address === null ? 'null' : typeof address}`);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* `address` then `path`, as one new array. An index loop, because the double
|
|
56
|
+
* spread `[...address, ...path]` costs twice as much and a frame builds one on
|
|
57
|
+
* every read it serves from live state (a fork child reading a root key).
|
|
58
|
+
*/
|
|
59
|
+
function pathUnder(address, path) {
|
|
60
|
+
const out = new Array(address.length + path.length);
|
|
61
|
+
for (let i = 0; i < address.length; i++)
|
|
62
|
+
out[i] = address[i];
|
|
63
|
+
for (let i = 0; i < path.length; i++)
|
|
64
|
+
out[address.length + i] = path[i];
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
44
67
|
/**
|
|
45
|
-
*
|
|
68
|
+
* The container at `address` + `path` inside `obj`, each missing one created
|
|
69
|
+
* on the way: the one AT the address from `defaultValues` when given, every
|
|
70
|
+
* other one empty. The one walk both nested writers share.
|
|
46
71
|
*/
|
|
47
|
-
function
|
|
48
|
-
const
|
|
49
|
-
const path = runPath || globalPath;
|
|
50
|
-
const pathCopy = [...path];
|
|
72
|
+
function containerAt(obj, address = [], path = [], defaultValues) {
|
|
73
|
+
const segments = pathUnder(addressOf(address), path);
|
|
51
74
|
let current = obj;
|
|
52
|
-
|
|
53
|
-
const key =
|
|
75
|
+
for (let i = 0; i < segments.length; i++) {
|
|
76
|
+
const key = segments[i];
|
|
54
77
|
if (!Object.prototype.hasOwnProperty.call(current, key)) {
|
|
55
|
-
current[key] =
|
|
78
|
+
current[key] = i === address.length - 1 && defaultValues ? defaultValues : {};
|
|
56
79
|
}
|
|
57
80
|
current = current[key];
|
|
58
81
|
}
|
|
59
|
-
current
|
|
82
|
+
return current;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Sets a value at a nested path under `address`, creating intermediate objects as needed.
|
|
86
|
+
*/
|
|
87
|
+
function setNestedValue(obj, address, path, field, value, defaultValues) {
|
|
88
|
+
containerAt(obj, address, path, defaultValues)[field] = value;
|
|
60
89
|
return obj;
|
|
61
90
|
}
|
|
62
91
|
exports.setNestedValue = setNestedValue;
|
|
63
92
|
/**
|
|
64
|
-
* Deep-merges a value into the object at
|
|
93
|
+
* Deep-merges a value into the object at a nested path under `address`.
|
|
65
94
|
* - Arrays: concatenate
|
|
66
95
|
* - Objects: shallow merge at each level
|
|
67
96
|
* - Primitives: replace
|
|
68
97
|
*/
|
|
69
|
-
function updateNestedValue(obj,
|
|
70
|
-
|
|
71
|
-
const path = runPath || globalPath;
|
|
72
|
-
const pathCopy = [...path];
|
|
73
|
-
let current = obj;
|
|
74
|
-
while (pathCopy.length > 0) {
|
|
75
|
-
const key = pathCopy.shift();
|
|
76
|
-
if (!Object.prototype.hasOwnProperty.call(current, key)) {
|
|
77
|
-
current[key] = key === runId && defaultValues ? defaultValues : {};
|
|
78
|
-
}
|
|
79
|
-
current = current[key];
|
|
80
|
-
}
|
|
81
|
-
updateValue(current, field, value);
|
|
98
|
+
function updateNestedValue(obj, address, path, field, value, defaultValues) {
|
|
99
|
+
updateValue(containerAt(obj, address, path, defaultValues), field, value);
|
|
82
100
|
return obj;
|
|
83
101
|
}
|
|
84
102
|
exports.updateNestedValue = updateNestedValue;
|
|
@@ -129,4 +147,4 @@ function getNestedValue(root, path, field) {
|
|
|
129
147
|
return undefined;
|
|
130
148
|
}
|
|
131
149
|
exports.getNestedValue = getNestedValue;
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7O0FBRUgsNkNBQXVGO0FBSXZGLDZDQUEwQztBQUFqQyx3R0FBQSxTQUFTLE9BQUE7QUFDbEIsdUNBQTRDO0FBQW5DLDBHQUFBLGNBQWMsT0FBQTtBQUN2Qix1Q0FBZ0U7QUFBdkQsaUdBQUEsS0FBSyxPQUFBO0FBQUUseUdBQUEsYUFBYSxPQUFBO0FBQUUsd0dBQUEsWUFBWSxPQUFBO0FBQzNDLHVDQUFnSDtBQUF2RywyR0FBQSxlQUFlLE9BQUE7QUFBRSwrR0FBQSxtQkFBbUIsT0FBQTtBQUFFLG1HQUFBLE9BQU8sT0FBQTtBQUFFLDBHQUFBLGNBQWMsT0FBQTtBQUFFLCtHQUFBLG1CQUFtQixPQUFBO0FBSTNGOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEtBQWMsRUFBRSxPQUE0QixFQUFFO0lBQ2pGLE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUxELG9EQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLEdBQWlCLEVBQ2pCLEtBQWEsRUFDYixLQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQVEsRUFDUixhQUF1QjtJQUV2QixNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRSxNQUFNLElBQUksR0FBRyxPQUFPLElBQUksVUFBVSxDQUFDO0lBQ25DLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJ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R0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDakUsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDO0FBZEQsa0NBY0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxJQUFTLEVBQUUsSUFBeUIsRUFBRSxLQUF1QjtJQUMxRixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsc0JBQUksRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvRCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMzRCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuRyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQVBELHdDQU9DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB1dGlscy50cyDigJQgbmVzdGVkLW9iamVjdCBoZWxwZXJzIGZvciB0aGUgaGVhcCwgYW5kIHRoZSBtZW1vcnkgbGVhdmVzJyBvbmVcbiAqIHJlLWV4cG9ydCBzdXJmYWNlLlxuICpcbiAqIFRoZSBoZWxwZXJzIGhlcmUgKGBzZXROZXN0ZWRWYWx1ZWAsIGB1cGRhdGVOZXN0ZWRWYWx1ZWAsIGB1cGRhdGVWYWx1ZWAsXG4gKiBgZ2V0TmVzdGVkVmFsdWVgKSB3YWxrIGEgbmVzdGVkIG9iamVjdCBieSBwYXRoIHdpdGhcbiAqIHByb3RvdHlwZS1wb2xsdXRpb24gcHJvdGVjdGlvbi4gRXZlcnl0aGluZyBlbHNlIHRoaXMgZmlsZSB1c2VkIHRvIGhvbGQgaGFzIGFuXG4gKiBvd25lciBvZiBpdHMgb3duIGFuZCBpcyByZS1leHBvcnRlZCwgc28gbm8gaW1wb3J0ZXIgbW92ZWQ6IHRoZSBwYXRoIGNvZGVjXG4gKiAoYHBhdGhzLnRzYCksIHN0cnVjdHVyYWwgZXF1YWxpdHkgKGBlcXVhbGl0eS50c2ApIGFuZCB0aGUgdW5pb24gbWVyZ2VcbiAqIChgbWVyZ2UudHNgKSBhdCBMMCwgYW5kIHRoZSB2ZXJiIGxhdyAoYHZlcmJzLnRzYCkgYXQgTDEg4oCUIGBhcHBseVNtYXJ0TWVyZ2VgLFxuICogYG5leHRHZW5lcmF0aW9uYCwgYGFwcGx5U21hcnRNZXJnZUludG9gLCBgZHJ5Rm9sZGAsIGBzdXBlcnNlZGVkQnlOZXh0U2V0YC5cbiAqIFRoZSBsb2cncyBzY3J1YiwgYHJlZGFjdFBhdGNoYCwgbW92ZWQgdG8gaXRzIG93bmVyIGByZWRhY3Rpb24udHNgIGluIDkuMzMuMC5cbiAqIFplcm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBfZ2V0LCBuYXRpdmVIYXMgYXMgX2hhcywgbmF0aXZlU2V0IGFzIF9zZXQgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgREVMSU0gfSBmcm9tICcuL3BhdGhzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi9lcXVhbGl0eS5qcyc7XG5leHBvcnQgeyBkZWVwU21hcnRNZXJnZSB9IGZyb20gJy4vbWVyZ2UuanMnO1xuZXhwb3J0IHsgREVMSU0sIG5vcm1hbGlzZVBhdGgsIHBhdGhTZWdtZW50cyB9IGZyb20gJy4vcGF0aHMuanMnO1xuZXhwb3J0IHsgYXBwbHlTbWFydE1lcmdlLCBhcHBseVNtYXJ0TWVyZ2VJbnRvLCBkcnlGb2xkLCBuZXh0R2VuZXJhdGlvbiwgc3VwZXJzZWRlZEJ5TmV4dFNldCB9IGZyb20gJy4vdmVyYnMuanMnO1xuXG50eXBlIE5lc3RlZE9iamVjdCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKlxuICogUmVzb2x2ZXMgcnVuLW5hbWVzcGFjZWQgYW5kIGdsb2JhbCBwYXRocy5cbiAqIEVhY2ggZmxvd2NoYXJ0IGV4ZWN1dGlvbiAocnVuKSBzdG9yZXMgZGF0YSB1bmRlciBgcnVucy97aWR9L2AgdG8gcHJldmVudCBjb2xsaXNpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVuQW5kR2xvYmFsUGF0aHMocnVuSWQ/OiBzdHJpbmcsIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSkge1xuICByZXR1cm4ge1xuICAgIHJ1blBhdGg6IHJ1bklkID8gWydydW5zJywgcnVuSWQsIC4uLnBhdGhdIDogdW5kZWZpbmVkLFxuICAgIGdsb2JhbFBhdGg6IFsuLi5wYXRoXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBuZXN0ZWQgcGF0aCwgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIG9iamVjdHMgYXMgbmVlZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TmVzdGVkVmFsdWU8VD4oXG4gIG9iajogTmVzdGVkT2JqZWN0LFxuICBydW5JZDogc3RyaW5nLFxuICBfcGF0aDogc3RyaW5nW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBULFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IE5lc3RlZE9iamVjdCB7XG4gIGNvbnN0IHsgcnVuUGF0aCwgZ2xvYmFsUGF0aCB9ID0gZ2V0UnVuQW5kR2xvYmFsUGF0aHMocnVuSWQsIF9wYXRoKTtcbiAgY29uc3QgcGF0aCA9IHJ1blBhdGggfHwgZ2xvYmFsUGF0aDtcbiAgY29uc3QgcGF0aENvcHkgPSBbLi4ucGF0aF07XG4gIGxldCBjdXJyZW50OiBOZXN0ZWRPYmplY3QgPSBvYmo7XG4gIHdoaWxlIChwYXRoQ29weS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aENvcHkuc2hpZnQoKSBhcyBzdHJpbmc7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwga2V5KSkge1xuICAgICAgY3VycmVudFtrZXldID0ga2V5ID09PSBydW5JZCAmJiBkZWZhdWx0VmFsdWVzID8gZGVmYXVsdFZhbHVlcyA6IHt9O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICB9XG4gIGN1cnJlbnRbZmllbGRdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogRGVlcC1tZXJnZXMgYSB2YWx1ZSBpbnRvIHRoZSBvYmplY3QgYXQgdGhlIHNwZWNpZmllZCBwYXRoLlxuICogLSBBcnJheXM6IGNvbmNhdGVuYXRlXG4gKiAtIE9iamVjdHM6IHNoYWxsb3cgbWVyZ2UgYXQgZWFjaCBsZXZlbFxuICogLSBQcmltaXRpdmVzOiByZXBsYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVOZXN0ZWRWYWx1ZTxUPihcbiAgb2JqOiBhbnksXG4gIHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIF9wYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICBmaWVsZDogc3RyaW5nIHwgbnVtYmVyLFxuICB2YWx1ZTogVCxcbiAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4pOiBhbnkge1xuICBjb25zdCB7IHJ1blBhdGgsIGdsb2JhbFBhdGggfSA9IGdldFJ1bkFuZEdsb2JhbFBhdGhzKHJ1bklkLCBfcGF0aCk7XG4gIGNvbnN0IHBhdGggPSBydW5QYXRoIHx8IGdsb2JhbFBhdGg7XG4gIGNvbnN0IHBhdGhDb3B5ID0gWy4uLnBhdGhdO1xuICBsZXQgY3VycmVudDogTmVzdGVkT2JqZWN0ID0gb2JqO1xuICB3aGlsZSAocGF0aENvcHkubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGtleSA9IHBhdGhDb3B5LnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIGtleSkpIHtcbiAgICAgIGN1cnJlbnRba2V5XSA9IGtleSA9PT0gcnVuSWQgJiYgZGVmYXVsdFZhbHVlcyA/IGRlZmF1bHRWYWx1ZXMgOiB7fTtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgfVxuICB1cGRhdGVWYWx1ZShjdXJyZW50LCBmaWVsZCwgdmFsdWUpO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEluLXBsYWNlIHZhbHVlIHVwZGF0ZSB3aXRoIG1lcmdlIHNlbWFudGljcy5cbiAqIC0gQXJyYXlzIChub24tZW1wdHkpOiBjb25jYXRlbmF0ZSBvbnRvIGV4aXN0aW5nXG4gKiAtIEFycmF5cyAoZW1wdHkpOiAgICAgZGlyZWN0IHJlcGxhY2Ug4oCUIHdyaXRpbmcgYFtdYCBjbGVhcnMgdGhlIGZpZWxkXG4gKiAtIE9iamVjdHMgKG5vbi1lbXB0eSk6IHNoYWxsb3cgbWVyZ2UgKHNwcmVhZClcbiAqIC0gT2JqZWN0cyAoZW1wdHkpOiAgICBkaXJlY3QgcmVwbGFjZSDigJQgd3JpdGluZyBge31gIGNsZWFycyB0aGUgZmllbGRcbiAqIC0gUHJpbWl0aXZlczogZGlyZWN0IGFzc2lnbm1lbnRcbiAqXG4gKiBOb3RlIG9uIGVtcHR5IGFycmF5czogYm90aCBgdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSlgIGFuZFxuICogYEFycmF5LmlzQXJyYXkodmFsdWUpYCBldmFsdWF0ZSB0aGUgc2FtZSBmb3IgYXJyYXlzIOKAlCBgW11gIGlzIHRydXRoeSBpblxuICogSmF2YVNjcmlwdCwgc28gdGhlIGAmJmAgZ3VhcmQgd2FzIG5ldmVyIHRoZSBpc3N1ZS4gVGhlIGFjdHVhbCBidWcgd2FzIHRoZVxuICogY29uY2F0IHBhdGg6IGBbLi4uY3VyLCAuLi5bXV1gIHNpbGVudGx5IHJldHVybmVkIGBjdXJgIHVuY2hhbmdlZCB3aGVuIGB2YWx1ZWBcbiAqIHdhcyBgW11gLCBtYWtpbmcgYHVwZGF0ZVZhbHVlKG9iaiwgJ3RhZ3MnLCBbXSlgIGEgbm8tb3AgaW5zdGVhZCBvZiBhIGNsZWFyLlxuICogVGhlIGZpeCBpcyB0aGUgZXhwbGljaXQgYHZhbHVlLmxlbmd0aCA9PT0gMGAgZWFybHktcmV0dXJuIGJyYW5jaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZhbHVlKG9iamVjdDogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSk6IHZvaWQge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHZhbHVlOyAvLyBjbGVhcjogW10gcmVwbGFjZXMgd2hhdGV2ZXIgd2FzIHRoZXJlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1ciA9IG9iamVjdFtrZXldIGFzIGFueTtcbiAgICAgIG9iamVjdFtrZXldID0gY3VyID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IFsuLi5jdXIsIC4uLnZhbHVlXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSB7XG4gICAgY29uc3QgY3VyID0gb2JqZWN0W2tleV0gYXMgYW55O1xuICAgIG9iamVjdFtrZXldID0gY3VyID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHsgLi4uY3VyLCAuLi52YWx1ZSB9O1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIGEgdmFsdWUgYXQgYSBuZXN0ZWQgcGF0aCB3aXRoIHByb3RvdHlwZS1wb2xsdXRpb24gcHJvdGVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5lc3RlZFZhbHVlKHJvb3Q6IGFueSwgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSwgZmllbGQ/OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkge1xuICBjb25zdCBub2RlID0gcGF0aCAmJiBwYXRoLmxlbmd0aCA+IDAgPyBfZ2V0KHJvb3QsIHBhdGgpIDogcm9vdDtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbm9kZTtcbiAgaWYgKG5vZGUgIT09IG51bGwgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBmaWVsZCkpIHtcbiAgICByZXR1cm4gbm9kZVtmaWVsZF07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUFFSCw2Q0FBdUY7QUFJdkYsNkNBQTBDO0FBQWpDLHdHQUFBLFNBQVMsT0FBQTtBQUNsQix1Q0FBNEM7QUFBbkMsMEdBQUEsY0FBYyxPQUFBO0FBQ3ZCLHVDQUFnRTtBQUF2RCxpR0FBQSxLQUFLLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx3R0FBQSxZQUFZLE9BQUE7QUFDM0MsdUNBQWdIO0FBQXZHLDJHQUFBLGVBQWUsT0FBQTtBQUFFLCtHQUFBLG1CQUFtQixPQUFBO0FBQUUsbUdBQUEsT0FBTyxPQUFBO0FBQUUsMEdBQUEsY0FBYyxPQUFBO0FBQUUsK0dBQUEsbUJBQW1CLE9BQUE7QUFJM0Y7Ozs7O0dBS0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxVQUE2QixFQUFFLEVBQUUsT0FBNEIsRUFBRTtJQUNsRyxPQUFPO1FBQ0wsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzdFLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDO0FBTEQsb0RBS0M7QUFFRCxvSEFBb0g7QUFDcEgsU0FBUyxTQUFTLENBQUMsT0FBMEI7SUFDM0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQzNDLE1BQU0sSUFBSSxTQUFTLENBQ2pCLHdEQUF3RCxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sT0FBTyxFQUFFLENBQ3JHLENBQUM7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UUFDbkcsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFQRCx3Q0FPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdXRpbHMudHMg4oCUIG5lc3RlZC1vYmplY3QgaGVscGVycyBmb3IgdGhlIGhlYXAsIGFuZCB0aGUgbWVtb3J5IGxlYXZlcycgb25lXG4gKiByZS1leHBvcnQgc3VyZmFjZS5cbiAqXG4gKiBUaGUgaGVscGVycyBoZXJlIChgc2V0TmVzdGVkVmFsdWVgLCBgdXBkYXRlTmVzdGVkVmFsdWVgLCBgdXBkYXRlVmFsdWVgLFxuICogYGdldE5lc3RlZFZhbHVlYCkgd2FsayBhIG5lc3RlZCBvYmplY3QgYnkgcGF0aCB3aXRoXG4gKiBwcm90b3R5cGUtcG9sbHV0aW9uIHByb3RlY3Rpb24uIEV2ZXJ5dGhpbmcgZWxzZSB0aGlzIGZpbGUgdXNlZCB0byBob2xkIGhhcyBhblxuICogb3duZXIgb2YgaXRzIG93biBhbmQgaXMgcmUtZXhwb3J0ZWQsIHNvIG5vIGltcG9ydGVyIG1vdmVkOiB0aGUgcGF0aCBjb2RlY1xuICogKGBwYXRocy50c2ApLCBzdHJ1Y3R1cmFsIGVxdWFsaXR5IChgZXF1YWxpdHkudHNgKSBhbmQgdGhlIHVuaW9uIG1lcmdlXG4gKiAoYG1lcmdlLnRzYCkgYXQgTDAsIGFuZCB0aGUgdmVyYiBsYXcgKGB2ZXJicy50c2ApIGF0IEwxIOKAlCBgYXBwbHlTbWFydE1lcmdlYCxcbiAqIGBuZXh0R2VuZXJhdGlvbmAsIGBhcHBseVNtYXJ0TWVyZ2VJbnRvYCwgYGRyeUZvbGRgLCBgc3VwZXJzZWRlZEJ5TmV4dFNldGAuXG4gKiBUaGUgbG9nJ3Mgc2NydWIsIGByZWRhY3RQYXRjaGAsIG1vdmVkIHRvIGl0cyBvd25lciBgcmVkYWN0aW9uLnRzYCBpbiA5LjMzLjAuXG4gKiBUaGUgd3JpdGVycyB0YWtlIGFuIEFERFJFU1MsIGEgcGF0aCBwcmVmaXggdGhlaXIgY2FsbGVyIGNvbXB1dGVkLCBhbmQgbmV2ZXJcbiAqIG5hbWUgb25lIChDMjogdGhlIGVuZ2luZSBkZWNpZGVzIHdoZXJlIGEgc3RhZ2Ugd3JpdGVzLCBgU3RhZ2VDb250ZXh0IMK3IGFkZHJlc3NgKS5cbiAqIFplcm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBfZ2V0LCBuYXRpdmVIYXMgYXMgX2hhcywgbmF0aXZlU2V0IGFzIF9zZXQgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgREVMSU0gfSBmcm9tICcuL3BhdGhzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi9lcXVhbGl0eS5qcyc7XG5leHBvcnQgeyBkZWVwU21hcnRNZXJnZSB9IGZyb20gJy4vbWVyZ2UuanMnO1xuZXhwb3J0IHsgREVMSU0sIG5vcm1hbGlzZVBhdGgsIHBhdGhTZWdtZW50cyB9IGZyb20gJy4vcGF0aHMuanMnO1xuZXhwb3J0IHsgYXBwbHlTbWFydE1lcmdlLCBhcHBseVNtYXJ0TWVyZ2VJbnRvLCBkcnlGb2xkLCBuZXh0R2VuZXJhdGlvbiwgc3VwZXJzZWRlZEJ5TmV4dFNldCB9IGZyb20gJy4vdmVyYnMuanMnO1xuXG50eXBlIE5lc3RlZE9iamVjdCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKlxuICogVGhlIHR3byBwbGFjZXMgYSB2YWx1ZSBhdCBgcGF0aGAgY2FuIHNpdDogdW5kZXIgYGFkZHJlc3NgIChgcnVuUGF0aGAsIGFic2VudFxuICogZm9yIHRoZSByb290IGFkZHJlc3MgYFtdYCkgYW5kIGF0IHRoZSByb290IChgZ2xvYmFsUGF0aGApLiBgYWRkcmVzc2AgaXMgYVxuICogcGF0aCBwcmVmaXggdGhlIGNhbGxlciBjb21wdXRlZCDigJQgZm9yIHRoZSBlbmdpbmUsIGEgZnJhbWUncyBydW4gbmFtZXNwYWNlXG4gKiAoYFN0YWdlQ29udGV4dCDCtyBhZGRyZXNzYCwgQzIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVuQW5kR2xvYmFsUGF0aHMoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSwgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdKSB7XG4gIHJldHVybiB7XG4gICAgcnVuUGF0aDogYWRkcmVzc09mKGFkZHJlc3MpLmxlbmd0aCA+IDAgPyBwYXRoVW5kZXIoYWRkcmVzcywgcGF0aCkgOiB1bmRlZmluZWQsXG4gICAgZ2xvYmFsUGF0aDogWy4uLnBhdGhdLFxuICB9O1xufVxuXG4vKiogQW4gYWRkcmVzcyBpcyBhbiBhcnJheS4gQSBydW4gaWQgc3RpbGwgcGFzc2VkIGluIGl0cyBwbGFjZSAoQzIpIGlzIHJlZnVzZWQsIG5ldmVyIHNwcmVhZCBpbnRvIGl0cyBjaGFyYWN0ZXJzLiAqL1xuZnVuY3Rpb24gYWRkcmVzc09mKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhZGRyZXNzKSkgcmV0dXJuIGFkZHJlc3M7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgYGZvb3RwcmludGpzOiBhbiBhZGRyZXNzIGlzIGFuIGFycmF5IHBhdGggcHJlZml4LCBnb3QgJHthZGRyZXNzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFkZHJlc3N9YCxcbiAgKTtcbn1cblxuLyoqXG4gKiBgYWRkcmVzc2AgdGhlbiBgcGF0aGAsIGFzIG9uZSBuZXcgYXJyYXkuIEFuIGluZGV4IGxvb3AsIGJlY2F1c2UgdGhlIGRvdWJsZVxuICogc3ByZWFkIGBbLi4uYWRkcmVzcywgLi4ucGF0aF1gIGNvc3RzIHR3aWNlIGFzIG11Y2ggYW5kIGEgZnJhbWUgYnVpbGRzIG9uZSBvblxuICogZXZlcnkgcmVhZCBpdCBzZXJ2ZXMgZnJvbSBsaXZlIHN0YXRlIChhIGZvcmsgY2hpbGQgcmVhZGluZyBhIHJvb3Qga2V5KS5cbiAqL1xuZnVuY3Rpb24gcGF0aFVuZGVyKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoOiByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gIGNvbnN0IG91dCA9IG5ldyBBcnJheTxzdHJpbmcgfCBudW1iZXI+KGFkZHJlc3MubGVuZ3RoICsgcGF0aC5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZHJlc3MubGVuZ3RoOyBpKyspIG91dFtpXSA9IGFkZHJlc3NbaV07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykgb3V0W2FkZHJlc3MubGVuZ3RoICsgaV0gPSBwYXRoW2ldO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFRoZSBjb250YWluZXIgYXQgYGFkZHJlc3NgICsgYHBhdGhgIGluc2lkZSBgb2JqYCwgZWFjaCBtaXNzaW5nIG9uZSBjcmVhdGVkXG4gKiBvbiB0aGUgd2F5OiB0aGUgb25lIEFUIHRoZSBhZGRyZXNzIGZyb20gYGRlZmF1bHRWYWx1ZXNgIHdoZW4gZ2l2ZW4sIGV2ZXJ5XG4gKiBvdGhlciBvbmUgZW1wdHkuIFRoZSBvbmUgd2FsayBib3RoIG5lc3RlZCB3cml0ZXJzIHNoYXJlLlxuICovXG5mdW5jdGlvbiBjb250YWluZXJBdChcbiAgb2JqOiBOZXN0ZWRPYmplY3QsXG4gIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4gIHBhdGg6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSxcbiAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4pOiBOZXN0ZWRPYmplY3Qge1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGhVbmRlcihhZGRyZXNzT2YoYWRkcmVzcyksIHBhdGgpO1xuICBsZXQgY3VycmVudCA9IG9iajtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IHNlZ21lbnRzW2ldO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIGtleSkpIHtcbiAgICAgIGN1cnJlbnRba2V5XSA9IGkgPT09IGFkZHJlc3MubGVuZ3RoIC0gMSAmJiBkZWZhdWx0VmFsdWVzID8gZGVmYXVsdFZhbHVlcyA6IHt9O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICB9XG4gIHJldHVybiBjdXJyZW50O1xufVxuXG4vKipcbiAqIFNldHMgYSB2YWx1ZSBhdCBhIG5lc3RlZCBwYXRoIHVuZGVyIGBhZGRyZXNzYCwgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIG9iamVjdHMgYXMgbmVlZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TmVzdGVkVmFsdWU8VD4oXG4gIG9iajogTmVzdGVkT2JqZWN0LFxuICBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgcGF0aDogc3RyaW5nW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBULFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IE5lc3RlZE9iamVjdCB7XG4gIGNvbnRhaW5lckF0KG9iaiwgYWRkcmVzcywgcGF0aCwgZGVmYXVsdFZhbHVlcylbZmllbGRdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogRGVlcC1tZXJnZXMgYSB2YWx1ZSBpbnRvIHRoZSBvYmplY3QgYXQgYSBuZXN0ZWQgcGF0aCB1bmRlciBgYWRkcmVzc2AuXG4gKiAtIEFycmF5czogY29uY2F0ZW5hdGVcbiAqIC0gT2JqZWN0czogc2hhbGxvdyBtZXJnZSBhdCBlYWNoIGxldmVsXG4gKiAtIFByaW1pdGl2ZXM6IHJlcGxhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU5lc3RlZFZhbHVlPFQ+KFxuICBvYmo6IGFueSxcbiAgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sXG4gIGZpZWxkOiBzdHJpbmcgfCBudW1iZXIsXG4gIHZhbHVlOiBULFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IGFueSB7XG4gIHVwZGF0ZVZhbHVlKGNvbnRhaW5lckF0KG9iaiwgYWRkcmVzcywgcGF0aCwgZGVmYXVsdFZhbHVlcyksIGZpZWxkLCB2YWx1ZSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSW4tcGxhY2UgdmFsdWUgdXBkYXRlIHdpdGggbWVyZ2Ugc2VtYW50aWNzLlxuICogLSBBcnJheXMgKG5vbi1lbXB0eSk6IGNvbmNhdGVuYXRlIG9udG8gZXhpc3RpbmdcbiAqIC0gQXJyYXlzIChlbXB0eSk6ICAgICBkaXJlY3QgcmVwbGFjZSDigJQgd3JpdGluZyBgW11gIGNsZWFycyB0aGUgZmllbGRcbiAqIC0gT2JqZWN0cyAobm9uLWVtcHR5KTogc2hhbGxvdyBtZXJnZSAoc3ByZWFkKVxuICogLSBPYmplY3RzIChlbXB0eSk6ICAgIGRpcmVjdCByZXBsYWNlIOKAlCB3cml0aW5nIGB7fWAgY2xlYXJzIHRoZSBmaWVsZFxuICogLSBQcmltaXRpdmVzOiBkaXJlY3QgYXNzaWdubWVudFxuICpcbiAqIE5vdGUgb24gZW1wdHkgYXJyYXlzOiBib3RoIGB2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKWAgYW5kXG4gKiBgQXJyYXkuaXNBcnJheSh2YWx1ZSlgIGV2YWx1YXRlIHRoZSBzYW1lIGZvciBhcnJheXMg4oCUIGBbXWAgaXMgdHJ1dGh5IGluXG4gKiBKYXZhU2NyaXB0LCBzbyB0aGUgYCYmYCBndWFyZCB3YXMgbmV2ZXIgdGhlIGlzc3VlLiBUaGUgYWN0dWFsIGJ1ZyB3YXMgdGhlXG4gKiBjb25jYXQgcGF0aDogYFsuLi5jdXIsIC4uLltdXWAgc2lsZW50bHkgcmV0dXJuZWQgYGN1cmAgdW5jaGFuZ2VkIHdoZW4gYHZhbHVlYFxuICogd2FzIGBbXWAsIG1ha2luZyBgdXBkYXRlVmFsdWUob2JqLCAndGFncycsIFtdKWAgYSBuby1vcCBpbnN0ZWFkIG9mIGEgY2xlYXIuXG4gKiBUaGUgZml4IGlzIHRoZSBleHBsaWNpdCBgdmFsdWUubGVuZ3RoID09PSAwYCBlYXJseS1yZXR1cm4gYnJhbmNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmFsdWUob2JqZWN0OiBhbnksIGtleTogc3RyaW5nIHwgbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7IC8vIGNsZWFyOiBbXSByZXBsYWNlcyB3aGF0ZXZlciB3YXMgdGhlcmVcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VyID0gb2JqZWN0W2tleV0gYXMgYW55O1xuICAgICAgb2JqZWN0W2tleV0gPSBjdXIgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogWy4uLmN1ciwgLi4udmFsdWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpIHtcbiAgICBjb25zdCBjdXIgPSBvYmplY3Rba2V5XSBhcyBhbnk7XG4gICAgb2JqZWN0W2tleV0gPSBjdXIgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogeyAuLi5jdXIsIC4uLnZhbHVlIH07XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYSB2YWx1ZSBhdCBhIG5lc3RlZCBwYXRoIHdpdGggcHJvdG90eXBlLXBvbGx1dGlvbiBwcm90ZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVzdGVkVmFsdWUocm9vdDogYW55LCBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCBmaWVsZD86IHN0cmluZyB8IG51bWJlcik6IGFueSB7XG4gIGNvbnN0IG5vZGUgPSBwYXRoICYmIHBhdGgubGVuZ3RoID4gMCA/IF9nZXQocm9vdCwgcGF0aCkgOiByb290O1xuICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBub2RlID09PSB1bmRlZmluZWQpIHJldHVybiBub2RlO1xuICBpZiAobm9kZSAhPT0gbnVsbCAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGZpZWxkKSkge1xuICAgIHJldHVybiBub2RlW2ZpZWxkXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
* SharedMemory — The shared state container for all flowchart execution
|
|
3
3
|
*
|
|
4
4
|
* Like a runtime heap with namespace isolation:
|
|
5
|
-
* -
|
|
6
|
-
*
|
|
5
|
+
* - A value is written at an ADDRESS — a path prefix the caller computed
|
|
6
|
+
* (C2: the engine's frame decides it, `StageContext · address`) — and read
|
|
7
|
+
* there first, then at the root
|
|
8
|
+
* - Default values seed the root, and the container at an address when a
|
|
9
|
+
* write creates it
|
|
7
10
|
* - Accepts commit bundles from TransactionBuffer
|
|
8
11
|
*
|
|
9
12
|
* COPY-ON-WRITE (9.29.0 — docs/design/2026-10-copy-on-write-commit.md):
|
|
@@ -22,12 +25,10 @@ export declare class SharedMemory {
|
|
|
22
25
|
constructor(defaultValues?: unknown, initialContext?: unknown);
|
|
23
26
|
/** Gets a clone of the default values. */
|
|
24
27
|
getDefaultValues(): {} | undefined;
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
/** Sets a value using overwrite semantics, as a new generation (path copy + swap). */
|
|
30
|
-
setValue(runId: string, path: string[], key: string, value: unknown): void;
|
|
28
|
+
/** Updates a value at `address` + `path` using merge semantics, as a new generation (path copy + swap). */
|
|
29
|
+
updateValue(address: readonly string[], path: string[], key: string, value: unknown): void;
|
|
30
|
+
/** Sets a value at `address` + `path` using overwrite semantics, as a new generation (path copy + swap). */
|
|
31
|
+
setValue(address: readonly string[], path: string[], key: string, value: unknown): void;
|
|
31
32
|
/**
|
|
32
33
|
* A copy of the current generation's root whose containers on the way to
|
|
33
34
|
* `key` are owned — the in-place helpers above then edit only copies.
|
|
@@ -35,9 +36,9 @@ export declare class SharedMemory {
|
|
|
35
36
|
private ownedPathTo;
|
|
36
37
|
/**
|
|
37
38
|
* Reads a value from the store.
|
|
38
|
-
* Looks up
|
|
39
|
+
* Looks up at `address` first, falls back to the root.
|
|
39
40
|
*/
|
|
40
|
-
getValue(
|
|
41
|
+
getValue(address?: readonly string[], path?: string[], key?: string): any;
|
|
41
42
|
/** Gets the entire state as a JSON object — the current generation, by reference. Never mutate it. */
|
|
42
43
|
getState(): Record<string, unknown>;
|
|
43
44
|
/** Applies a commit bundle from TransactionBuffer: builds the next generation and swaps it in. */
|
|
@@ -311,7 +311,13 @@ export declare class StageContext {
|
|
|
311
311
|
* stay anchored at first touch to match the eager engine — see
|
|
312
312
|
* {@link firstTouchState}. */
|
|
313
313
|
getTransactionBuffer(): TransactionBuffer;
|
|
314
|
-
/**
|
|
314
|
+
/**
|
|
315
|
+
* Where this frame writes and reads: `['runs', <id>]`, or `[]` (the root) with
|
|
316
|
+
* no run id. Handed to the record layer as data (C2): the buffer's address,
|
|
317
|
+
* and where `SharedMemory · getValue` looks before the root.
|
|
318
|
+
*/
|
|
319
|
+
private get address();
|
|
320
|
+
/** Builds an absolute path inside the shared memory: this frame's {@link address}, then the path. */
|
|
315
321
|
private withNamespace;
|
|
316
322
|
/** The run namespace writes and reads go to: {@link addressRunId}, else `runId`. */
|
|
317
323
|
private get namespaceId();
|
|
@@ -128,8 +128,9 @@ export declare class TransactionBuffer {
|
|
|
128
128
|
*/
|
|
129
129
|
private detachedBase?;
|
|
130
130
|
/**
|
|
131
|
-
* Where the stage writes (9.30.0):
|
|
132
|
-
*
|
|
131
|
+
* Where the stage writes (9.30.0): a path prefix its frame computed and
|
|
132
|
+
* hands over as data (C2 — for the engine, the frame's run namespace, or
|
|
133
|
+
* `[]` for the root). Its containers are the stage's ADDRESS, not a value
|
|
133
134
|
* the stage reads (every read it makes is a key below it), so a shell a
|
|
134
135
|
* write leaves there is no part of the read-back the record must hold.
|
|
135
136
|
*/
|
|
@@ -275,7 +276,7 @@ export declare class TransactionBuffer {
|
|
|
275
276
|
* - a container still SHARED with committed state at the same position is
|
|
276
277
|
* replaced by a private deep copy when it is the value read, or by a
|
|
277
278
|
* shallow copy when it is a container on the way to it (so a read of
|
|
278
|
-
* `
|
|
279
|
+
* `k` under a fork child's address copies `k`, not every child's namespace);
|
|
279
280
|
* - a container the stage STAGED (or anything else the buffer did not
|
|
280
281
|
* take from committed state) is handed back by reference, as before;
|
|
281
282
|
* - a container the buffer owns is walked on — and when it is the value
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* (`merge.ts`) at L0, and the verb law (`verbs.ts`) at L1 — `applySmartMerge`,
|
|
11
11
|
* `nextGeneration`, `applySmartMergeInto`, `dryFold`, `supersededByNextSet`.
|
|
12
12
|
* The log's scrub, `redactPatch`, moved to its owner `redaction.ts` in 9.33.0.
|
|
13
|
+
* The writers take an ADDRESS, a path prefix their caller computed, and never
|
|
14
|
+
* name one (C2: the engine decides where a stage writes, `StageContext · address`).
|
|
13
15
|
* Zero external dependencies.
|
|
14
16
|
*/
|
|
15
17
|
export { deepEqual } from './equality.js';
|
|
@@ -20,24 +22,26 @@ type NestedObject = {
|
|
|
20
22
|
[key: string]: any;
|
|
21
23
|
};
|
|
22
24
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
+
* The two places a value at `path` can sit: under `address` (`runPath`, absent
|
|
26
|
+
* for the root address `[]`) and at the root (`globalPath`). `address` is a
|
|
27
|
+
* path prefix the caller computed — for the engine, a frame's run namespace
|
|
28
|
+
* (`StageContext · address`, C2).
|
|
25
29
|
*/
|
|
26
|
-
export declare function getRunAndGlobalPaths(
|
|
30
|
+
export declare function getRunAndGlobalPaths(address?: readonly string[], path?: (string | number)[]): {
|
|
27
31
|
runPath: (string | number)[] | undefined;
|
|
28
32
|
globalPath: (string | number)[];
|
|
29
33
|
};
|
|
30
34
|
/**
|
|
31
|
-
* Sets a value at a nested path
|
|
35
|
+
* Sets a value at a nested path under `address`, creating intermediate objects as needed.
|
|
32
36
|
*/
|
|
33
|
-
export declare function setNestedValue<T>(obj: NestedObject,
|
|
37
|
+
export declare function setNestedValue<T>(obj: NestedObject, address: readonly string[], path: string[], field: string, value: T, defaultValues?: unknown): NestedObject;
|
|
34
38
|
/**
|
|
35
|
-
* Deep-merges a value into the object at
|
|
39
|
+
* Deep-merges a value into the object at a nested path under `address`.
|
|
36
40
|
* - Arrays: concatenate
|
|
37
41
|
* - Objects: shallow merge at each level
|
|
38
42
|
* - Primitives: replace
|
|
39
43
|
*/
|
|
40
|
-
export declare function updateNestedValue<T>(obj: any,
|
|
44
|
+
export declare function updateNestedValue<T>(obj: any, address: readonly string[], path: (string | number)[], field: string | number, value: T, defaultValues?: unknown): any;
|
|
41
45
|
/**
|
|
42
46
|
* In-place value update with merge semantics.
|
|
43
47
|
* - Arrays (non-empty): concatenate onto existing
|
package/package.json
CHANGED