qnce-engine 1.3.2 → 1.4.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/README.md +134 -2
- package/dist/adapters/contracts.d.ts +1 -1
- package/dist/adapters/contracts.d.ts.map +1 -1
- package/dist/adapters/storage/MockAdapters.d.ts +89 -0
- package/dist/adapters/storage/MockAdapters.d.ts.map +1 -0
- package/dist/adapters/storage/MockAdapters.js +109 -0
- package/dist/adapters/storage/MockAdapters.js.map +1 -0
- package/dist/adapters/story/CustomJSONAdapter.d.ts +1 -1
- package/dist/adapters/story/CustomJSONAdapter.d.ts.map +1 -1
- package/dist/adapters/story/CustomJSONAdapter.js +20 -14
- package/dist/adapters/story/CustomJSONAdapter.js.map +1 -1
- package/dist/adapters/story/InkAdapter.d.ts +1 -1
- package/dist/adapters/story/InkAdapter.d.ts.map +1 -1
- package/dist/adapters/story/InkAdapter.js +7 -10
- package/dist/adapters/story/InkAdapter.js.map +1 -1
- package/dist/adapters/story/TwisonAdapter.d.ts +1 -1
- package/dist/adapters/story/TwisonAdapter.d.ts.map +1 -1
- package/dist/adapters/story/TwisonAdapter.js +2 -2
- package/dist/adapters/story/TwisonAdapter.js.map +1 -1
- package/dist/cli/audit.js +1 -0
- package/dist/cli/audit.js.map +1 -1
- package/dist/cli/import.d.ts.map +1 -1
- package/dist/cli/import.js +31 -20
- package/dist/cli/import.js.map +1 -1
- package/dist/cli/init.js +1 -0
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/perf.d.ts.map +1 -1
- package/dist/cli/perf.js +30 -0
- package/dist/cli/perf.js.map +1 -1
- package/dist/cli/play.d.ts.map +1 -1
- package/dist/cli/play.js +90 -77
- package/dist/cli/play.js.map +1 -1
- package/dist/engine/condition.d.ts +25 -3
- package/dist/engine/condition.d.ts.map +1 -1
- package/dist/engine/condition.js +358 -64
- package/dist/engine/condition.js.map +1 -1
- package/dist/engine/core.d.ts +93 -1
- package/dist/engine/core.d.ts.map +1 -1
- package/dist/engine/core.js +405 -33
- package/dist/engine/core.js.map +1 -1
- package/dist/engine/demo-story.d.ts +1 -0
- package/dist/engine/demo-story.d.ts.map +1 -1
- package/dist/engine/demo-story.js +1 -0
- package/dist/engine/demo-story.js.map +1 -1
- package/dist/engine/error-factory.d.ts +86 -0
- package/dist/engine/error-factory.d.ts.map +1 -0
- package/dist/engine/error-factory.js +87 -0
- package/dist/engine/error-factory.js.map +1 -0
- package/dist/engine/errors.d.ts +3 -0
- package/dist/engine/errors.d.ts.map +1 -1
- package/dist/engine/errors.js +3 -0
- package/dist/engine/errors.js.map +1 -1
- package/dist/engine/validation.js +1 -1
- package/dist/engine/validation.js.map +1 -1
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/react.d.ts +20 -3
- package/dist/integrations/react.d.ts.map +1 -1
- package/dist/integrations/react.js +15 -2
- package/dist/integrations/react.js.map +1 -1
- package/dist/narrative/branching/models.d.ts +1 -0
- package/dist/narrative/branching/models.d.ts.map +1 -1
- package/dist/narrative/branching/models.js.map +1 -1
- package/dist/performance/AdaptiveControllers.d.ts +51 -0
- package/dist/performance/AdaptiveControllers.d.ts.map +1 -0
- package/dist/performance/AdaptiveControllers.js +87 -0
- package/dist/performance/AdaptiveControllers.js.map +1 -0
- package/dist/performance/ContextPool.d.ts +1 -0
- package/dist/performance/ContextPool.d.ts.map +1 -0
- package/dist/performance/ContextPool.js +2 -0
- package/dist/performance/ContextPool.js.map +1 -0
- package/dist/performance/HotReloadDelta.d.ts +5 -0
- package/dist/performance/HotReloadDelta.d.ts.map +1 -1
- package/dist/performance/HotReloadDelta.js +18 -4
- package/dist/performance/HotReloadDelta.js.map +1 -1
- package/dist/performance/ObjectPool.d.ts.map +1 -1
- package/dist/performance/ObjectPool.js +4 -1
- package/dist/performance/ObjectPool.js.map +1 -1
- package/dist/performance/PerfReporter.d.ts +69 -0
- package/dist/performance/PerfReporter.d.ts.map +1 -1
- package/dist/performance/PerfReporter.js +314 -28
- package/dist/performance/PerfReporter.js.map +1 -1
- package/dist/performance/ThreadPool.d.ts +5 -0
- package/dist/performance/ThreadPool.d.ts.map +1 -1
- package/dist/performance/ThreadPool.js +33 -5
- package/dist/performance/ThreadPool.js.map +1 -1
- package/dist/persistence/StorageAdapters.d.ts.map +1 -1
- package/dist/persistence/StorageAdapters.js +13 -19
- package/dist/persistence/StorageAdapters.js.map +1 -1
- package/dist/qnce-engine.d.ts +2258 -0
- package/dist/quantum/entangler.d.ts +13 -0
- package/dist/quantum/entangler.d.ts.map +1 -0
- package/dist/quantum/entangler.js +24 -0
- package/dist/quantum/entangler.js.map +1 -0
- package/dist/quantum/flags.d.ts +24 -0
- package/dist/quantum/flags.d.ts.map +1 -0
- package/dist/quantum/flags.js +29 -0
- package/dist/quantum/flags.js.map +1 -0
- package/dist/quantum/integration.d.ts +26 -0
- package/dist/quantum/integration.d.ts.map +1 -0
- package/dist/quantum/integration.js +38 -0
- package/dist/quantum/integration.js.map +1 -0
- package/dist/quantum/measurement.d.ts +22 -0
- package/dist/quantum/measurement.d.ts.map +1 -0
- package/dist/quantum/measurement.js +44 -0
- package/dist/quantum/measurement.js.map +1 -0
- package/dist/quantum/phase.d.ts +20 -0
- package/dist/quantum/phase.d.ts.map +1 -0
- package/dist/quantum/phase.js +22 -0
- package/dist/quantum/phase.js.map +1 -0
- package/dist/quantum/types.d.ts +12 -0
- package/dist/quantum/types.d.ts.map +1 -0
- package/dist/quantum/types.js +5 -0
- package/dist/quantum/types.js.map +1 -0
- package/dist/schemas/validateStoryData.d.ts.map +1 -1
- package/dist/schemas/validateStoryData.js +8 -2
- package/dist/schemas/validateStoryData.js.map +1 -1
- package/dist/telemetry/core.d.ts +27 -1
- package/dist/telemetry/core.d.ts.map +1 -1
- package/dist/telemetry/core.js +63 -8
- package/dist/telemetry/core.js.map +1 -1
- package/dist/telemetry/types.d.ts +27 -0
- package/dist/telemetry/types.d.ts.map +1 -1
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/ui/__tests__/AutosaveIndicator.test.js +10 -13
- package/dist/ui/__tests__/AutosaveIndicator.test.js.map +1 -1
- package/dist/ui/__tests__/UndoRedoControls.test.js +7 -9
- package/dist/ui/__tests__/UndoRedoControls.test.js.map +1 -1
- package/dist/ui/components/AutosaveIndicator.d.ts +1 -0
- package/dist/ui/components/AutosaveIndicator.d.ts.map +1 -1
- package/dist/ui/components/AutosaveIndicator.js +2 -1
- package/dist/ui/components/AutosaveIndicator.js.map +1 -1
- package/dist/ui/components/UndoRedoControls.d.ts +1 -0
- package/dist/ui/components/UndoRedoControls.d.ts.map +1 -1
- package/dist/ui/components/UndoRedoControls.js +1 -0
- package/dist/ui/components/UndoRedoControls.js.map +1 -1
- package/dist/ui/hooks/useKeyboardShortcuts.d.ts +1 -0
- package/dist/ui/hooks/useKeyboardShortcuts.d.ts.map +1 -1
- package/dist/ui/hooks/useKeyboardShortcuts.js +17 -5
- package/dist/ui/hooks/useKeyboardShortcuts.js.map +1 -1
- package/dist/ui/types.d.ts +6 -0
- package/dist/ui/types.d.ts.map +1 -1
- package/dist/ui/types.js +1 -0
- package/dist/ui/types.js.map +1 -1
- package/dist/utils/debug-logger.d.ts +20 -0
- package/dist/utils/debug-logger.d.ts.map +1 -0
- package/dist/utils/debug-logger.js +24 -0
- package/dist/utils/debug-logger.js.map +1 -0
- package/dist/utils/hot-profiler.d.ts +21 -0
- package/dist/utils/hot-profiler.d.ts.map +1 -0
- package/dist/utils/hot-profiler.js +36 -0
- package/dist/utils/hot-profiler.js.map +1 -0
- package/dist/utils/intern.d.ts +11 -0
- package/dist/utils/intern.d.ts.map +1 -0
- package/dist/utils/intern.js +45 -0
- package/dist/utils/intern.js.map +1 -0
- package/dist/utils/logger.d.ts +34 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +115 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/PERFORMANCE.md +330 -0
- package/examples/fluent-builder-prototype.ts +71 -0
- package/examples/quantum-integration-demo.ts +51 -0
- package/package.json +25 -9
package/dist/engine/condition.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// QNCE Condition Evaluator - Sprint 3.4
|
|
3
3
|
// Parses and evaluates conditional expressions for choice visibility
|
|
4
|
+
// Safe expression evaluator: no dynamic code execution (no eval / new Function)
|
|
4
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
6
|
exports.conditionEvaluator = exports.ConditionEvaluator = exports.ConditionEvaluationError = void 0;
|
|
7
|
+
const intern_1 = require("../utils/intern");
|
|
6
8
|
/**
|
|
7
9
|
* Error thrown when condition evaluation fails
|
|
10
|
+
* @public
|
|
8
11
|
*/
|
|
9
12
|
class ConditionEvaluationError extends Error {
|
|
10
13
|
expression;
|
|
@@ -17,29 +20,277 @@ class ConditionEvaluationError extends Error {
|
|
|
17
20
|
}
|
|
18
21
|
}
|
|
19
22
|
exports.ConditionEvaluationError = ConditionEvaluationError;
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
23
|
+
/** Tokenize a condition expression string into an array of Tokens. */
|
|
24
|
+
function tokenizeExpression(expr) {
|
|
25
|
+
const tokens = [];
|
|
26
|
+
let i = 0;
|
|
27
|
+
while (i < expr.length) {
|
|
28
|
+
const ch = expr[i];
|
|
29
|
+
if (/\s/.test(ch)) {
|
|
30
|
+
i++;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
// Number literal
|
|
34
|
+
if (/[0-9]/.test(ch)) {
|
|
35
|
+
let num = '';
|
|
36
|
+
while (i < expr.length && /[0-9.]/.test(expr[i]))
|
|
37
|
+
num += expr[i++];
|
|
38
|
+
tokens.push({ kind: 'number', value: num });
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// String literal (single or double quoted, basic escape support)
|
|
42
|
+
if (ch === '"' || ch === "'") {
|
|
43
|
+
const quote = ch;
|
|
44
|
+
i++;
|
|
45
|
+
let str = '';
|
|
46
|
+
while (i < expr.length && expr[i] !== quote) {
|
|
47
|
+
if (expr[i] === '\\' && i + 1 < expr.length)
|
|
48
|
+
i++; // skip escape prefix (bounds-safe)
|
|
49
|
+
str += expr[i++];
|
|
50
|
+
}
|
|
51
|
+
if (expr[i] === quote)
|
|
52
|
+
i++;
|
|
53
|
+
tokens.push({ kind: 'string', value: str });
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// Identifier or keyword
|
|
57
|
+
if (/[a-zA-Z_$]/.test(ch)) {
|
|
58
|
+
let id = '';
|
|
59
|
+
while (i < expr.length && /[a-zA-Z0-9_$]/.test(expr[i]))
|
|
60
|
+
id += expr[i++];
|
|
61
|
+
tokens.push({ kind: 'ident', value: id });
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// 3-char operators (must be checked before 2-char)
|
|
65
|
+
const c3 = expr.slice(i, i + 3);
|
|
66
|
+
if (c3 === '===' || c3 === '!==') {
|
|
67
|
+
tokens.push({ kind: 'op', value: c3 });
|
|
68
|
+
i += 3;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// 2-char operators
|
|
72
|
+
const c2 = expr.slice(i, i + 2);
|
|
73
|
+
if (['==', '!=', '<=', '>=', '&&', '||'].includes(c2)) {
|
|
74
|
+
tokens.push({ kind: 'op', value: c2 });
|
|
75
|
+
i += 2;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// 1-char operators
|
|
79
|
+
if ('!<>+-*/%'.includes(ch)) {
|
|
80
|
+
tokens.push({ kind: 'op', value: ch });
|
|
81
|
+
i++;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (ch === '(') {
|
|
85
|
+
tokens.push({ kind: 'lparen', value: ch });
|
|
86
|
+
i++;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (ch === ')') {
|
|
90
|
+
tokens.push({ kind: 'rparen', value: ch });
|
|
91
|
+
i++;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (ch === '.') {
|
|
95
|
+
tokens.push({ kind: 'dot', value: ch });
|
|
96
|
+
i++;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
throw new Error(`Unexpected character '${ch}' in expression`);
|
|
100
|
+
}
|
|
101
|
+
return tokens;
|
|
102
|
+
}
|
|
103
|
+
/** Recursive-descent evaluator operating on a pre-tokenized expression. */
|
|
104
|
+
class SafeParser {
|
|
105
|
+
pos = 0;
|
|
106
|
+
toks;
|
|
107
|
+
flags;
|
|
108
|
+
state;
|
|
109
|
+
timestamp;
|
|
110
|
+
customData;
|
|
111
|
+
constructor(tokens, ctx) {
|
|
112
|
+
this.toks = tokens;
|
|
113
|
+
this.flags = ctx.flags;
|
|
114
|
+
this.state = ctx.state;
|
|
115
|
+
this.timestamp = ctx.timestamp;
|
|
116
|
+
this.customData = ctx.customData;
|
|
117
|
+
}
|
|
118
|
+
evaluate() {
|
|
119
|
+
const result = this.parseOr();
|
|
120
|
+
if (this.pos < this.toks.length) {
|
|
121
|
+
throw new Error(`Unexpected token '${this.toks[this.pos].value}'`);
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
peek() { return this.toks[this.pos]; }
|
|
126
|
+
advance() {
|
|
127
|
+
const t = this.toks[this.pos++];
|
|
128
|
+
if (!t)
|
|
129
|
+
throw new Error('Unexpected end of expression');
|
|
130
|
+
return t;
|
|
131
|
+
}
|
|
132
|
+
parseOr() {
|
|
133
|
+
let left = this.parseAnd();
|
|
134
|
+
while (this.peek()?.value === '||') {
|
|
135
|
+
this.pos++;
|
|
136
|
+
const right = this.parseAnd();
|
|
137
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
138
|
+
left = (left || right);
|
|
139
|
+
}
|
|
140
|
+
return left;
|
|
141
|
+
}
|
|
142
|
+
parseAnd() {
|
|
143
|
+
let left = this.parseNot();
|
|
144
|
+
while (this.peek()?.value === '&&') {
|
|
145
|
+
this.pos++;
|
|
146
|
+
const right = this.parseNot();
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
148
|
+
left = (left && right);
|
|
149
|
+
}
|
|
150
|
+
return left;
|
|
151
|
+
}
|
|
152
|
+
parseNot() {
|
|
153
|
+
if (this.peek()?.value === '!') {
|
|
154
|
+
this.pos++;
|
|
155
|
+
return !this.parseNot();
|
|
156
|
+
}
|
|
157
|
+
return this.parseComparison();
|
|
158
|
+
}
|
|
159
|
+
parseComparison() {
|
|
160
|
+
const left = this.parseAdd();
|
|
161
|
+
const op = this.peek();
|
|
162
|
+
if (op?.kind === 'op' && ['===', '!==', '==', '!=', '>=', '<=', '>', '<'].includes(op.value)) {
|
|
163
|
+
this.pos++;
|
|
164
|
+
const right = this.parseAdd();
|
|
165
|
+
switch (op.value) {
|
|
166
|
+
case '===': return left === right;
|
|
167
|
+
case '!==': return left !== right;
|
|
168
|
+
// eslint-disable-next-line eqeqeq
|
|
169
|
+
case '==': return left == right;
|
|
170
|
+
// eslint-disable-next-line eqeqeq
|
|
171
|
+
case '!=': return left != right;
|
|
172
|
+
case '>=': return left >= right;
|
|
173
|
+
case '<=': return left <= right;
|
|
174
|
+
case '>': return left > right;
|
|
175
|
+
case '<': return left < right;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return left;
|
|
179
|
+
}
|
|
180
|
+
parseAdd() {
|
|
181
|
+
let left = this.parseMul();
|
|
182
|
+
while (this.peek()?.value === '+' || this.peek()?.value === '-') {
|
|
183
|
+
const op = this.advance().value;
|
|
184
|
+
const right = this.parseMul();
|
|
185
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
186
|
+
left = op === '+' ? (left + right) : left - right;
|
|
187
|
+
}
|
|
188
|
+
return left;
|
|
189
|
+
}
|
|
190
|
+
parseMul() {
|
|
191
|
+
let left = this.parseUnary();
|
|
192
|
+
while (['*', '/', '%'].includes(this.peek()?.value ?? '')) {
|
|
193
|
+
const op = this.advance().value;
|
|
194
|
+
const right = this.parseUnary();
|
|
195
|
+
if (op === '*')
|
|
196
|
+
left = left * right;
|
|
197
|
+
else if (op === '/')
|
|
198
|
+
left = left / right;
|
|
199
|
+
else
|
|
200
|
+
left = left % right;
|
|
201
|
+
}
|
|
202
|
+
return left;
|
|
203
|
+
}
|
|
204
|
+
parseUnary() {
|
|
205
|
+
if (this.peek()?.value === '-') {
|
|
206
|
+
this.pos++;
|
|
207
|
+
return -this.parseUnary();
|
|
208
|
+
}
|
|
209
|
+
return this.parsePrimary();
|
|
210
|
+
}
|
|
211
|
+
parsePrimary() {
|
|
212
|
+
const tok = this.peek();
|
|
213
|
+
if (!tok)
|
|
214
|
+
throw new Error('Unexpected end of expression');
|
|
215
|
+
if (tok.kind === 'lparen') {
|
|
216
|
+
this.pos++;
|
|
217
|
+
const val = this.parseOr();
|
|
218
|
+
if (this.peek()?.kind !== 'rparen')
|
|
219
|
+
throw new Error("Expected ')'");
|
|
220
|
+
this.pos++;
|
|
221
|
+
return val;
|
|
222
|
+
}
|
|
223
|
+
if (tok.kind === 'number') {
|
|
224
|
+
this.pos++;
|
|
225
|
+
return parseFloat(tok.value);
|
|
226
|
+
}
|
|
227
|
+
if (tok.kind === 'string') {
|
|
228
|
+
this.pos++;
|
|
229
|
+
return tok.value;
|
|
230
|
+
}
|
|
231
|
+
if (tok.kind === 'ident') {
|
|
232
|
+
this.pos++;
|
|
233
|
+
switch (tok.value) {
|
|
234
|
+
case 'true': return true;
|
|
235
|
+
case 'false': return false;
|
|
236
|
+
case 'null': return null;
|
|
237
|
+
case 'undefined': return undefined;
|
|
238
|
+
case 'timestamp': return this.timestamp;
|
|
239
|
+
case 'flags': {
|
|
240
|
+
if (this.peek()?.kind !== 'dot')
|
|
241
|
+
throw new Error("Expected '.' after 'flags'");
|
|
242
|
+
this.pos++;
|
|
243
|
+
const name = this.advance();
|
|
244
|
+
if (name.kind !== 'ident')
|
|
245
|
+
throw new Error("Expected identifier after 'flags.'");
|
|
246
|
+
return this.flags[name.value];
|
|
247
|
+
}
|
|
248
|
+
case 'state': {
|
|
249
|
+
if (this.peek()?.kind !== 'dot')
|
|
250
|
+
throw new Error("Expected '.' after 'state'");
|
|
251
|
+
this.pos++;
|
|
252
|
+
const name = this.advance();
|
|
253
|
+
if (name.kind !== 'ident')
|
|
254
|
+
throw new Error("Expected identifier after 'state.'");
|
|
255
|
+
return this.state[name.value];
|
|
256
|
+
}
|
|
257
|
+
case 'customData': {
|
|
258
|
+
if (this.peek()?.kind !== 'dot')
|
|
259
|
+
throw new Error("Expected '.' after 'customData'");
|
|
260
|
+
this.pos++;
|
|
261
|
+
const name = this.advance();
|
|
262
|
+
if (name.kind !== 'ident')
|
|
263
|
+
throw new Error("Expected identifier after 'customData.'");
|
|
264
|
+
return (this.customData ? this.customData[name.value] : undefined);
|
|
265
|
+
}
|
|
266
|
+
default:
|
|
267
|
+
throw new Error(`Unknown identifier '${tok.value}'`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
throw new Error(`Unexpected token '${tok.value}'`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// ─── ConditionEvaluator class ─────────────────────────────────────────────────
|
|
35
274
|
/**
|
|
36
275
|
* Condition evaluator service for parsing and executing conditional expressions
|
|
276
|
+
* @public
|
|
37
277
|
*/
|
|
38
278
|
class ConditionEvaluator {
|
|
39
279
|
customEvaluator;
|
|
40
|
-
// Cache
|
|
41
|
-
|
|
280
|
+
// Cache tokenized expressions for better performance
|
|
281
|
+
tokenCache = new Map();
|
|
42
282
|
maxCacheSize = 100;
|
|
283
|
+
// Expression canonicalization (sanitized+interned) LRU cache
|
|
284
|
+
expressionCache = new Map();
|
|
285
|
+
maxExpressionCacheSize = 256;
|
|
286
|
+
// Lightweight evaluation context pool (optional)
|
|
287
|
+
contextPool = [];
|
|
288
|
+
maxContextPoolSize = 64;
|
|
289
|
+
poolingEnabled = false;
|
|
290
|
+
/** @internal Enable/disable context pooling (engine toggles in perf mode) */
|
|
291
|
+
enablePooling(enable) { this.poolingEnabled = enable; }
|
|
292
|
+
/** @internal Adjust pool cap during tuning */
|
|
293
|
+
setMaxContextPoolSize(size) { this.maxContextPoolSize = size; }
|
|
43
294
|
/**
|
|
44
295
|
* Set a custom evaluator function for handling complex conditions
|
|
45
296
|
*/
|
|
@@ -69,7 +320,8 @@ class ConditionEvaluator {
|
|
|
69
320
|
}
|
|
70
321
|
}
|
|
71
322
|
/**
|
|
72
|
-
* Built-in expression evaluator
|
|
323
|
+
* Built-in expression evaluator – uses the safe recursive-descent parser;
|
|
324
|
+
* no dynamic code generation (no eval / new Function).
|
|
73
325
|
*/
|
|
74
326
|
evaluateBuiltIn(expression, context) {
|
|
75
327
|
// Handle empty expressions
|
|
@@ -77,49 +329,51 @@ class ConditionEvaluator {
|
|
|
77
329
|
throw new ConditionEvaluationError('Empty or whitespace-only condition expression', expression);
|
|
78
330
|
}
|
|
79
331
|
// Sanitize and prepare expression
|
|
80
|
-
const sanitizedExpression = this.
|
|
81
|
-
// Handle simple cases
|
|
332
|
+
const sanitizedExpression = this.internAndNormalize(expression);
|
|
333
|
+
// Handle simple literal cases without parsing overhead
|
|
82
334
|
if (sanitizedExpression === 'true')
|
|
83
335
|
return true;
|
|
84
336
|
if (sanitizedExpression === 'false')
|
|
85
337
|
return false;
|
|
86
|
-
// Create
|
|
338
|
+
// Create evaluation context (uses pool when pooling is enabled)
|
|
87
339
|
const evalContext = this.createEvaluationContext(context);
|
|
88
|
-
// Check function cache for performance
|
|
89
|
-
let func = this.functionCache.get(sanitizedExpression);
|
|
90
|
-
if (!func) {
|
|
91
|
-
try {
|
|
92
|
-
// Use Function constructor for safe evaluation (better than eval)
|
|
93
|
-
func = new Function('flags', 'state', 'timestamp', 'customData', `
|
|
94
|
-
"use strict";
|
|
95
|
-
return ${sanitizedExpression};
|
|
96
|
-
`);
|
|
97
|
-
// Cache the function for future use
|
|
98
|
-
if (this.functionCache.size >= this.maxCacheSize) {
|
|
99
|
-
// Remove oldest entry when cache is full
|
|
100
|
-
const firstKey = this.functionCache.keys().next().value;
|
|
101
|
-
if (firstKey) {
|
|
102
|
-
this.functionCache.delete(firstKey);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
this.functionCache.set(sanitizedExpression, func);
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
throw new ConditionEvaluationError(`Invalid expression syntax: ${expression}`, expression, error instanceof Error ? error : new Error(String(error)));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
340
|
try {
|
|
112
|
-
|
|
341
|
+
const tokens = this.getTokens(sanitizedExpression, expression);
|
|
342
|
+
const parser = new SafeParser(tokens, evalContext);
|
|
343
|
+
const result = !!parser.evaluate();
|
|
344
|
+
this.releaseEvaluationContext(evalContext);
|
|
345
|
+
return result;
|
|
113
346
|
}
|
|
114
347
|
catch (error) {
|
|
348
|
+
this.releaseEvaluationContext(evalContext);
|
|
115
349
|
throw new ConditionEvaluationError(`Runtime error evaluating: ${expression}`, expression, error instanceof Error ? error : new Error(String(error)));
|
|
116
350
|
}
|
|
117
351
|
}
|
|
352
|
+
/** Return cached token array for expression, tokenizing and caching if needed. */
|
|
353
|
+
getTokens(sanitizedExpression, originalExpression) {
|
|
354
|
+
let tokens = this.tokenCache.get(sanitizedExpression);
|
|
355
|
+
if (!tokens) {
|
|
356
|
+
try {
|
|
357
|
+
tokens = tokenizeExpression(sanitizedExpression);
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
throw new ConditionEvaluationError(`Invalid expression syntax: ${originalExpression}`, originalExpression, error instanceof Error ? error : new Error(String(error)));
|
|
361
|
+
}
|
|
362
|
+
if (this.tokenCache.size >= this.maxCacheSize) {
|
|
363
|
+
const firstKey = this.tokenCache.keys().next().value;
|
|
364
|
+
if (firstKey)
|
|
365
|
+
this.tokenCache.delete(firstKey);
|
|
366
|
+
}
|
|
367
|
+
this.tokenCache.set(sanitizedExpression, tokens);
|
|
368
|
+
}
|
|
369
|
+
return tokens;
|
|
370
|
+
}
|
|
118
371
|
/**
|
|
119
|
-
* Sanitize expression to prevent code injection
|
|
372
|
+
* Sanitize expression to prevent code injection (defense-in-depth layer).
|
|
373
|
+
* The safe parser already rejects non-whitelisted identifiers; this check
|
|
374
|
+
* provides an early, explicit rejection with a clearer error message.
|
|
120
375
|
*/
|
|
121
376
|
sanitizeExpression(expression) {
|
|
122
|
-
// Remove potentially dangerous patterns
|
|
123
377
|
const dangerous = [
|
|
124
378
|
/\beval\b/g,
|
|
125
379
|
/\bFunction\b/g,
|
|
@@ -133,7 +387,7 @@ class ConditionEvaluator {
|
|
|
133
387
|
/\bwindow\b/g,
|
|
134
388
|
/\bdocument\b/g,
|
|
135
389
|
];
|
|
136
|
-
|
|
390
|
+
const sanitized = expression.trim();
|
|
137
391
|
for (const pattern of dangerous) {
|
|
138
392
|
if (pattern.test(sanitized)) {
|
|
139
393
|
throw new ConditionEvaluationError(`Potentially unsafe expression detected: ${expression}`, expression);
|
|
@@ -141,38 +395,77 @@ class ConditionEvaluator {
|
|
|
141
395
|
}
|
|
142
396
|
return sanitized;
|
|
143
397
|
}
|
|
398
|
+
/** Normalize + intern expression with LRU retention */
|
|
399
|
+
internAndNormalize(expression) {
|
|
400
|
+
const sanitized = this.sanitizeExpression(expression);
|
|
401
|
+
if (this.expressionCache.has(sanitized)) {
|
|
402
|
+
const existing = this.expressionCache.get(sanitized);
|
|
403
|
+
return existing;
|
|
404
|
+
}
|
|
405
|
+
const canonical = (0, intern_1.internString)(sanitized);
|
|
406
|
+
if (this.expressionCache.size >= this.maxExpressionCacheSize) {
|
|
407
|
+
const first = this.expressionCache.keys().next().value;
|
|
408
|
+
if (first)
|
|
409
|
+
this.expressionCache.delete(first);
|
|
410
|
+
}
|
|
411
|
+
this.expressionCache.set(canonical, canonical);
|
|
412
|
+
return canonical;
|
|
413
|
+
}
|
|
144
414
|
/**
|
|
145
415
|
* Create a safe evaluation context from the condition context
|
|
146
416
|
*/
|
|
147
417
|
createEvaluationContext(context) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
state: {
|
|
151
|
-
currentNodeId: context.state.currentNodeId,
|
|
418
|
+
if (!this.poolingEnabled || this.contextPool.length === 0) {
|
|
419
|
+
return {
|
|
152
420
|
flags: { ...context.state.flags },
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
421
|
+
state: {
|
|
422
|
+
currentNodeId: context.state.currentNodeId,
|
|
423
|
+
flags: { ...context.state.flags },
|
|
424
|
+
history: [...context.state.history],
|
|
425
|
+
},
|
|
426
|
+
timestamp: context.timestamp,
|
|
427
|
+
customData: context.customData ? { ...context.customData } : {},
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
const ctx = this.contextPool.pop();
|
|
431
|
+
ctx.flags = { ...context.state.flags };
|
|
432
|
+
ctx.state.currentNodeId = context.state.currentNodeId;
|
|
433
|
+
ctx.state.flags = { ...context.state.flags };
|
|
434
|
+
ctx.state.history = [...context.state.history];
|
|
435
|
+
ctx.timestamp = context.timestamp;
|
|
436
|
+
ctx.customData = context.customData ? { ...context.customData } : {};
|
|
437
|
+
return ctx;
|
|
438
|
+
}
|
|
439
|
+
releaseEvaluationContext(ctx) {
|
|
440
|
+
if (!this.poolingEnabled)
|
|
441
|
+
return;
|
|
442
|
+
if (this.contextPool.length < this.maxContextPoolSize) {
|
|
443
|
+
ctx.customData = undefined; // drop potentially large data refs
|
|
444
|
+
this.contextPool.push(ctx);
|
|
445
|
+
}
|
|
158
446
|
}
|
|
159
447
|
/**
|
|
160
448
|
* Validate that an expression is syntactically correct without evaluating it
|
|
161
449
|
*/
|
|
162
450
|
validateExpression(expression) {
|
|
163
451
|
try {
|
|
164
|
-
this.sanitizeExpression(expression);
|
|
165
|
-
//
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
452
|
+
const sanitized = this.sanitizeExpression(expression);
|
|
453
|
+
// Attempt to tokenize and parse with a dummy context to detect syntax errors
|
|
454
|
+
const tokens = tokenizeExpression(sanitized);
|
|
455
|
+
const dummyCtx = {
|
|
456
|
+
flags: {},
|
|
457
|
+
state: { currentNodeId: '', flags: {}, history: [] },
|
|
458
|
+
timestamp: 0,
|
|
459
|
+
customData: undefined,
|
|
460
|
+
};
|
|
461
|
+
const parser = new SafeParser(tokens, dummyCtx);
|
|
462
|
+
parser.evaluate();
|
|
170
463
|
return { valid: true };
|
|
171
464
|
}
|
|
172
465
|
catch (error) {
|
|
173
466
|
return {
|
|
174
467
|
valid: false,
|
|
175
|
-
error: error instanceof Error ? error.message : String(error)
|
|
468
|
+
error: error instanceof Error ? error.message : String(error),
|
|
176
469
|
};
|
|
177
470
|
}
|
|
178
471
|
}
|
|
@@ -191,5 +484,6 @@ class ConditionEvaluator {
|
|
|
191
484
|
}
|
|
192
485
|
exports.ConditionEvaluator = ConditionEvaluator;
|
|
193
486
|
// Create a global instance for the engine to use
|
|
487
|
+
/** @public */
|
|
194
488
|
exports.conditionEvaluator = new ConditionEvaluator();
|
|
195
489
|
//# sourceMappingURL=condition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"condition.js","sourceRoot":"","sources":["../../src/engine/condition.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"condition.js","sourceRoot":"","sources":["../../src/engine/condition.ts"],"names":[],"mappings":"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"}
|