@askdb/core 1.0.0-beta.45 → 1.0.0-beta.47

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 (103) hide show
  1. package/README.md +15 -13
  2. package/dist/ask.d.ts +26 -9
  3. package/dist/ask.d.ts.map +1 -1
  4. package/dist/ask.js +29 -5
  5. package/dist/ask.js.map +1 -1
  6. package/dist/enrichment/prompt.d.ts.map +1 -1
  7. package/dist/enrichment/prompt.js +6 -4
  8. package/dist/enrichment/prompt.js.map +1 -1
  9. package/dist/enrichment/types.d.ts +13 -12
  10. package/dist/enrichment/types.d.ts.map +1 -1
  11. package/dist/errors.d.ts +67 -9
  12. package/dist/errors.d.ts.map +1 -1
  13. package/dist/errors.js.map +1 -1
  14. package/dist/index.d.ts +3 -3
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +3 -3
  17. package/dist/index.js.map +1 -1
  18. package/dist/logging/askdb-logger.d.ts +2 -0
  19. package/dist/logging/askdb-logger.d.ts.map +1 -1
  20. package/dist/logging/create-askdb-logger.d.ts +4 -1
  21. package/dist/logging/create-askdb-logger.d.ts.map +1 -1
  22. package/dist/logging/create-askdb-logger.js +24 -3
  23. package/dist/logging/create-askdb-logger.js.map +1 -1
  24. package/dist/logging/log-events.d.ts +8 -0
  25. package/dist/logging/log-events.d.ts.map +1 -1
  26. package/dist/logging/log-events.js +8 -0
  27. package/dist/logging/log-events.js.map +1 -1
  28. package/dist/schema/normalize.d.ts +0 -2
  29. package/dist/schema/normalize.d.ts.map +1 -1
  30. package/dist/schema/normalize.js +0 -4
  31. package/dist/schema/normalize.js.map +1 -1
  32. package/dist/schema/v2/index.d.ts +3 -2
  33. package/dist/schema/v2/index.d.ts.map +1 -1
  34. package/dist/schema/v2/index.js +3 -2
  35. package/dist/schema/v2/index.js.map +1 -1
  36. package/dist/schema/v2/loader.d.ts +24 -6
  37. package/dist/schema/v2/loader.d.ts.map +1 -1
  38. package/dist/schema/v2/loader.js +164 -100
  39. package/dist/schema/v2/loader.js.map +1 -1
  40. package/dist/schema/v2/save-file.d.ts +56 -0
  41. package/dist/schema/v2/save-file.d.ts.map +1 -0
  42. package/dist/schema/v2/save-file.js +138 -0
  43. package/dist/schema/v2/save-file.js.map +1 -0
  44. package/dist/schema/v2/tenant-policy-loader.d.ts +1 -10
  45. package/dist/schema/v2/tenant-policy-loader.d.ts.map +1 -1
  46. package/dist/schema/v2/tenant-policy-loader.js +65 -51
  47. package/dist/schema/v2/tenant-policy-loader.js.map +1 -1
  48. package/dist/schema/v2/tenant-policy.d.ts +5 -0
  49. package/dist/schema/v2/tenant-policy.d.ts.map +1 -1
  50. package/dist/schema/v2/tenant-policy.js +26 -0
  51. package/dist/schema/v2/tenant-policy.js.map +1 -1
  52. package/dist/sql/bind.d.ts +11 -4
  53. package/dist/sql/bind.d.ts.map +1 -1
  54. package/dist/sql/bind.js +5 -8
  55. package/dist/sql/bind.js.map +1 -1
  56. package/dist/sql/dialect-spec.d.ts +1 -0
  57. package/dist/sql/dialect-spec.d.ts.map +1 -1
  58. package/dist/sql/dialect-spec.js +2 -1
  59. package/dist/sql/dialect-spec.js.map +1 -1
  60. package/dist/sql/guardrail-decide.d.ts +4 -2
  61. package/dist/sql/guardrail-decide.d.ts.map +1 -1
  62. package/dist/sql/guardrail-decide.js.map +1 -1
  63. package/dist/sql/lexer.d.ts +12 -0
  64. package/dist/sql/lexer.d.ts.map +1 -1
  65. package/dist/sql/lexer.js +27 -0
  66. package/dist/sql/lexer.js.map +1 -1
  67. package/dist/sql/parameter-manifest.d.ts +5 -1
  68. package/dist/sql/parameter-manifest.d.ts.map +1 -1
  69. package/dist/sql/parameter-manifest.js.map +1 -1
  70. package/dist/sql/prompt-identifiers.d.ts +9 -0
  71. package/dist/sql/prompt-identifiers.d.ts.map +1 -1
  72. package/dist/sql/prompt-identifiers.js +22 -3
  73. package/dist/sql/prompt-identifiers.js.map +1 -1
  74. package/dist/sql/prompt.d.ts.map +1 -1
  75. package/dist/sql/prompt.js +3 -1
  76. package/dist/sql/prompt.js.map +1 -1
  77. package/dist/sql/rebind.d.ts +34 -7
  78. package/dist/sql/rebind.d.ts.map +1 -1
  79. package/dist/sql/rebind.js +50 -10
  80. package/dist/sql/rebind.js.map +1 -1
  81. package/dist/sql/tenant-guardrail.d.ts.map +1 -1
  82. package/dist/sql/tenant-guardrail.js +176 -2
  83. package/dist/sql/tenant-guardrail.js.map +1 -1
  84. package/dist/sql/tenant-placeholders.d.ts +26 -11
  85. package/dist/sql/tenant-placeholders.d.ts.map +1 -1
  86. package/dist/sql/tenant-placeholders.js +50 -25
  87. package/dist/sql/tenant-placeholders.js.map +1 -1
  88. package/dist/sql/tenant-policy-warnings.d.ts +8 -0
  89. package/dist/sql/tenant-policy-warnings.d.ts.map +1 -0
  90. package/dist/sql/tenant-policy-warnings.js +21 -0
  91. package/dist/sql/tenant-policy-warnings.js.map +1 -0
  92. package/dist/sql/tenant-scope-validate.d.ts.map +1 -1
  93. package/dist/sql/tenant-scope-validate.js +8 -1
  94. package/dist/sql/tenant-scope-validate.js.map +1 -1
  95. package/dist/sql/tsql-batch.d.ts +10 -0
  96. package/dist/sql/tsql-batch.d.ts.map +1 -1
  97. package/dist/sql/tsql-batch.js +2 -2
  98. package/dist/sql/tsql-batch.js.map +1 -1
  99. package/dist/sql/validate.d.ts +24 -3
  100. package/dist/sql/validate.d.ts.map +1 -1
  101. package/dist/sql/validate.js +123 -11
  102. package/dist/sql/validate.js.map +1 -1
  103. package/package.json +2 -2
