@memberjunction/global 6.2.0-edge.6 → 6.2.0-edge.8

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 (64) hide show
  1. package/README.md +8 -4
  2. package/dist/ClassFactory.d.ts +30 -0
  3. package/dist/ClassFactory.d.ts.map +1 -1
  4. package/dist/ClassFactory.js +69 -5
  5. package/dist/ClassFactory.js.map +1 -1
  6. package/dist/SafeExpressionEvaluator.d.ts +93 -109
  7. package/dist/SafeExpressionEvaluator.d.ts.map +1 -1
  8. package/dist/SafeExpressionEvaluator.js +494 -346
  9. package/dist/SafeExpressionEvaluator.js.map +1 -1
  10. package/dist/__tests__/ClassFactory.collision.test.js +110 -0
  11. package/dist/__tests__/ClassFactory.collision.test.js.map +1 -1
  12. package/dist/__tests__/ClassFactory.test.js +21 -0
  13. package/dist/__tests__/ClassFactory.test.js.map +1 -1
  14. package/dist/__tests__/FieldTransformEngine.screen.test.d.ts +2 -0
  15. package/dist/__tests__/FieldTransformEngine.screen.test.d.ts.map +1 -0
  16. package/dist/__tests__/FieldTransformEngine.screen.test.js +41 -0
  17. package/dist/__tests__/FieldTransformEngine.screen.test.js.map +1 -0
  18. package/dist/__tests__/FieldTransformEngine.security.test.d.ts +2 -0
  19. package/dist/__tests__/FieldTransformEngine.security.test.d.ts.map +1 -0
  20. package/dist/__tests__/FieldTransformEngine.security.test.js +74 -0
  21. package/dist/__tests__/FieldTransformEngine.security.test.js.map +1 -0
  22. package/dist/__tests__/PlatformStringCompliance.baseline.d.ts +10 -0
  23. package/dist/__tests__/PlatformStringCompliance.baseline.d.ts.map +1 -0
  24. package/dist/__tests__/PlatformStringCompliance.baseline.js +12 -0
  25. package/dist/__tests__/PlatformStringCompliance.baseline.js.map +1 -0
  26. package/dist/__tests__/PlatformStringCompliance.test.d.ts +8 -0
  27. package/dist/__tests__/PlatformStringCompliance.test.d.ts.map +1 -0
  28. package/dist/__tests__/PlatformStringCompliance.test.js +152 -0
  29. package/dist/__tests__/PlatformStringCompliance.test.js.map +1 -0
  30. package/dist/__tests__/SafeExpressionEvaluator.allowlist.test.d.ts +2 -0
  31. package/dist/__tests__/SafeExpressionEvaluator.allowlist.test.d.ts.map +1 -0
  32. package/dist/__tests__/SafeExpressionEvaluator.allowlist.test.js +200 -0
  33. package/dist/__tests__/SafeExpressionEvaluator.allowlist.test.js.map +1 -0
  34. package/dist/__tests__/SafeExpressionEvaluator.security.test.js +11 -0
  35. package/dist/__tests__/SafeExpressionEvaluator.security.test.js.map +1 -1
  36. package/dist/__tests__/SafeExpressionEvaluator.test.js +4 -2
  37. package/dist/__tests__/SafeExpressionEvaluator.test.js.map +1 -1
  38. package/dist/__tests__/UUIDCompliance.test.js +2 -5
  39. package/dist/__tests__/UUIDCompliance.test.js.map +1 -1
  40. package/dist/__tests__/util.sanitizeForLog.test.d.ts +2 -0
  41. package/dist/__tests__/util.sanitizeForLog.test.d.ts.map +1 -0
  42. package/dist/__tests__/util.sanitizeForLog.test.js +13 -0
  43. package/dist/__tests__/util.sanitizeForLog.test.js.map +1 -0
  44. package/dist/fieldRules/FieldTransformEngine.d.ts +12 -1
  45. package/dist/fieldRules/FieldTransformEngine.d.ts.map +1 -1
  46. package/dist/fieldRules/FieldTransformEngine.js +21 -8
  47. package/dist/fieldRules/FieldTransformEngine.js.map +1 -1
  48. package/dist/fieldRules/SafeTransformAstEvaluator.d.ts +16 -0
  49. package/dist/fieldRules/SafeTransformAstEvaluator.d.ts.map +1 -0
  50. package/dist/fieldRules/SafeTransformAstEvaluator.js +797 -0
  51. package/dist/fieldRules/SafeTransformAstEvaluator.js.map +1 -0
  52. package/dist/fieldRules/index.d.ts +1 -0
  53. package/dist/fieldRules/index.d.ts.map +1 -1
  54. package/dist/fieldRules/index.js +1 -0
  55. package/dist/fieldRules/index.js.map +1 -1
  56. package/dist/util/BinaryEncoding.d.ts +2 -0
  57. package/dist/util/BinaryEncoding.d.ts.map +1 -1
  58. package/dist/util/BinaryEncoding.js +3 -5
  59. package/dist/util/BinaryEncoding.js.map +1 -1
  60. package/dist/util.d.ts +14 -0
  61. package/dist/util.d.ts.map +1 -1
  62. package/dist/util.js +17 -0
  63. package/dist/util.js.map +1 -1
  64. package/package.json +1 -1
