@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
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Field-Security Egress Compliance (source guard)
3
+ *
4
+ * Scans the code that hands entity values to someone outside the server process (GraphQL
5
+ * resolvers and the rest of the API server, REST handlers, realtime and agent sessions, the MCP
6
+ * and A2A servers, agents, communications, templates, search, messaging adapters and actions)
7
+ * for the calls that turn an entity object or a view result into plain values:
8
+ * - `.GetAll(`, `.GetDataObject(`, `.GetDataObjectJSON(`, `.To(`
9
+ * - `<entity>.Fields.map(f => f.Value)`
10
+ * - `JSON.stringify(<entity>)` and `JSON.stringify(<rows>)` (heuristic, below)
11
+ * - `res.json(…Results…)` / `res.send(…Results…)`: a view's rows written straight to an HTTP response
12
+ *
13
+ * An entity object built for a restricted user never holds a value that user is denied, so most
14
+ * of these calls are safe. They are flagged anyway because the object's width depends on WHO it
15
+ * was built for: an object loaded as the system user, taken from an engine cache, or created
16
+ * with no user carries every column, and serializing it to a caller leaks what field-level
17
+ * security denies them. Each flagged line must therefore say why it is safe, or route its values
18
+ * through `ProjectEntityValuesForUser` / `ProjectEntityValueRowsForUser` from `@memberjunction/core`.
19
+ *
20
+ * See guides/FIELD_LEVEL_SECURITY_GUIDE.md, "Building on field-level security".
21
+ *
22
+ * ## Allow comments
23
+ *
24
+ * A flagged line passes when the `//` comment directly above it carries `// fls-guard: <reason>`
25
+ * on a line of its own (the comment may run over several `//` lines). A marker trailing code does
26
+ * not count. Keep the reason short and specific, for example:
27
+ * - `// fls-guard: projected by ProjectEntityValuesForUser below`
28
+ * - `// fls-guard: loaded as the caller; width follows its user`
29
+ * - `// fls-guard: system-user-only resolver`
30
+ * A marker with no reason does not count.
31
+ *
32
+ * ## The JSON.stringify heuristic
33
+ *
34
+ * Types are not available to a text scan, so `JSON.stringify(x)` is flagged only when its first
35
+ * argument is a plain identifier or member path (no call, index or literal) whose LAST segment is
36
+ * named like an entity object: `entity`, `record`, `entityObject`, `fooEntity`, `fooRecord`,
37
+ * `fooEntityObject` (any case), or like a set of rows: `rows`, `results`, `records` (so
38
+ * `result.Results` counts). `JSON.stringify(result.EntityUpdateDates)` is not flagged. This misses
39
+ * values held under other names; it is a reminder that runs on every PR, not a proof.
40
+ *
41
+ * ## Scope
42
+ *
43
+ * In `MJServer/src`: `resolvers`, `rest`, `generic`, `agentSessions`, `realtimeProxy`,
44
+ * `realtimeSessions`, `realtimeWidget`, `services`, `index.ts` and `realtimeConfigUnits.ts`. Also
45
+ * `AI/MCPServer/src`, `AI/A2AServer/src`, `AI/Agents/src`, and every `src/` folder under `Actions/`,
46
+ * `Communication/`, `Templates/`, `SearchEngine/` and `MessagingAdapters/`. Tests, generated code,
47
+ * `dist/` and `.d.ts` files are skipped, as are pure comment lines and imports.
48
+ */
49
+ import { describe, it, expect } from 'vitest';
50
+ import * as fs from 'fs';
51
+ import * as path from 'path';
52
+ const PACKAGES_ROOT = path.resolve(__dirname, '..', '..', '..'); // packages/
53
+ /** Folders and files scanned, relative to packages/. A {@link SRC_ONLY_ROOTS} folder is walked for every nested `src/`. */
54
+ const SCAN_DIRS = [
55
+ 'MJServer/src/resolvers',
56
+ 'MJServer/src/rest',
57
+ 'MJServer/src/generic',
58
+ 'MJServer/src/agentSessions',
59
+ 'MJServer/src/realtimeProxy',
60
+ 'MJServer/src/realtimeSessions',
61
+ 'MJServer/src/realtimeWidget',
62
+ 'MJServer/src/services',
63
+ 'MJServer/src/index.ts',
64
+ 'MJServer/src/realtimeConfigUnits.ts',
65
+ 'AI/MCPServer/src',
66
+ 'AI/A2AServer/src',
67
+ 'AI/Agents/src',
68
+ 'Actions',
69
+ 'Communication',
70
+ 'Templates',
71
+ 'SearchEngine',
72
+ 'MessagingAdapters',
73
+ ];
74
+ /** Roots holding several packages: only files under a package's `src/` count. */
75
+ const SRC_ONLY_ROOTS = ['Actions', 'Communication', 'Templates', 'SearchEngine', 'MessagingAdapters'];
76
+ /** Calls that produce an entity's field values as plain data. */
77
+ const ACCESSOR_PATTERN = /\.(GetAll|GetDataObject|GetDataObjectJSON|To)\s*[<(]/;
78
+ /** `JSON.stringify(<path>)` where the last path segment is named like an entity object or a set of rows. */
79
+ const STRINGIFY_ENTITY_PATTERN = /JSON\.stringify\(\s*(?:[A-Za-z_$][\w$]*\??\.)*(?:entity|record|entityObject|rows|results|records|[A-Za-z_$][\w$]*(?:Entity|Record|EntityObject))\s*(?:\?\?\s*[\w$.]+\s*)?[,)]/i;
80
+ /** An entity's field values read in bulk: `.Fields.map(f => f.Value)`. */
81
+ const FIELD_VALUES_PATTERN = /\.Fields\.map\(\s*\(?\s*([A-Za-z_$][\w$]*)(?:\s*:\s*[\w.]+)?\s*\)?\s*=>\s*\1\.Value\b/;
82
+ /** A view's rows written straight to an HTTP response. */
83
+ const RESULTS_RESPONSE_PATTERN = /\b(?:res|response|reply)(?:\.status\([^)]*\))?\.(?:json|send)\([^;]*\bResults\b/;
84
+ /** The allow marker, with a non-empty reason after it. */
85
+ const ALLOW_COMMENT = /\/\/\s*fls-guard:\s*\S/;
86
+ const EXCLUDE_PATH_PATTERNS = [
87
+ /node_modules/,
88
+ /\/dist\//,
89
+ /\/generated\//,
90
+ /\.test\.ts$/,
91
+ /\.spec\.ts$/,
92
+ /__tests__/,
93
+ /\.d\.ts$/,
94
+ ];
95
+ function shouldScanFile(filePath) {
96
+ if (!filePath.endsWith('.ts'))
97
+ return false;
98
+ if (EXCLUDE_PATH_PATTERNS.some(p => p.test(filePath)))
99
+ return false;
100
+ // Under a multi-package root, only package source counts: skip scripts, fixtures and the like.
101
+ const relative = path.relative(PACKAGES_ROOT, filePath).split(path.sep).join('/');
102
+ const root = SRC_ONLY_ROOTS.find(r => relative.startsWith(`${r}/`));
103
+ return !root || relative.includes('/src/');
104
+ }
105
+ function findTsFiles(dir) {
106
+ const results = [];
107
+ if (!fs.existsSync(dir))
108
+ return results;
109
+ if (fs.statSync(dir).isFile())
110
+ return shouldScanFile(dir) ? [dir] : [];
111
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
112
+ const fullPath = path.join(dir, entry.name);
113
+ if (entry.isDirectory()) {
114
+ if (['node_modules', 'dist', '.git', 'generated', '__tests__'].includes(entry.name))
115
+ continue;
116
+ results.push(...findTsFiles(fullPath));
117
+ }
118
+ else if (shouldScanFile(fullPath)) {
119
+ results.push(fullPath);
120
+ }
121
+ }
122
+ return results;
123
+ }
124
+ /** True when `line` serializes an entity in a way this guard flags. Exported shape for the self-test. */
125
+ function lineSerializesEntity(line) {
126
+ const trimmed = line.trim();
127
+ if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
128
+ return false;
129
+ if (trimmed.startsWith('import '))
130
+ return false;
131
+ return [ACCESSOR_PATTERN, STRINGIFY_ENTITY_PATTERN, FIELD_VALUES_PATTERN, RESULTS_RESPONSE_PATTERN].some(p => p.test(line));
132
+ }
133
+ /** True when `line` is a `//` comment and nothing else. */
134
+ function isCommentOnlyLine(line) {
135
+ return line.trim().startsWith('//');
136
+ }
137
+ /**
138
+ * True when the `//` comment lines directly above line `index` of `lines` carry the allow marker.
139
+ * A marker that trails code does not count, on the flagged line or above it: it would otherwise
140
+ * also shield the line after it.
141
+ */
142
+ function isAllowed(lines, index) {
143
+ for (let i = index - 1; i >= 0 && isCommentOnlyLine(lines[i]); i--) {
144
+ if (ALLOW_COMMENT.test(lines[i])) {
145
+ return true;
146
+ }
147
+ }
148
+ return false;
149
+ }
150
+ function scanLines(lines, file) {
151
+ const violations = [];
152
+ for (let i = 0; i < lines.length; i++) {
153
+ if (lineSerializesEntity(lines[i]) && !isAllowed(lines, i)) {
154
+ violations.push({ file, line: i + 1, content: lines[i].trim().substring(0, 160) });
155
+ }
156
+ }
157
+ return violations;
158
+ }
159
+ function scanFile(filePath) {
160
+ const lines = fs.readFileSync(filePath, 'utf-8').split('\n');
161
+ return scanLines(lines, path.relative(PACKAGES_ROOT, filePath));
162
+ }
163
+ describe('Field-Security Egress Compliance', () => {
164
+ describe('the heuristic', () => {
165
+ it('flags the entity accessors', () => {
166
+ expect(lineSerializesEntity('return entity.GetAll();')).toBe(true);
167
+ expect(lineSerializesEntity('const v = await record.GetDataObject({')).toBe(true);
168
+ expect(lineSerializesEntity('res.json(await e.GetDataObjectJSON())')).toBe(true);
169
+ });
170
+ it('flags JSON.stringify of something named like an entity', () => {
171
+ expect(lineSerializesEntity('JSON.stringify(entity)')).toBe(true);
172
+ expect(lineSerializesEntity('JSON.stringify(this.entityObject, null, 2)')).toBe(true);
173
+ expect(lineSerializesEntity('JSON.stringify(userRecord)')).toBe(true);
174
+ expect(lineSerializesEntity('JSON.stringify(params.fileEntity)')).toBe(true);
175
+ });
176
+ it('flags rows serialized or sent as a response, entity.To(), and Fields.map(f => f.Value)', () => {
177
+ expect(lineSerializesEntity('JSON.stringify(rows)')).toBe(true);
178
+ expect(lineSerializesEntity('JSON.stringify(result.Results, null, 2)')).toBe(true);
179
+ expect(lineSerializesEntity('Results: JSON.stringify(result.Results ?? null),')).toBe(true);
180
+ expect(lineSerializesEntity('res.json(result.Results);')).toBe(true);
181
+ expect(lineSerializesEntity('res.status(200).json({ rows: result.Results })')).toBe(true);
182
+ expect(lineSerializesEntity('return entity.To(schema);')).toBe(true);
183
+ expect(lineSerializesEntity('const v = record.To<typeof S>(S);')).toBe(true);
184
+ expect(lineSerializesEntity('const values = entity.Fields.map(f => f.Value);')).toBe(true);
185
+ expect(lineSerializesEntity('const values = entity.Fields.map((field) => field.Value);')).toBe(true);
186
+ });
187
+ it('does not flag plain data, comments or imports', () => {
188
+ expect(lineSerializesEntity('JSON.stringify(result.EntityUpdateDates)')).toBe(false);
189
+ expect(lineSerializesEntity('JSON.stringify(entities[i])')).toBe(false);
190
+ expect(lineSerializesEntity('x.ToString()')).toBe(false);
191
+ expect(lineSerializesEntity('entity.Fields.map(f => f.Name)')).toBe(false);
192
+ expect(lineSerializesEntity('res.json({ Success: true })')).toBe(false);
193
+ expect(lineSerializesEntity(' * Uses entity.GetAll() for scalar fields')).toBe(false);
194
+ expect(lineSerializesEntity('// entity.GetAll() is projected below')).toBe(false);
195
+ });
196
+ it('accepts an allow comment with a reason on a comment line directly above', () => {
197
+ expect(scanLines(['// fls-guard: projected below', 'x = e.GetAll();'], 'f')).toHaveLength(0);
198
+ expect(scanLines([' // fls-guard: indented', ' x = e.GetAll();'], 'f')).toHaveLength(0);
199
+ expect(scanLines(['// fls-guard: a reason that', '// runs over two lines', 'x = e.GetAll();'], 'f')).toHaveLength(0);
200
+ expect(scanLines(['// fls-guard:', 'x = e.GetAll();'], 'f')).toHaveLength(1);
201
+ expect(scanLines(['// fls-guard: two lines up', '', 'x = e.GetAll();'], 'f')).toHaveLength(1);
202
+ });
203
+ it('REGRESSION: does not accept a marker that trails code, on the line or the line above', () => {
204
+ expect(scanLines(['x = e.GetAll(); // fls-guard: system user only'], 'f')).toHaveLength(1);
205
+ expect(scanLines(['a = b.GetAll(); // fls-guard: system user only', 'x = e.GetAll();'], 'f')).toHaveLength(2);
206
+ expect(scanLines(['a = 1; // fls-guard: not a comment line', 'x = e.GetAll();'], 'f')).toHaveLength(1);
207
+ });
208
+ });
209
+ it('every entity serialization in a transport or action is projected or explains why it is safe', () => {
210
+ const files = SCAN_DIRS.flatMap(dir => findTsFiles(path.join(PACKAGES_ROOT, dir)));
211
+ expect(files.length).toBeGreaterThan(0);
212
+ const violations = files.flatMap(scanFile);
213
+ if (violations.length === 0)
214
+ return;
215
+ const report = violations.map(v => ` ${v.file}:${v.line}: ${v.content}`).join('\n');
216
+ expect.fail(`Found ${violations.length} entity serialization(s) with no field-security note:\n${report}\n\n` +
217
+ `An entity object loaded as the system user, taken from an engine cache, or created with no\n` +
218
+ `user holds every column, and serializing it to a caller leaks the fields they are denied.\n\n` +
219
+ `How to fix:\n` +
220
+ ` 1. Route the values through ProjectEntityValuesForUser / ProjectEntityValueRowsForUser\n` +
221
+ ` (@memberjunction/core) for the principal who receives them, then mark the line.\n` +
222
+ ` 2. If the object was built for that same principal (its width follows its user), or the path\n` +
223
+ ` is system-user-only, say so: \`// fls-guard: <reason>\` on a comment-only line in the\n` +
224
+ ` comment block directly above the flagged line. A marker trailing code does not count.\n\n` +
225
+ `See guides/FIELD_LEVEL_SECURITY_GUIDE.md, "Building on field-level security".`);
226
+ });
227
+ });
228
+ //# sourceMappingURL=FieldSecurityEgressCompliance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldSecurityEgressCompliance.test.js","sourceRoot":"","sources":["../../src/__tests__/FieldSecurityEgressCompliance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FieldTransformEngine.screen.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldTransformEngine.screen.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/FieldTransformEngine.screen.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { FieldTransformEngine } from '../fieldRules/FieldTransformEngine.js';
3
+ /**
4
+ * Field-rule `formula` and integration `custom` expressions (CodeQL #184, issue #5569).
5
+ *
6
+ * End users save these and MJAPI compiles them, so they pass the SafeExpressionEvaluator screen
7
+ * with `value` and `fields` as the only names before anything is compiled.
8
+ */
9
+ describe('FieldTransformEngine — formulas are screened before compiling', () => {
10
+ it.each([
11
+ 'process.exit()',
12
+ "(() => fetch('x'))()",
13
+ "fields.Items.reduce(fetch)",
14
+ 'globalThis.process',
15
+ "require('child_process')",
16
+ 'value.constructor.constructor("return 1")()',
17
+ 'other + 1',
18
+ ])('rejects %s and never runs it', (expression) => {
19
+ const engine = new FieldTransformEngine();
20
+ expect(() => engine.Evaluate(expression, 1, { Items: [] })).toThrow(/Expression rejected: .*forbidden construct/);
21
+ });
22
+ it('fails closed through the pipeline with the OnError policy', () => {
23
+ const engine = new FieldTransformEngine();
24
+ const step = { Type: 'custom', Config: { Expression: 'process.exit()' } };
25
+ expect(engine.ExecutePipeline('x', {}, [{ ...step, OnError: 'Null' }]).Value).toBeNull();
26
+ expect(() => engine.ExecutePipeline('x', {}, [{ ...step, OnError: 'Fail' }])).toThrow(/Custom transform expression failed: Expression rejected/);
27
+ });
28
+ it.each([
29
+ ["fields.FirstName + ' ' + fields.LastName", 'Ada Lovelace'],
30
+ ['value * 2', 10],
31
+ ['value > 3 ? "high" : "low"', 'high'],
32
+ ['String(value).toUpperCase()', '5'],
33
+ ["'(' + value + ')'", '(5)'],
34
+ ['Math.round(value * 1.1)', 6],
35
+ ["fields.Tags.split(',').map(t => t.trim()).join('|')", 'a|b'],
36
+ ])('still evaluates %s', (expression, expected) => {
37
+ const engine = new FieldTransformEngine();
38
+ expect(engine.Evaluate(expression, 5, { FirstName: 'Ada', LastName: 'Lovelace', Tags: 'a, b' })).toBe(expected);
39
+ });
40
+ });
41
+ //# sourceMappingURL=FieldTransformEngine.screen.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldTransformEngine.screen.test.js","sourceRoot":"","sources":["../../src/__tests__/FieldTransformEngine.screen.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;;;GAKG;AACH,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC3E,EAAE,CAAC,IAAI,CAAC;QACJ,gBAAgB;QAChB,sBAAsB;QACtB,4BAA4B;QAC5B,oBAAoB;QACpB,0BAA0B;QAC1B,6CAA6C;QAC7C,WAAW;KACd,CAAC,CAAC,8BAA8B,EAAE,CAAC,UAAU,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,QAAiB,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,CAAC;QACnF,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzF,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC;IACrJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACJ,CAAC,0CAA0C,EAAE,cAAc,CAAC;QAC5D,CAAC,WAAW,EAAE,EAAE,CAAC;QACjB,CAAC,4BAA4B,EAAE,MAAM,CAAC;QACtC,CAAC,6BAA6B,EAAE,GAAG,CAAC;QACpC,CAAC,mBAAmB,EAAE,KAAK,CAAC;QAC5B,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAC9B,CAAC,qDAAqD,EAAE,KAAK,CAAC;KACjE,CAAC,CAAC,oBAAoB,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FieldTransformEngine.security.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldTransformEngine.security.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/FieldTransformEngine.security.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { FieldTransformEngine } from '../fieldRules/FieldTransformEngine.js';
3
+ import { CompileTransformExpression } from '../fieldRules/SafeTransformAstEvaluator.js';
4
+ describe('FieldTransformEngine — Sandboxed AST Evaluator', () => {
5
+ const engine = new FieldTransformEngine();
6
+ describe('legitimate transform and formula expressions', () => {
7
+ it('evaluates title-case split/map/slice/join pipelines without calling Function', () => {
8
+ const fnSpy = vi.spyOn(global, 'Function');
9
+ try {
10
+ const out = engine.Evaluate('value.split(" ").map(w => w[0].toUpperCase() + w.slice(1)).join(" ")', 'john doe', {});
11
+ expect(out).toBe('John Doe');
12
+ expect(fnSpy).not.toHaveBeenCalled();
13
+ }
14
+ finally {
15
+ fnSpy.mockRestore();
16
+ }
17
+ });
18
+ it('evaluates nullish coalescing, optional chaining, and safe globals via FieldTransformEngine', () => {
19
+ expect(engine.Evaluate('(fields.First?.trim() ?? "Anon") + " (" + String(Math.round(Number(value))) + ")"', '41.6', { First: ' Ada ' })).toBe('Ada (42)');
20
+ expect(engine.Evaluate('fields.Missing?.Nested?.Leaf ?? "fallback"', null, {})).toBe('fallback');
21
+ expect(engine.Evaluate('[1, 0, 2].filter(x => Boolean(x))', null, {})).toEqual([1, 2]);
22
+ });
23
+ it('evaluates template literals, object literals, and replace/replaceAll without $-pattern corruption in SafeTransformAstEvaluator', () => {
24
+ const evalAst = (expr, val, fields) => {
25
+ const compiled = CompileTransformExpression(expr);
26
+ if (compiled instanceof Error)
27
+ throw compiled;
28
+ return compiled(val, fields);
29
+ };
30
+ expect(evalAst('`${fields.First?.trim() ?? "Anon"} (${Math.round(Number(value))})`', '41.6', { First: ' Ada ' })).toBe('Ada (42)');
31
+ expect(evalAst('{ full: fields.A + "-" + fields.B, items: [1, 0, 2].filter(Boolean) }', null, { A: 'x', B: 'y' })).toEqual({
32
+ full: 'x-y',
33
+ items: [1, 2],
34
+ });
35
+ expect(evalAst('value.replaceAll("-", "_").padStart(8, "0")', '12-34', {})).toBe('00012_34');
36
+ expect(evalAst('value.replace("{{PRICE}}", fields.Price)', 'Total: {{PRICE}}', { Price: '$&$$100' })).toBe('Total: $&$$100');
37
+ expect(evalAst('value.replaceAll("{{TAG}}", fields.Tag)', '{{TAG}}/{{TAG}}', { Tag: "$'1" })).toBe("$'1/$'1");
38
+ });
39
+ });
40
+ describe('adversarial sandbox escape attempts (all rejected)', () => {
41
+ const attacks = [
42
+ 'process.env',
43
+ 'globalThis.process',
44
+ 'Function("return process")()',
45
+ 'eval("1+1")',
46
+ 'value.constructor.constructor("return process")()',
47
+ 'fields["__proto__"]',
48
+ 'fields["con" + "structor"]',
49
+ 'fields[value]',
50
+ '["http://169.254.169.254", undefined].reduce(fetch)',
51
+ '[1].map(fields.evil)',
52
+ 'import("fs")',
53
+ 'require("child_process")',
54
+ 'value = 1; process',
55
+ '/([a+)+$/.test(value)',
56
+ '{ __proto__: fields }',
57
+ ];
58
+ it.each(attacks)('rejects %s', (expr) => {
59
+ expect(() => engine.ExecutePipeline('seed', { evil: () => 'pwned' }, [
60
+ { Type: 'custom', Config: { Expression: expr }, OnError: 'Fail' },
61
+ ])).toThrow();
62
+ });
63
+ it('does not read inherited Object.prototype properties from record fields', () => {
64
+ expect(engine.Evaluate('fields.toString', null, { Name: 'Alice' })).toBeUndefined();
65
+ expect(engine.Evaluate('fields.hasOwnProperty', null, { Name: 'Alice' })).toBeUndefined();
66
+ });
67
+ it('does not invoke arbitrary functions attached to plain record objects', () => {
68
+ const spy = vi.fn(() => 'executed');
69
+ expect(() => engine.Evaluate('fields.customObj.trim()', null, { customObj: { trim: spy } })).toThrow();
70
+ expect(spy).not.toHaveBeenCalled();
71
+ });
72
+ });
73
+ });
74
+ //# sourceMappingURL=FieldTransformEngine.security.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldTransformEngine.security.test.js","sourceRoot":"","sources":["../../src/__tests__/FieldTransformEngine.security.test.ts"],"names":[],"mappings":"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"}
@@ -153,5 +153,97 @@ describe('KeyedSerialTaskQueue', () => {
153
153
  await q.flush();
154
154
  expect(order).toEqual(['child']);
155
155
  });
156
+ describe('Settled (#6014)', () => {
157
+ it('resolves only after the key\'s latest task settles', async () => {
158
+ const q = new KeyedSerialTaskQueue();
159
+ const key = {};
160
+ const order = [];
161
+ q.Enqueue(key, async () => { await delay(10); order.push('first'); });
162
+ q.Enqueue(key, async () => { await delay(10); order.push('second'); });
163
+ await q.Settled(key);
164
+ order.push('settled');
165
+ expect(order).toEqual(['first', 'second', 'settled']);
166
+ });
167
+ it('resolves at once for a key with no task', async () => {
168
+ const q = new KeyedSerialTaskQueue();
169
+ const other = {};
170
+ q.Enqueue(other, () => delay(50));
171
+ let settled = false;
172
+ void q.Settled({}).then(() => { settled = true; });
173
+ await Promise.resolve();
174
+ expect(settled).toBe(true);
175
+ await q.Flush();
176
+ });
177
+ it('resolves (does not reject) when the key\'s task failed', async () => {
178
+ const q = new KeyedSerialTaskQueue();
179
+ const key = {};
180
+ q.Enqueue(key, async () => { await delay(5); throw new Error('boom'); });
181
+ await expect(q.Settled(key)).resolves.toBeUndefined();
182
+ expect((await q.Flush()).rejections).toBe(1);
183
+ });
184
+ it('is a pure read — it neither enqueues nor delays later tasks', async () => {
185
+ const q = new KeyedSerialTaskQueue();
186
+ const key = {};
187
+ await q.Settled(key);
188
+ expect(await q.Flush()).toEqual({ failures: 0, rejections: 0 });
189
+ });
190
+ });
191
+ describe('Enqueue ready option (#6045)', () => {
192
+ it('does not run the task before `ready` resolves', async () => {
193
+ const q = new KeyedSerialTaskQueue();
194
+ const order = [];
195
+ let release;
196
+ const ready = new Promise((r) => { release = r; });
197
+ void q.Enqueue({}, async () => { order.push('task'); }, { ready });
198
+ await delay(10);
199
+ expect(order).toEqual([]);
200
+ release();
201
+ await q.Flush();
202
+ expect(order).toEqual(['task']);
203
+ });
204
+ it('makes Flush wait for a task still gated on `ready`', async () => {
205
+ const q = new KeyedSerialTaskQueue();
206
+ let release;
207
+ const ready = new Promise((r) => { release = r; });
208
+ void q.Enqueue({}, async () => undefined, { ready });
209
+ let flushed = false;
210
+ const flush = q.Flush().then(() => { flushed = true; });
211
+ await delay(10);
212
+ expect(flushed).toBe(false);
213
+ release();
214
+ await flush;
215
+ expect(flushed).toBe(true);
216
+ });
217
+ it('still runs the task when `ready` rejects', async () => {
218
+ const q = new KeyedSerialTaskQueue();
219
+ const order = [];
220
+ const ready = Promise.reject(new Error('log write failed'));
221
+ void q.Enqueue({}, async () => { order.push('task'); }, { ready });
222
+ await q.Flush();
223
+ expect(order).toEqual(['task']);
224
+ });
225
+ it('keeps per-key order when `ready` rejects before the prior task finishes', async () => {
226
+ const q = new KeyedSerialTaskQueue();
227
+ const key = {};
228
+ const order = [];
229
+ void q.Enqueue(key, async () => { await delay(20); order.push('prior'); });
230
+ void q.Enqueue(key, async () => { order.push('next'); }, { ready: Promise.reject(new Error('log write failed')) });
231
+ await q.Flush();
232
+ expect(order).toEqual(['prior', 'next']);
233
+ });
234
+ it('holds back only its own key, not other keys', async () => {
235
+ const q = new KeyedSerialTaskQueue();
236
+ const order = [];
237
+ let release;
238
+ const ready = new Promise((r) => { release = r; });
239
+ void q.Enqueue({}, async () => { order.push('gated'); }, { ready });
240
+ void q.Enqueue({}, async () => { order.push('free'); });
241
+ await delay(10);
242
+ expect(order).toEqual(['free']);
243
+ release();
244
+ await q.Flush();
245
+ expect(order).toEqual(['free', 'gated']);
246
+ });
247
+ });
156
248
  });
