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.
Files changed (166) hide show
  1. package/README.md +134 -2
  2. package/dist/adapters/contracts.d.ts +1 -1
  3. package/dist/adapters/contracts.d.ts.map +1 -1
  4. package/dist/adapters/storage/MockAdapters.d.ts +89 -0
  5. package/dist/adapters/storage/MockAdapters.d.ts.map +1 -0
  6. package/dist/adapters/storage/MockAdapters.js +109 -0
  7. package/dist/adapters/storage/MockAdapters.js.map +1 -0
  8. package/dist/adapters/story/CustomJSONAdapter.d.ts +1 -1
  9. package/dist/adapters/story/CustomJSONAdapter.d.ts.map +1 -1
  10. package/dist/adapters/story/CustomJSONAdapter.js +20 -14
  11. package/dist/adapters/story/CustomJSONAdapter.js.map +1 -1
  12. package/dist/adapters/story/InkAdapter.d.ts +1 -1
  13. package/dist/adapters/story/InkAdapter.d.ts.map +1 -1
  14. package/dist/adapters/story/InkAdapter.js +7 -10
  15. package/dist/adapters/story/InkAdapter.js.map +1 -1
  16. package/dist/adapters/story/TwisonAdapter.d.ts +1 -1
  17. package/dist/adapters/story/TwisonAdapter.d.ts.map +1 -1
  18. package/dist/adapters/story/TwisonAdapter.js +2 -2
  19. package/dist/adapters/story/TwisonAdapter.js.map +1 -1
  20. package/dist/cli/audit.js +1 -0
  21. package/dist/cli/audit.js.map +1 -1
  22. package/dist/cli/import.d.ts.map +1 -1
  23. package/dist/cli/import.js +31 -20
  24. package/dist/cli/import.js.map +1 -1
  25. package/dist/cli/init.js +1 -0
  26. package/dist/cli/init.js.map +1 -1
  27. package/dist/cli/perf.d.ts.map +1 -1
  28. package/dist/cli/perf.js +30 -0
  29. package/dist/cli/perf.js.map +1 -1
  30. package/dist/cli/play.d.ts.map +1 -1
  31. package/dist/cli/play.js +90 -77
  32. package/dist/cli/play.js.map +1 -1
  33. package/dist/engine/condition.d.ts +25 -3
  34. package/dist/engine/condition.d.ts.map +1 -1
  35. package/dist/engine/condition.js +358 -64
  36. package/dist/engine/condition.js.map +1 -1
  37. package/dist/engine/core.d.ts +93 -1
  38. package/dist/engine/core.d.ts.map +1 -1
  39. package/dist/engine/core.js +405 -33
  40. package/dist/engine/core.js.map +1 -1
  41. package/dist/engine/demo-story.d.ts +1 -0
  42. package/dist/engine/demo-story.d.ts.map +1 -1
  43. package/dist/engine/demo-story.js +1 -0
  44. package/dist/engine/demo-story.js.map +1 -1
  45. package/dist/engine/error-factory.d.ts +86 -0
  46. package/dist/engine/error-factory.d.ts.map +1 -0
  47. package/dist/engine/error-factory.js +87 -0
  48. package/dist/engine/error-factory.js.map +1 -0
  49. package/dist/engine/errors.d.ts +3 -0
  50. package/dist/engine/errors.d.ts.map +1 -1
  51. package/dist/engine/errors.js +3 -0
  52. package/dist/engine/errors.js.map +1 -1
  53. package/dist/engine/validation.js +1 -1
  54. package/dist/engine/validation.js.map +1 -1
  55. package/dist/index.d.ts +20 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +29 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/integrations/react.d.ts +20 -3
  60. package/dist/integrations/react.d.ts.map +1 -1
  61. package/dist/integrations/react.js +15 -2
  62. package/dist/integrations/react.js.map +1 -1
  63. package/dist/narrative/branching/models.d.ts +1 -0
  64. package/dist/narrative/branching/models.d.ts.map +1 -1
  65. package/dist/narrative/branching/models.js.map +1 -1
  66. package/dist/performance/AdaptiveControllers.d.ts +51 -0
  67. package/dist/performance/AdaptiveControllers.d.ts.map +1 -0
  68. package/dist/performance/AdaptiveControllers.js +87 -0
  69. package/dist/performance/AdaptiveControllers.js.map +1 -0
  70. package/dist/performance/ContextPool.d.ts +1 -0
  71. package/dist/performance/ContextPool.d.ts.map +1 -0
  72. package/dist/performance/ContextPool.js +2 -0
  73. package/dist/performance/ContextPool.js.map +1 -0
  74. package/dist/performance/HotReloadDelta.d.ts +5 -0
  75. package/dist/performance/HotReloadDelta.d.ts.map +1 -1
  76. package/dist/performance/HotReloadDelta.js +18 -4
  77. package/dist/performance/HotReloadDelta.js.map +1 -1
  78. package/dist/performance/ObjectPool.d.ts.map +1 -1
  79. package/dist/performance/ObjectPool.js +4 -1
  80. package/dist/performance/ObjectPool.js.map +1 -1
  81. package/dist/performance/PerfReporter.d.ts +69 -0
  82. package/dist/performance/PerfReporter.d.ts.map +1 -1
  83. package/dist/performance/PerfReporter.js +314 -28
  84. package/dist/performance/PerfReporter.js.map +1 -1
  85. package/dist/performance/ThreadPool.d.ts +5 -0
  86. package/dist/performance/ThreadPool.d.ts.map +1 -1
  87. package/dist/performance/ThreadPool.js +33 -5
  88. package/dist/performance/ThreadPool.js.map +1 -1
  89. package/dist/persistence/StorageAdapters.d.ts.map +1 -1
  90. package/dist/persistence/StorageAdapters.js +13 -19
  91. package/dist/persistence/StorageAdapters.js.map +1 -1
  92. package/dist/qnce-engine.d.ts +2258 -0
  93. package/dist/quantum/entangler.d.ts +13 -0
  94. package/dist/quantum/entangler.d.ts.map +1 -0
  95. package/dist/quantum/entangler.js +24 -0
  96. package/dist/quantum/entangler.js.map +1 -0
  97. package/dist/quantum/flags.d.ts +24 -0
  98. package/dist/quantum/flags.d.ts.map +1 -0
  99. package/dist/quantum/flags.js +29 -0
  100. package/dist/quantum/flags.js.map +1 -0
  101. package/dist/quantum/integration.d.ts +26 -0
  102. package/dist/quantum/integration.d.ts.map +1 -0
  103. package/dist/quantum/integration.js +38 -0
  104. package/dist/quantum/integration.js.map +1 -0
  105. package/dist/quantum/measurement.d.ts +22 -0
  106. package/dist/quantum/measurement.d.ts.map +1 -0
  107. package/dist/quantum/measurement.js +44 -0
  108. package/dist/quantum/measurement.js.map +1 -0
  109. package/dist/quantum/phase.d.ts +20 -0
  110. package/dist/quantum/phase.d.ts.map +1 -0
  111. package/dist/quantum/phase.js +22 -0
  112. package/dist/quantum/phase.js.map +1 -0
  113. package/dist/quantum/types.d.ts +12 -0
  114. package/dist/quantum/types.d.ts.map +1 -0
  115. package/dist/quantum/types.js +5 -0
  116. package/dist/quantum/types.js.map +1 -0
  117. package/dist/schemas/validateStoryData.d.ts.map +1 -1
  118. package/dist/schemas/validateStoryData.js +8 -2
  119. package/dist/schemas/validateStoryData.js.map +1 -1
  120. package/dist/telemetry/core.d.ts +27 -1
  121. package/dist/telemetry/core.d.ts.map +1 -1
  122. package/dist/telemetry/core.js +63 -8
  123. package/dist/telemetry/core.js.map +1 -1
  124. package/dist/telemetry/types.d.ts +27 -0
  125. package/dist/telemetry/types.d.ts.map +1 -1
  126. package/dist/tsdoc-metadata.json +11 -0
  127. package/dist/ui/__tests__/AutosaveIndicator.test.js +10 -13
  128. package/dist/ui/__tests__/AutosaveIndicator.test.js.map +1 -1
  129. package/dist/ui/__tests__/UndoRedoControls.test.js +7 -9
  130. package/dist/ui/__tests__/UndoRedoControls.test.js.map +1 -1
  131. package/dist/ui/components/AutosaveIndicator.d.ts +1 -0
  132. package/dist/ui/components/AutosaveIndicator.d.ts.map +1 -1
  133. package/dist/ui/components/AutosaveIndicator.js +2 -1
  134. package/dist/ui/components/AutosaveIndicator.js.map +1 -1
  135. package/dist/ui/components/UndoRedoControls.d.ts +1 -0
  136. package/dist/ui/components/UndoRedoControls.d.ts.map +1 -1
  137. package/dist/ui/components/UndoRedoControls.js +1 -0
  138. package/dist/ui/components/UndoRedoControls.js.map +1 -1
  139. package/dist/ui/hooks/useKeyboardShortcuts.d.ts +1 -0
  140. package/dist/ui/hooks/useKeyboardShortcuts.d.ts.map +1 -1
  141. package/dist/ui/hooks/useKeyboardShortcuts.js +17 -5
  142. package/dist/ui/hooks/useKeyboardShortcuts.js.map +1 -1
  143. package/dist/ui/types.d.ts +6 -0
  144. package/dist/ui/types.d.ts.map +1 -1
  145. package/dist/ui/types.js +1 -0
  146. package/dist/ui/types.js.map +1 -1
  147. package/dist/utils/debug-logger.d.ts +20 -0
  148. package/dist/utils/debug-logger.d.ts.map +1 -0
  149. package/dist/utils/debug-logger.js +24 -0
  150. package/dist/utils/debug-logger.js.map +1 -0
  151. package/dist/utils/hot-profiler.d.ts +21 -0
  152. package/dist/utils/hot-profiler.d.ts.map +1 -0
  153. package/dist/utils/hot-profiler.js +36 -0
  154. package/dist/utils/hot-profiler.js.map +1 -0
  155. package/dist/utils/intern.d.ts +11 -0
  156. package/dist/utils/intern.d.ts.map +1 -0
  157. package/dist/utils/intern.js +45 -0
  158. package/dist/utils/intern.js.map +1 -0
  159. package/dist/utils/logger.d.ts +34 -0
  160. package/dist/utils/logger.d.ts.map +1 -0
  161. package/dist/utils/logger.js +115 -0
  162. package/dist/utils/logger.js.map +1 -0
  163. package/docs/PERFORMANCE.md +330 -0
  164. package/examples/fluent-builder-prototype.ts +71 -0
  165. package/examples/quantum-integration-demo.ts +51 -0
  166. package/package.json +25 -9