package/README.md CHANGED
@@ -363,7 +363,9 @@ if (result.success) {
363
363
  }
364
364
  ```
365
365
 
366
- Supports comparisons (`==`, `!=`, `<`, `>`, `<=`, `>=`), logical operators (`&&`, `||`, `!`), `typeof`, dot-notation property access including optional chaining (`payload?.customer?.tier`), bracket-notation access with a **literal** index/key, safe string/array methods (`.includes()`, `.startsWith()`, `.some()`, `.every()`, etc.), and the safe globals exported as `SAFE_EXPRESSION_GLOBALS` — `Math`, `Number`, `String`, `Boolean`, `Array`, `Object`, `JSON`, `Date`, `parseInt`, `parseFloat`, `isNaN`, `isFinite` — callable as namespace methods (`Math.abs(x)`, `Object.keys(x)`) or bare functions (`Number(x)`). Regex literals, `in`/`instanceof`, and methods outside the safe list are not supported.
366
+ Supports comparisons (`==`, `!=`, `<`, `>`, `<=`, `>=`), logical operators (`&&`, `||`, `!`), `typeof`, dot-notation property access including optional chaining (`payload?.customer?.tier`), bracket-notation access with a **literal** index/key, safe string/array methods (`.includes()`, `.startsWith()`, `.split()`, `.some()`, `.every()`, etc.), and the approved globals in `APPROVED_EXPRESSION_GLOBALS` — `Math`, `Number`, `String`, `Boolean`, `Array`, `Object`, `JSON`, `Date`, `parseInt`, `parseFloat`, `isNaN`, `isFinite` — callable as namespace methods (`Math.abs(x)`, `Object.keys(x)`) or bare functions (`Number(x)`). Regex literals, `in`/`instanceof`, and methods outside the safe list are not supported.
367
+
368
+ Identifiers are allowlisted too. A free name must be a key of the evaluation context, a parameter of an enclosing arrow function, `undefined`/`NaN`/`Infinity`, or an approved global **in call position** — `Math.PI`, `items.map(Number)` and `fetch` are refused. The callback of `.some()`/`.every()`/`.find()`/`.filter()`/`.map()`/`.reduce()` must be an inline arrow function. Context keys must be plain identifiers. `SafeExpressionEvaluator.ScreenExpression(expression, allowedIdentifiers)` runs the same screen without compiling; `FieldTransformEngine` uses it for field-rule and integration formulas, with `value` and `fields` as the allowed names.
367
369
 
368
370
  ### SQLExpressionValidator
369
371
 
@@ -780,9 +782,11 @@ const changes = await new FieldRulesEvaluator().ComputeChanges(
780
782
 
781
783
  ### Safety
782
784
 
783
- - `Condition` expressions use the **safe** evaluator (blocklisted patterns, no statements).
784
- - `formula` / `custom` value expressions compile with `new Function` (the same model as the established
785
- integration `custom` transform) — author them from privileged users/agents, not untrusted input.
785
+ - `Condition` expressions use the **safe** evaluator (allowlisted constructs and identifiers, no statements).
786
+ - `formula` / `custom` value expressions pass the same allowlist screen
787
+ (`SafeExpressionEvaluator.ScreenExpression`, with `value` and `fields` as the only free names) before
788
+ they compile with `new Function`. A rejected expression fails like a compile error, through the step's
789
+ `OnError` policy.
786
790
  - The engine performs **no I/O**; `lookup` reaches a database only through the resolver you inject.
787
791
 
788
792
  ### See also
@@ -106,6 +106,11 @@ export declare class ClassFactory {
106
106
  * emitted, so a hot-path resolution failure logs once instead of on every call.
107
107
  */
108
108
  private _reportedResolutionFailures;
109
+ /**
110
+ * `baseClassName|key|subClassName` triples whose duplicate-copy warning has already been
111
+ * emitted, so a package installed in several physical copies warns once rather than per copy.
112
+ */
113
+ private _reportedDuplicateCopies;
109
114
  /**
110
115
  * Registers a lazy loader callback that will be called when a class registration cannot
111
116
  * be found synchronously. Multiple loaders can be registered and will be called in order
@@ -161,6 +166,20 @@ export declare class ClassFactory {
161
166
  */
162
167
  private ensureIndexes;
163
168
  private indexRegistration;
169
+ /**
170
+ * True when `subClass` is a second physical copy of a class that is already registered for
171
+ * this base class + key: a distinct constructor with the same name and the same source text.
172
+ *
173
+ * A class whose parent has its own name (`class X extends X`) is an override of that parent,
174
+ * not a copy, even when its source matches an earlier registration, so it is never treated as
175
+ * a duplicate. Name alone cannot tell a copy from a different class that happens to share the
176
+ * name; the identical source is what separates them.
177
+ */
178
+ private isDuplicateCopy;
179
+ /**
180
+ * Warns, once per base class + key + class, that a second copy of a registration was ignored.
181
+ */
182
+ private warnDuplicateCopyOnce;
164
183
  /**
165
184
  * Emits a single warning when an incoming registration collides with one or more EXISTING
166
185
  * registrations for the same base class + key that are **not in its inheritance chain**.
@@ -208,6 +227,17 @@ export declare class ClassFactory {
208
227
  * surfaces) can never drift apart in how they treat a fallback.
209
228
  */
210
229
  private resolveAndInstantiate;
230
+ /**
231
+ * Describes a key that has no registration for `baseClass`, listing every key that IS
232
+ * registered for it. Callers that look a class up with `GetRegistration`/`GetRegistrationAsync`
233
+ * and get nothing back can use this to build an error that shows the known keys next to the
234
+ * requested one, so a typo or a missing (uninstalled or tree-shaken) class is visible.
235
+ *
236
+ * @param baseClass - the base class that was looked up
237
+ * @param key - the key that was requested
238
+ * @returns e.g. `ClassFactory: no registration found for base class 'X' with key 'Y'. Registered keys for 'X': 'A', 'B'.`
239
+ */
240
+ DescribeMissingRegistration(baseClass: unknown, key: string | null | undefined): string;
211
241
  /**
212
242
  * Builds the diagnostic message for a failed key resolution. The registered-key list is the
213
243
  * highest-value part: a typo'd or tree-shaken key is immediately obvious next to the keys the
@@ -1 +1 @@
1
- {"version":3,"file":"ClassFactory.d.ts","sourceRoot":"","sources":["../src/ClassFactory.ts"],"names":[],"mappings":"AAAA;;;;;;wGAMwG;AAWxG;;GAEG;AACH,qBAAa,iBAAiB;IAE1B,SAAS,EAAE,GAAG,CAAC;IAEf,QAAQ,EAAE,GAAG,CAAC;IAEd,SAAS,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE1B,QAAQ,EAAE,MAAM,CAAK;IACrB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAGD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI;IACnC;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;;OAQG;IACH,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;GAMG;AAMH;;;GAGG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,cAAc,CAA2B;IACjD,0EAA0E;IAC1E,OAAO,CAAC,YAAY,CAA0C;IAC9D,qFAAqF;IACrF,OAAO,CAAC,aAAa,CAA0C;IAC/D,sEAAsE;IACtE,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,wBAAwB,CAAoC;IACpE,OAAO,CAAC,2BAA2B,CAAa;IAEhD,4FAA4F;IAC5F,OAAO,CAAC,oBAAoB,CAA6B;IACzD,mFAAmF;IACnF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAK;IAE1D;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB,CAAoD;IAE9E;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY,CAAoE;IAExF;;;OAGG;IACH,OAAO,CAAC,2BAA2B,CAA0B;IAE7D;;;;;;;OAOG;IACI,kBAAkB,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAIjG;;;OAGG;YACW,WAAW;IAWzB;;;;;;;;OAQG;IACU,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAW7G;;;;;;;;OAQG;IACU,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,GAAG,IAAW,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAa3H;;;OAGG;IACU,sBAAsB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,GAAG,IAAW,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAQ9I;;;;;;;;OAQG;IACI,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,GAAG,IAAW,EAAE,QAAQ,GAAE,MAAU,EAAE,kBAAkB,GAAE,OAAe,EAAE,yBAAyB,GAAE,OAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAgFlO;;;OAGG;IACH,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,iBAAiB;IAgCzB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,4BAA4B;IAqBpC;;;;;;;;;;;;OAYG;IACI,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,GAAG,IAAW,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI;IASvG;;;;;;;;;;;;OAYG;IACI,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,GAAG,IAAW,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAI1H;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IA6E7B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAqC/B;;;;;OAKG;IACI,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,EAAE;IAexF;;;;;;;OAOG;IACI,8BAA8B,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAUjG;;;;OAIG;IACI,+BAA+B,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAShG;;;;;;;;OAQG;IACI,6BAA6B,CAChC,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,YAAY,EAAE,iBAAiB,KAAK,OAAO,GACvG,iBAAiB,EAAE;IAStB;;OAEG;IACI,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,GAAG,IAAI;IAczF;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;;;;;OAMG;IACI,2BAA2B,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,EAAE;CAgBnG"}
1
+ {"version":3,"file":"ClassFactory.d.ts","sourceRoot":"","sources":["../src/ClassFactory.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,11 @@ export class ClassFactory {
71
71
  * emitted, so a hot-path resolution failure logs once instead of on every call.
72
72
  */
73
73
  this._reportedResolutionFailures = new Set();
74
+ /**
75
+ * `baseClassName|key|subClassName` triples whose duplicate-copy warning has already been
76
+ * emitted, so a package installed in several physical copies warns once rather than per copy.
77
+ */
78
+ this._reportedDuplicateCopies = new Set();
74
79
  }
75
80
  /** Fallback warnings emitted per base class before summarising and going quiet. */
76
81
  static { this.MAX_FALLBACK_REPORTS_PER_BASE = 3; }
@@ -185,6 +190,13 @@ export class ClassFactory {
185
190
  }
186
191
  }
187
192
  else if (priority === 0 || priority === null || priority === undefined) {
193
+ // A second physical copy of a package re-runs its module-level registrations. Without
194
+ // this check the copy takes highest priority + 1 and can outrank a real subclass that
195
+ // registered between the two copies. Skip it instead, so the earlier resolution stands.
196
+ if (this.isDuplicateCopy(registrations, subClass, subClassName)) {
197
+ this.warnDuplicateCopyOnce(subClassName, effectiveBaseClassName, key);
198
+ return;
199
+ }
188
200
  // when priority is not provided or is zero, which is logically the same, check to see what the highest earlier registration was and increment by 1
189
201
  // this automatically makes the most recent registration higher, IF IT DIDN'T ALREADY have a priority explicitly set
190
202
  let highestPriority = 0;
@@ -274,6 +286,44 @@ export class ClassFactory {
274
286
  rootBucket.push(reg);
275
287
  }
276
288
  }
289
+ /**
290
+ * True when `subClass` is a second physical copy of a class that is already registered for
291
+ * this base class + key: a distinct constructor with the same name and the same source text.
292
+ *
293
+ * A class whose parent has its own name (`class X extends X`) is an override of that parent,
294
+ * not a copy, even when its source matches an earlier registration, so it is never treated as
295
+ * a duplicate. Name alone cannot tell a copy from a different class that happens to share the
296
+ * name; the identical source is what separates them.
297
+ */
298
+ isDuplicateCopy(registrations, subClass, subClassName) {
299
+ if (typeof subClass !== 'function') {
300
+ return false;
301
+ }
302
+ const parent = Object.getPrototypeOf(subClass);
303
+ if (typeof parent === 'function' && parent.name === subClassName) {
304
+ return false;
305
+ }
306
+ const source = Function.prototype.toString.call(subClass);
307
+ return registrations.some(r => r.SubClass !== subClass &&
308
+ typeof r.SubClass === 'function' &&
309
+ r.SubClass.name === subClassName &&
310
+ Function.prototype.toString.call(r.SubClass) === source);
311
+ }
312
+ /**
313
+ * Warns, once per base class + key + class, that a second copy of a registration was ignored.
314
+ */
315
+ warnDuplicateCopyOnce(subClassName, effectiveBaseClassName, key) {
316
+ const reportKey = `${effectiveBaseClassName}|${key ?? ''}|${subClassName}`;
317
+ if (this._reportedDuplicateCopies.has(reportKey)) {
318
+ return;
319
+ }
320
+ this._reportedDuplicateCopies.add(reportKey);
321
+ console.warn(`*** ClassFactory.Register: ignored a second copy of ${subClassName} for base class ${effectiveBaseClassName} ` +
322
+ `with key '${key}'. Its source is identical to a class already registered under that name, which means the ` +
323
+ `package that defines it is installed more than once (for example, nested by peer-dependency resolution). ` +
324
+ `The first registration is kept, so any subclass registered after it still wins. Deduplicate the package ` +
325
+ `to remove this warning. ***`);
326
+ }
277
327
  /**
278
328
  * Emits a single warning when an incoming registration collides with one or more EXISTING
279
329
  * registrations for the same base class + key that are **not in its inheritance chain**.
@@ -405,11 +455,16 @@ export class ClassFactory {
405
455
  };
406
456
  }
407
457
  /**
408
- * Builds the diagnostic message for a failed key resolution. The registered-key list is the
409
- * highest-value part: a typo'd or tree-shaken key is immediately obvious next to the keys the
410
- * factory actually knows about.
458
+ * Describes a key that has no registration for `baseClass`, listing every key that IS
459
+ * registered for it. Callers that look a class up with `GetRegistration`/`GetRegistrationAsync`
460
+ * and get nothing back can use this to build an error that shows the known keys next to the
461
+ * requested one, so a typo or a missing (uninstalled or tree-shaken) class is visible.
462
+ *
463
+ * @param baseClass - the base class that was looked up
464
+ * @param key - the key that was requested
465
+ * @returns e.g. `ClassFactory: no registration found for base class 'X' with key 'Y'. Registered keys for 'X': 'A', 'B'.`
411
466
  */
412
- describeResolutionFailure(baseClass, key, requiresSubclass) {
467
+ DescribeMissingRegistration(baseClass, key) {
413
468
  const baseClassName = baseClass.name;
414
469
  const known = this.GetAllRegistrations(baseClass)
415
470
  .map(r => r.Key)
@@ -417,7 +472,16 @@ export class ClassFactory {
417
472
  const uniqueKnown = Array.from(new Set(known)).sort();
418
473
  const knownText = uniqueKnown.length > 0 ? uniqueKnown.map(k => `'${k}'`).join(', ') : '(none)';
419
474
  return (`ClassFactory: no registration found for base class '${baseClassName}' with key '${key ?? '(null)'}'. ` +
420
- `Registered keys for '${baseClassName}': ${knownText}. ` +
475
+ `Registered keys for '${baseClassName}': ${knownText}.`);
476
+ }
477
+ /**
478
+ * Builds the diagnostic message for a failed key resolution. The registered-key list is the
479
+ * highest-value part: a typo'd or tree-shaken key is immediately obvious next to the keys the
480
+ * factory actually knows about.
481
+ */
482
+ describeResolutionFailure(baseClass, key, requiresSubclass) {
483
+ const baseClassName = baseClass.name;
484
+ return (this.DescribeMissingRegistration(baseClass, key) + ' ' +
421
485
  `RequiresSubclass=${requiresSubclass}. ` +
422
486
  (requiresSubclass
423
487
  ? `'${baseClassName}' is marked '@RequiresSubclass()', so it CANNOT be used as a fallback — ` +
@@ -1 +1 @@
1
- {"version":3,"file":"ClassFactory.js","sourceRoot":"","sources":["../src/ClassFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClassFactory.js","sourceRoot":"","sources":["../src/ClassFactory.ts"],"names":[],"mappings":"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"}
@@ -9,31 +9,54 @@
9
9
  * @author MemberJunction.com
10
10
  * @since 2.76.0
11
11
  */
12
+ /** One approved global: whether it may be called by bare name, and which of its methods may be called. */
13
+ export interface ApprovedExpressionGlobal {
14
+ /** `true` when the global itself may be called: `Number(x)`, `parseInt(x)`. */
15
+ readonly Callable: boolean;
16
+ /** Methods that may be called on the global by dotted name: `Math.max(a, b)`. */
17
+ readonly Methods: ReadonlySet<string>;
18
+ }
12
19
  /**
13
- * Namespace globals whose listed methods a condition may CALL, keyed by namespace name.
20
+ * **The approved globals — the only host globals an expression can reach.**
14
21
  *
15
- * Both halves of `Math.abs(x)` are fixed identifiers in the AST, so admitting them adds no dynamic
16
- * lookup: the four invariants that close the sandbox escape — literal-only computed keys, no
17
- * `constructor`/`__proto__`/`prototype`, a closed non-computed call surface with no
18
- * `call`/`apply`/`bind`, and screened free identifiers — are all untouched by this list.
22
+ * This is the single list reviewers should check. Every other free identifier in an expression must
23
+ * be an evaluation-context key or an arrow-function parameter in scope; anything else is refused
24
+ * before compilation (see {@link SafeExpressionEvaluator.ScreenExpression}).
25
+ *
26
+ * An approved global is usable ONLY in call position — `Math.max(a, b)`, `Number(x)` — never as a
27
+ * bare value, a property read (`Math.PI`), or a callback (`items.map(Number)`). That rule is what
28
+ * stops a function being handed to code that calls it with attacker-chosen arguments: two confirmed
29
+ * bypasses of the earlier denylist did exactly that (`a.reduce(fetch)` and
30
+ * `p.reduce(Object.assign)`).
19
31
  *
20
- * Every entry is a pure value function. `Math.random` is deliberately absent (a condition that
21
- * evaluates differently on each run is not a guard), as are `Object.assign`,
22
- * `Object.defineProperty` and `Object.setPrototypeOf`, which mutate.
32
+ * Every listed member is a pure function of its arguments. Deliberately absent: `Object.assign`,
33
+ * `Object.defineProperty`, `Object.getPrototypeOf`/`setPrototypeOf` (mutate or open the prototype
34
+ * chain), `Math.random` (a guard that changes per run is not a guard), `String.fromCharCode`, and
35
+ * every host API (`fetch`, `setTimeout`, `require`, `process`, ...).
36
+ *
37
+ * Both halves of `Math.abs(x)` are fixed identifiers in the AST, so admitting them adds no dynamic
38
+ * lookup.
39
+ */
40
+ export declare const APPROVED_EXPRESSION_GLOBALS: ReadonlyMap<string, ApprovedExpressionGlobal>;
41
+ /**
42
+ * Global names that are VALUES, not functions, and may appear anywhere a value can: `x === undefined`.
43
+ * Each is a non-writable primitive, so referencing one cannot reach host code.
44
+ */
45
+ export declare const APPROVED_VALUE_GLOBALS: ReadonlySet<string>;
46
+ /**
47
+ * Namespace globals whose listed methods an expression may CALL, keyed by namespace name.
48
+ * Derived from {@link APPROVED_EXPRESSION_GLOBALS}.
23
49
  */
24
50
  export declare const SAFE_GLOBAL_NAMESPACE_METHODS: ReadonlyMap<string, ReadonlySet<string>>;
25
51
  /**
26
- * Global functions a condition may call by bare name — the coercions and numeric predicates that
27
- * authored specs use (`Number(payload.count) > 3`, `isNaN(payload.count)`).
52
+ * Global functions an expression may call by bare name (`Number(payload.count) > 3`).
53
+ * Derived from {@link APPROVED_EXPRESSION_GLOBALS}.
28
54
  */
29
55
  export declare const SAFE_GLOBAL_CALLABLES: ReadonlySet<string>;
30
56
  /**
31
- * Every global name a condition may reference, as a namespace or as a bare callable.
32
- *
33
- * **This is the single source of truth for the ambient globals of the condition dialect.** It lives
34
- * beside the policy screen that enforces it so a caller validating conditions ahead of evaluation
35
- * (`ai-core-plus`'s task-graph door) cannot bless a name the runtime would refuse — the failure mode
36
- * that shipped once already, where the door's own list and the evaluator disagreed silently.
57
+ * Every global name an expression may reference (in call position), as a namespace or as a bare
58
+ * callable. Derived from {@link APPROVED_EXPRESSION_GLOBALS}, so a caller validating conditions ahead
59
+ * of evaluation (`ai-core-plus`'s task-graph door) cannot bless a name the runtime would refuse.
37
60
  */
38
61
  export declare const SAFE_EXPRESSION_GLOBALS: ReadonlySet<string>;
39
62
  /**
@@ -58,17 +81,19 @@ export interface ExpressionEvaluationResult {
58
81
  * - Logical: &&, ||, !
59
82
  * - Property access: dot notation (e.g., payload.customer.name), including optional chaining (`?.`)
60
83
  * - Array access: bracket notation with a literal index/key (e.g., items[0])
61
- * - Safe methods: .length, .includes(), .startsWith(), .endsWith()
62
- * - Array methods: .some(), .every(), .find(), .filter()
63
- * - Safe globals: the namespaces and bare callables in {@link SAFE_EXPRESSION_GLOBALS}
84
+ * - Safe methods: .length, .includes(), .startsWith(), .endsWith(), .split(), .slice(), ...
85
+ * - Array methods: .some(), .every(), .find(), .filter(), .map(), .reduce() — the callback must be
86
+ * an inline arrow function (`items.some(i => i.price > 100)`, never `items.some(fn)`)
87
+ * - Approved globals, in call position only: {@link APPROVED_EXPRESSION_GLOBALS}
64
88
  * (e.g. `Math.abs(output.delta) < 5`, `Number(payload.count) > 3`, `Object.keys(payload).length`)
65
89
  * - Type checking: typeof
66
90
  *
67
91
  * Safety is enforced by parsing the expression to an AST and walking it against
68
- * an ALLOWLIST of node types before it is compiled — an unlisted construct
69
- * (computed member access with a non-literal key, `.constructor`/`__proto__`
70
- * access, any call outside the safe-method and safe-global lists, host-global
71
- * identifiers, etc.) is rejected at validation time and never reaches the compiler. A structural
92
+ * an ALLOWLIST before it is compiled. Node types, operators, methods and free identifiers are
93
+ * all allowlisted: a free identifier must be a context key, an arrow parameter in scope, or an
94
+ * approved global used as a call. An unlisted construct (computed member access with a non-literal
95
+ * key, `.constructor`/`__proto__` access, any call outside the safe-method and approved-global
96
+ * lists, any other identifier, etc.) is rejected at validation time and never reaches the compiler. A structural
72
97
  * allowlist cannot be defeated by string concatenation the way a textual
73
98
  * denylist can, and it does not over-reject data that merely mentions a reserved
74
99
  * word (e.g. `name == 'constructor'` is a legal comparison).
@@ -99,96 +124,47 @@ export interface ExpressionEvaluationResult {
99
124
  * ```