157
249
  //# sourceMappingURL=KeyedSerialTaskQueue.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KeyedSerialTaskQueue.test.js","sourceRoot":"","sources":["../../src/__tests__/KeyedSerialTaskQueue.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KeyedSerialTaskQueue.test.js","sourceRoot":"","sources":["../../src/__tests__/KeyedSerialTaskQueue.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAE1E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,sFAAsF;QACtF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1F,MAAM,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACzG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QACtG,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,IAAI,GAA8B,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAQ,+BAA+B;QAC1F,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAkC,yBAAyB;QACrF,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;QAChG,MAAM,OAAO,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAQ,wDAAwD;QAChG,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAyB,8BAA8B;QACvE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACpG,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAA8B,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,gFAAgF;QAChF,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAE3E,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,0BAA0B;QAC1B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,qFAAqF;QACrF,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAE1E,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,uEAAuE;QACvE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,kBAAkB;QAClB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,0BAA0B;QAC1B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,mEAAmE;QACnE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,8FAA8F;QAC9F,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,kBAAkB;QAClB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,iDAAiD;QACjD,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,wFAAwF;QACxF,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAE5E,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,iFAAiF;QACjF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,wCAAwC;QACxC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,qFAAqF;QACrF,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAE1E,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,MAAM,KAAK,GAAa,EAAE,CAAC;YAE3B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEtB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAElC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YAExB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzE,MAAM,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,OAAoB,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzD,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAE1B,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,IAAI,OAAoB,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAErD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE5B,OAAO,EAAE,CAAC;YACV,MAAM,KAAK,CAAC;YACZ,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAE5D,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,MAAM,KAAK,GAAa,EAAE,CAAC;YAE3B,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;YACnH,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;YAEhB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,OAAoB,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzD,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACpE,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAEhC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Platform-string branches in the SQL query path that predate the PlatformStringCompliance check,