@@ -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
- * Built-in expression operators
22
- */
23
- const OPERATORS = {
24
- '>=': (a, b) => a >= b,
25
- '<=': (a, b) => a <= b,
26
- '>': (a, b) => a > b,
27
- '<': (a, b) => a < b,
28
- '==': (a, b) => a == b,
29
- '===': (a, b) => a === b,
30
- '!=': (a, b) => a != b,
31
- '!==': (a, b) => a !== b,
32
- '&&': (a, b) => a && b,
33
- '||': (a, b) => a || b,
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 compiled functions for better performance
41
- functionCache = new Map();
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 with support for common patterns
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.sanitizeExpression(expression);
81
- // Handle simple cases first
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 safe evaluation context
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
- return !!func(evalContext.flags, evalContext.state, evalContext.timestamp, evalContext.customData);
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
- let sanitized = expression.trim();
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
- return {
149
- flags: { ...context.state.flags },
150
- state: {
151
- currentNodeId: context.state.currentNodeId,
418
+ if (!this.poolingEnabled || this.contextPool.length === 0) {
419
+ return {
152
420
  flags: { ...context.state.flags },
153
- history: [...context.state.history],
154
- },
155
- timestamp: context.timestamp,
156
- customData: context.customData ? { ...context.customData } : {},
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
- // Try to create the function without executing it
166
- new Function('flags', 'state', 'timestamp', 'customData', `
167
- "use strict";
168
- return ${expression};
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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"}