@memberjunction/global 6.1.0-edge.2 → 6.1.0-edge.3

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 (55) hide show
  1. package/LICENSE +180 -4
  2. package/README.md +2 -2
  3. package/dist/SQLExpressionValidator.d.ts +28 -1
  4. package/dist/SQLExpressionValidator.d.ts.map +1 -1
  5. package/dist/SQLExpressionValidator.js +42 -4
  6. package/dist/SQLExpressionValidator.js.map +1 -1
  7. package/dist/SafeExpressionEvaluator.d.ts +131 -6
  8. package/dist/SafeExpressionEvaluator.d.ts.map +1 -1
  9. package/dist/SafeExpressionEvaluator.js +344 -41
  10. package/dist/SafeExpressionEvaluator.js.map +1 -1
  11. package/dist/__tests__/DeepDiff.test.d.ts +2 -0
  12. package/dist/__tests__/DeepDiff.test.d.ts.map +1 -0
  13. package/dist/__tests__/DeepDiff.test.js +229 -0
  14. package/dist/__tests__/DeepDiff.test.js.map +1 -0
  15. package/dist/__tests__/JSONValidator.test.d.ts +2 -0
  16. package/dist/__tests__/JSONValidator.test.d.ts.map +1 -0
  17. package/dist/__tests__/JSONValidator.test.js +221 -0
  18. package/dist/__tests__/JSONValidator.test.js.map +1 -0
  19. package/dist/__tests__/MJGlobal.test.js +8 -6
  20. package/dist/__tests__/MJGlobal.test.js.map +1 -1
  21. package/dist/__tests__/ResourcePatternUtils.test.d.ts +2 -0
  22. package/dist/__tests__/ResourcePatternUtils.test.d.ts.map +1 -0
  23. package/dist/__tests__/ResourcePatternUtils.test.js +50 -0
  24. package/dist/__tests__/ResourcePatternUtils.test.js.map +1 -0
  25. package/dist/__tests__/SQLExpressionValidator.security.test.js +62 -1
  26. package/dist/__tests__/SQLExpressionValidator.security.test.js.map +1 -1
  27. package/dist/__tests__/SafeExpressionEvaluator.security.test.d.ts +2 -0
  28. package/dist/__tests__/SafeExpressionEvaluator.security.test.d.ts.map +1 -0
  29. package/dist/__tests__/SafeExpressionEvaluator.security.test.js +284 -0
  30. package/dist/__tests__/SafeExpressionEvaluator.security.test.js.map +1 -0
  31. package/dist/__tests__/SafeExpressionEvaluator.test.d.ts +2 -0
  32. package/dist/__tests__/SafeExpressionEvaluator.test.d.ts.map +1 -0
  33. package/dist/__tests__/SafeExpressionEvaluator.test.js +355 -0
  34. package/dist/__tests__/SafeExpressionEvaluator.test.js.map +1 -0
  35. package/dist/__tests__/SafeExpressionEvaluator.validateSyntax.test.d.ts +2 -0
  36. package/dist/__tests__/SafeExpressionEvaluator.validateSyntax.test.d.ts.map +1 -0
  37. package/dist/__tests__/SafeExpressionEvaluator.validateSyntax.test.js +62 -0
  38. package/dist/__tests__/SafeExpressionEvaluator.validateSyntax.test.js.map +1 -0
  39. package/dist/__tests__/util.toEpochMs.test.d.ts +2 -0
  40. package/dist/__tests__/util.toEpochMs.test.d.ts.map +1 -0
  41. package/dist/__tests__/util.toEpochMs.test.js +57 -0
  42. package/dist/__tests__/util.toEpochMs.test.js.map +1 -0
  43. package/dist/index.d.ts +1 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/util/ResourcePatternUtils.d.ts +35 -0
  48. package/dist/util/ResourcePatternUtils.d.ts.map +1 -0
  49. package/dist/util/ResourcePatternUtils.js +56 -0
  50. package/dist/util/ResourcePatternUtils.js.map +1 -0
  51. package/dist/util.d.ts +11 -0
  52. package/dist/util.d.ts.map +1 -1
  53. package/dist/util.js +16 -0
  54. package/dist/util.js.map +1 -1
  55. package/package.json +3 -2
@@ -9,7 +9,50 @@
9
9
  * @author MemberJunction.com
10
10
  * @since 2.76.0
11
11
  */
12
+ import { parse } from 'acorn';
12
13
  import { MJLruCache } from './MJLruCache.js';