3
+ * one entry per flagged line (file relative to packages/, and the line's trimmed text). Remove an
4
+ * entry when its branch is converted to a dialect fact; never add one.
5
+ */
6
+ export declare const PLATFORM_STRING_BASELINE: ReadonlyArray<{
7
+ File: string;
8
+ Text: string;
9
+ }>;
10
+ //# sourceMappingURL=PlatformStringCompliance.baseline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlatformStringCompliance.baseline.d.ts","sourceRoot":"","sources":["../../src/__tests__/PlatformStringCompliance.baseline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKlF,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Platform-string branches in the SQL query path that predate the PlatformStringCompliance check,
3
+ * one entry per flagged line (file relative to packages/, and the line's trimmed text). Remove an
4
+ * entry when its branch is converted to a dialect fact; never add one.
5
+ */
6
+ export const PLATFORM_STRING_BASELINE = [
7
+ {
8
+ File: 'MJCoreEntitiesServer/src/custom/query-extraction/sync.ts',
9
+ Text: "if (platform === 'postgresql') {",
10
+ },
11
+ ];
12
+ //# sourceMappingURL=PlatformStringCompliance.baseline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlatformStringCompliance.baseline.js","sourceRoot":"","sources":["../../src/__tests__/PlatformStringCompliance.baseline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAkD;IACnF;QACI,IAAI,EAAE,0DAA0D;QAChE,IAAI,EAAE,kCAAkC;KAC3C;CACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** One flagged line: its file relative to packages/ (forward slashes) and its trimmed text. */
2
+ export interface PlatformStringSite {
3
+ File: string;
4
+ Text: string;
5
+ }
6
+ /** The platform-string branches in one file's text. */
7
+ export declare function FindPlatformStringSites(relativeFile: string, text: string): PlatformStringSite[];
8
+ //# sourceMappingURL=PlatformStringCompliance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlatformStringCompliance.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/PlatformStringCompliance.test.ts"],"names":[],"mappings":"AAwEA,+FAA+F;AAC/F,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAyBD,uDAAuD;AACvD,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAQhG"}