100
125
  */
101
126
  export declare class SafeExpressionEvaluator {
102
- /**
103
- * Identifiers that must never resolve to a host global. Because the compiled
104
- * function runs in global scope, a bare `process`/`Function`/`globalThis`/…
105
- * would reach the real global object; identifiers are atomic AST tokens, so a
106
- * name that is split with string concatenation parses as separate identifiers
107
- * or an operator and is caught by the structural rules instead.
108
- * @private
109
- */
110
- private static readonly DANGEROUS_IDENTIFIERS;
111
- /**
112
- * Property names that open the prototype chain / constructor climb. Denied on
113
- * both dotted (`x.constructor`) and literal-bracket (`x["constructor"]`) access.
114
- * @private
115
- */
116
- private static readonly DANGEROUS_PROPERTY_NAMES;
117
- /** Binary operators the evaluator permits. `instanceof`/`in`/bitwise are excluded. @private */
118
- private static readonly ALLOWED_BINARY_OPERATORS;
119
- /** Unary operators the evaluator permits. `delete`/`void` are excluded. @private */
120
- private static readonly ALLOWED_UNARY_OPERATORS;
121
127
  /**
122
128
  * Cache for compiled expressions to improve performance on repeated evaluations
123
129
  * @private
124
130
  */
125
131
  private readonly _compiledExpressionCache;
126
- /**
127
- * Safe methods that can be called on objects
128
- * @private
129
- */
130
- private static readonly SAFE_METHODS;
131
132
  /**
132
133
  * Evaluates a boolean expression against a context object
133
134
  *
134
135
  * @param {string} expression - The boolean expression to evaluate
135
- * @param {Record<string, any>} context - The context object containing variables
136
+ * @param {Record<string, any>} [context={}] - The context object containing variables. Its keys
137
+ * are the only free names the expression may use; a key named like an approved global
138
+ * shadows it (see {@link ScreenExpression}).
136
139
  * @param {boolean} [enableDiagnostics=false] - Whether to include diagnostic information
137
140
  *
138
141
  * @returns {ExpressionEvaluationResult} The evaluation result
139
142
  */
140
- Evaluate(expression: string, context: Record<string, any>, enableDiagnostics?: boolean): ExpressionEvaluationResult;
143
+ Evaluate(expression: string, context?: Record<string, any>, enableDiagnostics?: boolean): ExpressionEvaluationResult;
141
144
  /** @deprecated Use {@link Evaluate}. */
142
- evaluate(expression: string, context: Record<string, any>, enableDiagnostics?: boolean): ExpressionEvaluationResult;
145
+ evaluate(expression: string, context?: Record<string, any>, enableDiagnostics?: boolean): ExpressionEvaluationResult;
143
146
  /**
144
- * Validates an expression for safety by parsing it and walking the AST against
145
- * an allowlist. Returns an error message if any construct is not permitted.
147
+ * Screens an expression against the allowlist WITHOUT compiling or running it. Returns the
148
+ * rejection message, or `null` when every construct is permitted.
146
149
  *
147
- * @param {string} expression - The expression to validate
150
+ * This is the single policy gate for every place MemberJunction compiles a user- or LLM-authored
151
+ * expression: {@link Evaluate}, {@link ValidateSyntax}, and the field-rule / integration formula
152
+ * engine (`FieldTransformEngine`), which passes `['value', 'fields']`.
148
153
  *
149
- * @returns {string | null} Error message if invalid, null if valid
154
+ * A context key or arrow parameter named like an approved global (`Math`, `JSON`, ...) shadows
155
+ * it and is screened as data, so `Math.abs(x)` with a `Math` context key is refused because
156
+ * `abs` is not a safe instance method. Do not pass approved-global names as context keys.
150
157
  *
151
- * @private
152
- */
153
- private validateExpression;
154
- /** Builds the standard rejection message. @private */
155
- private forbidden;
156
- /**
157
- * Walks an AST node against the allowlist. Returns an error message on the first
158
- * disallowed construct, or null if the entire subtree is permitted.
159
- * @private
160
- */
161
- private checkNode;
162
- /**
163
- * Member access is allowed for dotted property reads and literal-key bracket
164
- * reads, but never for a computed key built at runtime (the string-concat
165
- * escape route) or a prototype-chain property.
166
- * @private
167
- */
168
- private checkMemberExpression;
169
- /**
170
- * A call is admitted only when its callee is a FIXED name on one of two allowlists: a bare
171
- * safe global (`parseInt(...)`) or a dotted method that is either a safe instance method or a
172
- * method of a safe global namespace (`Math.abs(...)`). Everything else — a computed callee, an
173
- * unlisted bare identifier (`eval(...)`, `Function(...)`), a call on a call's result that is
174
- * not itself a safe method — is rejected.
175
- * @private
176
- */
177
- private checkCallExpression;
178
- /**
179
- * Whether `<receiver>.<method>()` names a permitted call: a safe instance method on any value,
180
- * or a method of a safe global namespace when the receiver is that namespace by bare name.
181
- * @private
158
+ * @param expression the expression to screen
159
+ * @param allowedIdentifiers the names the expression may reference as values — the evaluation
160
+ * context keys. Pass `null` only when they are not yet known (authoring-time syntax
161
+ * checks); free identifiers are then left for evaluation time to decide, while approved
162
+ * globals used as values, callbacks that are not inline arrows, and every structural rule
163
+ * are still enforced.
182
164
  */
183
- private isCallableMethod;
184
- /** Walks a call's arguments; spreads are rejected outright. @private */
185
- private checkCallArguments;
186
- /**
187
- * Arrow functions are permitted only as callback arguments to the safe array
188
- * methods; parameters must be simple identifiers and the body an expression.
189
- * @private
190
- */
191
- private checkArrowFunction;
165
+ static ScreenExpression(expression: string, allowedIdentifiers: Iterable<string> | null): string | null;
166
+ /** Counts parentheses textually; used only to word the error for an expression that failed to parse. @private */
167
+ private static hasUnbalancedParentheses;
192
168
  /**
193
169
  * Creates a safe context object with only allowed properties
194
170
  *
@@ -212,6 +188,11 @@ export declare class SafeExpressionEvaluator {
212
188
  /**
213
189
  * Safely clones a value for use in evaluation context
214
190
  *
191
+ * Functions are never carried into the context: a context should hold data, and a function
192
+ * reachable from an expression is one more thing that could be invoked. A function value
193
+ * becomes `undefined`, and function-valued properties are dropped from plain objects and
194
+ * class instances alike.
195
+ *
215
196
  * @param {any} value - The value to clone
216
197
  *
217
198
  * @returns {any} The cloned value
@@ -229,32 +210,35 @@ export declare class SafeExpressionEvaluator {
229
210
  * is a perfectly good condition that simply has no data yet. A submit-time check built on
230
211
  * `evaluate` therefore refuses every legitimate condition.
231
212
  *
232
- * So this compiles and never runs. The expression goes through the same policy screen
233
- * `evaluate` applies (the AST allowlist), then the same function body is BUILT and discarded —
234
- * never invoked. Values are never consulted, which is precisely the property wanted: unknown
213
+ * So this parses and never runs. The expression goes through the same policy screen
214
+ * `evaluate` applies (the AST allowlist), then the same function body `evaluate` compiles is
215
+ * parsed in strict mode — never compiled, never invoked. Values are never consulted, which is precisely the property wanted: unknown
235
216
  * identifiers, absent properties and undefined chains all PASS, because none of them is a syntax
236
- * error and whether they resolve is a question about a run that has not happened yet.
217
+ * error and whether they resolve is a question about a run that has not happened yet. Pass
218
+ * `contextKeys` when the evaluation context's keys ARE known, and unknown identifiers are refused
219
+ * here exactly as {@link Evaluate} would refuse them.
237
220
  *
238
- * **Compilation is not evaluation**, and the distinction is load-bearing for safety: `Function`
239
- * parses the body and returns; nothing in the expression executes. The policy screen still runs
240
- * first, so the constructs `evaluate` refuses are refused here too — those produce a permanent
241
- * runtime refusal, and an author is better told now.
221
+ * **Parsing is not evaluation**, and the distinction is load-bearing for safety: no code is
222
+ * constructed from the expression here, so nothing in it can execute. The policy screen still
223
+ * runs first, so the constructs `evaluate` refuses are refused here too — those produce a
224
+ * permanent runtime refusal, and an author is better told now.
242
225
  *
243
- * `Undecidable` is the honest third answer. A host that forbids dynamic compilation (a strict
244
- * CSP without `unsafe-eval`) cannot answer the question at all, and a validator that read that
245
- * as "invalid" would refuse every condition in the browser. Callers should treat it as a pass.
226
+ * Because nothing is compiled, the answer does not depend on the host allowing dynamic code (a
227
+ * strict CSP without `unsafe-eval`). `Undecidable` is kept in the result type for callers that
228
+ * check it, and is no longer returned.
246
229
  *
247
230
  * @param expression the expression to check
248
- * @returns `Valid: true` when it parses; `Valid: false` with `Error` when it definitely does
249
- * not; `Valid: true` with `Undecidable: true` when this environment cannot compile
231
+ * @param contextKeys the names the expression may reference, when known; omitted, free
232
+ * identifiers are left for evaluation time (see {@link ScreenExpression})
233
+ * @returns `Valid: true` when it parses; `Valid: false` with `Error` when it does not
250
234
  */
251
- ValidateSyntax(expression: string): {
235
+ ValidateSyntax(expression: string, contextKeys?: Iterable<string>): {
252
236
  Valid: boolean;
253
237
  Error?: string;
254
238
  Undecidable?: boolean;
255
239
  };
256
240
  /** @deprecated Use {@link ValidateSyntax}. */
257
- validateSyntax(expression: string): {
241
+ validateSyntax(expression: string, contextKeys?: Iterable<string>): {
258
242
  Valid: boolean;
259
243
  Error?: string;
260
244
  Undecidable?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"SafeExpressionEvaluator.d.ts","sourceRoot":"","sources":["../src/SafeExpressionEvaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SafeExpressionEvaluator.d.ts","sourceRoot":"","sources":["../src/SafeExpressionEvaluator.ts"],"names":[],"mappings":"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"}