14
+ /**
15
+ * Namespace globals whose listed methods a condition may CALL, keyed by namespace name.
16
+ *
17
+ * Both halves of `Math.abs(x)` are fixed identifiers in the AST, so admitting them adds no dynamic
18
+ * lookup: the four invariants that close the sandbox escape — literal-only computed keys, no
19
+ * `constructor`/`__proto__`/`prototype`, a closed non-computed call surface with no
20
+ * `call`/`apply`/`bind`, and screened free identifiers — are all untouched by this list.
21
+ *
22
+ * Every entry is a pure value function. `Math.random` is deliberately absent (a condition that
23
+ * evaluates differently on each run is not a guard), as are `Object.assign`,
24
+ * `Object.defineProperty` and `Object.setPrototypeOf`, which mutate.
25
+ */
26
+ export const SAFE_GLOBAL_NAMESPACE_METHODS = new Map([
27
+ ['Math', new Set([
28
+ 'abs', 'ceil', 'floor', 'round', 'trunc', 'sign', 'min', 'max',
29
+ 'pow', 'sqrt', 'cbrt', 'log', 'log2', 'log10', 'exp', 'hypot',
30
+ ])],
31
+ ['JSON', new Set(['parse', 'stringify'])],
32
+ ['Object', new Set(['keys', 'values', 'entries'])],
33
+ ['Array', new Set(['isArray'])],
34
+ ['Number', new Set(['isInteger', 'isFinite', 'isNaN', 'isSafeInteger', 'parseInt', 'parseFloat'])],
35
+ ['Date', new Set(['now'])],
36
+ ]);
37
+ /**
38
+ * Global functions a condition may call by bare name — the coercions and numeric predicates that
39
+ * authored specs use (`Number(payload.count) > 3`, `isNaN(payload.count)`).
40
+ */
41
+ export const SAFE_GLOBAL_CALLABLES = new Set([
42
+ 'parseInt', 'parseFloat', 'isNaN', 'isFinite', 'Number', 'String', 'Boolean',
43
+ ]);
44
+ /**
45
+ * Every global name a condition may reference, as a namespace or as a bare callable.
46
+ *
47
+ * **This is the single source of truth for the ambient globals of the condition dialect.** It lives
48
+ * beside the policy screen that enforces it so a caller validating conditions ahead of evaluation
49
+ * (`ai-core-plus`'s task-graph door) cannot bless a name the runtime would refuse — the failure mode
50
+ * that shipped once already, where the door's own list and the evaluator disagreed silently.
51
+ */
52
+ export const SAFE_EXPRESSION_GLOBALS = new Set([
53
+ ...SAFE_GLOBAL_NAMESPACE_METHODS.keys(),
54
+ ...SAFE_GLOBAL_CALLABLES,
55
+ ]);
13
56
  /**
14
57
  * Safe expression evaluator that prevents arbitrary code execution while
15
58
  * supporting common boolean expressions and property access patterns.
@@ -17,11 +60,22 @@ import { MJLruCache } from './MJLruCache.js';
17
60
  * Supported operations:
18
61
  * - Comparison: ==, ===, !=, !==, <, >, <=, >=
19
62
  * - Logical: &&, ||, !
20
- * - Property access: dot notation (e.g., payload.customer.name)
21
- * - Array access: bracket notation (e.g., items[0])
63
+ * - Property access: dot notation (e.g., payload.customer.name), including optional chaining (`?.`)
64
+ * - Array access: bracket notation with a literal index/key (e.g., items[0])
22
65
  * - Safe methods: .length, .includes(), .startsWith(), .endsWith()
23
66
  * - Array methods: .some(), .every(), .find(), .filter()
24
- * - Type checking: typeof, instanceof (limited to safe types)
67
+ * - Safe globals: the namespaces and bare callables in {@link SAFE_EXPRESSION_GLOBALS}
68
+ * (e.g. `Math.abs(output.delta) < 5`, `Number(payload.count) > 3`, `Object.keys(payload).length`)
69
+ * - Type checking: typeof
70
+ *
71
+ * Safety is enforced by parsing the expression to an AST and walking it against
72
+ * an ALLOWLIST of node types before it is compiled — an unlisted construct
73
+ * (computed member access with a non-literal key, `.constructor`/`__proto__`
74
+ * access, any call outside the safe-method and safe-global lists, host-global
75
+ * identifiers, etc.) is rejected at validation time and never reaches the compiler. A structural
76
+ * allowlist cannot be defeated by string concatenation the way a textual
77
+ * denylist can, and it does not over-reject data that merely mentions a reserved
78
+ * word (e.g. `name == 'constructor'` is a legal comparison).
25
79
  *
26
80
  * @class SafeExpressionEvaluator
27
81
  *
@@ -57,38 +111,33 @@ export class SafeExpressionEvaluator {
57
111
  this._compiledExpressionCache = new MJLruCache({ maxSize: 1000 });
58
112
  }
59
113
  /**
60
- * Patterns that indicate potentially dangerous code
114
+ * Identifiers that must never resolve to a host global. Because the compiled
115
+ * function runs in global scope, a bare `process`/`Function`/`globalThis`/…
116
+ * would reach the real global object; identifiers are atomic AST tokens, so a
117
+ * name that is split with string concatenation parses as separate identifiers
118
+ * or an operator and is caught by the structural rules instead.
61
119
  * @private
62
120
  */