@@ -35,13 +35,15 @@ export function loadSchemaFromJson(raw) {
35
35
  * sibling `tables/*.md`, `concepts.md`, and `tenant-policy.md`
36
36
  *
37
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
+ * directory also holds `tenant-policy.md`, `tables/` or `concepts.md`, in any case:
39
+ * loading it alone would ignore them, so that throws `SchemaParseError`. To load only
40
+ * the physical layer of such a file, pass its content to `loadSchemaFromJson()`.
41
41
  *
42
- * Optional sibling files may be absent, but a present file that cannot be read
43
- * or parsed (e.g. malformed YAML front-matter in `tenant-policy.md`) throws
44
- * `SchemaParseError` — a broken tenant policy never silently disables tenancy.
42
+ * A directory is read by {@link readSchemaDirectory}, so a file name the loader looks
43
+ * up must be spelled exactly (`Tenant-Policy.md` throws on every OS). Optional sibling
44
+ * files may be absent, but a present file that cannot be read or parsed (e.g.
45
+ * malformed YAML front-matter in `tenant-policy.md`) throws `SchemaParseError` — a
46
+ * broken tenant policy never silently disables tenancy.
45
47
  */
46
48
  export function loadSchema(path) {
47
49
  const resolved = resolve(path);
@@ -81,7 +83,7 @@ export function loadSchema(path) {
81
83
  * Every optional file the directory loader reads beside `schema.json`, by the exact
82
84
  * name it reads, keyed by the `BundledSchemaV2` field that carries it. `satisfies`
83
85
  * 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.
86
+ * read, the bundle loader and `assertNotInSchemaDirectory` share one list.
85
87
  */
86
88
  const SCHEMA_DIRECTORY_FILES = {
87
89
  tenantPolicy: "tenant-policy.md",
@@ -92,11 +94,14 @@ const SCHEMA_DIRECTORY_FILES = {
92
94
  * A standalone JSON file must not sit beside schema-directory files. Loading it
93
95
  * alone would ignore them, so `cp schema.json prod-schema.json` would silently drop
94
96
  * 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.
97
+ * `sensitive: true`. Fail closed instead and say how to load it. A sibling counts in
98
+ * any case: a wrong-case `Tenant-Policy.md` is still a schema file the load would ignore.
96
99
  */
97
100
  function assertNotInSchemaDirectory(filePath) {
98
- const dir = dirname(filePath);
99
- const present = Object.values(SCHEMA_DIRECTORY_FILES).filter((name) => pathExists(join(dir, name)));
101
+ const siblingKeys = new Set(Object.values(SCHEMA_DIRECTORY_FILES).map(caseKey));
102
+ const present = readRequiredDir(dirname(filePath))
103
+ .filter((entry) => siblingKeys.has(caseKey(entry)))
104
+ .sort();
100
105
  if (present.length === 0)
101
106
  return;
102
107
  throw new SchemaParseError(`Refusing to load ${filePath} as a standalone physical layer: its directory also holds ` +
@@ -104,97 +109,155 @@ function assertNotInSchemaDirectory(filePath) {
104
109
  `tenant-policy.md turns tenant enforcement off). Pass the directory, rename the file ` +
105
110
  `to schema.json, or pass its content to loadSchemaFromJson() to load only the physical layer.`);
106
111
  }
107
- function loadFromDirectory(dir, schemaJsonPath = join(dir, "schema.json")) {
108
- let raw;
109
- try {
110
- raw = readFileSync(schemaJsonPath, "utf8");
111
- }
112
- catch {
112
+ /**
113
+ * Read a Schema v2 directory into its bundle form, the single file `askdb bundle`
114
+ * writes. Loading the result with `loadSchemaFromJson()` gives the same schema as
115
+ * `loadSchema(dir)`, which reads the directory through this function too.
116
+ *
117
+ * Every name it looks up must be spelled exactly: `schema.json`, `tenant-policy.md`,
118
+ * `concepts.md`, `tables/`, and the `.md` extension in `tables/`. A file that matches
119
+ * one only when case is ignored (`Tenant-Policy.md`, `tables/orders.MD`) throws
120
+ * `SchemaParseError` on every OS. Where file names are case-sensitive (Linux) it would
121
+ * otherwise be skipped, and a skipped `tenant-policy.md` turns tenant enforcement off.
122
+ *
123
+ * An optional file counts as absent only when the directory doesn't list it. A listed
124
+ * file that can't be read throws `SchemaParseError`, so does a `schema.json` that is
125
+ * missing or invalid. The file contents are returned unparsed, except `schema.json`.
126
+ */
127
+ export function readSchemaDirectory(dir) {
128
+ return readDirectory(resolve(dir));
129
+ }
130
+ const SCHEMA_JSON = "schema.json";
131
+ /**
132
+ * {@link readSchemaDirectory}, reading the physical layer from `schemaJsonPath` when
133
+ * the caller named that file (`loadSchema("<dir>/Schema.json")`). That name is the
134
+ * caller's, so it is read as given and only the names this function looks up itself
135
+ * are checked.
136
+ */
137
+ function readDirectory(dir, schemaJsonPath) {
138
+ const entries = readRequiredDir(dir);
139
+ const listed = new Set(entries);
140
+ const tables = SCHEMA_DIRECTORY_FILES.tables;
141
+ const tableDir = join(dir, tables);
142
+ // Sorted so warning order is deterministic (readdir order is filesystem-dependent)
143
+ // and matches the bundle loader, which sorts its `tables` keys the same way.
144
+ const tableEntries = listed.has(tables) ? readRequiredDir(tableDir).sort() : [];
145
+ assertExactNames(dir, entries, tableEntries, schemaJsonPath === undefined);
146
+ if (schemaJsonPath === undefined && !listed.has(SCHEMA_JSON)) {
113
147
  throw new SchemaParseError(`No schema.json found in directory: ${dir}`);
114
148
  }
149
+ const physicalPath = schemaJsonPath ?? join(dir, SCHEMA_JSON);
115
150
  let parsed;
116
151
  try {
117
- parsed = JSON.parse(raw);
152
+ parsed = JSON.parse(readRequiredFile(physicalPath));
118
153
  }
119
- catch {
120
- throw new SchemaParseError(`Failed to parse schema.json in ${dir}`);
121
- }
122
- const physical = parsePhysicalLayer(parsed, schemaJsonPath);
123
- // The describable files below are optional, but only *absence* (ENOENT) is
124
- // tolerated. Any other read or parse failure is fatal: silently skipping a
125
- // broken tenant-policy.md would load the schema with tenant enforcement off.
126
- // Load optional tables/*.md
127
- const tableDir = join(dir, SCHEMA_DIRECTORY_FILES.tables);
128
- const tableMarkdowns = {};
129
- // Sorted so warning order is deterministic (readdir order is filesystem-dependent)
130
- // and matches the bundle loader, which sorts its `tables` keys the same way.
131
- const entries = (readOptionalDir(tableDir) ?? []).sort();
132
- for (const entry of entries) {
133
- if (!entry.endsWith(".md"))
134
- continue;
135
- const filePath = join(tableDir, entry);
136
- const content = readRequiredFile(filePath);
137
- const parsed = parseOrWrap(filePath, () => parseTableMarkdown(content, filePath));
138
- addTableMarkdown(tableMarkdowns, { tableFile: `tables/${entry}`, parsed }, dir);
154
+ catch (e) {
155
+ if (e instanceof SchemaParseError)
156
+ throw e;
157
+ throw new SchemaParseError(`Failed to parse schema.json in ${dir}`, e);
139
158
  }
140
- // Load optional concepts.md
141
- let concepts;
142
- const conceptsPath = join(dir, SCHEMA_DIRECTORY_FILES.concepts);
143
- const conceptsContent = readOptionalFile(conceptsPath);
144
- if (conceptsContent !== undefined) {
145
- concepts = parseOrWrap(conceptsPath, () => parseConceptsMarkdown(conceptsContent, conceptsPath)).frontmatter;
159
+ const physical = parsePhysicalLayer(parsed, physicalPath);
160
+ const tableFiles = {};
161
+ for (const entry of tableEntries) {
162
+ if (entry.endsWith(".md"))
163
+ tableFiles[entry] = readRequiredFile(join(tableDir, entry));
146
164
  }
147
- // Load optional tenant-policy.md
148
- let tenantPolicy;
149
- const policyPath = join(dir, SCHEMA_DIRECTORY_FILES.tenantPolicy);
150
- const policyContent = readOptionalFile(policyPath);
151
- if (policyContent !== undefined) {
152
- tenantPolicy = parseOrWrap(policyPath, () => {
153
- const parsed = parseTenantPolicyMarkdown(policyContent, policyPath);
154
- const physicalTableIds = new Set(physical.tables.map((t) => t.id));
155
- const physicalColumnIds = new Set(physical.tables.flatMap((t) => t.columns.map((c) => c.id)));
156
- return normalizeTenantPolicy(parsed, physicalTableIds, physicalColumnIds);
157
- });
165
+ const bundle = { bundled: true, physical, tables: tableFiles };
166
+ for (const key of ["concepts", "tenantPolicy"]) {
167
+ const name = SCHEMA_DIRECTORY_FILES[key];
168
+ if (listed.has(name))
169
+ bundle[key] = readRequiredFile(join(dir, name));
158
170
  }
159
- return buildNormalized(physical, tableMarkdowns, concepts, [], tenantPolicy);
171
+ return bundle;
160
172
  }
161
- function isMissingPathError(e) {
162
- return (typeof e === "object" && e !== null && e.code === "ENOENT");
173
+ /**
174
+ * The key two names share when a case-insensitive filesystem stores them as one file.
175
+ * It is ADR 0013's key, checked there against Unicode full case folding: APFS folds
176
+ * `tableſ` (long s) to `tables`, which `toLowerCase()` alone misses.
177
+ */
178
+ function caseKey(name) {
179
+ return name.normalize("NFC").toLowerCase().toUpperCase().toLowerCase();
163
180
  }
164
- function errorMessage(e) {
165
- return e instanceof Error ? e.message : String(e);
181
+ /** A `tables/` entry's name with its extension lowercased: `users.MD` → `users.md`. */
182
+ function tableFileKey(entry) {
183
+ return entry.slice(0, -3) + entry.slice(-3).toLowerCase();
166
184
  }
167
- /** Read an optional file: `undefined` when it does not exist, `SchemaParseError` on any other failure. */
168
- function readOptionalFile(path) {
169
- try {
170
- return readFileSync(path, "utf8");
171
- }
172
- catch (e) {
173
- if (isMissingPathError(e))
174
- return undefined;
175
- throw new SchemaParseError(`Failed to read ${path}: ${errorMessage(e)}`, e);
185
+ /**
186
+ * Throw when a directory entry matches a name the loader looks up only when case is
187
+ * ignored. Where file names are case-sensitive (Linux), the loader would skip that
188
+ * file; on macOS and Windows the same directory loads. Checking on every OS makes a
189
+ * directory fail on a laptop the way it would fail open in production. One error
190
+ * names every problem, including the files in a wrong-case `Tables/`, so the user
191
+ * fixes them in one pass.
192
+ */
193
+ function assertExactNames(dir, entries, tableEntries, checkSchemaJson) {
194
+ const tables = SCHEMA_DIRECTORY_FILES.tables;
195
+ const names = [...(checkSchemaJson ? [SCHEMA_JSON] : []), ...Object.values(SCHEMA_DIRECTORY_FILES)];
196
+ const problems = spellingProblems(entries, names, caseKey, "");
197
+ // A lone wrong-case `Tables/` is listed too, so its files are named in this error.
198
+ const tablesSpellings = entries.filter((entry) => caseKey(entry) === tables);
199
+ const wrongCaseTables = tablesSpellings.length === 1 && tablesSpellings[0] !== tables
200
+ ? listOrEmpty(join(dir, tablesSpellings[0])).sort()
201
+ : [];
202
+ const files = [...tableEntries, ...wrongCaseTables];
203
+ const mdNames = [
204
+ ...new Set(files.map(tableFileKey).filter((key) => key.endsWith(".md"))),
205
+ ];
206
+ problems.push(...spellingProblems(files, mdNames, tableFileKey, `${tables}/`));
207
+ if (problems.length === 0)
208
+ return;
209
+ throw new SchemaParseError(`Schema directory ${dir} has a file name in the wrong case: ${problems.join("; ")}. ` +
210
+ `The loader reads these names exactly. Where file names are case-sensitive (Linux) it ` +
211
+ `would skip the file, and a skipped tenant-policy.md turns tenant enforcement off, so it ` +
212
+ `refuses on every OS.`);
213
+ }
214
+ /**
215
+ * For each name, the entries that spell it differently under `key`: one wrong spelling
216
+ * is a rename. Two or more spellings can coexist only where names are case-sensitive,
217
+ * and renaming one onto the other would overwrite a file or move a directory inside
218
+ * the other, so the problem says to keep one instead.
219
+ */
220
+ function spellingProblems(entries, names, key, prefix) {
221
+ const problems = [];
222
+ for (const name of names) {
223
+ const spellings = entries.filter((entry) => key(entry) === key(name)).sort();
224
+ if (spellings.length === 0 || (spellings.length === 1 && spellings[0] === name))
225
+ continue;
226
+ problems.push(spellings.length === 1
227
+ ? `rename ${prefix}${spellings[0]} to ${prefix}${name}`
228
+ : `keep one of ${spellings.map((s) => prefix + s).join(", ")}, named ${prefix}${name}`);
176
229
  }
230
+ return problems;
177
231
  }
178
- /** Whether a path exists: `false` only when it does not (ENOENT), `SchemaParseError` on any other failure. */
179
- function pathExists(path) {
232
+ /** List a directory whose contents only add detail to an error: `[]` if it can't be listed. */
233
+ function listOrEmpty(path) {
180
234
  try {
181
- statSync(path);
182
- return true;
235
+ return readdirSync(path);
183
236
  }
184
- catch (e) {
185
- if (isMissingPathError(e))
186
- return false;
187
- throw new SchemaParseError(`Failed to read ${path}: ${errorMessage(e)}`, e);
237
+ catch {
238
+ return [];
188
239
  }
189
240
  }
190
- /** List an optional directory: `undefined` when it does not exist, `SchemaParseError` on any other failure. */
191
- function readOptionalDir(path) {
241
+ function loadFromDirectory(dir, schemaJsonPath) {
242
+ const files = readDirectory(dir, schemaJsonPath);
243
+ // Errors name the file on disk.
244
+ return loadFromFiles(files, files.physical, (file) => join(dir, file), dir);
245
+ }
246
+ function loadFromBundle(bundle, filePath) {
247
+ const physical = parsePhysicalLayer(bundle.physical, filePath);
248
+ // Errors name the bundled file and the bundle that holds it: the user has the
249
+ // bundle on disk, not a tenant-policy.md or concepts.md.
250
+ return loadFromFiles(bundle, physical, (file) => `${file} (in ${filePath})`, filePath);
251
+ }
252
+ function errorMessage(e) {
253
+ return e instanceof Error ? e.message : String(e);
254
+ }
255
+ /** List a directory the loader needs: `SchemaParseError` on any failure. */
256
+ function readRequiredDir(path) {
192
257
  try {
193
258
  return readdirSync(path);
194
259
  }
195
260
  catch (e) {
196
- if (isMissingPathError(e))
197
- return undefined;
198
261
  throw new SchemaParseError(`Failed to read directory ${path}: ${errorMessage(e)}`, e);
199
262
  }
200
263
  }
@@ -222,33 +285,34 @@ function parseOrWrap(path, fn) {
222
285
  throw new SchemaParseError(`Failed to parse ${path}: ${errorMessage(e)}`, e);
223
286
  }
224
287
  }
225
- function loadFromBundle(bundle, filePath) {
226
- const physical = parsePhysicalLayer(bundle.physical, filePath);
288
+ /**
289
+ * Parse a schema's files, read from a directory or carried in a bundle, against its
290
+ * validated physical layer. `fileLabel` turns a file's path in the schema directory
291
+ * (`tables/orders.md`, `tenant-policy.md`) into the name errors use.
292
+ */
293
+ function loadFromFiles(files, physical, fileLabel, schemaPath) {
227
294
  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})`;
231
- // Bundle keys are the `tables/` filenames (see `bundleSchemaDirectory` in
232
- // @askdb/enrich), so warnings name the same path the directory loader would.
233
- // Sorted like the directory loader's entries, so both report warnings in one order.
234
- for (const [filename, content] of Object.entries(bundle.tables).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)) {
235
- const tableFile = `tables/${filename}`;
236
- const parsed = parseOrWrap(inBundle(tableFile), () => parseTableMarkdown(content, inBundle(tableFile)));
237
- addTableMarkdown(tableMarkdowns, { tableFile, parsed }, filePath);
238
- }
239
- // Mirror the directory loader: only an *absent* key means "no file". A present
240
- // value — including an empty string — is parsed and must be valid, so an empty
241
- // or corrupt tenantPolicy can never silently disable tenant enforcement.
295
+ // `tables` keys are the `tables/` filenames, so warnings name the file as it sits in
296
+ // the directory. Sorted so both forms report warnings in one order.
297
+ for (const [filename, content] of Object.entries(files.tables).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)) {
298
+ const tableFile = `${SCHEMA_DIRECTORY_FILES.tables}/${filename}`;
299
+ const label = fileLabel(tableFile);
300
+ const parsed = parseOrWrap(label, () => parseTableMarkdown(content, label));
301
+ addTableMarkdown(tableMarkdowns, { tableFile, parsed }, schemaPath);
302
+ }
303
+ // Only an *absent* file (or bundle key) means "no file". A present value —
304
+ // including an empty string — is parsed and must be valid, so an empty or corrupt
305
+ // tenant policy can never silently disable tenant enforcement.
242
306
  let concepts;
243
- const conceptsContent = bundledFileContent(bundle, "concepts", filePath);
307
+ const conceptsContent = bundledFileContent(files, "concepts", schemaPath);
244
308
  if (conceptsContent !== undefined) {
245
- const conceptsFile = inBundle(SCHEMA_DIRECTORY_FILES.concepts);
309
+ const conceptsFile = fileLabel(SCHEMA_DIRECTORY_FILES.concepts);
246
310
  concepts = parseOrWrap(conceptsFile, () => parseConceptsMarkdown(conceptsContent, conceptsFile)).frontmatter;
247
311
  }
248
312
  let tenantPolicy;
249
- const policyContent = bundledFileContent(bundle, "tenantPolicy", filePath);
313
+ const policyContent = bundledFileContent(files, "tenantPolicy", schemaPath);
250
314
  if (policyContent !== undefined) {
251
- const policyFile = inBundle(SCHEMA_DIRECTORY_FILES.tenantPolicy);
315
+ const policyFile = fileLabel(SCHEMA_DIRECTORY_FILES.tenantPolicy);
252
316
  tenantPolicy = parseOrWrap(policyFile, () => {
253
317
  const parsed = parseTenantPolicyMarkdown(policyContent, policyFile);
254
318
  const physicalTableIds = new Set(physical.tables.map((t) => t.id));
@@ -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;;;;;;;;;;;;;;;;;;GAkBG;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,gFAAgF;IAChF,iFAAiF;IACjF,oFAAoF;IACpF,2EAA2E;IAC3E,gDAAgD;IAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,aAAa,EAAE,CAAC;QACvD,OAAO,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,iFAAiF;IACjF,kEAAkE;IAClE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACrC,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;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG;IAC7B,YAAY,EAAE,kBAAkB;IAChC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,aAAa;CACkE,CAAC;AAE5F;;;;;GAKG;AACH,SAAS,0BAA0B,CAAC,QAAgB;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACpE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAC5B,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,IAAI,gBAAgB,CACxB,oBAAoB,QAAQ,4DAA4D;QACtF,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,0DAA0D;QAC/E,sFAAsF;QACtF,8FAA8F,CACjG,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,GAAW,EACX,iBAAyB,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC;IAEjD,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,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC1D,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,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAChE,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,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAClE,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,8GAA8G;AAC9G,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,kBAAkB,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,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;;;;;GAKG;AACH,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,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,CAAC;QACvE,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;IAC/D,8EAA8E;IAC9E,yDAAyD;IACzD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,QAAQ,QAAQ,GAAG,CAAC;IAE9D,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,SAAS,GAAG,UAAU,QAAQ,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CACnD,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CACjD,CAAC;QACF,gBAAgB,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpE,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,QAAQ,CAAC,CAAC;IACzE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC/D,QAAQ,GAAG,WAAW,CAAC,YAAY,EAAE,GAAG,EAAE,CACxC,qBAAqB,CAAC,eAAe,EAAE,YAAY,CAAC,CACrD,CAAC,WAAW,CAAC;IAChB,CAAC;IAED,IAAI,YAAgD,CAAC;IACrD,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC3E,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;QACjE,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;;;;;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,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,sBAAsB,CAAC,GAAG,CAAC,sBAAsB,CACjH,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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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Write `content` (a string, written as UTF-8, or bytes written as given) to a file
3
+ * inside a schema directory so that no link can redirect the write out of it
4
+ * (ADR 0028). `relativePath` names the file from `schemaDir`
5
+ * with `/` between its parts (`schema.json`, `tables/orders.md`). Every AskDB writer
6
+ * into a schema directory goes through here: `@askdb/enrich`'s saves, Studio's
7
+ * Playground history and `.gitignore`, and `@askdb/introspect`'s `schema.json`. A
8
+ * schema directory can come from an untrusted checkout (git stores symbolic links,
9
+ * tar archives also store hard links), and Studio saves into it for as long as it
10
+ * runs.
11
+ *
12
+ * Errors read `Refusing to write <relativePath> outside the schema directory: <why>`.
13
+ *
14
+ * - `relativePath` must name a file below `schemaDir`: an empty part, `.`, `..`, a
15
+ * NUL byte, or (on Windows) `\` in a part is refused, and so is an absolute path.
16
+ * - No directory between the schema directory and the target (`tables/`), and not
17
+ * the target itself, may be a symbolic link; either one is refused. The schema
18
+ * directory itself may be one: it is the path the user chose. Directories are not
19
+ * created.
20
+ * - The content goes to a new temp file next to the target (`O_EXCL`, so it never
21
+ * opens an existing path), which is then renamed over the target. `rename`
22
+ * replaces the directory entry instead of writing into the existing file, so a
23
+ * hard link to a file elsewhere is detached, not written through, and a symbolic
24
+ * link planted at the target after the check is replaced, not followed. This
25
+ * holds on Windows too, which has no `O_NOFOLLOW`.
26
+ * - A target the caller can't write is refused with `EACCES`, as a plain write
27
+ * would be. `rename` needs only write access to the directory, so without this
28
+ * check a read-only file (how Perforce and ClearCase mark files not checked out)
29
+ * would be replaced on macOS and Linux. The temp file needs write access to the
30
+ * directory too, so a save into a directory the caller can't write fails with
31
+ * `EACCES` even when the file itself is writable.
32
+ * - The temp file gets the target's owner, group, and permission bits before any
33
+ * content is written, so a `0600` file's new content is never readable by others
34
+ * and a `0660` file stays shared with its own group, not the group a new file in
35
+ * the directory would get (`keepOwnerAndGroup`). It is `fsync`ed before the
36
+ * rename. Readers, and a crash or power loss, see either the old file or the new
37
+ * one, never a partial write.
38
+ *
39
+ * Not covered: a directory between the schema directory and the target (`tables/`)
40
+ * being swapped for a link after the check and before the rename, since the temp
41
+ * path and the rename still resolve through it. That needs a concurrent local
42
+ * writer racing a save. And only root can give a file to another user, so on macOS
43
+ * and Linux a save by someone other than the file's owner (a member of a group that
44
+ * may write it) makes the saver its owner. On Windows, the rename fails with `EPERM`
45
+ * while another process holds the target open without delete sharing.
46
+ */
47
+ export declare function saveSchemaFile(schemaDir: string, relativePath: string, content: string | Uint8Array): void;
48
+ /**
49
+ * `mode` for a file whose group could not be kept: the group and others both get
50
+ * only what both had before, so neither the group the file lands in nor the old
51
+ * group's non-members gain access (`0660` becomes `0600`, `0604` becomes `0600`).
52
+ *
53
+ * @internal Exported for its tests; `index.ts` doesn't re-export it.
54
+ */
55
+ export declare function modeWhenGroupLost(mode: number): number;
56
+ //# sourceMappingURL=save-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-file.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/save-file.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,IAAI,CAwDN;AAsBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD"}
@@ -0,0 +1,138 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { accessSync, closeSync, constants as fsConstants, fchmodSync, fchownSync, fstatSync, fsyncSync, lstatSync, openSync, renameSync, rmSync, writeFileSync, } from "node:fs";
3
+ import { join } from "node:path";
4
+ /**
5
+ * Write `content` (a string, written as UTF-8, or bytes written as given) to a file
6
+ * inside a schema directory so that no link can redirect the write out of it
7
+ * (ADR 0028). `relativePath` names the file from `schemaDir`
8
+ * with `/` between its parts (`schema.json`, `tables/orders.md`). Every AskDB writer
9
+ * into a schema directory goes through here: `@askdb/enrich`'s saves, Studio's
10
+ * Playground history and `.gitignore`, and `@askdb/introspect`'s `schema.json`. A
11
+ * schema directory can come from an untrusted checkout (git stores symbolic links,
12
+ * tar archives also store hard links), and Studio saves into it for as long as it
13
+ * runs.
14
+ *
15
+ * Errors read `Refusing to write <relativePath> outside the schema directory: <why>`.
16
+ *
17
+ * - `relativePath` must name a file below `schemaDir`: an empty part, `.`, `..`, a
18
+ * NUL byte, or (on Windows) `\` in a part is refused, and so is an absolute path.
19
+ * - No directory between the schema directory and the target (`tables/`), and not
20
+ * the target itself, may be a symbolic link; either one is refused. The schema
21
+ * directory itself may be one: it is the path the user chose. Directories are not
22
+ * created.
23
+ * - The content goes to a new temp file next to the target (`O_EXCL`, so it never
24
+ * opens an existing path), which is then renamed over the target. `rename`
25
+ * replaces the directory entry instead of writing into the existing file, so a
26
+ * hard link to a file elsewhere is detached, not written through, and a symbolic
27
+ * link planted at the target after the check is replaced, not followed. This
28
+ * holds on Windows too, which has no `O_NOFOLLOW`.
29
+ * - A target the caller can't write is refused with `EACCES`, as a plain write
30
+ * would be. `rename` needs only write access to the directory, so without this
31
+ * check a read-only file (how Perforce and ClearCase mark files not checked out)
32
+ * would be replaced on macOS and Linux. The temp file needs write access to the
33
+ * directory too, so a save into a directory the caller can't write fails with
34
+ * `EACCES` even when the file itself is writable.
35
+ * - The temp file gets the target's owner, group, and permission bits before any
36
+ * content is written, so a `0600` file's new content is never readable by others
37
+ * and a `0660` file stays shared with its own group, not the group a new file in
38
+ * the directory would get (`keepOwnerAndGroup`). It is `fsync`ed before the
39
+ * rename. Readers, and a crash or power loss, see either the old file or the new
40
+ * one, never a partial write.
41
+ *
42
+ * Not covered: a directory between the schema directory and the target (`tables/`)
43
+ * being swapped for a link after the check and before the rename, since the temp
44
+ * path and the rename still resolve through it. That needs a concurrent local
45
+ * writer racing a save. And only root can give a file to another user, so on macOS
46
+ * and Linux a save by someone other than the file's owner (a member of a group that
47
+ * may write it) makes the saver its owner. On Windows, the rename fails with `EPERM`
48
+ * while another process holds the target open without delete sharing.
49
+ */
50
+ export function saveSchemaFile(schemaDir, relativePath, content) {
51
+ const refuse = (why) => new Error(`Refusing to write ${relativePath} outside the schema directory: ${why}`);
52
+ const dirs = relativePath.split("/");
53
+ for (const part of dirs) {
54
+ if (part === "" ||
55
+ part === "." ||
56
+ part === ".." ||
57
+ part.includes("\0") ||
58
+ (process.platform === "win32" && part.includes("\\"))) {
59
+ throw refuse(`${JSON.stringify(part)} is not a file or directory name`);
60
+ }
61
+ }
62
+ const filename = dirs.pop();
63
+ let dir = schemaDir;
64
+ for (const [i, part] of dirs.entries()) {
65
+ dir = join(dir, part);
66
+ if (lstatSync(dir).isSymbolicLink()) {
67
+ throw refuse(`${dirs.slice(0, i + 1).join("/")}/ is a symbolic link`);
68
+ }
69
+ }
70
+ const filePath = join(dir, filename);
71
+ const existing = lstatSync(filePath, { throwIfNoEntry: false });
72
+ if (existing?.isSymbolicLink())
73
+ throw refuse(`${JSON.stringify(filename)} is a symbolic link`);
74
+ if (existing)
75
+ accessSync(filePath, fsConstants.W_OK);
76
+ const tempPath = join(dir, `.askdb-save-${randomBytes(8).toString("hex")}.tmp`);
77
+ const fd = openSync(tempPath, fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL, 0o666);
78
+ try {
79
+ try {
80
+ // Keep the replaced file's owner, group, and permission bits, before the content lands.
81
+ if (existing) {
82
+ const mode = existing.mode & 0o777;
83
+ const groupKept = keepOwnerAndGroup(fd, existing);
84
+ fchmodSync(fd, groupKept ? mode : modeWhenGroupLost(mode));
85
+ }
86
+ writeFileSync(fd, content);
87
+ fsyncSync(fd);
88
+ }
89
+ finally {
90
+ closeSync(fd);
91
+ }
92
+ renameSync(tempPath, filePath);
93
+ }
94
+ catch (e) {
95
+ try {
96
+ rmSync(tempPath, { force: true });
97
+ }
98
+ catch {
99
+ // Report the save's own error, not a failed cleanup (e.g. Windows EPERM).
100
+ }
101
+ throw e;
102
+ }
103
+ }
104
+ /**
105
+ * Give the file open at `fd` the owner and group of `existing`, as far as the
106
+ * process may: only root can change a file's owner, and anyone else can set only
107
+ * a group they belong to. Returns whether the group now matches; Windows has no
108
+ * POSIX owner or group, so there it is always true.
109
+ */
110
+ function keepOwnerAndGroup(fd, existing) {
111
+ if (process.platform === "win32")
112
+ return true;
113
+ const tryChown = (uid, gid) => {
114
+ try {
115
+ fchownSync(fd, uid, gid);
116
+ }
117
+ catch {
118
+ // Not permitted (or not supported by this file system); checked below.
119
+ }
120
+ };
121
+ if (fstatSync(fd).uid !== existing.uid)
122
+ tryChown(existing.uid, existing.gid);
123
+ if (fstatSync(fd).gid !== existing.gid)
124
+ tryChown(-1, existing.gid);
125
+ return fstatSync(fd).gid === existing.gid;
126
+ }
127
+ /**
128
+ * `mode` for a file whose group could not be kept: the group and others both get
129
+ * only what both had before, so neither the group the file lands in nor the old
130
+ * group's non-members gain access (`0660` becomes `0600`, `0604` becomes `0600`).
131
+ *
132
+ * @internal Exported for its tests; `index.ts` doesn't re-export it.
133
+ */
134
+ export function modeWhenGroupLost(mode) {
135
+ const shared = (mode >> 3) & mode & 0o007;
136
+ return (mode & 0o700) | (shared << 3) | shared;
137
+ }
138
+ //# sourceMappingURL=save-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-file.js","sourceRoot":"","sources":["../../../src/schema/v2/save-file.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,4 @@
1
- import { type ParsedTenantPolicyMarkdown, type NormalizedTenantPolicy, type ScopeThrough } from "./tenant-policy.js";
1
+ import { type ParsedTenantPolicyMarkdown, type NormalizedTenantPolicy } from "./tenant-policy.js";
2
2
  export declare function parseTenantPolicyMarkdown(content: string, filePath?: string): ParsedTenantPolicyMarkdown;
3
3
  export declare function normalizeTenantPolicy(parsed: ParsedTenantPolicyMarkdown, physicalTableIds: Set<string>, physicalColumnIds: Set<string>): NormalizedTenantPolicy;
4
- export declare function isScopeThroughColumn(s: ScopeThrough): s is ScopeThrough & {
5
- column: string;
6
- };
7
- export declare function isScopeThroughJoin(s: ScopeThrough): s is ScopeThrough & {
8
- join: Array<{
9
- from: string;
10
- to: string;
11
- }>;
12
- };
13
4
  //# sourceMappingURL=tenant-policy-loader.d.ts.map