@memberjunction/global 6.2.0-edge.5 → 6.2.0-edge.7

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 (102) 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/KeyedSerialTaskQueue.d.ts +18 -1
  7. package/dist/KeyedSerialTaskQueue.d.ts.map +1 -1
  8. package/dist/KeyedSerialTaskQueue.js +24 -3
  9. package/dist/KeyedSerialTaskQueue.js.map +1 -1
  10. package/dist/SQLExpressionValidator.d.ts +34 -9
  11. package/dist/SQLExpressionValidator.d.ts.map +1 -1
  12. package/dist/SQLExpressionValidator.js +58 -17
  13. package/dist/SQLExpressionValidator.js.map +1 -1
  14. package/dist/SQLScreeningScanner.d.ts +28 -2
  15. package/dist/SQLScreeningScanner.d.ts.map +1 -1
  16. package/dist/SQLScreeningScanner.js +166 -23
  17. package/dist/SQLScreeningScanner.js.map +1 -1
  18. package/dist/SafeExpressionEvaluator.d.ts +93 -109
  19. package/dist/SafeExpressionEvaluator.d.ts.map +1 -1
  20. package/dist/SafeExpressionEvaluator.js +494 -346
  21. package/dist/SafeExpressionEvaluator.js.map +1 -1
  22. package/dist/__tests__/ClassFactory.collision.test.js +110 -0
  23. package/dist/__tests__/ClassFactory.collision.test.js.map +1 -1
  24. package/dist/__tests__/ClassFactory.test.js +21 -0
  25. package/dist/__tests__/ClassFactory.test.js.map +1 -1
  26. package/dist/__tests__/FieldSecurityEgressCompliance.test.d.ts +2 -0
  27. package/dist/__tests__/FieldSecurityEgressCompliance.test.d.ts.map +1 -0
  28. package/dist/__tests__/FieldSecurityEgressCompliance.test.js +228 -0
  29. package/dist/__tests__/FieldSecurityEgressCompliance.test.js.map +1 -0
  30. package/dist/__tests__/FieldTransformEngine.screen.test.d.ts +2 -0
  31. package/dist/__tests__/FieldTransformEngine.screen.test.d.ts.map +1 -0
  32. package/dist/__tests__/FieldTransformEngine.screen.test.js +41 -0
  33. package/dist/__tests__/FieldTransformEngine.screen.test.js.map +1 -0
  34. package/dist/__tests__/FieldTransformEngine.security.test.d.ts +2 -0
  35. package/dist/__tests__/FieldTransformEngine.security.test.d.ts.map +1 -0
  36. package/dist/__tests__/FieldTransformEngine.security.test.js +74 -0
  37. package/dist/__tests__/FieldTransformEngine.security.test.js.map +1 -0
  38. package/dist/__tests__/KeyedSerialTaskQueue.test.js +92 -0
  39. package/dist/__tests__/KeyedSerialTaskQueue.test.js.map +1 -1
  40. package/dist/__tests__/PlatformStringCompliance.baseline.d.ts +10 -0
  41. package/dist/__tests__/PlatformStringCompliance.baseline.d.ts.map +1 -0
  42. package/dist/__tests__/PlatformStringCompliance.baseline.js +12 -0
  43. package/dist/__tests__/PlatformStringCompliance.baseline.js.map +1 -0
  44. package/dist/__tests__/PlatformStringCompliance.test.d.ts +8 -0
  45. package/dist/__tests__/PlatformStringCompliance.test.d.ts.map +1 -0
  46. package/dist/__tests__/PlatformStringCompliance.test.js +152 -0
  47. package/dist/__tests__/PlatformStringCompliance.test.js.map +1 -0
  48. package/dist/__tests__/ProofOfPossession.test.d.ts +2 -0
  49. package/dist/__tests__/ProofOfPossession.test.d.ts.map +1 -0
  50. package/dist/__tests__/ProofOfPossession.test.js +123 -0
  51. package/dist/__tests__/ProofOfPossession.test.js.map +1 -0
  52. package/dist/__tests__/SQLExpressionValidator.dialect.test.d.ts +2 -0
  53. package/dist/__tests__/SQLExpressionValidator.dialect.test.d.ts.map +1 -0
  54. package/dist/__tests__/SQLExpressionValidator.dialect.test.js +183 -0
  55. package/dist/__tests__/SQLExpressionValidator.dialect.test.js.map +1 -0
  56. package/dist/__tests__/SQLScreeningScanner.tokens.test.d.ts +2 -0
  57. package/dist/__tests__/SQLScreeningScanner.tokens.test.d.ts.map +1 -0
  58. package/dist/__tests__/SQLScreeningScanner.tokens.test.js +82 -0
  59. package/dist/__tests__/SQLScreeningScanner.tokens.test.js.map +1 -0
  60. package/dist/__tests__/SafeExpressionEvaluator.allowlist.test.d.ts +2 -0
  61. package/dist/__tests__/SafeExpressionEvaluator.allowlist.test.d.ts.map +1 -0
  62. package/dist/__tests__/SafeExpressionEvaluator.allowlist.test.js +200 -0
  63. package/dist/__tests__/SafeExpressionEvaluator.allowlist.test.js.map +1 -0
  64. package/dist/__tests__/SafeExpressionEvaluator.security.test.js +11 -0
  65. package/dist/__tests__/SafeExpressionEvaluator.security.test.js.map +1 -1
  66. package/dist/__tests__/SafeExpressionEvaluator.test.js +4 -2
  67. package/dist/__tests__/SafeExpressionEvaluator.test.js.map +1 -1
  68. package/dist/__tests__/UUIDCompliance.test.js +3 -4
  69. package/dist/__tests__/UUIDCompliance.test.js.map +1 -1
  70. package/dist/__tests__/UserScopedCacheKey.test.d.ts +2 -0
  71. package/dist/__tests__/UserScopedCacheKey.test.d.ts.map +1 -0
  72. package/dist/__tests__/UserScopedCacheKey.test.js +25 -0
  73. package/dist/__tests__/UserScopedCacheKey.test.js.map +1 -0
  74. package/dist/fieldRules/FieldTransformEngine.d.ts +12 -1
  75. package/dist/fieldRules/FieldTransformEngine.d.ts.map +1 -1
  76. package/dist/fieldRules/FieldTransformEngine.js +21 -8
  77. package/dist/fieldRules/FieldTransformEngine.js.map +1 -1
  78. package/dist/fieldRules/SafeTransformAstEvaluator.d.ts +16 -0
  79. package/dist/fieldRules/SafeTransformAstEvaluator.d.ts.map +1 -0
  80. package/dist/fieldRules/SafeTransformAstEvaluator.js +797 -0
  81. package/dist/fieldRules/SafeTransformAstEvaluator.js.map +1 -0
  82. package/dist/fieldRules/index.d.ts +1 -0
  83. package/dist/fieldRules/index.d.ts.map +1 -1
  84. package/dist/fieldRules/index.js +1 -0
  85. package/dist/fieldRules/index.js.map +1 -1
  86. package/dist/index.d.ts +2 -0
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +2 -0
  89. package/dist/index.js.map +1 -1
  90. package/dist/util/BinaryEncoding.d.ts +2 -0
  91. package/dist/util/BinaryEncoding.d.ts.map +1 -1
  92. package/dist/util/BinaryEncoding.js +3 -5
  93. package/dist/util/BinaryEncoding.js.map +1 -1
  94. package/dist/util/ProofOfPossession.d.ts +68 -0
  95. package/dist/util/ProofOfPossession.d.ts.map +1 -0
  96. package/dist/util/ProofOfPossession.js +163 -0
  97. package/dist/util/ProofOfPossession.js.map +1 -0
  98. package/dist/util/UserScopedCacheKey.d.ts +42 -0
  99. package/dist/util/UserScopedCacheKey.d.ts.map +1 -0
  100. package/dist/util/UserScopedCacheKey.js +49 -0
  101. package/dist/util/UserScopedCacheKey.js.map +1 -0
  102. 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":"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"}
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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"}
@@ -49,18 +49,35 @@ export declare class KeyedSerialTaskQueue {
49
49
  * @param opts.after Optional dependency key — the task waits for this key's latest task to settle
50
50
  * before running, in addition to waiting for its own key's prior tasks. Use this to honour
51
51
  * cross-instance ordering constraints like self-referencing foreign keys (e.g. a child step's
52
- * INSERT must land after its parent step's INSERT).
52
+ * INSERT must land after its parent step's INSERT). This is the in-queue form of the wait; when the
53
+ * dependent write lives in a *different* queue, use {@link Settled} instead.
54
+ * @param opts.ready Optional promise the task also waits for. Use it when the task depends on work
55
+ * outside this queue — typically another queue's {@link Settled}, so a child row waits for a parent
56
+ * row that a different queue is writing. The task is queued (and counted by {@link Flush}) at once;
57
+ * only its start is held back, so the caller never waits. A rejected `ready` still runs the task,
58
+ * the same as a failed prior task: the task's own outcome is what gets tallied.
53
59
  */
54
60
  Enqueue<T>(key: object, task: () => Promise<T>, opts?: {
55
61
  label?: string;
56
62
  isOk?: (v: T) => boolean;
57
63
  after?: object;
64
+ ready?: Promise<void>;
58
65
  }): Promise<T | undefined>;
66
+ /**
67
+ * Resolves once every task enqueued so far for `key` has settled — at once when the key has no
68
+ * pending task. The cross-queue form of `Enqueue`'s `after` option: `after` can only see keys in this
69
+ * instance, so a caller that must order a write in another queue behind this key awaits this instead.
70
+ *
71
+ * A pure read: it never rejects (a failed task is already tallied and routed to `onError`), and it
72
+ * neither enqueues anything nor delays later tasks. Tasks enqueued after the call are not awaited.
73
+ */
74
+ Settled(key: object): Promise<void>;
59
75
  /** @deprecated Use {@link Enqueue}. */
60
76
  enqueue<T>(key: object, task: () => Promise<T>, opts?: {
61
77
  label?: string;
62
78
  isOk?: (v: T) => boolean;
63
79
  after?: object;
80
+ ready?: Promise<void>;
64
81
  }): Promise<T | undefined>;
65
82
  /**
66
83
  * Awaits the currently in-flight tasks, then reports and resets the failure tally accumulated since
@@ -1 +1 @@
1
- {"version":3,"file":"KeyedSerialTaskQueue.d.ts","sourceRoot":"","sources":["../src/KeyedSerialTaskQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IAClC,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC7B,+FAA+F;IAC/F,OAAO,CAAC,KAAK,CAAwC;IACrD,uFAAuF;IACvF,OAAO,CAAC,QAAQ,CAA4B;IAC5C,sGAAsG;IACtG,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyC;gBAEtD,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;IAIvE;;;;;;;;;;;;;;OAcG;IACI,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAgCnJ,uCAAuC;IAChC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAInJ;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAQpD,qCAAqC;IACxB,KAAK,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAGvD"}
1
+ {"version":3,"file":"KeyedSerialTaskQueue.d.ts","sourceRoot":"","sources":["../src/KeyedSerialTaskQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IAClC,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC7B,+FAA+F;IAC/F,OAAO,CAAC,KAAK,CAAwC;IACrD,uFAAuF;IACvF,OAAO,CAAC,QAAQ,CAA4B;IAC5C,sGAAsG;IACtG,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyC;gBAEtD,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;IAIvE;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAqC1K;;;;;;;OAOG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,uCAAuC;IAChC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI1K;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAQpD,qCAAqC;IACxB,KAAK,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAGvD"}
@@ -41,13 +41,23 @@ export class KeyedSerialTaskQueue {
41
41
  * @param opts.after Optional dependency key — the task waits for this key's latest task to settle
42
42
  * before running, in addition to waiting for its own key's prior tasks. Use this to honour
43
43
  * cross-instance ordering constraints like self-referencing foreign keys (e.g. a child step's
44
- * INSERT must land after its parent step's INSERT).
44
+ * INSERT must land after its parent step's INSERT). This is the in-queue form of the wait; when the
45
+ * dependent write lives in a *different* queue, use {@link Settled} instead.
46
+ * @param opts.ready Optional promise the task also waits for. Use it when the task depends on work
47
+ * outside this queue — typically another queue's {@link Settled}, so a child row waits for a parent
48
+ * row that a different queue is writing. The task is queued (and counted by {@link Flush}) at once;
49
+ * only its start is held back, so the caller never waits. A rejected `ready` still runs the task,
50
+ * the same as a failed prior task: the task's own outcome is what gets tallied.
45
51
  */
46
52
  Enqueue(key, task, opts) {
47
53
  const prior = this.tails.get(key) ?? Promise.resolve();
48
54
  const dependency = opts?.after ? (this.tails.get(opts.after) ?? Promise.resolve()) : Promise.resolve();
49
- // Run the task exactly once, after `prior` AND `dependency` settle, collapsing to a never-rejecting outcome.
50
- const gate = Promise.all([prior, dependency]);
55
+ // Settle `ready` to a never-rejecting promise first. `prior` and `dependency` are tails, which never
56
+ // reject; a rejecting `ready` would make Promise.all settle early and start the task before its
57
+ // key's prior task finished, breaking the per-key order this class exists to guarantee.
58
+ const ready = opts?.ready ? opts.ready.then(() => undefined, () => undefined) : Promise.resolve();
59
+ // Run the task exactly once, after `prior`, `dependency` AND `ready` settle, collapsing to a never-rejecting outcome.
60
+ const gate = Promise.all([prior, dependency, ready]);
51
61
  const settled = gate.then(() => task(), () => task()).then((value) => ({ value: value, ok: opts?.isOk ? !!opts.isOk(value) : true, rejected: false, err: undefined }), (err) => ({ value: undefined, ok: false, rejected: true, err }));
52
62
  // Never-rejecting tail: tally failures + route to onError. Serves as the per-key chain link.
53
63
  const tail = settled.then((o) => {
@@ -67,6 +77,17 @@ export class KeyedSerialTaskQueue {
67
77
  this.inFlight.add(tracked);
68
78
  return settled.then((o) => (o.ok ? o.value : undefined));
69
79
  }
80
+ /**
81
+ * Resolves once every task enqueued so far for `key` has settled — at once when the key has no
82
+ * pending task. The cross-queue form of `Enqueue`'s `after` option: `after` can only see keys in this
83
+ * instance, so a caller that must order a write in another queue behind this key awaits this instead.
84
+ *
85
+ * A pure read: it never rejects (a failed task is already tallied and routed to `onError`), and it
86
+ * neither enqueues anything nor delays later tasks. Tasks enqueued after the call are not awaited.
87
+ */
88
+ Settled(key) {
89
+ return this.tails.get(key) ?? Promise.resolve();
90
+ }
70
91
  /** @deprecated Use {@link Enqueue}. */
71
92
  enqueue(key, task, opts) {
72
93
  return this.Enqueue(key, task, opts);
@@ -1 +1 @@
1
- {"version":3,"file":"KeyedSerialTaskQueue.js","sourceRoot":"","sources":["../src/KeyedSerialTaskQueue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KeyedSerialTaskQueue.js","sourceRoot":"","sources":["../src/KeyedSerialTaskQueue.ts"],"names":[],"mappings":"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"}
@@ -52,18 +52,43 @@ export declare const BLOCKED_SYSTEM_OBJECT_PATTERNS: RegExp[];
52
52
  */
53
53
  export declare function StripSQLStringLiterals(sql: string, dialect?: SQLScreeningDialect): string;
54
54
  /**
55
- * Safe SQL functions allowed in expressions, organized by category
55
+ * Safe SQL functions allowed in expressions, organized by category.
56
+ *
57
+ * WHY THIS IS A UNION RATHER THAN A PER-DIALECT TABLE
58
+ * ---------------------------------------------------
59
+ * This is a deny-by-default SAFETY list, not a dialect grammar. Its job is to
60
+ * stop a user-supplied expression from smuggling in something that is not a
61
+ * read-only scalar/aggregate call — it is not, and must not become, a
62
+ * per-platform parser. So it carries the union of every supported dialect's
63
+ * read-only vocabulary, and `checkFunctionNames` consults the flattened union.
64
+ *
65
+ * Keying the buckets off `ResolvePlatformKey` is the alternative, and it costs
66
+ * more than it buys: a PostgreSQL name that reaches a SQL Server tenant is
67
+ * rejected by the SQL Server parser on its own — `DATE_TRUNC(...)` simply never
68
+ * parses there. The union therefore cannot widen the blast radius past what the
69
+ * target server will already accept, whereas a dialect switch here would add a
70
+ * second independent place for the dialect to be resolved, and so a second place
71
+ * for it to be wrong.
72
+ *
73
+ * Before this list held the PostgreSQL names, a perfectly ordinary PG filter
74
+ * such as `DATE_TRUNC('month', CreatedAt)` was rejected outright with
75
+ * "Function 'DATE_TRUNC' is not allowed" on every PostgreSQL tenant.
76
+ *
77
+ * Every name here is read-only by construction. Anything that writes, escalates,
78
+ * or reaches outside the statement stays on {@link DANGEROUS_SQL_KEYWORDS}, which
79
+ * is checked FIRST (step 2 of `validate`) — a name added here can never unblock
80
+ * one that is denied there.
56
81
  */
57
82
  export declare const ALLOWED_SQL_FUNCTIONS: {
58
- readonly aggregates: readonly ["COUNT", "COUNT_BIG", "SUM", "AVG", "MIN", "MAX", "STDEV", "STDEVP", "VAR", "VARP", "STRING_AGG", "CHECKSUM_AGG"];
59
- readonly math: readonly ["ABS", "CEILING", "FLOOR", "ROUND", "POWER", "SQRT", "LOG", "LOG10", "EXP", "SIGN", "RAND"];
60
- readonly string: readonly ["LEN", "LENGTH", "UPPER", "LOWER", "LTRIM", "RTRIM", "TRIM", "LEFT", "RIGHT", "SUBSTRING", "CHARINDEX", "REPLACE", "CONCAT", "STUFF"];
61
- readonly date: readonly ["DATEPART", "DATEDIFF", "DATEADD", "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND", "GETDATE", "GETUTCDATE", "SYSDATETIME", "EOMONTH"];
62
- readonly conversion: readonly ["CAST", "CONVERT", "TRY_CAST", "TRY_CONVERT", "FORMAT"];
63
- readonly nullHandling: readonly ["ISNULL", "COALESCE", "NULLIF", "IIF"];
83
+ readonly aggregates: readonly ["COUNT", "COUNT_BIG", "SUM", "AVG", "MIN", "MAX", "STDEV", "STDEVP", "VAR", "VARP", "STRING_AGG", "CHECKSUM_AGG", "ARRAY_AGG", "JSONB_AGG", "JSON_AGG", "BOOL_AND", "BOOL_OR", "EVERY", "PERCENTILE_CONT", "PERCENTILE_DISC", "MODE"];
84
+ readonly math: readonly ["ABS", "CEILING", "FLOOR", "ROUND", "POWER", "SQRT", "LOG", "LOG10", "EXP", "SIGN", "RAND", "CEIL", "RANDOM", "TRUNC", "MOD", "DIV", "GREATEST", "LEAST", "WIDTH_BUCKET"];
85
+ readonly string: readonly ["LEN", "LENGTH", "UPPER", "LOWER", "LTRIM", "RTRIM", "TRIM", "LEFT", "RIGHT", "SUBSTRING", "CHARINDEX", "REPLACE", "CONCAT", "STUFF", "POSITION", "STRPOS", "SPLIT_PART", "INITCAP", "LPAD", "RPAD", "REPEAT", "REVERSE", "TRANSLATE", "REGEXP_REPLACE", "REGEXP_MATCHES", "REGEXP_SUBSTR", "TO_CHAR", "MD5", "ASCII", "CHR"];
86
+ readonly date: readonly ["DATEPART", "DATEDIFF", "DATEADD", "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND", "GETDATE", "GETUTCDATE", "SYSDATETIME", "EOMONTH", "NOW", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "LOCALTIMESTAMP", "DATE_TRUNC", "DATE_PART", "EXTRACT", "AGE", "TO_DATE", "TO_TIMESTAMP", "MAKE_DATE", "MAKE_TIMESTAMP", "JUSTIFY_DAYS"];
87
+ readonly conversion: readonly ["CAST", "CONVERT", "TRY_CAST", "TRY_CONVERT", "FORMAT", "TO_CHAR", "TO_DATE", "TO_NUMBER", "TO_TIMESTAMP"];
88
+ readonly nullHandling: readonly ["ISNULL", "COALESCE", "NULLIF", "IIF", "GREATEST", "LEAST"];
64
89
  readonly conditional: readonly ["CASE", "WHEN", "THEN", "ELSE", "END"];
65
- readonly logical: readonly ["AND", "OR", "NOT", "IS", "NULL", "LIKE", "BETWEEN", "IN"];
66
- readonly ordering: readonly ["ASC", "ASCENDING", "DESC", "DESCENDING", "OVER", "PARTITION", "BY", "ORDER", "ROWS", "RANGE", "UNBOUNDED", "PRECEDING", "FOLLOWING", "CURRENT", "ROW"];
90
+ readonly logical: readonly ["AND", "OR", "NOT", "IS", "NULL", "LIKE", "BETWEEN", "IN", "ILIKE", "SIMILAR", "ANY", "ALL", "SOME", "EXISTS"];
91
+ readonly ordering: readonly ["ASC", "ASCENDING", "DESC", "DESCENDING", "OVER", "PARTITION", "BY", "ORDER", "ROWS", "RANGE", "UNBOUNDED", "PRECEDING", "FOLLOWING", "CURRENT", "ROW", "NULLS", "FIRST", "LAST", "FILTER", "WITHIN", "GROUPING"];
67
92
  };
68
93
  /**
69
94
  * Validation context - affects what's allowed
@@ -1 +1 @@
1
- {"version":3,"file":"SQLExpressionValidator.d.ts","sourceRoot":"","sources":["../src/SQLExpressionValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAGL,mBAAmB,EAGpB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,eAAO,MAAM,sBAAsB,2gBA0CzB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B,wFAe9B,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,EAMlD,CAAC;AAQF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAKzF;AAcD;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;CA2BxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,UAAU,GACV,WAAW,GACX,iBAAiB,GACjB,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,OAAO,EAAE,oBAAoB,CAAC;IAE9B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,wHAAwH;IACxH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,sBAAsB,CAAC;IAC/E;;OAEG;;IAKH;;OAEG;IACH,WAAkB,QAAQ,IAAI,sBAAsB,CAEnD;IAED;;;;;;OAMG;IACI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,mBAAmB;IAmBvF;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0D9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;;;;;;;OAQG;IACI,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB;IAQzF,iDAAiD;IAC1C,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB;CAG3D"}
1
+ {"version":3,"file":"SQLExpressionValidator.d.ts","sourceRoot":"","sources":["../src/SQLExpressionValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAGL,mBAAmB,EAGpB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,eAAO,MAAM,sBAAsB,2gBA0CzB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B,wFAe9B,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,EAMlD,CAAC;AAQF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAKzF;AAcD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;CA2CxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,UAAU,GACV,WAAW,GACX,iBAAiB,GACjB,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,OAAO,EAAE,oBAAoB,CAAC;IAE9B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,wHAAwH;IACxH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,sBAAsB,CAAC;IAC/E;;OAEG;;IAKH;;OAEG;IACH,WAAkB,QAAQ,IAAI,sBAAsB,CAEnD;IAED;;;;;;OAMG;IACI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,mBAAmB;IAmBvF;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0D9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;;;;;;;OAQG;IACI,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB;IAQzF,iDAAiD;IAC1C,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB;CAG3D"}
@@ -122,27 +122,68 @@ function replaceStringSpans(sql, spans) {
122
122
  return result + sql.slice(from);
123
123
  }
124
124
  /**
125
- * Safe SQL functions allowed in expressions, organized by category
125
+ * Safe SQL functions allowed in expressions, organized by category.
126
+ *
127
+ * WHY THIS IS A UNION RATHER THAN A PER-DIALECT TABLE
128
+ * ---------------------------------------------------
129
+ * This is a deny-by-default SAFETY list, not a dialect grammar. Its job is to
130
+ * stop a user-supplied expression from smuggling in something that is not a
131
+ * read-only scalar/aggregate call — it is not, and must not become, a
132
+ * per-platform parser. So it carries the union of every supported dialect's
133
+ * read-only vocabulary, and `checkFunctionNames` consults the flattened union.
134
+ *
135
+ * Keying the buckets off `ResolvePlatformKey` is the alternative, and it costs
136
+ * more than it buys: a PostgreSQL name that reaches a SQL Server tenant is
137
+ * rejected by the SQL Server parser on its own — `DATE_TRUNC(...)` simply never
138
+ * parses there. The union therefore cannot widen the blast radius past what the
139
+ * target server will already accept, whereas a dialect switch here would add a
140
+ * second independent place for the dialect to be resolved, and so a second place
141
+ * for it to be wrong.
142
+ *
143
+ * Before this list held the PostgreSQL names, a perfectly ordinary PG filter
144
+ * such as `DATE_TRUNC('month', CreatedAt)` was rejected outright with
145
+ * "Function 'DATE_TRUNC' is not allowed" on every PostgreSQL tenant.
146
+ *
147
+ * Every name here is read-only by construction. Anything that writes, escalates,
148
+ * or reaches outside the statement stays on {@link DANGEROUS_SQL_KEYWORDS}, which
149
+ * is checked FIRST (step 2 of `validate`) — a name added here can never unblock
150
+ * one that is denied there.
126
151
  */
127
152
  export const ALLOWED_SQL_FUNCTIONS = {
128
- // Aggregate functions
129
- aggregates: ['COUNT', 'COUNT_BIG', 'SUM', 'AVG', 'MIN', 'MAX', 'STDEV', 'STDEVP', 'VAR', 'VARP', 'STRING_AGG', 'CHECKSUM_AGG'],
130
- // Math functions
131
- math: ['ABS', 'CEILING', 'FLOOR', 'ROUND', 'POWER', 'SQRT', 'LOG', 'LOG10', 'EXP', 'SIGN', 'RAND'],
132
- // String functions (read-only)
133
- string: ['LEN', 'LENGTH', 'UPPER', 'LOWER', 'LTRIM', 'RTRIM', 'TRIM', 'LEFT', 'RIGHT', 'SUBSTRING', 'CHARINDEX', 'REPLACE', 'CONCAT', 'STUFF'],
134
- // Date functions
135
- date: ['DATEPART', 'DATEDIFF', 'DATEADD', 'YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'GETDATE', 'GETUTCDATE', 'SYSDATETIME', 'EOMONTH'],
136
- // Type conversion (safe subset)
137
- conversion: ['CAST', 'CONVERT', 'TRY_CAST', 'TRY_CONVERT', 'FORMAT'],
138
- // Null handling
139
- nullHandling: ['ISNULL', 'COALESCE', 'NULLIF', 'IIF'],
153
+ // Aggregate functions. PG: ARRAY_AGG / JSONB_AGG / JSON_AGG / BOOL_AND / BOOL_OR /
154
+ // EVERY / PERCENTILE_* / MODE.
155
+ aggregates: ['COUNT', 'COUNT_BIG', 'SUM', 'AVG', 'MIN', 'MAX', 'STDEV', 'STDEVP', 'VAR', 'VARP', 'STRING_AGG', 'CHECKSUM_AGG',
156
+ 'ARRAY_AGG', 'JSONB_AGG', 'JSON_AGG', 'BOOL_AND', 'BOOL_OR', 'EVERY', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'MODE'],
157
+ // Math functions. PG: CEIL (vs CEILING), RANDOM (vs RAND), TRUNC, MOD, DIV,
158
+ // GREATEST, LEAST, WIDTH_BUCKET.
159
+ math: ['ABS', 'CEILING', 'FLOOR', 'ROUND', 'POWER', 'SQRT', 'LOG', 'LOG10', 'EXP', 'SIGN', 'RAND',
160
+ 'CEIL', 'RANDOM', 'TRUNC', 'MOD', 'DIV', 'GREATEST', 'LEAST', 'WIDTH_BUCKET'],
161
+ // String functions (read-only). PG: POSITION / STRPOS (vs CHARINDEX), SPLIT_PART,
162
+ // INITCAP, LPAD, RPAD, REPEAT, REVERSE, TRANSLATE, REGEXP_*, TO_CHAR, MD5, ASCII, CHR.
163
+ string: ['LEN', 'LENGTH', 'UPPER', 'LOWER', 'LTRIM', 'RTRIM', 'TRIM', 'LEFT', 'RIGHT', 'SUBSTRING', 'CHARINDEX', 'REPLACE', 'CONCAT', 'STUFF',
164
+ 'POSITION', 'STRPOS', 'SPLIT_PART', 'INITCAP', 'LPAD', 'RPAD', 'REPEAT', 'REVERSE', 'TRANSLATE',
165
+ 'REGEXP_REPLACE', 'REGEXP_MATCHES', 'REGEXP_SUBSTR', 'TO_CHAR', 'MD5', 'ASCII', 'CHR'],
166
+ // Date functions. PG: NOW / CURRENT_* / LOCALTIMESTAMP (vs GETDATE), DATE_TRUNC,
167
+ // DATE_PART / EXTRACT (vs DATEPART), AGE, TO_DATE, TO_TIMESTAMP, MAKE_*, JUSTIFY_DAYS.
168
+ date: ['DATEPART', 'DATEDIFF', 'DATEADD', 'YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'GETDATE', 'GETUTCDATE', 'SYSDATETIME', 'EOMONTH',
169
+ 'NOW', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'LOCALTIMESTAMP', 'DATE_TRUNC', 'DATE_PART', 'EXTRACT', 'AGE',
170
+ 'TO_DATE', 'TO_TIMESTAMP', 'MAKE_DATE', 'MAKE_TIMESTAMP', 'JUSTIFY_DAYS'],
171
+ // Type conversion (safe subset). PG: TO_CHAR / TO_DATE / TO_NUMBER / TO_TIMESTAMP
172
+ // (vs CAST/CONVERT/FORMAT).
173
+ conversion: ['CAST', 'CONVERT', 'TRY_CAST', 'TRY_CONVERT', 'FORMAT', 'TO_CHAR', 'TO_DATE', 'TO_NUMBER', 'TO_TIMESTAMP'],
174
+ // Null handling. PG has no ISNULL/IIF; GREATEST/LEAST are its null-tolerant pickers.
175
+ nullHandling: ['ISNULL', 'COALESCE', 'NULLIF', 'IIF', 'GREATEST', 'LEAST'],
140
176
  // Case expressions
141
177
  conditional: ['CASE', 'WHEN', 'THEN', 'ELSE', 'END'],
142
- // Logical operators (as keywords)
143
- logical: ['AND', 'OR', 'NOT', 'IS', 'NULL', 'LIKE', 'BETWEEN', 'IN'],
144
- // Sort/order and windowing
145
- ordering: ['ASC', 'ASCENDING', 'DESC', 'DESCENDING', 'OVER', 'PARTITION', 'BY', 'ORDER', 'ROWS', 'RANGE', 'UNBOUNDED', 'PRECEDING', 'FOLLOWING', 'CURRENT', 'ROW']
178
+ // Logical operators (as keywords). PG: ILIKE, SIMILAR TO. ANY/ALL/SOME/EXISTS are
179
+ // listed so that the full-query context, which unblocks them from
180
+ // DANGEROUS_SQL_KEYWORDS via FULL_QUERY_ALLOWED_KEYWORDS, does not then trip over
181
+ // them here as unknown function-shaped tokens.
182
+ logical: ['AND', 'OR', 'NOT', 'IS', 'NULL', 'LIKE', 'BETWEEN', 'IN', 'ILIKE', 'SIMILAR', 'ANY', 'ALL', 'SOME', 'EXISTS'],
183
+ // Sort/order and windowing. PG: NULLS FIRST/LAST, aggregate FILTER (WHERE …),
184
+ // WITHIN GROUP, GROUPING.
185
+ ordering: ['ASC', 'ASCENDING', 'DESC', 'DESCENDING', 'OVER', 'PARTITION', 'BY', 'ORDER', 'ROWS', 'RANGE', 'UNBOUNDED', 'PRECEDING', 'FOLLOWING', 'CURRENT', 'ROW',
186
+ 'NULLS', 'FIRST', 'LAST', 'FILTER', 'WITHIN', 'GROUPING']
146
187
  };
147
188
  /**
148
189
  * Central SQL expression validator for preventing SQL injection.