@askdb/core 1.0.0-beta.44 → 1.0.0-beta.45
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.
- package/README.md +6 -7
- package/dist/ask.d.ts +30 -38
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +126 -307
- package/dist/ask.js.map +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/enrichment/index.d.ts.map +1 -1
- package/dist/enrichment/prompt.d.ts +3 -3
- package/dist/enrichment/prompt.d.ts.map +1 -1
- package/dist/enrichment/prompt.js +41 -17
- package/dist/enrichment/prompt.js.map +1 -1
- package/dist/enrichment/suggest.d.ts +2 -2
- package/dist/enrichment/suggest.d.ts.map +1 -1
- package/dist/enrichment/suggest.js +3 -1
- package/dist/enrichment/suggest.js.map +1 -1
- package/dist/enrichment/types.d.ts +20 -1
- package/dist/enrichment/types.d.ts.map +1 -1
- package/dist/errors.d.ts +68 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/retrieval/synthesize-ddl.d.ts +7 -1
- package/dist/retrieval/synthesize-ddl.d.ts.map +1 -1
- package/dist/retrieval/synthesize-ddl.js +36 -33
- package/dist/retrieval/synthesize-ddl.js.map +1 -1
- package/dist/schema/normalize.d.ts +6 -0
- package/dist/schema/normalize.d.ts.map +1 -1
- package/dist/schema/normalize.js +1 -0
- package/dist/schema/normalize.js.map +1 -1
- package/dist/schema/v2/format.d.ts +28 -1
- package/dist/schema/v2/format.d.ts.map +1 -1
- package/dist/schema/v2/format.js +53 -19
- package/dist/schema/v2/format.js.map +1 -1
- package/dist/schema/v2/index.d.ts +1 -1
- package/dist/schema/v2/index.d.ts.map +1 -1
- package/dist/schema/v2/index.js +1 -1
- package/dist/schema/v2/index.js.map +1 -1
- package/dist/schema/v2/loader.d.ts +7 -4
- package/dist/schema/v2/loader.d.ts.map +1 -1
- package/dist/schema/v2/loader.js +87 -27
- package/dist/schema/v2/loader.js.map +1 -1
- package/dist/schema/v2/mentions.d.ts +12 -0
- package/dist/schema/v2/mentions.d.ts.map +1 -1
- package/dist/schema/v2/mentions.js +65 -11
- package/dist/schema/v2/mentions.js.map +1 -1
- package/dist/schema/v2/tenant-policy.d.ts +2 -2
- package/dist/sql/bind.d.ts +18 -5
- package/dist/sql/bind.d.ts.map +1 -1
- package/dist/sql/bind.js +32 -14
- package/dist/sql/bind.js.map +1 -1
- package/dist/sql/dialect-spec.d.ts.map +1 -1
- package/dist/sql/dialect-spec.js +5 -1
- package/dist/sql/dialect-spec.js.map +1 -1
- package/dist/sql/generate.d.ts +17 -11
- package/dist/sql/generate.d.ts.map +1 -1
- package/dist/sql/generate.js +65 -33
- package/dist/sql/generate.js.map +1 -1
- package/dist/sql/guardrail-decide.d.ts +56 -0
- package/dist/sql/guardrail-decide.d.ts.map +1 -0
- package/dist/sql/guardrail-decide.js +161 -0
- package/dist/sql/guardrail-decide.js.map +1 -0
- package/dist/sql/guardrails.d.ts +52 -0
- package/dist/sql/guardrails.d.ts.map +1 -0
- package/dist/sql/guardrails.js +100 -0
- package/dist/sql/guardrails.js.map +1 -0
- package/dist/sql/index.d.ts +2 -1
- package/dist/sql/index.d.ts.map +1 -1
- package/dist/sql/index.js +2 -1
- package/dist/sql/index.js.map +1 -1
- package/dist/sql/lexer.d.ts +13 -0
- package/dist/sql/lexer.d.ts.map +1 -1
- package/dist/sql/lexer.js +42 -7
- package/dist/sql/lexer.js.map +1 -1
- package/dist/sql/prompt.d.ts.map +1 -1
- package/dist/sql/prompt.js +2 -1
- package/dist/sql/prompt.js.map +1 -1
- package/dist/sql/rebind.d.ts +89 -0
- package/dist/sql/rebind.d.ts.map +1 -0
- package/dist/sql/rebind.js +175 -0
- package/dist/sql/rebind.js.map +1 -0
- package/dist/sql/sensitive-guardrail.d.ts +7 -2
- package/dist/sql/sensitive-guardrail.d.ts.map +1 -1
- package/dist/sql/sensitive-guardrail.js +14 -33
- package/dist/sql/sensitive-guardrail.js.map +1 -1
- package/dist/sql/tenant-guardrail.d.ts +3 -14
- package/dist/sql/tenant-guardrail.d.ts.map +1 -1
- package/dist/sql/tenant-guardrail.js +16 -65
- package/dist/sql/tenant-guardrail.js.map +1 -1
- package/dist/sql/tenant-placeholders.d.ts +14 -3
- package/dist/sql/tenant-placeholders.d.ts.map +1 -1
- package/dist/sql/tenant-placeholders.js +43 -24
- package/dist/sql/tenant-placeholders.js.map +1 -1
- package/dist/sql/tenant-scope-expand.d.ts +46 -0
- package/dist/sql/tenant-scope-expand.d.ts.map +1 -0
- package/dist/sql/tenant-scope-expand.js +101 -0
- package/dist/sql/tenant-scope-expand.js.map +1 -0
- package/dist/sql/tsql-batch.d.ts +56 -0
- package/dist/sql/tsql-batch.d.ts.map +1 -0
- package/dist/sql/tsql-batch.js +246 -0
- package/dist/sql/tsql-batch.js.map +1 -0
- package/dist/sql/validate.d.ts +5 -2
- package/dist/sql/validate.d.ts.map +1 -1
- package/dist/sql/validate.js +22 -2
- package/dist/sql/validate.js.map +1 -1
- package/package.json +1 -1
package/dist/schema/v2/loader.js
CHANGED
|
@@ -30,11 +30,14 @@ export function loadSchemaFromJson(raw) {
|
|
|
30
30
|
* Autodetects between:
|
|
31
31
|
* - A v2 directory (`<schemaId>.schema/`) containing `schema.json`
|
|
32
32
|
* - A bundled JSON file (`*.bundle.json` or any JSON with `bundled: true`)
|
|
33
|
-
* - A direct path to a `schema.json` inside a directory
|
|
34
|
-
* enclosing directory, including
|
|
35
|
-
* `tenant-policy.md`
|
|
33
|
+
* - A direct path to a `schema.json` inside a directory, matched in any case
|
|
34
|
+
* (`Schema.json` too) — loaded exactly like the enclosing directory, including
|
|
35
|
+
* sibling `tables/*.md`, `concepts.md`, and `tenant-policy.md`
|
|
36
36
|
*
|
|
37
|
-
* Any other JSON file is treated as a standalone physical layer
|
|
37
|
+
* Any other JSON file is treated as a standalone physical layer, unless its
|
|
38
|
+
* directory also holds `tenant-policy.md`, `tables/` or `concepts.md`: loading it
|
|
39
|
+
* alone would ignore them, so that throws `SchemaParseError`. To load only the
|
|
40
|
+
* physical layer of such a file, pass its content to `loadSchemaFromJson()`.
|
|
38
41
|
*
|
|
39
42
|
* Optional sibling files may be absent, but a present file that cannot be read
|
|
40
43
|
* or parsed (e.g. malformed YAML front-matter in `tenant-policy.md`) throws
|
|
@@ -60,16 +63,48 @@ export function loadSchema(path) {
|
|
|
60
63
|
}
|
|
61
64
|
// A file named `schema.json` is the physical layer of a schema directory: load
|
|
62
65
|
// the enclosing directory so sibling tables/*.md, concepts.md, and — critically —
|
|
63
|
-
// tenant-policy.md apply exactly as they would for the directory path.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
//
|
|
66
|
+
// tenant-policy.md apply exactly as they would for the directory path. The name
|
|
67
|
+
// matches in any case: on case-insensitive filesystems (macOS, Windows defaults)
|
|
68
|
+
// `Schema.json` opens `schema.json`, and missing that would drop the tenant policy.
|
|
69
|
+
// The physical layer is read from the given path, which may not be spelled
|
|
70
|
+
// `schema.json` on a case-sensitive filesystem.
|
|
71
|
+
if (basename(resolved).toLowerCase() === "schema.json") {
|
|
72
|
+
return loadFromDirectory(dirname(resolved), resolved);
|
|
73
|
+
}
|
|
74
|
+
// Any other bare JSON file is a standalone physical layer with no sibling files,
|
|
75
|
+
// unless it sits in a schema directory (fails closed, see below).
|
|
76
|
+
assertNotInSchemaDirectory(resolved);
|
|
68
77
|
const physical = parsePhysicalLayer(parsed, resolved);
|
|
69
78
|
return buildNormalized(physical, {}, undefined, [], undefined);
|
|
70
79
|
}
|
|
71
|
-
|
|
72
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Every optional file the directory loader reads beside `schema.json`, by the exact
|
|
82
|
+
* name it reads, keyed by the `BundledSchemaV2` field that carries it. `satisfies`
|
|
83
|
+
* stops a new bundle field from compiling until it is named here, so the directory
|
|
84
|
+
* loader, the bundle loader and `assertNotInSchemaDirectory` share one list.
|
|
85
|
+
*/
|
|
86
|
+
const SCHEMA_DIRECTORY_FILES = {
|
|
87
|
+
tenantPolicy: "tenant-policy.md",
|
|
88
|
+
tables: "tables",
|
|
89
|
+
concepts: "concepts.md",
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* A standalone JSON file must not sit beside schema-directory files. Loading it
|
|
93
|
+
* alone would ignore them, so `cp schema.json prod-schema.json` would silently drop
|
|
94
|
+
* the tenant policy (and with it `ask()`'s tenant scope) and every `tables/*.md`
|
|
95
|
+
* `sensitive: true`. Fail closed instead and say how to load it.
|
|
96
|
+
*/
|
|
97
|
+
function assertNotInSchemaDirectory(filePath) {
|
|
98
|
+
const dir = dirname(filePath);
|
|
99
|
+
const present = Object.values(SCHEMA_DIRECTORY_FILES).filter((name) => pathExists(join(dir, name)));
|
|
100
|
+
if (present.length === 0)
|
|
101
|
+
return;
|
|
102
|
+
throw new SchemaParseError(`Refusing to load ${filePath} as a standalone physical layer: its directory also holds ` +
|
|
103
|
+
`${present.join(", ")}, which loading the file alone would ignore (an ignored ` +
|
|
104
|
+
`tenant-policy.md turns tenant enforcement off). Pass the directory, rename the file ` +
|
|
105
|
+
`to schema.json, or pass its content to loadSchemaFromJson() to load only the physical layer.`);
|
|
106
|
+
}
|
|
107
|
+
function loadFromDirectory(dir, schemaJsonPath = join(dir, "schema.json")) {
|
|
73
108
|
let raw;
|
|
74
109
|
try {
|
|
75
110
|
raw = readFileSync(schemaJsonPath, "utf8");
|
|
@@ -89,7 +124,7 @@ function loadFromDirectory(dir) {
|
|
|
89
124
|
// tolerated. Any other read or parse failure is fatal: silently skipping a
|
|
90
125
|
// broken tenant-policy.md would load the schema with tenant enforcement off.
|
|
91
126
|
// Load optional tables/*.md
|
|
92
|
-
const tableDir = join(dir,
|
|
127
|
+
const tableDir = join(dir, SCHEMA_DIRECTORY_FILES.tables);
|
|
93
128
|
const tableMarkdowns = {};
|
|
94
129
|
// Sorted so warning order is deterministic (readdir order is filesystem-dependent)
|
|
95
130
|
// and matches the bundle loader, which sorts its `tables` keys the same way.
|
|
@@ -104,14 +139,14 @@ function loadFromDirectory(dir) {
|
|
|
104
139
|
}
|
|
105
140
|
// Load optional concepts.md
|
|
106
141
|
let concepts;
|
|
107
|
-
const conceptsPath = join(dir,
|
|
142
|
+
const conceptsPath = join(dir, SCHEMA_DIRECTORY_FILES.concepts);
|
|
108
143
|
const conceptsContent = readOptionalFile(conceptsPath);
|
|
109
144
|
if (conceptsContent !== undefined) {
|
|
110
145
|
concepts = parseOrWrap(conceptsPath, () => parseConceptsMarkdown(conceptsContent, conceptsPath)).frontmatter;
|
|
111
146
|
}
|
|
112
147
|
// Load optional tenant-policy.md
|
|
113
148
|
let tenantPolicy;
|
|
114
|
-
const policyPath = join(dir,
|
|
149
|
+
const policyPath = join(dir, SCHEMA_DIRECTORY_FILES.tenantPolicy);
|
|
115
150
|
const policyContent = readOptionalFile(policyPath);
|
|
116
151
|
if (policyContent !== undefined) {
|
|
117
152
|
tenantPolicy = parseOrWrap(policyPath, () => {
|
|
@@ -140,6 +175,18 @@ function readOptionalFile(path) {
|
|
|
140
175
|
throw new SchemaParseError(`Failed to read ${path}: ${errorMessage(e)}`, e);
|
|
141
176
|
}
|
|
142
177
|
}
|
|
178
|
+
/** Whether a path exists: `false` only when it does not (ENOENT), `SchemaParseError` on any other failure. */
|
|
179
|
+
function pathExists(path) {
|
|
180
|
+
try {
|
|
181
|
+
statSync(path);
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
catch (e) {
|
|
185
|
+
if (isMissingPathError(e))
|
|
186
|
+
return false;
|
|
187
|
+
throw new SchemaParseError(`Failed to read ${path}: ${errorMessage(e)}`, e);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
143
190
|
/** List an optional directory: `undefined` when it does not exist, `SchemaParseError` on any other failure. */
|
|
144
191
|
function readOptionalDir(path) {
|
|
145
192
|
try {
|
|
@@ -159,13 +206,18 @@ function readRequiredFile(path) {
|
|
|
159
206
|
throw new SchemaParseError(`Failed to read ${path}: ${errorMessage(e)}`, e);
|
|
160
207
|
}
|
|
161
208
|
}
|
|
162
|
-
/**
|
|
209
|
+
/**
|
|
210
|
+
* Run a parse step so its error names the file: a `SchemaParseError` that already
|
|
211
|
+
* names `path` is rethrown as-is; any other error (including a `SchemaParseError`
|
|
212
|
+
* from a check that doesn't know the file, such as a tenant-root placeholder
|
|
213
|
+
* collision) is wrapped with the path.
|
|
214
|
+
*/
|
|
163
215
|
function parseOrWrap(path, fn) {
|
|
164
216
|
try {
|
|
165
217
|
return fn();
|
|
166
218
|
}
|
|
167
219
|
catch (e) {
|
|
168
|
-
if (e instanceof SchemaParseError)
|
|
220
|
+
if (e instanceof SchemaParseError && e.message.includes(path))
|
|
169
221
|
throw e;
|
|
170
222
|
throw new SchemaParseError(`Failed to parse ${path}: ${errorMessage(e)}`, e);
|
|
171
223
|
}
|
|
@@ -173,28 +225,36 @@ function parseOrWrap(path, fn) {
|
|
|
173
225
|
function loadFromBundle(bundle, filePath) {
|
|
174
226
|
const physical = parsePhysicalLayer(bundle.physical, filePath);
|
|
175
227
|
const tableMarkdowns = {};
|
|
228
|
+
// Errors name the bundled file and the bundle that holds it: the user has the
|
|
229
|
+
// bundle on disk, not a tenant-policy.md or concepts.md.
|
|
230
|
+
const inBundle = (file) => `${file} (in ${filePath})`;
|
|
176
231
|
// Bundle keys are the `tables/` filenames (see `bundleSchemaDirectory` in
|
|
177
232
|
// @askdb/enrich), so warnings name the same path the directory loader would.
|
|
178
233
|
// Sorted like the directory loader's entries, so both report warnings in one order.
|
|
179
234
|
for (const [filename, content] of Object.entries(bundle.tables).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)) {
|
|
180
|
-
const
|
|
181
|
-
|
|
235
|
+
const tableFile = `tables/${filename}`;
|
|
236
|
+
const parsed = parseOrWrap(inBundle(tableFile), () => parseTableMarkdown(content, inBundle(tableFile)));
|
|
237
|
+
addTableMarkdown(tableMarkdowns, { tableFile, parsed }, filePath);
|
|
182
238
|
}
|
|
183
239
|
// Mirror the directory loader: only an *absent* key means "no file". A present
|
|
184
240
|
// value — including an empty string — is parsed and must be valid, so an empty
|
|
185
241
|
// or corrupt tenantPolicy can never silently disable tenant enforcement.
|
|
186
242
|
let concepts;
|
|
187
|
-
const conceptsContent = bundledFileContent(bundle, "concepts",
|
|
243
|
+
const conceptsContent = bundledFileContent(bundle, "concepts", filePath);
|
|
188
244
|
if (conceptsContent !== undefined) {
|
|
189
|
-
|
|
245
|
+
const conceptsFile = inBundle(SCHEMA_DIRECTORY_FILES.concepts);
|
|
246
|
+
concepts = parseOrWrap(conceptsFile, () => parseConceptsMarkdown(conceptsContent, conceptsFile)).frontmatter;
|
|
190
247
|
}
|
|
191
248
|
let tenantPolicy;
|
|
192
|
-
const policyContent = bundledFileContent(bundle, "tenantPolicy",
|
|
249
|
+
const policyContent = bundledFileContent(bundle, "tenantPolicy", filePath);
|
|
193
250
|
if (policyContent !== undefined) {
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
251
|
+
const policyFile = inBundle(SCHEMA_DIRECTORY_FILES.tenantPolicy);
|
|
252
|
+
tenantPolicy = parseOrWrap(policyFile, () => {
|
|
253
|
+
const parsed = parseTenantPolicyMarkdown(policyContent, policyFile);
|
|
254
|
+
const physicalTableIds = new Set(physical.tables.map((t) => t.id));
|
|
255
|
+
const physicalColumnIds = new Set(physical.tables.flatMap((t) => t.columns.map((c) => c.id)));
|
|
256
|
+
return normalizeTenantPolicy(parsed, physicalTableIds, physicalColumnIds);
|
|
257
|
+
});
|
|
198
258
|
}
|
|
199
259
|
return buildNormalized(physical, tableMarkdowns, concepts, [], tenantPolicy);
|
|
200
260
|
}
|
|
@@ -213,12 +273,12 @@ function addTableMarkdown(tableMarkdowns, loaded, schemaPath) {
|
|
|
213
273
|
tableMarkdowns[id] = loaded;
|
|
214
274
|
}
|
|
215
275
|
/** Read an optional bundled markdown file: `undefined` only when the key is absent. */
|
|
216
|
-
function bundledFileContent(bundle, key,
|
|
276
|
+
function bundledFileContent(bundle, key, bundlePath) {
|
|
217
277
|
const value = bundle[key];
|
|
218
278
|
if (value === undefined)
|
|
219
279
|
return undefined;
|
|
220
280
|
if (typeof value !== "string") {
|
|
221
|
-
throw new SchemaParseError(`Invalid bundle at ${bundlePath}: \`${key}\` must be the raw ${
|
|
281
|
+
throw new SchemaParseError(`Invalid bundle at ${bundlePath}: \`${key}\` must be the raw ${SCHEMA_DIRECTORY_FILES[key]} content (a string).`);
|
|
222
282
|
}
|
|
223
283
|
return value;
|
|
224
284
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/schema/v2/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAqB,MAAM,eAAe,CAAC;AAQtE,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAoC7F;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CAAC,oCAAoC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACzE,OAAO,cAAc,CAAC,MAAyB,EAAE,eAAe,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7D,OAAO,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEhC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,gDAAgD;IAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACzE,OAAO,cAAc,CAAC,MAAyB,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED,+EAA+E;IAC/E,kFAAkF;IAClF,uEAAuE;IACvE,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,aAAa,EAAE,CAAC;QACzC,OAAO,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,iFAAiF;IACjF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,OAAO,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAChD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAE5D,2EAA2E;IAC3E,2EAA2E;IAC3E,6EAA6E;IAE7E,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,cAAc,GAAwC,EAAE,CAAC;IAC/D,mFAAmF;IACnF,6EAA6E;IAC7E,MAAM,OAAO,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClF,gBAAgB,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,UAAU,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,4BAA4B;IAC5B,IAAI,QAA2C,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,QAAQ,GAAG,WAAW,CAAC,YAAY,EAAE,GAAG,EAAE,CACxC,qBAAqB,CAAC,eAAe,EAAE,YAAY,CAAC,CACrD,CAAC,WAAW,CAAC;IAChB,CAAC;IAED,iCAAiC;IACjC,IAAI,YAAgD,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,YAAY,GAAG,WAAW,CAAC,UAAU,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,yBAAyB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACpE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC3D,CAAC;YACF,OAAO,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAU;IACpC,OAAO,CACL,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAK,CAAwB,CAAC,IAAI,KAAK,QAAQ,CACnF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,CAAU;IAC9B,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,0GAA0G;AAC1G,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,kBAAkB,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5C,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,+GAA+G;AAC/G,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,kBAAkB,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5C,MAAM,IAAI,gBAAgB,CAAC,4BAA4B,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,SAAS,WAAW,CAAI,IAAY,EAAE,EAAW;IAC/C,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,gBAAgB;YAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB,EAAE,QAAgB;IAC/D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAwC,EAAE,CAAC;IAE/D,0EAA0E;IAC1E,6EAA6E;IAC7E,oFAAoF;IACpF,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAChF,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3B,EAAE,CAAC;QACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrD,gBAAgB,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,UAAU,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1F,CAAC;IAED,+EAA+E;IAC/E,+EAA+E;IAC/E,yEAAyE;IACzE,IAAI,QAA2C,CAAC;IAChD,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IACxF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,QAAQ,GAAG,qBAAqB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,WAAW,CAAC;IAC/E,CAAC;IAED,IAAI,YAAgD,CAAC;IACrD,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAC/F,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,yBAAyB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAC5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC3D,CAAC;QACF,YAAY,GAAG,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CACvB,cAAmD,EACnD,MAA2B,EAC3B,UAAkB;IAElB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,gBAAgB,CACxB,qBAAqB,UAAU,KAAK,QAAQ,CAAC,SAAS,QAAQ,MAAM,CAAC,SAAS,gCAAgC,EAAE,6DAA6D,CAC9K,CAAC;IACJ,CAAC;IACD,cAAc,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;AAC9B,CAAC;AAED,uFAAuF;AACvF,SAAS,kBAAkB,CACzB,MAAuB,EACvB,GAAgC,EAChC,QAAgB,EAChB,UAAkB;IAElB,MAAM,KAAK,GAAY,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,gBAAgB,CACxB,qBAAqB,UAAU,OAAO,GAAG,sBAAsB,QAAQ,sBAAsB,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa,EAAE,QAAgB;IACzD,kCAAkC;IAClC,IACE,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,SAAS,IAAI,IAAI;QAChB,IAAgC,CAAC,OAAO,KAAK,CAAC,EAC/C,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,mFAAmF;YACjF,2FAA2F,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,gBAAgB,CACxB,0BAA0B,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAC7D,MAAM,CAAC,KAAK,CACb,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CACtB,QAAsB,EACtB,cAAmD,EACnD,QAA2C,EAC3C,aAAgC,EAChC,YAAgD;IAEhD,MAAM,QAAQ,GAAsB,CAAC,GAAG,aAAa,CAAC,CAAC;IAEvD,oFAAoF;IACpF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAU,CAAC,CAAC,CAC5E,CAAC;IAEF,gFAAgF;IAChF,sFAAsF;IACtF,kFAAkF;IAClF,wEAAwE;IACxE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE7C,yDAAyD;IACzD,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACnD,6EAA6E;YAC7E,qDAAqD;YACrD,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI;gBAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE3D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACvE,CAAC;iBAAM,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBACxB,+EAA+E;gBAC/E,sEAAsE;gBACtE,0EAA0E;gBAC1E,gFAAgF;gBAChF,6EAA6E;gBAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAwB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACpE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,CAAC;QAC1B,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;QAE1C,2EAA2E;QAC3E,sEAAsE;QACtE,2EAA2E;QAC3E,2EAA2E;QAC3E,uEAAuE;QACvE,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,KAAK,IAAI,IAAI,EAAE,EAAE,WAAW,CAAC,SAAS,KAAK,IAAI,CAAC;QAC1F,IAAI,EAAE,EAAE,WAAW,CAAC,SAAS,KAAK,KAAK,IAAI,cAAc,EAAE,CAAC;YAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAyB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACtE,MAAM,MAAM,GAAG,EAAE,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACjF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnF,MAAM,YAAY,GAAG,SAAS,IAAI,cAAc,CAAC;YACjD,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YACtF,CAAC;YAED,MAAM,UAAU,GAAuB;gBACrC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;gBACvC,SAAS,EAAE,YAAY;gBACvB,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/E,CAAC;YAEF,mDAAmD;YACnD,IAAI,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;oBAAE,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;gBAChF,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM;oBAAE,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC9D,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM;oBAAE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACvD,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAsB;YACpC,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,SAAS,EAAE,cAAc;YACzB,OAAO;YACP,aAAa,EAAE,SAAS,CAAC,aAAa;SACvC,CAAC;QAEF,IAAI,EAAE,EAAE,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1C,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;QAC9C,CAAC;QAED,yDAAyD;QACzD,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC;YAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM;gBAAE,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;YACxD,IAAI,EAAE,CAAC,aAAa;gBAAE,UAAU,CAAC,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC;YAElE,mDAAmD;YACnD,MAAM,cAAc,GAAG,qBAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,cAAc;gBAAE,UAAU,CAAC,WAAW,GAAG,cAAc,CAAC;YAE5D,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;YACjD,IAAI,GAAG,EAAE,IAAI,EAAE;gBAAE,UAAU,CAAC,mBAAmB,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/D,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,MAAM;QACN,QAAQ,EAAE,QAAQ,EAAE,QAAQ;QAC5B,YAAY;QACZ,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,wEAAwE;YACxE,uEAAuE;YACvE,IAAI,WAAW;gBAAE,MAAM;YACvB,WAAW,GAAG,IAAI,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvB,IAAI,WAAW;gBAAE,MAAM;YACvB,SAAS;QACX,CAAC;QACD,WAAW,GAAG,IAAI,CAAC;QACnB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/schema/v2/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { NormalizedSchemaV2 } from "./normalized.js";
|
|
1
2
|
/**
|
|
2
3
|
* A name to look for in text: a bare name (matched literally, dots included),
|
|
3
4
|
* or a column qualified by its table.
|
|
@@ -28,4 +29,15 @@ export declare function createMentionMatcher(names: readonly MentionName[]): Men
|
|
|
28
29
|
* many texts against one list, build a matcher once instead.
|
|
29
30
|
*/
|
|
30
31
|
export declare function findMentionedNames<T extends MentionName>(text: string, names: readonly T[]): T[];
|
|
32
|
+
/**
|
|
33
|
+
* The names whose mention marks text as naming a sensitive column, for the
|
|
34
|
+
* whole schema (ADR 0017; how they match is the schema v2 contract's mention
|
|
35
|
+
* rule). A column marked sensitive itself counts by its bare name; a column
|
|
36
|
+
* of a sensitive table that is sensitive only through it
|
|
37
|
+
* (`sensitiveFromTable`) counts only qualified, since its bare name is often
|
|
38
|
+
* generic (`id`, `org_id`, `name`). Untracked tables' columns count too.
|
|
39
|
+
* `@askdb/rag`'s chunker and both NL→SQL prompt builders check describable
|
|
40
|
+
* text against this list.
|
|
41
|
+
*/
|
|
42
|
+
export declare function sensitiveMentionNames(schema: NormalizedSchemaV2): MentionName[];
|
|
31
43
|
//# sourceMappingURL=mentions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/mentions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG;IAC3B,sEAAsE;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,qDAAqD;IACrD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACnC,CAAC;
|
|
1
|
+
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/mentions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG;IAC3B,sEAAsE;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,qDAAqD;IACrD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACnC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,CAwClF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAEhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,WAAW,EAAE,CAe/E"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// A match's ends may not touch a letter, digit, or `_` of any script.
|
|
2
2
|
const BEFORE = "(?<![\\p{L}\\p{N}_])";
|
|
3
3
|
const AFTER = "(?![\\p{L}\\p{N}_])";
|
|
4
|
+
// Between a qualified name's table and column: a tight dot, or spaces or tabs
|
|
5
|
+
// on both sides ("users. Org_id" ends a sentence).
|
|
6
|
+
const QUALIFIER = "(?:\\.|[ \\t]+\\.[ \\t]+)";
|
|
4
7
|
/**
|
|
5
8
|
* Compiles the "mentions a sensitive column by name" rule of the schema v2
|
|
6
9
|
* contract (`docs/contracts/schema-v2.md`, Sensitive propagation) for
|
|
@@ -8,16 +11,40 @@ const AFTER = "(?![\\p{L}\\p{N}_])";
|
|
|
8
11
|
* checks every describable text of a schema against the same list.
|
|
9
12
|
*/
|
|
10
13
|
export function createMentionMatcher(names) {
|
|
11
|
-
const entries = names
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
const entries = names.filter((name) => typeof name === "string" ? name !== "" : name.table !== "" && name.column !== "");
|
|
15
|
+
// One alternative per bare name, and one per table for its qualified names
|
|
16
|
+
// (`table` + separator + any of its columns): the same matches as one
|
|
17
|
+
// alternative per name.
|
|
18
|
+
const bare = [];
|
|
19
|
+
const columnsByTable = new Map();
|
|
20
|
+
for (const name of entries) {
|
|
21
|
+
if (typeof name === "string")
|
|
22
|
+
bare.push(partPattern(name));
|
|
23
|
+
else {
|
|
24
|
+
const columns = columnsByTable.get(name.table) ?? [];
|
|
25
|
+
columns.push(partPattern(name.column));
|
|
26
|
+
columnsByTable.set(name.table, columns);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const tables = [...columnsByTable.keys()].map(partPattern);
|
|
30
|
+
const alternatives = [
|
|
31
|
+
...bare,
|
|
32
|
+
...[...columnsByTable.values()].map((columns, i) => `${tables[i]}${QUALIFIER}(?:${columns.join("|")})`),
|
|
33
|
+
];
|
|
34
|
+
if (alternatives.length === 0)
|
|
35
|
+
return { mentionsAny: () => false, find: () => [] };
|
|
36
|
+
const any = new RegExp(`${BEFORE}(?:${alternatives.join("|")})${AFTER}`, "iu");
|
|
37
|
+
// A first pass whose size follows the number of tables, not of their columns: a
|
|
38
|
+
// qualified mention needs one of its tables followed by the separator. Every
|
|
39
|
+
// text passes through it, and only a hit runs the full pattern, whose size
|
|
40
|
+
// slows some engines (Node 22's) on every text otherwise.
|
|
41
|
+
const firstPass = new RegExp(`${BEFORE}(?:${[...bare.map((b) => `${b}${AFTER}`), ...tables.map((t) => `${t}${QUALIFIER}`)].join("|")})`, "iu");
|
|
42
|
+
// Compiled on the first `find`: the prompt builders only ask `mentionsAny`.
|
|
43
|
+
let each;
|
|
44
|
+
const patterns = () => (each ??= entries.map((name) => ({ name, pattern: new RegExp(`${BEFORE}${namePattern(name)}${AFTER}`, "iu") })));
|
|
18
45
|
return {
|
|
19
|
-
mentionsAny: (text) => Boolean(text) &&
|
|
20
|
-
find: (text) => (text ?
|
|
46
|
+
mentionsAny: (text) => Boolean(text) && firstPass.test(text) && any.test(text),
|
|
47
|
+
find: (text) => (text ? patterns().filter(({ pattern }) => pattern.test(text)).map(({ name }) => name) : []),
|
|
21
48
|
};
|
|
22
49
|
}
|
|
23
50
|
/**
|
|
@@ -30,6 +57,34 @@ export function createMentionMatcher(names) {
|
|
|
30
57
|
export function findMentionedNames(text, names) {
|
|
31
58
|
return createMentionMatcher(names).find(text);
|
|
32
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* The names whose mention marks text as naming a sensitive column, for the
|
|
62
|
+
* whole schema (ADR 0017; how they match is the schema v2 contract's mention
|
|
63
|
+
* rule). A column marked sensitive itself counts by its bare name; a column
|
|
64
|
+
* of a sensitive table that is sensitive only through it
|
|
65
|
+
* (`sensitiveFromTable`) counts only qualified, since its bare name is often
|
|
66
|
+
* generic (`id`, `org_id`, `name`). Untracked tables' columns count too.
|
|
67
|
+
* `@askdb/rag`'s chunker and both NL→SQL prompt builders check describable
|
|
68
|
+
* text against this list.
|
|
69
|
+
*/
|
|
70
|
+
export function sensitiveMentionNames(schema) {
|
|
71
|
+
const names = [];
|
|
72
|
+
const bare = new Set();
|
|
73
|
+
for (const t of schema.tables) {
|
|
74
|
+
for (const c of t.columns) {
|
|
75
|
+
if (!c.sensitive && !t.sensitive)
|
|
76
|
+
continue;
|
|
77
|
+
if (t.sensitive && c.sensitiveFromTable === true) {
|
|
78
|
+
names.push({ table: t.name, column: c.name });
|
|
79
|
+
}
|
|
80
|
+
else if (!bare.has(c.name)) {
|
|
81
|
+
bare.add(c.name);
|
|
82
|
+
names.push(c.name);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return names;
|
|
87
|
+
}
|
|
33
88
|
/** A bare name, or a qualified one's table and column parts: as written, or wrapped in one matching pair of quotes or brackets. */
|
|
34
89
|
function partPattern(part) {
|
|
35
90
|
const p = escapeRegex(part);
|
|
@@ -38,8 +93,7 @@ function partPattern(part) {
|
|
|
38
93
|
function namePattern(name) {
|
|
39
94
|
if (typeof name === "string")
|
|
40
95
|
return partPattern(name);
|
|
41
|
-
|
|
42
|
-
return `${partPattern(name.table)}(?:\\.|[ \\t]+\\.[ \\t]+)${partPattern(name.column)}`;
|
|
96
|
+
return `${partPattern(name.table)}${QUALIFIER}${partPattern(name.column)}`;
|
|
43
97
|
}
|
|
44
98
|
function escapeRegex(s) {
|
|
45
99
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../../src/schema/v2/mentions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../../src/schema/v2/mentions.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,14 +43,14 @@ export declare const polymorphicTableSchema: z.ZodObject<{
|
|
|
43
43
|
mapping: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
44
44
|
}, z.core.$strict>;
|
|
45
45
|
export declare const enforcementModeSchema: z.ZodEnum<{
|
|
46
|
-
strict: "strict";
|
|
47
46
|
warn: "warn";
|
|
47
|
+
strict: "strict";
|
|
48
48
|
}>;
|
|
49
49
|
export declare const tenantPolicyFrontmatterSchema: z.ZodObject<{
|
|
50
50
|
schemaId: z.ZodString;
|
|
51
51
|
enforcement: z.ZodEnum<{
|
|
52
|
-
strict: "strict";
|
|
53
52
|
warn: "warn";
|
|
53
|
+
strict: "strict";
|
|
54
54
|
}>;
|
|
55
55
|
roots: z.ZodArray<z.ZodObject<{
|
|
56
56
|
id: z.ZodString;
|
package/dist/sql/bind.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export type QueryParameterBinding = {
|
|
|
17
17
|
indices: number[];
|
|
18
18
|
source: "question" | "tenant";
|
|
19
19
|
};
|
|
20
|
-
/** Serializable input to bindPreparedQuery()
|
|
20
|
+
/** Serializable input to `bindPreparedQuery()`. Definitions and template only — no values. */
|
|
21
21
|
export type PreparedQuery = {
|
|
22
22
|
version: 1;
|
|
23
23
|
dialect: BuiltInDialectId;
|
|
@@ -32,7 +32,8 @@ export type PreparedQuery = {
|
|
|
32
32
|
source: "question" | "tenant";
|
|
33
33
|
}>;
|
|
34
34
|
};
|
|
35
|
-
|
|
35
|
+
/** What the mechanical renderer produces: both rendered forms, the params and the bindings. */
|
|
36
|
+
export type RenderedQuery = {
|
|
36
37
|
/** Ready to run as-is — every placeholder replaced with an escaped literal. */
|
|
37
38
|
sql: string;
|
|
38
39
|
/** Same statement with driver markers instead of literals. */
|
|
@@ -65,6 +66,8 @@ export type PlaceholderOccurrence = {
|
|
|
65
66
|
/**
|
|
66
67
|
* Find `:name` placeholders only in code regions, in source order.
|
|
67
68
|
* A quoted `':name'` or a commented-out `-- :name` is invisible by construction.
|
|
69
|
+
* A name in any other form than `[a-z][a-z0-9_]*` is still reported, whole, so a
|
|
70
|
+
* caller that requires a declaration for every occurrence refuses it.
|
|
68
71
|
*/
|
|
69
72
|
export declare function scanPlaceholders(sql: string, dialect?: Pick<DialectSpec, "id" | "backslashEscapes">): PlaceholderOccurrence[];
|
|
70
73
|
/**
|
|
@@ -74,6 +77,8 @@ export declare function scanPlaceholders(sql: string, dialect?: Pick<DialectSpec
|
|
|
74
77
|
* generic profile is used.
|
|
75
78
|
*/
|
|
76
79
|
export declare function scanTenantPlaceholders(sql: string, dialect?: Pick<DialectSpec, "id" | "backslashEscapes">): PlaceholderOccurrence[];
|
|
80
|
+
/** Whether a placeholder name (without the colon) is a tenant placeholder, `tenant_<root>_ids`. */
|
|
81
|
+
export declare function isTenantPlaceholderName(name: string): boolean;
|
|
77
82
|
/**
|
|
78
83
|
* A `many` placeholder must be the sole expression inside `IN (...)` / `NOT IN (...)`,
|
|
79
84
|
* or the sole argument of `= ANY(...)` on array dialects.
|
|
@@ -91,10 +96,18 @@ export type MarkerStyle = "dollar" | "question" | "atp";
|
|
|
91
96
|
export declare function markerStyleForDialect(id: BuiltInDialectId): MarkerStyle;
|
|
92
97
|
export declare function formatMarker(style: MarkerStyle, ordinal: number): string;
|
|
93
98
|
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
99
|
+
* The mechanical renderer: substitutes placeholders with escaped literals and allocates
|
|
100
|
+
* dialect-correct driver markers. Runs no guardrail and doesn't know about tenant
|
|
101
|
+
* policies. Internal to `@askdb/core`: the public, checked `bindPreparedQuery()`
|
|
102
|
+
* (`rebind.ts`) and `ask()`'s consistency check call it.
|
|
103
|
+
*
|
|
104
|
+
* With `skipTenantPlaceholders`, every `:tenant_<root>_ids` placeholder is left in place,
|
|
105
|
+
* by name from the lexer scan, and its declaration is ignored: the caller renders tenant
|
|
106
|
+
* IDs from a tenant scope afterwards.
|
|
96
107
|
*/
|
|
97
|
-
export declare function
|
|
108
|
+
export declare function renderPreparedQuery(prepared: PreparedQuery, values: Record<string, QueryParameterValue | readonly QueryParameterValue[]>, options?: {
|
|
109
|
+
skipTenantPlaceholders?: boolean;
|
|
110
|
+
}): RenderedQuery;
|
|
98
111
|
/**
|
|
99
112
|
* Compare two SQL strings structurally for the parameterize consistency check.
|
|
100
113
|
*/
|
package/dist/sql/bind.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/sql/bind.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/sql/bind.ts"],"names":[],"mappings":"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"}
|
package/dist/sql/bind.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { QueryParameterError, } from "../errors.js";
|
|
2
|
-
import { BUILT_IN_DIALECTS, } from "./dialect-spec.js";
|
|
2
|
+
import { BUILT_IN_DIALECTS, isBuiltInDialectId, } from "./dialect-spec.js";
|
|
3
3
|
import { GENERIC_LEXER, lexSql, lexerProfileFor } from "./lexer.js";
|
|
4
4
|
import { validateSelectSql } from "./validate.js";
|
|
5
5
|
/**
|
|
@@ -33,10 +33,15 @@ export function tokenizeSqlSpans(sql, dialect) {
|
|
|
33
33
|
return spans;
|
|
34
34
|
}
|
|
35
35
|
// `(?<!:)` keeps the type in a `value::type` cast from reading as a `:type` placeholder.
|
|
36
|
-
|
|
36
|
+
// The name runs over every identifier character, not just the lowercase ones a declared
|
|
37
|
+
// name may use: `:status_nameOR` is one token (as the tenant guardrail reads it) and
|
|
38
|
+
// matches no declaration, so it fails closed instead of rendering `'x'OR`.
|
|
39
|
+
const PLACEHOLDER_TOKEN_RE = /(?<!:):([A-Za-z_][A-Za-z0-9_$\u0080-\uffff]*)/g;
|
|
37
40
|
/**
|
|
38
41
|
* Find `:name` placeholders only in code regions, in source order.
|
|
39
42
|
* A quoted `':name'` or a commented-out `-- :name` is invisible by construction.
|
|
43
|
+
* A name in any other form than `[a-z][a-z0-9_]*` is still reported, whole, so a
|
|
44
|
+
* caller that requires a declaration for every occurrence refuses it.
|
|
40
45
|
*/
|
|
41
46
|
export function scanPlaceholders(sql, dialect) {
|
|
42
47
|
const spans = tokenizeSqlSpans(sql, dialect);
|
|
@@ -63,7 +68,11 @@ export function scanPlaceholders(sql, dialect) {
|
|
|
63
68
|
* generic profile is used.
|
|
64
69
|
*/
|
|
65
70
|
export function scanTenantPlaceholders(sql, dialect) {
|
|
66
|
-
return scanPlaceholders(sql, dialect).filter((p) =>
|
|
71
|
+
return scanPlaceholders(sql, dialect).filter((p) => isTenantPlaceholderName(p.name));
|
|
72
|
+
}
|
|
73
|
+
/** Whether a placeholder name (without the colon) is a tenant placeholder, `tenant_<root>_ids`. */
|
|
74
|
+
export function isTenantPlaceholderName(name) {
|
|
75
|
+
return /^tenant_[a-z0-9_]+_ids$/.test(name);
|
|
67
76
|
}
|
|
68
77
|
// ---------------------------------------------------------------------------
|
|
69
78
|
// List-context validation
|
|
@@ -184,7 +193,7 @@ function nextMarker(style, counters) {
|
|
|
184
193
|
}
|
|
185
194
|
}
|
|
186
195
|
// ---------------------------------------------------------------------------
|
|
187
|
-
//
|
|
196
|
+
// renderPreparedQuery
|
|
188
197
|
// ---------------------------------------------------------------------------
|
|
189
198
|
function paramError(reason, message) {
|
|
190
199
|
return new QueryParameterError(message, reason);
|
|
@@ -248,20 +257,28 @@ function assertScalar(value, type) {
|
|
|
248
257
|
}
|
|
249
258
|
}
|
|
250
259
|
/**
|
|
251
|
-
*
|
|
252
|
-
*
|
|
260
|
+
* The mechanical renderer: substitutes placeholders with escaped literals and allocates
|
|
261
|
+
* dialect-correct driver markers. Runs no guardrail and doesn't know about tenant
|
|
262
|
+
* policies. Internal to `@askdb/core`: the public, checked `bindPreparedQuery()`
|
|
263
|
+
* (`rebind.ts`) and `ask()`'s consistency check call it.
|
|
264
|
+
*
|
|
265
|
+
* With `skipTenantPlaceholders`, every `:tenant_<root>_ids` placeholder is left in place,
|
|
266
|
+
* by name from the lexer scan, and its declaration is ignored: the caller renders tenant
|
|
267
|
+
* IDs from a tenant scope afterwards.
|
|
253
268
|
*/
|
|
254
|
-
export function
|
|
255
|
-
|
|
256
|
-
if (!spec) {
|
|
269
|
+
export function renderPreparedQuery(prepared, values, options = {}) {
|
|
270
|
+
if (!isBuiltInDialectId(prepared.dialect)) {
|
|
257
271
|
throw paramError("DIALECT_UNSUPPORTED", `Unknown dialect '${prepared.dialect}'.`);
|
|
258
272
|
}
|
|
273
|
+
const spec = BUILT_IN_DIALECTS[prepared.dialect];
|
|
259
274
|
const listBinding = listBindingOf(spec);
|
|
260
275
|
const style = markerStyleForDialect(prepared.dialect);
|
|
261
276
|
const namedSql = prepared.namedSql;
|
|
262
|
-
const
|
|
263
|
-
const
|
|
264
|
-
|
|
277
|
+
const rendered = (name) => !(options.skipTenantPlaceholders && isTenantPlaceholderName(name));
|
|
278
|
+
const occurrences = scanPlaceholders(namedSql, spec).filter((o) => rendered(o.name));
|
|
279
|
+
const declarations = prepared.parameters.filter((p) => rendered(p.name));
|
|
280
|
+
const declByName = new Map(declarations.map((p) => [p.name, p]));
|
|
281
|
+
for (const p of declarations) {
|
|
265
282
|
if (!occurrences.some((o) => o.name === p.name)) {
|
|
266
283
|
throw paramError("UNRESOLVED_PLACEHOLDER", `Declared parameter '${p.name}' does not appear in namedSql.`);
|
|
267
284
|
}
|
|
@@ -272,7 +289,7 @@ export function bindPreparedQuery(prepared, values) {
|
|
|
272
289
|
}
|
|
273
290
|
}
|
|
274
291
|
const resolvedValues = new Map();
|
|
275
|
-
for (const p of
|
|
292
|
+
for (const p of declarations) {
|
|
276
293
|
const raw = lookupValue(values, p.name, p.placeholder);
|
|
277
294
|
if (raw === undefined) {
|
|
278
295
|
throw paramError("MISSING_VALUE", `Missing value for parameter '${p.name}'.`);
|
|
@@ -401,7 +418,8 @@ export function bindPreparedQuery(prepared, values) {
|
|
|
401
418
|
sql = sql.slice(0, edit.start) + edit.literal + sql.slice(edit.end);
|
|
402
419
|
unboundSql = unboundSql.slice(0, edit.start) + edit.marker + unboundSql.slice(edit.end);
|
|
403
420
|
}
|
|
404
|
-
|
|
421
|
+
const remaining = (text) => scanPlaceholders(text, spec).some((o) => rendered(o.name));
|
|
422
|
+
if (remaining(sql) || remaining(unboundSql)) {
|
|
405
423
|
throw paramError("UNRESOLVED_PLACEHOLDER", "One or more placeholders remain after binding.");
|
|
406
424
|
}
|
|
407
425
|
validateSelectSql(spec, sql);
|