@inf-monkeys-tech/monkeys 1.0.72 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/contracts/aggregate-commit.d.ts +155 -0
- package/lib/contracts/aggregate-commit.d.ts.map +1 -0
- package/lib/contracts/aggregate-commit.js +112 -0
- package/lib/contracts/aggregate-commit.js.map +1 -0
- package/lib/contracts/capability.d.ts +3 -0
- package/lib/contracts/capability.d.ts.map +1 -1
- package/lib/contracts/capability.js +1 -1
- package/lib/contracts/capability.js.map +1 -1
- package/lib/contracts/common.d.ts +2 -0
- package/lib/contracts/common.d.ts.map +1 -1
- package/lib/contracts/common.js +34 -1
- package/lib/contracts/common.js.map +1 -1
- package/lib/contracts/component-assembly.d.ts +118 -0
- package/lib/contracts/component-assembly.d.ts.map +1 -0
- package/lib/contracts/component-assembly.js +61 -0
- package/lib/contracts/component-assembly.js.map +1 -0
- package/lib/contracts/declarative-control-http.d.ts +80610 -41684
- package/lib/contracts/declarative-control-http.d.ts.map +1 -1
- package/lib/contracts/declarative-control-http.js +1596 -165
- package/lib/contracts/declarative-control-http.js.map +1 -1
- package/lib/contracts/declarative-control.d.ts +12525 -4613
- package/lib/contracts/declarative-control.d.ts.map +1 -1
- package/lib/contracts/declarative-control.js +3792 -422
- package/lib/contracts/declarative-control.js.map +1 -1
- package/lib/contracts/index.d.ts +6 -0
- package/lib/contracts/index.d.ts.map +1 -1
- package/lib/contracts/index.js +6 -0
- package/lib/contracts/index.js.map +1 -1
- package/lib/contracts/legacy-route.d.ts +15 -0
- package/lib/contracts/legacy-route.d.ts.map +1 -0
- package/lib/contracts/legacy-route.js +13 -0
- package/lib/contracts/legacy-route.js.map +1 -0
- package/lib/contracts/menu.d.ts +12 -0
- package/lib/contracts/menu.d.ts.map +1 -1
- package/lib/contracts/page-binding-dependencies.d.ts +25 -0
- package/lib/contracts/page-binding-dependencies.d.ts.map +1 -0
- package/lib/contracts/page-binding-dependencies.js +54 -0
- package/lib/contracts/page-binding-dependencies.js.map +1 -0
- package/lib/contracts/page-expression.d.ts +106 -0
- package/lib/contracts/page-expression.d.ts.map +1 -0
- package/lib/contracts/page-expression.js +136 -0
- package/lib/contracts/page-expression.js.map +1 -0
- package/lib/contracts/page-stream.d.ts +101 -0
- package/lib/contracts/page-stream.d.ts.map +1 -0
- package/lib/contracts/page-stream.js +66 -0
- package/lib/contracts/page-stream.js.map +1 -0
- package/lib/contracts/page.d.ts +24 -0
- package/lib/contracts/page.d.ts.map +1 -1
- package/lib/contracts/page.js +2 -0
- package/lib/contracts/page.js.map +1 -1
- package/lib/contracts/record-editor-draft.d.ts +95 -0
- package/lib/contracts/record-editor-draft.d.ts.map +1 -0
- package/lib/contracts/record-editor-draft.js +35 -0
- package/lib/contracts/record-editor-draft.js.map +1 -0
- package/lib/contracts/render.d.ts +607 -1
- package/lib/contracts/render.d.ts.map +1 -1
- package/lib/contracts/render.js +332 -133
- package/lib/contracts/render.js.map +1 -1
- package/lib/contracts/semantic.d.ts +48 -1
- package/lib/contracts/semantic.d.ts.map +1 -1
- package/lib/contracts/semantic.js +22 -19
- package/lib/contracts/semantic.js.map +1 -1
- package/lib/contracts/tenant.d.ts +115 -9
- package/lib/contracts/tenant.d.ts.map +1 -1
- package/lib/contracts/tenant.js +14 -1
- package/lib/contracts/tenant.js.map +1 -1
- package/lib/contracts/theme.d.ts +1 -1
- package/lib/esm/contracts/index.mjs +8466 -3114
- package/lib/esm/contracts/index.mjs.map +1 -1
- package/lib/esm/index.mjs +13809 -5067
- package/lib/esm/index.mjs.map +1 -1
- package/lib/esm/runtime/index.mjs +13964 -4515
- package/lib/esm/runtime/index.mjs.map +1 -1
- package/lib/esm/schemas/index.mjs +8779 -2614
- package/lib/esm/schemas/index.mjs.map +1 -1
- package/lib/json-schema/aggregate-commit-request.schema.json +426 -0
- package/lib/json-schema/capability-manifest.schema.json +1 -0
- package/lib/json-schema/capability-registry.schema.json +1 -0
- package/lib/json-schema/declarative-route-owner-index.schema.json +1092 -0
- package/lib/json-schema/declarative-workbench-catalog.schema.json +769 -0
- package/lib/json-schema/design-capability-catalog-artifact.schema.json +2787 -0
- package/lib/json-schema/domain-command-definition.schema.json +18 -0
- package/lib/json-schema/domain-query-definition.schema.json +1406 -0
- package/lib/json-schema/index.json +7 -0
- package/lib/json-schema/legacy-route-takeover-authorization.schema.json +601 -0
- package/lib/json-schema/navigation-release.schema.json +296 -0
- package/lib/json-schema/navigation-runtime-bundle.schema.json +48 -8
- package/lib/json-schema/navigation.schema.json +47 -8
- package/lib/json-schema/overlay-node.schema.json +883 -0
- package/lib/json-schema/page-definition.schema.json +34 -0
- package/lib/json-schema/page-release.schema.json +1520 -626
- package/lib/json-schema/page-runtime-bundle.schema.json +7334 -1153
- package/lib/json-schema/page-runtime-descriptor.schema.json +34 -0
- package/lib/json-schema/page.schema.json +6329 -6602
- package/lib/json-schema/permission-alternative-policy.schema.json +60 -0
- package/lib/json-schema/product-declaration.schema.json +53 -0
- package/lib/json-schema/render-node.schema.json +883 -0
- package/lib/json-schema/render-tree.schema.json +883 -0
- package/lib/json-schema/tenant-product-config.schema.json +88 -0
- package/lib/json-schema/tenant-runtime-config.schema.json +88 -0
- package/lib/json-schema/view-provider-descriptor.schema.json +1 -0
- package/lib/json-schema/workbench-release.schema.json +1520 -626
- package/lib/json-schema/workbench-runtime-bundle.schema.json +686 -20
- package/lib/json-schema/workbench.schema.json +1196 -0
- package/lib/runtime/component-assembly.d.ts +4 -0
- package/lib/runtime/component-assembly.d.ts.map +1 -0
- package/lib/runtime/component-assembly.js +126 -0
- package/lib/runtime/component-assembly.js.map +1 -0
- package/lib/runtime/declarative-control-compiler.d.ts +106 -20
- package/lib/runtime/declarative-control-compiler.d.ts.map +1 -1
- package/lib/runtime/declarative-control-compiler.js +1525 -280
- package/lib/runtime/declarative-control-compiler.js.map +1 -1
- package/lib/runtime/index.d.ts +5 -0
- package/lib/runtime/index.d.ts.map +1 -1
- package/lib/runtime/index.js +7 -0
- package/lib/runtime/index.js.map +1 -1
- package/lib/runtime/page-expression.d.ts +9 -0
- package/lib/runtime/page-expression.d.ts.map +1 -0
- package/lib/runtime/page-expression.js +257 -0
- package/lib/runtime/page-expression.js.map +1 -0
- package/lib/runtime/page-stream.d.ts +24 -0
- package/lib/runtime/page-stream.d.ts.map +1 -0
- package/lib/runtime/page-stream.js +65 -0
- package/lib/runtime/page-stream.js.map +1 -0
- package/lib/runtime/record-editor-draft.d.ts +29 -0
- package/lib/runtime/record-editor-draft.d.ts.map +1 -0
- package/lib/runtime/record-editor-draft.js +161 -0
- package/lib/runtime/record-editor-draft.js.map +1 -0
- package/lib/runtime/target-render-model.d.ts +4 -0
- package/lib/runtime/target-render-model.d.ts.map +1 -0
- package/lib/runtime/target-render-model.js +28 -0
- package/lib/runtime/target-render-model.js.map +1 -0
- package/lib/runtime/tenant-config.d.ts +2 -0
- package/lib/runtime/tenant-config.d.ts.map +1 -1
- package/lib/runtime/tenant-config.js +6 -1
- package/lib/runtime/tenant-config.js.map +1 -1
- package/lib/schemas/index.d.ts +5969 -2731
- package/lib/schemas/index.d.ts.map +1 -1
- package/lib/schemas/index.js +174 -95
- package/lib/schemas/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectPageProperties = exports.evaluatePageExpression = exports.writePageDraftPath = exports.compilePageExpression = exports.readPageValue = void 0;
|
|
4
|
+
const page_expression_1 = require("../contracts/page-expression");
|
|
5
|
+
const unsafe = new Set(['__proto__', 'prototype', 'constructor']);
|
|
6
|
+
const fail = (code) => { throw Object.assign(new Error(code), { code }); };
|
|
7
|
+
const assertBudget = page_expression_1.assertPageValueBudget;
|
|
8
|
+
const readPageValue = (value, path) => {
|
|
9
|
+
let current = value;
|
|
10
|
+
for (const segment of path) {
|
|
11
|
+
if (unsafe.has(segment))
|
|
12
|
+
fail('PAGE_EXPRESSION_UNSAFE_PATH');
|
|
13
|
+
if (!current || typeof current !== 'object' || !Object.prototype.hasOwnProperty.call(current, segment))
|
|
14
|
+
return undefined;
|
|
15
|
+
if (Array.isArray(current) && !/^(0|[1-9][0-9]*)$/.test(segment))
|
|
16
|
+
return undefined;
|
|
17
|
+
current = current[segment];
|
|
18
|
+
}
|
|
19
|
+
return current;
|
|
20
|
+
};
|
|
21
|
+
exports.readPageValue = readPageValue;
|
|
22
|
+
const unary = new Set(['not', 'string', 'number', 'length', 'round', 'entries', 'from-entries', 'trim']);
|
|
23
|
+
const binary = new Set(['subtract', 'divide', 'equals', 'not-equals', 'less-than', 'less-or-equal', 'greater-than', 'greater-or-equal', 'includes', 'get', 'fixed']);
|
|
24
|
+
const compilePageExpression = (input) => {
|
|
25
|
+
assertBudget(input);
|
|
26
|
+
const expression = page_expression_1.PageExpressionSchema.parse(input);
|
|
27
|
+
const check = (node) => {
|
|
28
|
+
if (node.kind === 'operator') {
|
|
29
|
+
if ((unary.has(node.operator) && node.arguments.length !== 1) || (binary.has(node.operator) && node.arguments.length !== 2) || (['set-path', 'slice'].includes(node.operator) && node.arguments.length !== 3) || (node.operator === 'number-format' && node.arguments.length !== 5))
|
|
30
|
+
fail('PAGE_EXPRESSION_ARITY');
|
|
31
|
+
node.arguments.forEach(check);
|
|
32
|
+
}
|
|
33
|
+
else if (node.kind === 'conditional') {
|
|
34
|
+
check(node.condition);
|
|
35
|
+
check(node.then);
|
|
36
|
+
check(node.else);
|
|
37
|
+
}
|
|
38
|
+
else if (node.kind === 'object')
|
|
39
|
+
Object.values(node.fields).forEach(check);
|
|
40
|
+
else if (node.kind === 'array')
|
|
41
|
+
node.items.forEach(check);
|
|
42
|
+
else if (node.kind === 'map' || node.kind === 'filter' || node.kind === 'sum') {
|
|
43
|
+
check(node.source);
|
|
44
|
+
check(node.value);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
check(expression);
|
|
48
|
+
return expression;
|
|
49
|
+
};
|
|
50
|
+
exports.compilePageExpression = compilePageExpression;
|
|
51
|
+
const number = (value) => typeof value === 'number' && Number.isFinite(value) ? value : fail('PAGE_EXPRESSION_TYPE_NUMBER');
|
|
52
|
+
const boolean = (value) => typeof value === 'boolean' ? value : fail('PAGE_EXPRESSION_TYPE_BOOLEAN');
|
|
53
|
+
const finite = (value) => Number.isFinite(value) ? value : fail('PAGE_EXPRESSION_NUMBER');
|
|
54
|
+
const object = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : fail('PAGE_EXPRESSION_TYPE_OBJECT');
|
|
55
|
+
const valuePath = (value) => {
|
|
56
|
+
if (!Array.isArray(value) || value.length > 16 || value.some((segment) => typeof segment !== 'string' || !segment || unsafe.has(segment)))
|
|
57
|
+
return fail('PAGE_EXPRESSION_UNSAFE_PATH');
|
|
58
|
+
return value;
|
|
59
|
+
};
|
|
60
|
+
const writePageDraftPath = (source, path, value) => {
|
|
61
|
+
if (!path.length)
|
|
62
|
+
return value;
|
|
63
|
+
const [segment, ...rest] = path;
|
|
64
|
+
if (!segment || unsafe.has(segment) || path.length > 16)
|
|
65
|
+
return fail('PAGE_EXPRESSION_UNSAFE_PATH');
|
|
66
|
+
if (Array.isArray(source)) {
|
|
67
|
+
if (!/^(0|[1-9][0-9]*)$/.test(segment) || Number(segment) >= source.length)
|
|
68
|
+
return fail('PAGE_EXPRESSION_ARRAY_INDEX');
|
|
69
|
+
return source.map((item, index) => index === Number(segment) ? (0, exports.writePageDraftPath)(item, rest, value) : item);
|
|
70
|
+
}
|
|
71
|
+
const current = object(source);
|
|
72
|
+
return { ...current, [segment]: (0, exports.writePageDraftPath)(current[segment] ?? {}, rest, value) };
|
|
73
|
+
};
|
|
74
|
+
exports.writePageDraftPath = writePageDraftPath;
|
|
75
|
+
const same = (a, b) => {
|
|
76
|
+
if (a === b)
|
|
77
|
+
return true;
|
|
78
|
+
if (!a || !b || typeof a !== 'object' || typeof b !== 'object' || Array.isArray(a) !== Array.isArray(b))
|
|
79
|
+
return false;
|
|
80
|
+
const keys = Object.keys(a);
|
|
81
|
+
return keys.length === Object.keys(b).length && keys.every((key) => Object.prototype.hasOwnProperty.call(b, key) && same(a[key], b[key]));
|
|
82
|
+
};
|
|
83
|
+
const evaluateCompiled = (expression, context, budget) => {
|
|
84
|
+
const run = (node, current) => {
|
|
85
|
+
if (++budget.operations > page_expression_1.PAGE_EXPRESSION_LIMITS.operations)
|
|
86
|
+
fail('PAGE_EXPRESSION_BUDGET');
|
|
87
|
+
if (node.kind === 'literal')
|
|
88
|
+
return node.value;
|
|
89
|
+
if (node.kind === 'read') {
|
|
90
|
+
const value = (0, exports.readPageValue)(current[node.root], node.path) ?? null;
|
|
91
|
+
assertBudget(value);
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
if (node.kind === 'conditional')
|
|
95
|
+
return run(boolean(run(node.condition, current)) ? node.then : node.else, current);
|
|
96
|
+
if (node.kind === 'object')
|
|
97
|
+
return Object.fromEntries(Object.entries(node.fields).map(([key, value]) => [key, run(value, current)]));
|
|
98
|
+
if (node.kind === 'array')
|
|
99
|
+
return node.items.map((value) => run(value, current));
|
|
100
|
+
if (node.kind === 'map' || node.kind === 'filter' || node.kind === 'sum') {
|
|
101
|
+
const source = run(node.source, current);
|
|
102
|
+
if (!Array.isArray(source))
|
|
103
|
+
return fail('PAGE_EXPRESSION_TYPE_ARRAY');
|
|
104
|
+
if (source.length > page_expression_1.PAGE_EXPRESSION_LIMITS.collection)
|
|
105
|
+
fail('PAGE_EXPRESSION_BUDGET');
|
|
106
|
+
const values = source.map((item, index) => run(node.value, { ...current, scope: { item, index, parent: current.scope ?? null } }));
|
|
107
|
+
if (node.kind === 'map')
|
|
108
|
+
return values;
|
|
109
|
+
if (node.kind === 'filter')
|
|
110
|
+
return source.filter((_, index) => boolean(values[index]));
|
|
111
|
+
return finite(values.reduce((total, value) => total + number(value), 0));
|
|
112
|
+
}
|
|
113
|
+
if (node.kind !== 'operator')
|
|
114
|
+
return fail('PAGE_EXPRESSION_INVALID');
|
|
115
|
+
if (node.operator === 'coalesce') {
|
|
116
|
+
for (const argument of node.arguments) {
|
|
117
|
+
const value = run(argument, current);
|
|
118
|
+
if (value !== null)
|
|
119
|
+
return value;
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
if (node.operator === 'and')
|
|
124
|
+
return node.arguments.every((argument) => boolean(run(argument, current)));
|
|
125
|
+
if (node.operator === 'or')
|
|
126
|
+
return node.arguments.some((argument) => boolean(run(argument, current)));
|
|
127
|
+
const values = node.arguments.map((argument) => run(argument, current));
|
|
128
|
+
const first = values[0];
|
|
129
|
+
const second = values[1];
|
|
130
|
+
switch (node.operator) {
|
|
131
|
+
case 'add': return finite(values.reduce((a, b) => a + number(b), 0));
|
|
132
|
+
case 'subtract': return finite(number(first) - number(second));
|
|
133
|
+
case 'multiply': return finite(values.reduce((a, b) => a * number(b), 1));
|
|
134
|
+
case 'divide': {
|
|
135
|
+
const numerator = number(first);
|
|
136
|
+
const denominator = number(second);
|
|
137
|
+
return denominator === 0 ? null : finite(numerator / denominator);
|
|
138
|
+
}
|
|
139
|
+
case 'min': return Math.min(...values.map(number));
|
|
140
|
+
case 'max': return Math.max(...values.map(number));
|
|
141
|
+
case 'round': return Math.round(number(first));
|
|
142
|
+
case 'equals': return same(first, second);
|
|
143
|
+
case 'not-equals': return !same(first, second);
|
|
144
|
+
case 'less-than': return number(first) < number(second);
|
|
145
|
+
case 'less-or-equal': return number(first) <= number(second);
|
|
146
|
+
case 'greater-than': return number(first) > number(second);
|
|
147
|
+
case 'greater-or-equal': return number(first) >= number(second);
|
|
148
|
+
case 'not': return !boolean(first);
|
|
149
|
+
case 'string': return first === null ? '' : typeof first === 'object' ? fail('PAGE_EXPRESSION_TYPE_SCALAR') : String(first);
|
|
150
|
+
case 'number': return typeof first === 'number' ? first : typeof first === 'string' && first.trim() && Number.isFinite(Number(first)) ? Number(first) : null;
|
|
151
|
+
case 'concat': {
|
|
152
|
+
const strings = values.map((value) => typeof value === 'string' ? value : fail('PAGE_EXPRESSION_TYPE_STRING'));
|
|
153
|
+
if (strings.reduce((bytes, value) => bytes + value.length * 2, 0) > page_expression_1.PAGE_EXPRESSION_LIMITS.bytes)
|
|
154
|
+
fail('PAGE_EXPRESSION_BUDGET');
|
|
155
|
+
return strings.join('');
|
|
156
|
+
}
|
|
157
|
+
case 'length': return typeof first === 'string' || Array.isArray(first) ? first.length : fail('PAGE_EXPRESSION_TYPE_COLLECTION');
|
|
158
|
+
case 'includes': return Array.isArray(first) ? first.some((value) => same(value, second)) : typeof first === 'string' && typeof second === 'string' ? first.includes(second) : fail('PAGE_EXPRESSION_TYPE_COLLECTION');
|
|
159
|
+
case 'get': {
|
|
160
|
+
if (typeof second !== 'string')
|
|
161
|
+
return fail('PAGE_EXPRESSION_TYPE_STRING');
|
|
162
|
+
return (0, exports.readPageValue)(first, [second]) ?? null;
|
|
163
|
+
}
|
|
164
|
+
case 'set-path': return (0, exports.writePageDraftPath)(first, valuePath(second), values[2]);
|
|
165
|
+
case 'merge': {
|
|
166
|
+
const objects = values.map(object);
|
|
167
|
+
const merged = Object.assign({}, ...objects);
|
|
168
|
+
assertBudget(merged);
|
|
169
|
+
return merged;
|
|
170
|
+
}
|
|
171
|
+
case 'entries': return Object.entries(object(first));
|
|
172
|
+
case 'from-entries': {
|
|
173
|
+
const result = {};
|
|
174
|
+
if (!Array.isArray(first) || first.length > page_expression_1.PAGE_EXPRESSION_LIMITS.collection)
|
|
175
|
+
return fail('PAGE_EXPRESSION_TYPE_ARRAY');
|
|
176
|
+
for (const pair of first) {
|
|
177
|
+
if (!Array.isArray(pair) || pair.length !== 2 || typeof pair[0] !== 'string' || unsafe.has(pair[0]))
|
|
178
|
+
return fail('PAGE_EXPRESSION_ENTRY');
|
|
179
|
+
if (Object.prototype.hasOwnProperty.call(result, pair[0]))
|
|
180
|
+
return fail('PAGE_EXPRESSION_DUPLICATE_KEY');
|
|
181
|
+
result[pair[0]] = pair[1];
|
|
182
|
+
}
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
case 'array-concat': {
|
|
186
|
+
const result = [];
|
|
187
|
+
for (const value of values) {
|
|
188
|
+
if (!Array.isArray(value))
|
|
189
|
+
return fail('PAGE_EXPRESSION_TYPE_ARRAY');
|
|
190
|
+
if (result.length + value.length > page_expression_1.PAGE_EXPRESSION_LIMITS.collection)
|
|
191
|
+
return fail('PAGE_EXPRESSION_BUDGET');
|
|
192
|
+
result.push(...value);
|
|
193
|
+
}
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
case 'slice': {
|
|
197
|
+
const start = number(second);
|
|
198
|
+
const end = number(values[2]);
|
|
199
|
+
if (!Array.isArray(first) || !Number.isSafeInteger(start) || !Number.isSafeInteger(end))
|
|
200
|
+
return fail('PAGE_EXPRESSION_TYPE_ARRAY');
|
|
201
|
+
return first.slice(start, end);
|
|
202
|
+
}
|
|
203
|
+
case 'trim': return typeof first === 'string' ? first.trim() : fail('PAGE_EXPRESSION_TYPE_STRING');
|
|
204
|
+
case 'number-format': {
|
|
205
|
+
if (second !== 'en-US' && second !== 'zh-CN')
|
|
206
|
+
return fail('PAGE_EXPRESSION_LOCALE');
|
|
207
|
+
const minimumFractionDigits = number(values[2]);
|
|
208
|
+
const maximumFractionDigits = number(values[3]);
|
|
209
|
+
if (![minimumFractionDigits, maximumFractionDigits].every((digits) => Number.isSafeInteger(digits) && digits >= 0 && digits <= 10) || minimumFractionDigits > maximumFractionDigits)
|
|
210
|
+
return fail('PAGE_EXPRESSION_PRECISION');
|
|
211
|
+
return new Intl.NumberFormat(second, { minimumFractionDigits, maximumFractionDigits, useGrouping: boolean(values[4]) }).format(number(first));
|
|
212
|
+
}
|
|
213
|
+
case 'fixed': {
|
|
214
|
+
const digits = number(second);
|
|
215
|
+
if (!Number.isSafeInteger(digits) || digits < 0 || digits > 10)
|
|
216
|
+
return fail('PAGE_EXPRESSION_PRECISION');
|
|
217
|
+
return number(first).toFixed(digits);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
const result = run(expression, context);
|
|
222
|
+
assertBudget(result);
|
|
223
|
+
return result;
|
|
224
|
+
};
|
|
225
|
+
const evaluatePageExpression = (expression, context) => evaluateCompiled((0, exports.compilePageExpression)(expression), context, { operations: 0 });
|
|
226
|
+
exports.evaluatePageExpression = evaluatePageExpression;
|
|
227
|
+
const write = (input, path, value) => {
|
|
228
|
+
const [key, ...rest] = path;
|
|
229
|
+
if (!key || unsafe.has(key))
|
|
230
|
+
return fail('PAGE_EXPRESSION_UNSAFE_PATH');
|
|
231
|
+
if (!rest.length)
|
|
232
|
+
return { ...input, [key]: value };
|
|
233
|
+
const child = input[key];
|
|
234
|
+
if (child !== undefined && (child === null || typeof child !== 'object' || Array.isArray(child)))
|
|
235
|
+
fail('PAGE_PROPERTY_PATH_TYPE');
|
|
236
|
+
return { ...input, [key]: write((child ?? {}), rest, value) };
|
|
237
|
+
};
|
|
238
|
+
const projectPageProperties = (base, bindings, context) => {
|
|
239
|
+
assertBudget(bindings);
|
|
240
|
+
const parsed = bindings.map((binding) => page_expression_1.PagePropertyBindingSchema.parse(binding));
|
|
241
|
+
const paths = [];
|
|
242
|
+
for (const binding of parsed) {
|
|
243
|
+
if (paths.some((path) => path.slice(0, Math.min(path.length, binding.targetPath.length)).every((key, i) => key === binding.targetPath[i])))
|
|
244
|
+
fail('PAGE_PROPERTY_OVERLAP');
|
|
245
|
+
paths.push(binding.targetPath);
|
|
246
|
+
}
|
|
247
|
+
const budget = { operations: 0 };
|
|
248
|
+
return parsed.reduce((model, binding) => {
|
|
249
|
+
const value = evaluateCompiled((0, exports.compilePageExpression)(binding.expression), context, budget);
|
|
250
|
+
const type = value === null ? 'null' : Array.isArray(value) ? 'array' : typeof value;
|
|
251
|
+
if (binding.valueType && type !== binding.valueType)
|
|
252
|
+
fail('PAGE_PROPERTY_TYPE');
|
|
253
|
+
return write(model, binding.targetPath, value);
|
|
254
|
+
}, base);
|
|
255
|
+
};
|
|
256
|
+
exports.projectPageProperties = projectPageProperties;
|
|
257
|
+
//# sourceMappingURL=page-expression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-expression.js","sourceRoot":"","sources":["../../src/runtime/page-expression.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { JsonObject } from '../contracts/common';
|
|
2
|
+
export type PageStreamReducerErrorCode = 'PAGE_STREAM_INVALID_FRAME' | 'PAGE_STREAM_ID_MISMATCH' | 'PAGE_STREAM_SNAPSHOT_REQUIRED' | 'PAGE_STREAM_SEQUENCE_CONFLICT' | 'PAGE_STREAM_SEQUENCE_GAP' | 'PAGE_STREAM_TERMINATED' | 'PAGE_STREAM_CAPACITY_EXCEEDED';
|
|
3
|
+
export declare class PageStreamReducerError extends Error {
|
|
4
|
+
readonly code: PageStreamReducerErrorCode;
|
|
5
|
+
constructor(code: PageStreamReducerErrorCode);
|
|
6
|
+
}
|
|
7
|
+
export interface PageStreamState {
|
|
8
|
+
readonly streamId: string;
|
|
9
|
+
readonly status: 'awaiting-snapshot' | 'open' | 'ended' | 'error';
|
|
10
|
+
readonly model: JsonObject | undefined;
|
|
11
|
+
readonly events: readonly JsonObject[];
|
|
12
|
+
readonly sequence: number;
|
|
13
|
+
readonly cursor: string | undefined;
|
|
14
|
+
readonly error: {
|
|
15
|
+
code: string;
|
|
16
|
+
retryable: boolean;
|
|
17
|
+
} | undefined;
|
|
18
|
+
readonly seen: Readonly<Record<string, string>>;
|
|
19
|
+
readonly retainedBytes: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function createPageStreamState(streamId: string): PageStreamState;
|
|
22
|
+
/** Verified snapshots replace presentation state; deltas retain every event or reject atomically. */
|
|
23
|
+
export declare function applyPageStreamEvent(state: PageStreamState, input: unknown): PageStreamState;
|
|
24
|
+
//# sourceMappingURL=page-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-stream.d.ts","sourceRoot":"","sources":["../../src/runtime/page-stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG,2BAA2B,GAAG,yBAAyB,GAAG,+BAA+B,GAAG,+BAA+B,GAAG,0BAA0B,GAAG,wBAAwB,GAAG,+BAA+B,CAAC;AAC/P,qBAAa,sBAAuB,SAAQ,KAAK;IAAe,QAAQ,CAAC,IAAI,EAAE,0BAA0B;gBAAhC,IAAI,EAAE,0BAA0B;CAA0D;AACnK,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAClE,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAC/B;AACD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAGvE;AAGD,qGAAqG;AACrG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,eAAe,CAuB5F"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyPageStreamEvent = exports.createPageStreamState = exports.PageStreamReducerError = void 0;
|
|
4
|
+
const page_stream_1 = require("../contracts/page-stream");
|
|
5
|
+
const declarative_control_compiler_1 = require("./declarative-control-compiler");
|
|
6
|
+
class PageStreamReducerError extends Error {
|
|
7
|
+
constructor(code) {
|
|
8
|
+
super(code);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.name = 'PageStreamReducerError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.PageStreamReducerError = PageStreamReducerError;
|
|
14
|
+
function createPageStreamState(streamId) {
|
|
15
|
+
if (!page_stream_1.PageStreamDescriptorSchema.shape.streamId.safeParse(streamId).success)
|
|
16
|
+
throw new PageStreamReducerError('PAGE_STREAM_ID_MISMATCH');
|
|
17
|
+
return { streamId, status: 'awaiting-snapshot', model: undefined, events: [], sequence: 0, cursor: undefined, error: undefined, seen: {}, retainedBytes: 0 };
|
|
18
|
+
}
|
|
19
|
+
exports.createPageStreamState = createPageStreamState;
|
|
20
|
+
const MAX_SEEN_FRAMES = 2048;
|
|
21
|
+
const bytes = (value) => new TextEncoder().encode(JSON.stringify(value)).byteLength;
|
|
22
|
+
/** Verified snapshots replace presentation state; deltas retain every event or reject atomically. */
|
|
23
|
+
function applyPageStreamEvent(state, input) {
|
|
24
|
+
let frame;
|
|
25
|
+
try {
|
|
26
|
+
if (bytes(input) > page_stream_1.PAGE_STREAM_MAX_FRAME_BYTES)
|
|
27
|
+
throw new Error();
|
|
28
|
+
frame = page_stream_1.PageStreamEventSchema.parse(input);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
throw new PageStreamReducerError('PAGE_STREAM_INVALID_FRAME');
|
|
32
|
+
}
|
|
33
|
+
if (frame.streamId !== state.streamId)
|
|
34
|
+
throw new PageStreamReducerError('PAGE_STREAM_ID_MISMATCH');
|
|
35
|
+
const fingerprint = (0, declarative_control_compiler_1.canonicalContentHash)(frame);
|
|
36
|
+
const seen = state.seen[String(frame.sequence)];
|
|
37
|
+
if (seen) {
|
|
38
|
+
if (seen === fingerprint)
|
|
39
|
+
return state;
|
|
40
|
+
throw new PageStreamReducerError('PAGE_STREAM_SEQUENCE_CONFLICT');
|
|
41
|
+
}
|
|
42
|
+
if (state.status === 'ended' || state.status === 'error')
|
|
43
|
+
throw new PageStreamReducerError('PAGE_STREAM_TERMINATED');
|
|
44
|
+
if (state.status === 'awaiting-snapshot') {
|
|
45
|
+
if (frame.type !== 'snapshot')
|
|
46
|
+
throw new PageStreamReducerError('PAGE_STREAM_SNAPSHOT_REQUIRED');
|
|
47
|
+
}
|
|
48
|
+
else if (frame.sequence !== state.sequence + 1)
|
|
49
|
+
throw new PageStreamReducerError(frame.sequence <= state.sequence ? 'PAGE_STREAM_SEQUENCE_CONFLICT' : 'PAGE_STREAM_SEQUENCE_GAP');
|
|
50
|
+
const model = frame.type === 'snapshot' ? frame.payload.model : state.model;
|
|
51
|
+
const events = frame.type === 'snapshot' ? [] : frame.type === 'delta' ? [...state.events, ...frame.payload.events] : state.events;
|
|
52
|
+
// A snapshot replaces the model and replay baseline. Deltas retain a bounded
|
|
53
|
+
// fingerprint window; replay older than that window still fails sequence checks.
|
|
54
|
+
const nextSeen = frame.type === 'snapshot' ? { [String(frame.sequence)]: fingerprint } : {
|
|
55
|
+
...Object.fromEntries(Object.entries(state.seen).filter(([sequence]) => Number(sequence) > frame.sequence - MAX_SEEN_FRAMES)),
|
|
56
|
+
[String(frame.sequence)]: fingerprint,
|
|
57
|
+
};
|
|
58
|
+
const retainedBytes = bytes({ model, events, seen: nextSeen });
|
|
59
|
+
if (events.length > page_stream_1.PAGE_STREAM_MAX_BUFFER_EVENTS || retainedBytes > page_stream_1.PAGE_STREAM_MAX_BUFFER_BYTES)
|
|
60
|
+
throw new PageStreamReducerError('PAGE_STREAM_CAPACITY_EXCEEDED');
|
|
61
|
+
return { streamId: state.streamId, model, events, sequence: frame.sequence, cursor: frame.cursor, seen: nextSeen, retainedBytes,
|
|
62
|
+
status: frame.type === 'end' ? 'ended' : frame.type === 'error' ? 'error' : 'open', error: frame.type === 'error' ? frame.payload : undefined };
|
|
63
|
+
}
|
|
64
|
+
exports.applyPageStreamEvent = applyPageStreamEvent;
|
|
65
|
+
//# sourceMappingURL=page-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-stream.js","sourceRoot":"","sources":["../../src/runtime/page-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { JsonObject, JsonValue } from '../contracts/common';
|
|
2
|
+
import { type RecordEditorSubmissionSnapshot, type RecordEditorDraft, type RecordEditorDraftOperation } from '../contracts/record-editor-draft';
|
|
3
|
+
export declare const recordEditorValuesEqual: (left: JsonValue, right: JsonValue) => boolean;
|
|
4
|
+
export declare const recordEditorPathKey: (path: (string | {
|
|
5
|
+
itemId: string;
|
|
6
|
+
idKey: string;
|
|
7
|
+
})[]) => string;
|
|
8
|
+
export declare const createRecordEditorDraft: (revision: string, value: JsonObject) => RecordEditorDraft;
|
|
9
|
+
export declare const recordEditorDraftIsDirty: (draft: RecordEditorDraft) => boolean;
|
|
10
|
+
export declare const recordEditorArrayItems: (value: JsonValue | undefined, idKey: string) => JsonObject[];
|
|
11
|
+
export declare const readRecordEditorPath: (value: JsonValue, path: (string | {
|
|
12
|
+
itemId: string;
|
|
13
|
+
idKey: string;
|
|
14
|
+
})[]) => JsonValue | undefined;
|
|
15
|
+
export declare const applyRecordEditorDraft: (draft: RecordEditorDraft, input: RecordEditorDraftOperation) => RecordEditorDraft;
|
|
16
|
+
/** Deliberately select only the non-sensitive draft envelope, excluding secretChanges. */
|
|
17
|
+
export declare const captureRecordEditorSubmission: (payload: unknown) => RecordEditorSubmissionSnapshot | undefined;
|
|
18
|
+
export declare const projectRecordEditorValidation: (details: unknown, submission: RecordEditorSubmissionSnapshot | undefined) => {
|
|
19
|
+
revision: string;
|
|
20
|
+
value: Record<string, JsonValue>;
|
|
21
|
+
errors: {
|
|
22
|
+
path: (string | {
|
|
23
|
+
itemId: string;
|
|
24
|
+
idKey: string;
|
|
25
|
+
})[];
|
|
26
|
+
code: string;
|
|
27
|
+
}[];
|
|
28
|
+
} | undefined;
|
|
29
|
+
//# sourceMappingURL=record-editor-draft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-editor-draft.d.ts","sourceRoot":"","sources":["../../src/runtime/record-editor-draft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAuI,KAAK,8BAA8B,EAAE,KAAK,iBAAiB,EAAE,KAAK,0BAA0B,EAAyB,MAAM,kCAAkC,CAAC;AAG5S,eAAO,MAAM,uBAAuB,SAAU,SAAS,SAAS,SAAS,KAAG,OAK3E,CAAC;AACF,eAAO,MAAM,mBAAmB;;;SAA6B,MAA4D,CAAC;AAe1H,eAAO,MAAM,uBAAuB,aAAc,MAAM,SAAS,UAAU,KAAG,iBAK7E,CAAC;AACF,eAAO,MAAM,wBAAwB,UAAW,iBAAiB,KAAG,OAAgE,CAAC;AACrI,eAAO,MAAM,sBAAsB,UAAW,SAAS,GAAG,SAAS,SAAS,MAAM,KAAG,UAAU,EAS9F,CAAC;AACF,eAAO,MAAM,oBAAoB,UAAW,SAAS;;;SAA2B,SAAS,GAAG,SAQ3F,CAAC;AAgBF,eAAO,MAAM,sBAAsB,UAAW,iBAAiB,SAAS,0BAA0B,KAAG,iBAiCpG,CAAC;AAGF,0FAA0F;AAC1F,eAAO,MAAM,6BAA6B,YAAa,OAAO,KAAG,8BAA8B,GAAG,SASjG,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAAa,OAAO,cAAc,8BAA8B,GAAG,SAAS;;;;;;;;;;aAIrH,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectRecordEditorValidation = exports.captureRecordEditorSubmission = exports.applyRecordEditorDraft = exports.readRecordEditorPath = exports.recordEditorArrayItems = exports.recordEditorDraftIsDirty = exports.createRecordEditorDraft = exports.recordEditorPathKey = exports.recordEditorValuesEqual = void 0;
|
|
4
|
+
const record_editor_draft_1 = require("../contracts/record-editor-draft");
|
|
5
|
+
const own = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
6
|
+
const recordEditorValuesEqual = (left, right) => {
|
|
7
|
+
if (left === right)
|
|
8
|
+
return true;
|
|
9
|
+
if (!left || !right || typeof left !== 'object' || typeof right !== 'object' || Array.isArray(left) !== Array.isArray(right))
|
|
10
|
+
return false;
|
|
11
|
+
const keys = Object.keys(left);
|
|
12
|
+
return keys.length === Object.keys(right).length && keys.every((key) => own(right, key) && (0, exports.recordEditorValuesEqual)(left[key], right[key]));
|
|
13
|
+
};
|
|
14
|
+
exports.recordEditorValuesEqual = recordEditorValuesEqual;
|
|
15
|
+
const recordEditorPathKey = (path) => JSON.stringify(record_editor_draft_1.RecordEditorPathSchema.parse(path));
|
|
16
|
+
exports.recordEditorPathKey = recordEditorPathKey;
|
|
17
|
+
const assertValue = (value) => {
|
|
18
|
+
let nodes = 0;
|
|
19
|
+
const visit = (current, depth) => {
|
|
20
|
+
if (++nodes > 16384 || depth > 32)
|
|
21
|
+
throw new RangeError('Editor draft exceeds its value budget.');
|
|
22
|
+
if (current !== null && typeof current !== 'string' && typeof current !== 'boolean' && !(typeof current === 'number' && Number.isFinite(current)) && typeof current !== 'object')
|
|
23
|
+
throw new TypeError('Editor draft requires JSON values.');
|
|
24
|
+
if (typeof current === 'number' && !Number.isFinite(current))
|
|
25
|
+
throw new TypeError('Editor draft requires finite numbers.');
|
|
26
|
+
if (current && typeof current === 'object' && !Array.isArray(current) && Object.getPrototypeOf(current) !== Object.prototype && Object.getPrototypeOf(current) !== null)
|
|
27
|
+
throw new TypeError('Editor draft requires plain objects.');
|
|
28
|
+
if (current && typeof current === 'object')
|
|
29
|
+
for (const [key, child] of Object.entries(current)) {
|
|
30
|
+
if (['__proto__', 'prototype', 'constructor'].includes(key))
|
|
31
|
+
throw new TypeError('Unsafe editor member.');
|
|
32
|
+
visit(child, depth + 1);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
visit(value, 0);
|
|
36
|
+
};
|
|
37
|
+
const createRecordEditorDraft = (revision, value) => {
|
|
38
|
+
if (!revision || revision.length > 256)
|
|
39
|
+
throw new TypeError('Editor reset requires a revision.');
|
|
40
|
+
assertValue(value);
|
|
41
|
+
const original = JSON.parse(JSON.stringify(value));
|
|
42
|
+
return { revision, original, value: JSON.parse(JSON.stringify(original)), touched: [], errors: [] };
|
|
43
|
+
};
|
|
44
|
+
exports.createRecordEditorDraft = createRecordEditorDraft;
|
|
45
|
+
const recordEditorDraftIsDirty = (draft) => !(0, exports.recordEditorValuesEqual)(draft.original, draft.value);
|
|
46
|
+
exports.recordEditorDraftIsDirty = recordEditorDraftIsDirty;
|
|
47
|
+
const recordEditorArrayItems = (value, idKey) => {
|
|
48
|
+
record_editor_draft_1.RecordEditorPathSchema.parse([idKey]);
|
|
49
|
+
if (!Array.isArray(value) || value.length > 1000)
|
|
50
|
+
throw new TypeError('Editor array requires at most 1000 identified objects.');
|
|
51
|
+
const seen = new Set();
|
|
52
|
+
for (const item of value) {
|
|
53
|
+
if (!item || typeof item !== 'object' || Array.isArray(item) || !own(item, idKey) || typeof item[idKey] !== 'string' || !item[idKey] || seen.has(item[idKey]))
|
|
54
|
+
throw new TypeError('Editor array requires unique non-empty stable IDs.');
|
|
55
|
+
seen.add(item[idKey]);
|
|
56
|
+
}
|
|
57
|
+
return value;
|
|
58
|
+
};
|
|
59
|
+
exports.recordEditorArrayItems = recordEditorArrayItems;
|
|
60
|
+
const readRecordEditorPath = (value, path) => {
|
|
61
|
+
let current = value;
|
|
62
|
+
for (const segment of record_editor_draft_1.RecordEditorPathSchema.parse(path)) {
|
|
63
|
+
if (typeof segment !== 'string')
|
|
64
|
+
current = (0, exports.recordEditorArrayItems)(current, segment.idKey).find((item) => item[segment.idKey] === segment.itemId);
|
|
65
|
+
else
|
|
66
|
+
current = current && typeof current === 'object' && !Array.isArray(current) && own(current, segment) ? current[segment] : undefined;
|
|
67
|
+
if (current === undefined)
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
return current;
|
|
71
|
+
};
|
|
72
|
+
exports.readRecordEditorPath = readRecordEditorPath;
|
|
73
|
+
const write = (value, path, replacement) => {
|
|
74
|
+
if (!path.length)
|
|
75
|
+
return replacement;
|
|
76
|
+
const [segment, ...rest] = path;
|
|
77
|
+
if (typeof segment !== 'string') {
|
|
78
|
+
const items = (0, exports.recordEditorArrayItems)(value, segment.idKey);
|
|
79
|
+
const index = items.findIndex((item) => item[segment.idKey] === segment.itemId);
|
|
80
|
+
if (index < 0 || rest[0] === segment.idKey)
|
|
81
|
+
throw new TypeError('Editor item is missing or its stable ID is being changed.');
|
|
82
|
+
const result = items.map((item, i) => i === index ? write(item, rest, replacement) : item);
|
|
83
|
+
(0, exports.recordEditorArrayItems)(result, segment.idKey);
|
|
84
|
+
if (result[index][segment.idKey] !== segment.itemId)
|
|
85
|
+
throw new TypeError('Editor stable ID cannot change.');
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
89
|
+
throw new TypeError('Editor path requires an object.');
|
|
90
|
+
return { ...value, [segment]: write(own(value, segment) ? value[segment] : {}, rest, replacement) };
|
|
91
|
+
};
|
|
92
|
+
const applyRecordEditorDraft = (draft, input) => {
|
|
93
|
+
const operation = record_editor_draft_1.RecordEditorDraftOperationSchema.parse(input);
|
|
94
|
+
if (operation.kind === 'reset')
|
|
95
|
+
return (0, exports.createRecordEditorDraft)(operation.revision, operation.value);
|
|
96
|
+
const key = (0, exports.recordEditorPathKey)(operation.path);
|
|
97
|
+
const touched = draft.touched.some((path) => (0, exports.recordEditorPathKey)(path) === key) ? draft.touched : [...draft.touched, operation.path];
|
|
98
|
+
if (touched.length > 4096)
|
|
99
|
+
throw new RangeError('Editor touched path budget exceeded.');
|
|
100
|
+
if (operation.kind === 'touch')
|
|
101
|
+
return { ...draft, touched };
|
|
102
|
+
let replacement;
|
|
103
|
+
if (operation.kind === 'set')
|
|
104
|
+
replacement = operation.value;
|
|
105
|
+
else {
|
|
106
|
+
const items = [...(0, exports.recordEditorArrayItems)((0, exports.readRecordEditorPath)(draft.value, operation.path), operation.idKey)];
|
|
107
|
+
if (operation.kind === 'insert') {
|
|
108
|
+
(0, exports.recordEditorArrayItems)([...items, operation.value], operation.idKey);
|
|
109
|
+
const before = operation.beforeId === undefined ? items.length : items.findIndex((item) => item[operation.idKey] === operation.beforeId);
|
|
110
|
+
if (before < 0)
|
|
111
|
+
throw new TypeError('Editor insertion target is missing.');
|
|
112
|
+
items.splice(before, 0, operation.value);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const index = items.findIndex((item) => item[operation.idKey] === operation.itemId);
|
|
116
|
+
if (index < 0)
|
|
117
|
+
throw new TypeError('Editor item is missing.');
|
|
118
|
+
if (operation.kind === 'move' && operation.beforeId === operation.itemId)
|
|
119
|
+
return { ...draft, touched };
|
|
120
|
+
const [item] = items.splice(index, 1);
|
|
121
|
+
if (operation.kind === 'move') {
|
|
122
|
+
const before = operation.beforeId === undefined ? items.length : items.findIndex((entry) => entry[operation.idKey] === operation.beforeId);
|
|
123
|
+
if (before < 0)
|
|
124
|
+
throw new TypeError('Editor move target is missing.');
|
|
125
|
+
items.splice(before, 0, item);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
replacement = items;
|
|
129
|
+
}
|
|
130
|
+
const value = write(draft.value, operation.path, replacement);
|
|
131
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
132
|
+
throw new TypeError('Editor root requires an object.');
|
|
133
|
+
assertValue(value);
|
|
134
|
+
return { ...draft, value, touched, errors: [] };
|
|
135
|
+
};
|
|
136
|
+
exports.applyRecordEditorDraft = applyRecordEditorDraft;
|
|
137
|
+
/** Deliberately select only the non-sensitive draft envelope, excluding secretChanges. */
|
|
138
|
+
const captureRecordEditorSubmission = (payload) => {
|
|
139
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload))
|
|
140
|
+
return undefined;
|
|
141
|
+
const input = payload;
|
|
142
|
+
const parsed = record_editor_draft_1.RecordEditorSubmissionSnapshotSchema.safeParse({ revision: input.draftRevision, value: input.values });
|
|
143
|
+
if (!parsed.success)
|
|
144
|
+
return undefined;
|
|
145
|
+
try {
|
|
146
|
+
const draft = (0, exports.createRecordEditorDraft)(parsed.data.revision, parsed.data.value);
|
|
147
|
+
return { revision: draft.revision, value: draft.value };
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
exports.captureRecordEditorSubmission = captureRecordEditorSubmission;
|
|
154
|
+
const projectRecordEditorValidation = (details, submission) => {
|
|
155
|
+
if (!submission)
|
|
156
|
+
return undefined;
|
|
157
|
+
const parsed = record_editor_draft_1.RecordEditorValidationDetailsSchema.safeParse(details);
|
|
158
|
+
return parsed.success ? { revision: submission.revision, value: submission.value, errors: parsed.data.errors } : undefined;
|
|
159
|
+
};
|
|
160
|
+
exports.projectRecordEditorValidation = projectRecordEditorValidation;
|
|
161
|
+
//# sourceMappingURL=record-editor-draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-editor-draft.js","sourceRoot":"","sources":["../../src/runtime/record-editor-draft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type JsonObject } from '../contracts/common';
|
|
2
|
+
/** Compile the authoritative target input schema once; never fetch external schemas. */
|
|
3
|
+
export declare const compileTargetRenderModelValidator: (schema: JsonObject, documents?: readonly JsonObject[]) => ((model: unknown) => JsonObject);
|
|
4
|
+
//# sourceMappingURL=target-render-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target-render-model.d.ts","sourceRoot":"","sources":["../../src/runtime/target-render-model.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAExE,wFAAwF;AACxF,eAAO,MAAM,iCAAiC,WAAY,UAAU,cAAa,SAAS,UAAU,EAAE,KAAQ,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,CAe5I,CAAC"}
|