63
- static { this.DANGEROUS_PATTERNS = [
64
- /\beval\s*\(/i,
65
- /\bnew\s+Function/i,
66
- /\bFunction\s*\(/i,
67
- /\bimport\s+/i,
68
- /\brequire\s*\(/i,
69
- /\bprocess\./i,
70
- /\bglobal\./i,
71
- /\bwindow\./i,
72
- /\bdocument\./i,
73
- /\b__proto__\b/i,
74
- /\bconstructor\b/i,
75
- /\bprototype\b/i,
76
- /\.\s*constructor/i,
77
- /\bthis\b/,
78
- /\bawait\b/i,
79
- /\basync\b/i,
80
- /\bclass\b/i,
81
- /\bextends\b/i,
82
- /\bthrow\b/i,
83
- /\btry\b/i,
84
- /\bcatch\b/i,
85
- /\bfinally\b/i,
86
- /;/, // No semicolons to prevent multiple statements
87
- /{/, // No curly braces to prevent code blocks
88
- /}/, // No curly braces
89
- /`/, // No template literals
90
- /\$\{/, // No template expressions
91
- ]; }
121
+ static { this.DANGEROUS_IDENTIFIERS = new Set([
122
+ 'eval', 'Function', 'globalThis', 'global', 'window', 'document', 'process',
123
+ 'require', 'module', 'exports', '__dirname', '__filename', 'self', 'top',
124
+ 'parent', 'frames', 'Reflect', 'Proxy', 'WebAssembly', 'Atomics',
125
+ 'SharedArrayBuffer', 'import', 'arguments', 'constructor', 'prototype', '__proto__',
126
+ ]); }
127
+ /**
128
+ * Property names that open the prototype chain / constructor climb. Denied on
129
+ * both dotted (`x.constructor`) and literal-bracket (`x["constructor"]`) access.
130
+ * @private
131
+ */
132
+ static { this.DANGEROUS_PROPERTY_NAMES = new Set([
133
+ 'constructor', '__proto__', 'prototype',
134
+ ]); }
135
+ /** Binary operators the evaluator permits. `instanceof`/`in`/bitwise are excluded. @private */
136
+ static { this.ALLOWED_BINARY_OPERATORS = new Set([
137
+ '==', '!=', '===', '!==', '<', '<=', '>', '>=', '+', '-', '*', '/', '%',
138
+ ]); }
139
+ /** Unary operators the evaluator permits. `delete`/`void` are excluded. @private */
140
+ static { this.ALLOWED_UNARY_OPERATORS = new Set(['!', '-', '+', 'typeof']); }
92
141
  /**
93
142
  * Safe methods that can be called on objects
94
143
  * @private
@@ -186,7 +235,8 @@ export class SafeExpressionEvaluator {
186
235
  }
187
236
  }
188
237
  /**
189
- * Validates an expression for safety
238
+ * Validates an expression for safety by parsing it and walking the AST against
239
+ * an allowlist. Returns an error message if any construct is not permitted.
190
240
  *
191
241
  * @param {string} expression - The expression to validate
192
242
  *
@@ -201,13 +251,9 @@ export class SafeExpressionEvaluator {
201
251
  if (expression.length > 1000) {
202
252
  return 'Expression exceeds maximum length of 1000 characters';
203
253
  }
204
- // Check for dangerous patterns
205
- for (const pattern of SafeExpressionEvaluator.DANGEROUS_PATTERNS) {
206
- if (pattern.test(expression)) {
207
- return `Expression contains forbidden construct: ${pattern.source}`;
208
- }
209
- }
210
- // Basic syntax validation - ensure balanced parentheses
254
+ // Basic syntax validation - ensure balanced parentheses (kept for a precise
255
+ // error message ahead of the parser, which would otherwise report a generic
256
+ // syntax error).
211
257
  let parenCount = 0;
212
258
  for (const char of expression) {
213
259
  if (char === '(')
@@ -221,8 +267,216 @@ export class SafeExpressionEvaluator {
221
267
  if (parenCount !== 0) {
222
268
  return 'Unbalanced parentheses in expression';
223
269
  }
270
+ // A whitespace-only expression compiles to `Boolean( )`, i.e. false — there
271
+ // is nothing to parse or validate.
272
+ if (expression.trim() === '') {
273
+ return null;
274
+ }
275
+ let program;
276
+ try {
277
+ program = parse(expression, { ecmaVersion: 2022 });
278
+ }
279
+ catch (e) {
280
+ return this.forbidden(`it is not a parseable single expression (${e instanceof Error ? e.message : String(e)})`);
281
+ }
282
+ if (program.body.length !== 1 || program.body[0].type !== 'ExpressionStatement') {
283
+ return this.forbidden('only a single expression is permitted — no statements, blocks, or semicolons');
284
+ }
285
+ return this.checkNode(program.body[0].expression);
286
+ }
287
+ /** Builds the standard rejection message. @private */
288
+ forbidden(detail) {
289
+ return `Expression contains a forbidden construct: ${detail}`;
290
+ }
291
+ /**
292
+ * Walks an AST node against the allowlist. Returns an error message on the first
293
+ * disallowed construct, or null if the entire subtree is permitted.
294
+ * @private
295
+ */
296
+ checkNode(node) {
297
+ switch (node.type) {
298
+ case 'Literal': {
299
+ const lit = node;
300
+ // Regex literals can be crafted for catastrophic backtracking; permit strings/numbers/booleans/null only.
301
+ if (lit.value instanceof RegExp || 'regex' in lit) {
302
+ return this.forbidden('regular expression literals are not allowed');
303
+ }
304
+ return null;
305
+ }
306
+ case 'Identifier': {
307
+ const name = node.name;
308
+ if (SafeExpressionEvaluator.DANGEROUS_IDENTIFIERS.has(name)) {
309
+ return this.forbidden(`the identifier "${name}"`);
310
+ }
311
+ return null;
312
+ }
313
+ case 'ChainExpression':
314
+ // `a?.b`, `a?.[0]`, `a?.b()` — the optional marker changes only whether the member
315
+ // read short-circuits on null/undefined, so unwrapping lands the inner node back in
316
+ // the ordinary member/call rules and `a?.constructor` stays blocked.
317
+ return this.checkNode(node.expression);
318
+ case 'MemberExpression':
319
+ return this.checkMemberExpression(node);
320
+ case 'CallExpression':
321
+ return this.checkCallExpression(node);
322
+ case 'ArrowFunctionExpression':
323
+ return this.checkArrowFunction(node);
324
+ case 'BinaryExpression': {
325
+ const bin = node;
326
+ if (!SafeExpressionEvaluator.ALLOWED_BINARY_OPERATORS.has(bin.operator)) {
327
+ return this.forbidden(`the operator "${bin.operator}"`);
328
+ }
329
+ return this.checkNode(bin.left) ?? this.checkNode(bin.right);
330
+ }
331
+ case 'LogicalExpression': {
332
+ const log = node;
333
+ return this.checkNode(log.left) ?? this.checkNode(log.right);
334
+ }
335
+ case 'UnaryExpression': {
336
+ const un = node;
337
+ if (!SafeExpressionEvaluator.ALLOWED_UNARY_OPERATORS.has(un.operator)) {
338
+ return this.forbidden(`the unary operator "${un.operator}"`);
339
+ }
340
+ return this.checkNode(un.argument);
341
+ }
342
+ case 'ConditionalExpression': {
343
+ const cond = node;
344
+ return this.checkNode(cond.test) ?? this.checkNode(cond.consequent) ?? this.checkNode(cond.alternate);
345
+ }
346
+ case 'ArrayExpression': {
347
+ const arr = node;
348
+ for (const el of arr.elements) {
349
+ if (!el)
350
+ continue; // array hole
351
+ if (el.type === 'SpreadElement') {
352
+ return this.forbidden('spread elements are not allowed');
353
+ }
354
+ const err = this.checkNode(el);
355
+ if (err)
356
+ return err;
357
+ }
358
+ return null;
359
+ }
360
+ default:
361
+ return this.forbidden(`${node.type} is not allowed`);
362
+ }
363
+ }
364
+ /**
365
+ * Member access is allowed for dotted property reads and literal-key bracket
366
+ * reads, but never for a computed key built at runtime (the string-concat
367
+ * escape route) or a prototype-chain property.
368
+ * @private
369
+ */
370
+ checkMemberExpression(node) {
371
+ if (node.property.type === 'PrivateIdentifier') {
372
+ return this.forbidden('private fields are not allowed');
373
+ }
374
+ if (node.computed) {
375
+ // Bracket access must use a literal — a computed key (`x["con"+"structor"]`,
376
+ // `x[y]`) is exactly the route a textual denylist misses, so reject anything
377
+ // that is not a plain string/number literal.
378
+ if (node.property.type !== 'Literal') {
379
+ return this.forbidden('computed member access must use a literal index/key');
380
+ }
381
+ const value = node.property.value;
382
+ if (typeof value === 'string') {
383
+ if (SafeExpressionEvaluator.DANGEROUS_PROPERTY_NAMES.has(value)) {
384
+ return this.forbidden(`access to "${value}"`);
385
+ }
386
+ }
387
+ else if (typeof value !== 'number') {
388
+ return this.forbidden('computed member access must use a string or numeric literal');
389
+ }
390
+ }
391
+ else {
392
+ const name = node.property.name;
393
+ if (SafeExpressionEvaluator.DANGEROUS_PROPERTY_NAMES.has(name)) {
394
+ return this.forbidden(`access to "${name}"`);
395
+ }
396
+ }
397
+ return this.checkNode(node.object);
398
+ }
399
+ /**
400
+ * A call is admitted only when its callee is a FIXED name on one of two allowlists: a bare
401
+ * safe global (`parseInt(...)`) or a dotted method that is either a safe instance method or a
402
+ * method of a safe global namespace (`Math.abs(...)`). Everything else — a computed callee, an
403
+ * unlisted bare identifier (`eval(...)`, `Function(...)`), a call on a call's result that is
404
+ * not itself a safe method — is rejected.
405
+ * @private
406
+ */
407
+ checkCallExpression(node) {
408
+ const callee = node.callee;
409
+ if (callee.type === 'Identifier') {
410
+ const name = callee.name;
411
+ if (!SAFE_GLOBAL_CALLABLES.has(name)) {
412
+ return this.forbidden(`calling "${name}" — only safe methods and safe global functions may be invoked`);
413
+ }
414
+ return this.checkCallArguments(node);
415
+ }
416
+ if (callee.type !== 'MemberExpression') {
417
+ return this.forbidden('only method calls on the safe-method allowlist may be invoked');
418
+ }
419
+ const member = callee;
420
+ if (member.computed || member.property.type !== 'Identifier') {
421
+ return this.forbidden('methods must be called by a dotted, non-computed name');
422
+ }
423
+ const method = member.property.name;
424
+ if (!this.isCallableMethod(member.object, method)) {
425
+ return this.forbidden(`the method "${method}" is not on the safe-method allowlist`);
426
+ }
427
+ const receiverError = this.checkNode(member.object);
428
+ if (receiverError)
429
+ return receiverError;
430
+ return this.checkCallArguments(node);
431
+ }
432
+ /**
433
+ * Whether `<receiver>.<method>()` names a permitted call: a safe instance method on any value,
434
+ * or a method of a safe global namespace when the receiver is that namespace by bare name.
435
+ * @private
436
+ */
437
+ isCallableMethod(receiver, method) {
438
+ if (SafeExpressionEvaluator.SAFE_METHODS.includes(method)) {
439
+ return true;
440
+ }
441
+ if (receiver.type !== 'Identifier') {
442
+ return false;
443
+ }
444
+ return SAFE_GLOBAL_NAMESPACE_METHODS.get(receiver.name)?.has(method) === true;
445
+ }
446
+ /** Walks a call's arguments; spreads are rejected outright. @private */
447
+ checkCallArguments(node) {
448
+ for (const arg of node.arguments) {
449
+ if (arg.type === 'SpreadElement') {
450
+ return this.forbidden('spread arguments are not allowed');
451
+ }
452
+ const err = this.checkNode(arg);
453
+ if (err)
454
+ return err;
455
+ }
224
456
  return null;
225
457
  }
458
+ /**
459
+ * Arrow functions are permitted only as callback arguments to the safe array
460
+ * methods; parameters must be simple identifiers and the body an expression.
461
+ * @private
462
+ */
463
+ checkArrowFunction(node) {
464
+ if (node.async) {
465
+ return this.forbidden('async functions are not allowed');
466
+ }
467
+ for (const param of node.params) {
468
+ if (param.type !== 'Identifier') {
469
+ return this.forbidden('arrow-function parameters must be simple identifiers');
470
+ }
471
+ if (SafeExpressionEvaluator.DANGEROUS_IDENTIFIERS.has(param.name)) {
472
+ return this.forbidden(`the parameter "${param.name}"`);
473
+ }
474
+ }
475
+ if (node.body.type === 'BlockStatement') {
476
+ return this.forbidden('arrow-function bodies must be an expression, not a block');
477
+ }
478
+ return this.checkNode(node.body);
479
+ }
226
480
  /**
227
481
  * Creates a safe context object with only allowed properties
228
482
  *
@@ -322,6 +576,55 @@ export class SafeExpressionEvaluator {
322
576
  return '[Object]';
323
577
  }
324
578
  }
579
+ /**
580
+ * Checks whether an expression *could* be evaluated, without evaluating it.
581
+ *
582
+ * The difference matters because `evaluate` reports two unrelated problems the same way. Given
583
+ * a condition authored against a runtime envelope, an empty context makes `payload.x > 1` fail
584
+ * with `payload is not defined` — indistinguishable, by result shape, from `payload.x >` failing
585
+ * with `Unexpected token`. One is a typo the author should be told about at the door; the other
586
+ * is a perfectly good condition that simply has no data yet. A submit-time check built on
587
+ * `evaluate` therefore refuses every legitimate condition.
588
+ *
589
+ * So this compiles and never runs. The expression goes through the same policy screen
590
+ * `evaluate` applies (the AST allowlist), then the same function body is BUILT and discarded —
591
+ * never invoked. Values are never consulted, which is precisely the property wanted: unknown
592
+ * identifiers, absent properties and undefined chains all PASS, because none of them is a syntax
593
+ * error and whether they resolve is a question about a run that has not happened yet.
594
+ *
595
+ * **Compilation is not evaluation**, and the distinction is load-bearing for safety: `Function`
596
+ * parses the body and returns; nothing in the expression executes. The policy screen still runs
597
+ * first, so the constructs `evaluate` refuses are refused here too — those produce a permanent
598
+ * runtime refusal, and an author is better told now.
599
+ *
600
+ * `Undecidable` is the honest third answer. A host that forbids dynamic compilation (a strict
601
+ * CSP without `unsafe-eval`) cannot answer the question at all, and a validator that read that
602
+ * as "invalid" would refuse every condition in the browser. Callers should treat it as a pass.
603
+ *
604
+ * @param expression the expression to check
605
+ * @returns `Valid: true` when it parses; `Valid: false` with `Error` when it definitely does
606
+ * not; `Valid: true` with `Undecidable: true` when this environment cannot compile
607
+ */
608
+ validateSyntax(expression) {
609
+ const policyError = this.validateExpression(expression);
610
+ if (policyError) {
611
+ return { Valid: false, Error: policyError };
612
+ }
613
+ try {
614
+ // Same wrapper `evaluate` compiles, so anything that parses here parses there. Built and
615
+ // discarded — never invoked.
616
+ new Function(`"use strict"; return Boolean(${expression});`);
617
+ return { Valid: true };
618
+ }
619
+ catch (e) {
620
+ if (e instanceof SyntaxError) {
621
+ return { Valid: false, Error: e.message };
622
+ }
623
+ // Anything else — an EvalError from a CSP, a host without `Function` — means this
624
+ // environment cannot judge, not that the expression is wrong.
625
+ return { Valid: true, Undecidable: true };
626
+ }
627
+ }
325
628
  /**
326
629
  * Evaluates multiple expressions and returns all results
327
630
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SafeExpressionEvaluator.js","sourceRoot":"","sources":["../src/SafeExpressionEvaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SafeExpressionEvaluator.js","sourceRoot":"","sources":["../src/SafeExpressionEvaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DeepDiff.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeepDiff.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/DeepDiff.test.ts"],"names":[],"mappings":""}