@askdb/core 0.5.0-beta.0

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 (120) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +10 -0
  3. package/README.md +74 -0
  4. package/dist/ai/provider.d.ts +122 -0
  5. package/dist/ai/provider.d.ts.map +1 -0
  6. package/dist/ai/provider.js +224 -0
  7. package/dist/ai/provider.js.map +1 -0
  8. package/dist/ask.d.ts +81 -0
  9. package/dist/ask.d.ts.map +1 -0
  10. package/dist/ask.js +83 -0
  11. package/dist/ask.js.map +1 -0
  12. package/dist/enrichment/index.d.ts +4 -0
  13. package/dist/enrichment/index.d.ts.map +1 -0
  14. package/dist/enrichment/index.js +3 -0
  15. package/dist/enrichment/index.js.map +1 -0
  16. package/dist/enrichment/prompt.d.ts +4 -0
  17. package/dist/enrichment/prompt.d.ts.map +1 -0
  18. package/dist/enrichment/prompt.js +72 -0
  19. package/dist/enrichment/prompt.js.map +1 -0
  20. package/dist/enrichment/suggest.d.ts +23 -0
  21. package/dist/enrichment/suggest.d.ts.map +1 -0
  22. package/dist/enrichment/suggest.js +38 -0
  23. package/dist/enrichment/suggest.js.map +1 -0
  24. package/dist/enrichment/types.d.ts +44 -0
  25. package/dist/enrichment/types.d.ts.map +1 -0
  26. package/dist/enrichment/types.js +2 -0
  27. package/dist/enrichment/types.js.map +1 -0
  28. package/dist/errors.d.ts +21 -0
  29. package/dist/errors.d.ts.map +1 -0
  30. package/dist/errors.js +33 -0
  31. package/dist/errors.js.map +1 -0
  32. package/dist/index.d.ts +20 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +15 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/logging/askdb-logger.d.ts +13 -0
  37. package/dist/logging/askdb-logger.d.ts.map +1 -0
  38. package/dist/logging/askdb-logger.js +2 -0
  39. package/dist/logging/askdb-logger.js.map +1 -0
  40. package/dist/logging/create-askdb-logger.d.ts +25 -0
  41. package/dist/logging/create-askdb-logger.d.ts.map +1 -0
  42. package/dist/logging/create-askdb-logger.js +47 -0
  43. package/dist/logging/create-askdb-logger.js.map +1 -0
  44. package/dist/logging/log-contract.d.ts +16 -0
  45. package/dist/logging/log-contract.d.ts.map +1 -0
  46. package/dist/logging/log-contract.js +23 -0
  47. package/dist/logging/log-contract.js.map +1 -0
  48. package/dist/logging/log-events.d.ts +32 -0
  49. package/dist/logging/log-events.d.ts.map +1 -0
  50. package/dist/logging/log-events.js +31 -0
  51. package/dist/logging/log-events.js.map +1 -0
  52. package/dist/logging/pino-supported-levels.d.ts +9 -0
  53. package/dist/logging/pino-supported-levels.d.ts.map +1 -0
  54. package/dist/logging/pino-supported-levels.js +16 -0
  55. package/dist/logging/pino-supported-levels.js.map +1 -0
  56. package/dist/modes/types.d.ts +8 -0
  57. package/dist/modes/types.d.ts.map +1 -0
  58. package/dist/modes/types.js +20 -0
  59. package/dist/modes/types.js.map +1 -0
  60. package/dist/retrieval/synthesize-ddl.d.ts +29 -0
  61. package/dist/retrieval/synthesize-ddl.d.ts.map +1 -0
  62. package/dist/retrieval/synthesize-ddl.js +160 -0
  63. package/dist/retrieval/synthesize-ddl.js.map +1 -0
  64. package/dist/retrieval/types.d.ts +31 -0
  65. package/dist/retrieval/types.d.ts.map +1 -0
  66. package/dist/retrieval/types.js +2 -0
  67. package/dist/retrieval/types.js.map +1 -0
  68. package/dist/schema/format.d.ts +76 -0
  69. package/dist/schema/format.d.ts.map +1 -0
  70. package/dist/schema/format.js +20 -0
  71. package/dist/schema/format.js.map +1 -0
  72. package/dist/schema/normalize.d.ts +31 -0
  73. package/dist/schema/normalize.d.ts.map +1 -0
  74. package/dist/schema/normalize.js +89 -0
  75. package/dist/schema/normalize.js.map +1 -0
  76. package/dist/schema/parse.d.ts +5 -0
  77. package/dist/schema/parse.d.ts.map +1 -0
  78. package/dist/schema/parse.js +37 -0
  79. package/dist/schema/parse.js.map +1 -0
  80. package/dist/schema/types.d.ts +23 -0
  81. package/dist/schema/types.d.ts.map +1 -0
  82. package/dist/schema/types.js +2 -0
  83. package/dist/schema/types.js.map +1 -0
  84. package/dist/schema/v2/describable.d.ts +155 -0
  85. package/dist/schema/v2/describable.d.ts.map +1 -0
  86. package/dist/schema/v2/describable.js +44 -0
  87. package/dist/schema/v2/describable.js.map +1 -0
  88. package/dist/schema/v2/format.d.ts +15 -0
  89. package/dist/schema/v2/format.d.ts.map +1 -0
  90. package/dist/schema/v2/format.js +97 -0
  91. package/dist/schema/v2/format.js.map +1 -0
  92. package/dist/schema/v2/index.d.ts +10 -0
  93. package/dist/schema/v2/index.d.ts.map +1 -0
  94. package/dist/schema/v2/index.js +7 -0
  95. package/dist/schema/v2/index.js.map +1 -0
  96. package/dist/schema/v2/loader.d.ts +18 -0
  97. package/dist/schema/v2/loader.d.ts.map +1 -0
  98. package/dist/schema/v2/loader.js +230 -0
  99. package/dist/schema/v2/loader.js.map +1 -0
  100. package/dist/schema/v2/normalized.d.ts +58 -0
  101. package/dist/schema/v2/normalized.d.ts.map +1 -0
  102. package/dist/schema/v2/normalized.js +2 -0
  103. package/dist/schema/v2/normalized.js.map +1 -0
  104. package/dist/schema/v2/parser.d.ts +12 -0
  105. package/dist/schema/v2/parser.d.ts.map +1 -0
  106. package/dist/schema/v2/parser.js +48 -0
  107. package/dist/schema/v2/parser.js.map +1 -0
  108. package/dist/schema/v2/physical.d.ts +229 -0
  109. package/dist/schema/v2/physical.d.ts.map +1 -0
  110. package/dist/schema/v2/physical.js +28 -0
  111. package/dist/schema/v2/physical.js.map +1 -0
  112. package/dist/schema/v2/writer.d.ts +14 -0
  113. package/dist/schema/v2/writer.d.ts.map +1 -0
  114. package/dist/schema/v2/writer.js +49 -0
  115. package/dist/schema/v2/writer.js.map +1 -0
  116. package/dist/sql/extract-sql.d.ts +5 -0
  117. package/dist/sql/extract-sql.d.ts.map +1 -0
  118. package/dist/sql/extract-sql.js +12 -0
  119. package/dist/sql/extract-sql.js.map +1 -0
  120. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/schema/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAc9E;AAED,kDAAkD;AAClD,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC9C,CAAC;AAEF,+HAA+H;AAC/H,MAAM,MAAM,wBAAwB,GAAG;IACrC,kCAAkC,EAAE,OAAO,CAAC;IAC5C,0EAA0E;IAC1E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,uBAAuB,EAAE,MAAM,CAAC;IAChC,4GAA4G;IAC5G,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAmBF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,oBAAyB,GACjC;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,wBAAwB,CAAC;CACjC,CAsDA;AAED,0GAA0G;AAC1G,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAEtG"}
@@ -0,0 +1,89 @@
1
+ export function normalizeAskDbSchema(parsed) {
2
+ return {
3
+ tables: parsed.tables.map((t) => ({
4
+ name: t.name,
5
+ ...(t.sensitive === true ? { sensitive: true } : {}),
6
+ columns: t.columns.map((c) => ({
7
+ name: c.name,
8
+ type: c.type,
9
+ nullable: c.nullable ?? true,
10
+ primaryKey: c.primaryKey ?? false,
11
+ ...(c.sensitive === true ? { sensitive: true } : {}),
12
+ })),
13
+ })),
14
+ };
15
+ }
16
+ function columnLine(c, tableSensitive) {
17
+ const flags = [
18
+ c.primaryKey ? "PK" : "",
19
+ c.nullable ? "NULL" : "NOT NULL",
20
+ ]
21
+ .filter(Boolean)
22
+ .join(" ");
23
+ const base = ` - ${c.name} ${c.type}${flags ? ` (${flags})` : ""}`;
24
+ const sensitive = Boolean(tableSensitive || c.sensitive);
25
+ const listedSensitive = sensitive;
26
+ const line = sensitive ? `${base} (sensitive)` : base;
27
+ return { line, listedSensitive };
28
+ }
29
+ /**
30
+ * Format schema for LLM prompts. By default, **includes** sensitive column/table names (tagged) so NL→SQL can
31
+ * ground identifiers; set {@link FormatNlToSqlOptions.omitSensitiveIdentifiersFromPrompt} to omit them.
32
+ */
33
+ export function formatSchemaForNlToSql(schema, options = {}) {
34
+ const omit = options.omitSensitiveIdentifiersFromPrompt === true;
35
+ let redactedColumnCount = 0;
36
+ let sensitiveTableStubCount = 0;
37
+ let listedSensitiveColumnCount = 0;
38
+ const lines = [];
39
+ for (const t of schema.tables) {
40
+ lines.push(`TABLE ${t.name}`);
41
+ if (omit && t.sensitive) {
42
+ sensitiveTableStubCount++;
43
+ redactedColumnCount += t.columns.length;
44
+ lines.push(` (sensitive table — column definitions withheld from model context)`);
45
+ lines.push("");
46
+ continue;
47
+ }
48
+ if (omit) {
49
+ let visibleColumns = 0;
50
+ for (const c of t.columns) {
51
+ if (c.sensitive) {
52
+ redactedColumnCount++;
53
+ continue;
54
+ }
55
+ visibleColumns++;
56
+ const { line } = columnLine(c, false);
57
+ lines.push(line);
58
+ }
59
+ if (visibleColumns === 0 && t.columns.length > 0) {
60
+ lines.push(` (all columns marked sensitive — definitions withheld from model context)`);
61
+ }
62
+ }
63
+ else {
64
+ for (const c of t.columns) {
65
+ const { line, listedSensitive } = columnLine(c, Boolean(t.sensitive));
66
+ if (listedSensitive) {
67
+ listedSensitiveColumnCount++;
68
+ }
69
+ lines.push(line);
70
+ }
71
+ }
72
+ lines.push("");
73
+ }
74
+ const ddl = lines.join("\n").trimEnd();
75
+ return {
76
+ ddl,
77
+ stats: {
78
+ omitSensitiveIdentifiersFromPrompt: omit,
79
+ redactedColumnCount,
80
+ sensitiveTableStubCount,
81
+ listedSensitiveColumnCount,
82
+ },
83
+ };
84
+ }
85
+ /** Same DDL as {@link formatSchemaForNlToSql} with default options (sensitive names included, tagged). */
86
+ export function formatSchemaForPrompt(schema, options) {
87
+ return formatSchemaForNlToSql(schema, options).ddl;
88
+ }
89
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/schema/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { AskDbSchemaFile } from "./types.js";
2
+ import type { NormalizedSchema } from "./types.js";
3
+ export declare function parseAskDbSchemaJson(raw: string): AskDbSchemaFile;
4
+ export declare function loadNormalizedSchemaFromJson(raw: string): NormalizedSchema;
5
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/schema/parse.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CA2BjE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAE1E"}
@@ -0,0 +1,37 @@
1
+ import { SchemaParseError } from "../errors.js";
2
+ import { askDbSchemaFileSchema } from "./format.js";
3
+ import { normalizeAskDbSchema } from "./normalize.js";
4
+ export function parseAskDbSchemaJson(raw) {
5
+ try {
6
+ const data = JSON.parse(raw);
7
+ const parsed = askDbSchemaFileSchema.safeParse(data);
8
+ if (!parsed.success) {
9
+ throw new SchemaParseError(parsed.error.message, parsed.error);
10
+ }
11
+ const seenTables = new Set();
12
+ for (const table of parsed.data.tables) {
13
+ if (seenTables.has(table.name)) {
14
+ throw new SchemaParseError(`Duplicate table name: ${table.name}`);
15
+ }
16
+ seenTables.add(table.name);
17
+ const cols = new Set();
18
+ for (const col of table.columns) {
19
+ if (cols.has(col.name)) {
20
+ throw new SchemaParseError(`Duplicate column '${col.name}' in table '${table.name}'`);
21
+ }
22
+ cols.add(col.name);
23
+ }
24
+ }
25
+ return parsed.data;
26
+ }
27
+ catch (e) {
28
+ if (e instanceof SchemaParseError)
29
+ throw e;
30
+ const message = e instanceof Error ? e.message : String(e);
31
+ throw new SchemaParseError(`Failed to parse schema JSON: ${message}`, e);
32
+ }
33
+ }
34
+ export function loadNormalizedSchemaFromJson(raw) {
35
+ return normalizeAskDbSchema(parseAskDbSchemaJson(raw));
36
+ }
37
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/schema/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,gBAAgB,CAAC,yBAAyB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,GAAG,CAAC,IAAI,eAAe,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;gBACxF,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,gBAAgB;YAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,gBAAgB,CAAC,gCAAgC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAW;IACtD,OAAO,oBAAoB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import { askDbSchemaFileSchema } from "./format.js";
3
+ import type { NormalizedSchemaV2 } from "./v2/normalized.js";
4
+ export type AskDbSchemaFile = z.infer<typeof askDbSchemaFileSchema>;
5
+ /** Normalized, describable-schema-friendly shape used by prompts and tooling. */
6
+ export type NormalizedSchema = {
7
+ tables: Array<{
8
+ name: string;
9
+ /** Entire table withheld from NL→SQL prompt DDL (optional Phase 2 `sensitive`). */
10
+ sensitive?: boolean;
11
+ columns: Array<{
12
+ name: string;
13
+ type: string;
14
+ nullable: boolean;
15
+ primaryKey: boolean;
16
+ /** Column omitted from NL→SQL prompt DDL when true. */
17
+ sensitive?: boolean;
18
+ }>;
19
+ }>;
20
+ };
21
+ /** Schema shape accepted by the dialect-agnostic pipeline (covers both v1 and v2 normalized forms). */
22
+ export type AnyNormalizedSchema = NormalizedSchema | NormalizedSchemaV2;
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,iFAAiF;AACjF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,mFAAmF;QACnF,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,OAAO,CAAC;YAClB,UAAU,EAAE,OAAO,CAAC;YACpB,uDAAuD;YACvD,SAAS,CAAC,EAAE,OAAO,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,155 @@
1
+ import { z } from "zod";
2
+ export declare const v2ColumnFrontmatterSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
5
+ enum: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
+ description: z.ZodOptional<z.ZodString>;
7
+ sensitive: z.ZodOptional<z.ZodBoolean>;
8
+ }, "strict", z.ZodTypeAny, {
9
+ id: string;
10
+ sensitive?: boolean | undefined;
11
+ aliases?: string[] | undefined;
12
+ enum?: string[] | undefined;
13
+ description?: string | undefined;
14
+ }, {
15
+ id: string;
16
+ sensitive?: boolean | undefined;
17
+ aliases?: string[] | undefined;
18
+ enum?: string[] | undefined;
19
+ description?: string | undefined;
20
+ }>;
21
+ export declare const v2TableFrontmatterSchema: z.ZodObject<{
22
+ id: z.ZodString;
23
+ name: z.ZodString;
24
+ schemaId: z.ZodString;
25
+ primaryEntity: z.ZodOptional<z.ZodString>;
26
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
27
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
28
+ sensitive: z.ZodOptional<z.ZodBoolean>;
29
+ columns: z.ZodOptional<z.ZodArray<z.ZodObject<{
30
+ id: z.ZodString;
31
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
32
+ enum: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
33
+ description: z.ZodOptional<z.ZodString>;
34
+ sensitive: z.ZodOptional<z.ZodBoolean>;
35
+ }, "strict", z.ZodTypeAny, {
36
+ id: string;
37
+ sensitive?: boolean | undefined;
38
+ aliases?: string[] | undefined;
39
+ enum?: string[] | undefined;
40
+ description?: string | undefined;
41
+ }, {
42
+ id: string;
43
+ sensitive?: boolean | undefined;
44
+ aliases?: string[] | undefined;
45
+ enum?: string[] | undefined;
46
+ description?: string | undefined;
47
+ }>, "many">>;
48
+ }, "strict", z.ZodTypeAny, {
49
+ name: string;
50
+ id: string;
51
+ schemaId: string;
52
+ sensitive?: boolean | undefined;
53
+ columns?: {
54
+ id: string;
55
+ sensitive?: boolean | undefined;
56
+ aliases?: string[] | undefined;
57
+ enum?: string[] | undefined;
58
+ description?: string | undefined;
59
+ }[] | undefined;
60
+ aliases?: string[] | undefined;
61
+ primaryEntity?: string | undefined;
62
+ tags?: string[] | undefined;
63
+ }, {
64
+ name: string;
65
+ id: string;
66
+ schemaId: string;
67
+ sensitive?: boolean | undefined;
68
+ columns?: {
69
+ id: string;
70
+ sensitive?: boolean | undefined;
71
+ aliases?: string[] | undefined;
72
+ enum?: string[] | undefined;
73
+ description?: string | undefined;
74
+ }[] | undefined;
75
+ aliases?: string[] | undefined;
76
+ primaryEntity?: string | undefined;
77
+ tags?: string[] | undefined;
78
+ }>;
79
+ export type V2TableFrontmatter = z.infer<typeof v2TableFrontmatterSchema>;
80
+ export type V2ColumnFrontmatter = z.infer<typeof v2ColumnFrontmatterSchema>;
81
+ export declare const v2ConceptSchema: z.ZodObject<{
82
+ id: z.ZodString;
83
+ label: z.ZodString;
84
+ synonyms: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
85
+ links: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
86
+ description: z.ZodOptional<z.ZodString>;
87
+ }, "strict", z.ZodTypeAny, {
88
+ id: string;
89
+ label: string;
90
+ description?: string | undefined;
91
+ synonyms?: string[] | undefined;
92
+ links?: string[] | undefined;
93
+ }, {
94
+ id: string;
95
+ label: string;
96
+ description?: string | undefined;
97
+ synonyms?: string[] | undefined;
98
+ links?: string[] | undefined;
99
+ }>;
100
+ export declare const v2ConceptsFrontmatterSchema: z.ZodObject<{
101
+ concepts: z.ZodArray<z.ZodObject<{
102
+ id: z.ZodString;
103
+ label: z.ZodString;
104
+ synonyms: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
105
+ links: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
106
+ description: z.ZodOptional<z.ZodString>;
107
+ }, "strict", z.ZodTypeAny, {
108
+ id: string;
109
+ label: string;
110
+ description?: string | undefined;
111
+ synonyms?: string[] | undefined;
112
+ links?: string[] | undefined;
113
+ }, {
114
+ id: string;
115
+ label: string;
116
+ description?: string | undefined;
117
+ synonyms?: string[] | undefined;
118
+ links?: string[] | undefined;
119
+ }>, "many">;
120
+ }, "strict", z.ZodTypeAny, {
121
+ concepts: {
122
+ id: string;
123
+ label: string;
124
+ description?: string | undefined;
125
+ synonyms?: string[] | undefined;
126
+ links?: string[] | undefined;
127
+ }[];
128
+ }, {
129
+ concepts: {
130
+ id: string;
131
+ label: string;
132
+ description?: string | undefined;
133
+ synonyms?: string[] | undefined;
134
+ links?: string[] | undefined;
135
+ }[];
136
+ }>;
137
+ export type V2Concept = z.infer<typeof v2ConceptSchema>;
138
+ export type V2ConceptsFrontmatter = z.infer<typeof v2ConceptsFrontmatterSchema>;
139
+ /** Recognized H2 section headings in table markdown files. */
140
+ export declare const RECOGNIZED_H2_SECTIONS: readonly ["Common query language", "Example questions", "Business context", "Column notes"];
141
+ export type RecognizedH2Section = (typeof RECOGNIZED_H2_SECTIONS)[number];
142
+ /** Parsed representation of a `tables/<table>.md` file. */
143
+ export type ParsedTableMarkdown = {
144
+ frontmatter: V2TableFrontmatter;
145
+ /** Verbatim markdown body (everything after the closing `---`). */
146
+ body: string;
147
+ /** Recognized H2 section bodies, keyed by heading (case-normalized). */
148
+ sections: Partial<Record<RecognizedH2Section, string>>;
149
+ };
150
+ /** Parsed representation of `concepts.md`. */
151
+ export type ParsedConceptsMarkdown = {
152
+ frontmatter: V2ConceptsFrontmatter;
153
+ body: string;
154
+ };
155
+ //# sourceMappingURL=describable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describable.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/describable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;EAQ3B,CAAC;AAEZ,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW1B,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAQjB,CAAC;AAEZ,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI7B,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,6FAKzB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,2DAA2D;AAC3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD,CAAC;AAEF,8CAA8C;AAC9C,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,qBAAqB,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { z } from "zod";
2
+ export const v2ColumnFrontmatterSchema = z
3
+ .object({
4
+ id: z.string().min(1),
5
+ aliases: z.array(z.string()).optional(),
6
+ enum: z.array(z.string()).optional(),
7
+ description: z.string().optional(),
8
+ sensitive: z.boolean().optional(),
9
+ })
10
+ .strict();
11
+ export const v2TableFrontmatterSchema = z
12
+ .object({
13
+ id: z.string().min(1),
14
+ name: z.string().min(1),
15
+ schemaId: z.string().min(1),
16
+ primaryEntity: z.string().optional(),
17
+ aliases: z.array(z.string()).optional(),
18
+ tags: z.array(z.string()).optional(),
19
+ sensitive: z.boolean().optional(),
20
+ columns: z.array(v2ColumnFrontmatterSchema).optional(),
21
+ })
22
+ .strict();
23
+ export const v2ConceptSchema = z
24
+ .object({
25
+ id: z.string().min(1),
26
+ label: z.string().min(1),
27
+ synonyms: z.array(z.string()).optional(),
28
+ links: z.array(z.string()).optional(),
29
+ description: z.string().optional(),
30
+ })
31
+ .strict();
32
+ export const v2ConceptsFrontmatterSchema = z
33
+ .object({
34
+ concepts: z.array(v2ConceptSchema),
35
+ })
36
+ .strict();
37
+ /** Recognized H2 section headings in table markdown files. */
38
+ export const RECOGNIZED_H2_SECTIONS = [
39
+ "Common query language",
40
+ "Example questions",
41
+ "Business context",
42
+ "Column notes",
43
+ ];
44
+ //# sourceMappingURL=describable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describable.js","sourceRoot":"","sources":["../../../src/schema/v2/describable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC;KACD,MAAM,EAAE,CAAC;AAKZ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC;KACzC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAKZ,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,uBAAuB;IACvB,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;CACN,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { NormalizedSchemaV2 } from "./normalized.js";
2
+ import type { FormatNlToSqlOptions, NlToSqlSchemaFormatStats } from "../normalize.js";
3
+ /**
4
+ * Format a NormalizedSchemaV2 for NL→SQL prompts.
5
+ *
6
+ * Interleaves table descriptions, aliases, column descriptions, and
7
+ * `Common query language` blocks when present in the describable layer.
8
+ * Sensitive describable-layer fields (descriptions/aliases/enum) are
9
+ * excluded per the schema-v2 contract.
10
+ */
11
+ export declare function formatSchemaV2ForNlToSql(schema: NormalizedSchemaV2, options?: FormatNlToSqlOptions): {
12
+ ddl: string;
13
+ stats: NlToSqlSchemaFormatStats;
14
+ };
15
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEtF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,oBAAyB,GACjC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CAAE,CAsElD"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Format a NormalizedSchemaV2 for NL→SQL prompts.
3
+ *
4
+ * Interleaves table descriptions, aliases, column descriptions, and
5
+ * `Common query language` blocks when present in the describable layer.
6
+ * Sensitive describable-layer fields (descriptions/aliases/enum) are
7
+ * excluded per the schema-v2 contract.
8
+ */
9
+ export function formatSchemaV2ForNlToSql(schema, options = {}) {
10
+ const omit = options.omitSensitiveIdentifiersFromPrompt === true;
11
+ let redactedColumnCount = 0;
12
+ let sensitiveTableStubCount = 0;
13
+ let listedSensitiveColumnCount = 0;
14
+ const lines = [];
15
+ for (const t of schema.tables) {
16
+ // Table header — always qualify with database schema name; add alias annotation when present
17
+ const qualifiedName = `${t.schema}.${t.name}`;
18
+ const aliasNote = !t.sensitive && t.aliases?.length
19
+ ? ` -- aliases: ${t.aliases.join(", ")}`
20
+ : "";
21
+ lines.push(`TABLE ${qualifiedName}${aliasNote}`);
22
+ // Table description as a comment line
23
+ if (!t.sensitive && t.description) {
24
+ lines.push(`-- ${t.description}`);
25
+ }
26
+ if (omit && t.sensitive) {
27
+ sensitiveTableStubCount++;
28
+ redactedColumnCount += t.columns.length;
29
+ lines.push(` (sensitive table — column definitions withheld from model context)`);
30
+ lines.push("");
31
+ continue;
32
+ }
33
+ if (omit) {
34
+ let visibleColumns = 0;
35
+ for (const c of t.columns) {
36
+ if (c.sensitive) {
37
+ redactedColumnCount++;
38
+ continue;
39
+ }
40
+ visibleColumns++;
41
+ lines.push(buildColumnLine(c, false, false));
42
+ }
43
+ if (visibleColumns === 0 && t.columns.length > 0) {
44
+ lines.push(` (all columns marked sensitive — definitions withheld from model context)`);
45
+ }
46
+ }
47
+ else {
48
+ for (const c of t.columns) {
49
+ if (c.sensitive)
50
+ listedSensitiveColumnCount++;
51
+ lines.push(buildColumnLine(c, c.sensitive, t.sensitive));
52
+ }
53
+ }
54
+ // Common query language block
55
+ if (!t.sensitive && t.commonQueryLanguage) {
56
+ lines.push(`-- common query language --`);
57
+ for (const cqlLine of t.commonQueryLanguage.split("\n")) {
58
+ lines.push(`-- ${cqlLine}`);
59
+ }
60
+ }
61
+ lines.push("");
62
+ }
63
+ const ddl = lines.join("\n").trimEnd();
64
+ return {
65
+ ddl,
66
+ stats: {
67
+ omitSensitiveIdentifiersFromPrompt: omit,
68
+ redactedColumnCount,
69
+ sensitiveTableStubCount,
70
+ listedSensitiveColumnCount,
71
+ },
72
+ };
73
+ }
74
+ function buildColumnLine(c, colSensitive, tableSensitive) {
75
+ const effective = colSensitive || tableSensitive;
76
+ const flags = [c.primaryKey ? "PK" : "", c.nullable ? "NULL" : "NOT NULL"]
77
+ .filter(Boolean)
78
+ .join(" ");
79
+ let line = ` - ${c.name} ${c.type}${flags ? ` (${flags})` : ""}`;
80
+ if (effective) {
81
+ line += " (sensitive)";
82
+ }
83
+ else {
84
+ // Append column description when present (describable-layer enrichment)
85
+ const extras = [];
86
+ if (c.aliases?.length)
87
+ extras.push(`aliases: ${c.aliases.join(", ")}`);
88
+ if (c.enum?.length)
89
+ extras.push(`values: ${c.enum.join("|")}`);
90
+ if (c.description)
91
+ extras.push(c.description);
92
+ if (extras.length)
93
+ line += ` -- ${extras.join("; ")}`;
94
+ }
95
+ return line;
96
+ }
97
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/schema/v2/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { loadSchema, loadSchemaFromJson } from "./loader.js";
2
+ export { parseTableMarkdown, parseConceptsMarkdown } from "./parser.js";
3
+ export { writeTableMarkdown, writeConceptsMarkdown } from "./writer.js";
4
+ export { formatSchemaV2ForNlToSql } from "./format.js";
5
+ export { v2SchemaJsonSchema, v2TableSchema, v2ColumnSchema } from "./physical.js";
6
+ export type { V2SchemaJson, V2Table, V2Column } from "./physical.js";
7
+ export { v2TableFrontmatterSchema, v2ColumnFrontmatterSchema, v2ConceptsFrontmatterSchema, v2ConceptSchema, RECOGNIZED_H2_SECTIONS, } from "./describable.js";
8
+ export type { V2TableFrontmatter, V2ColumnFrontmatter, V2ConceptsFrontmatter, V2Concept, ParsedTableMarkdown, ParsedConceptsMarkdown, RecognizedH2Section, } from "./describable.js";
9
+ export type { NormalizedSchemaV2, NormalizedV2Table, NormalizedV2Column, SchemaV2Warning, } from "./normalized.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAClF,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { loadSchema, loadSchemaFromJson } from "./loader.js";
2
+ export { parseTableMarkdown, parseConceptsMarkdown } from "./parser.js";
3
+ export { writeTableMarkdown, writeConceptsMarkdown } from "./writer.js";
4
+ export { formatSchemaV2ForNlToSql } from "./format.js";
5
+ export { v2SchemaJsonSchema, v2TableSchema, v2ColumnSchema } from "./physical.js";
6
+ export { v2TableFrontmatterSchema, v2ColumnFrontmatterSchema, v2ConceptsFrontmatterSchema, v2ConceptSchema, RECOGNIZED_H2_SECTIONS, } from "./describable.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schema/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAElF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,sBAAsB,GACvB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { NormalizedSchemaV2 } from "./normalized.js";
2
+ /**
3
+ * Load a Schema v2 artifact from a raw JSON string.
4
+ *
5
+ * Accepts a bundled JSON (has `bundled: true`) or a bare `schema.json` blob.
6
+ * Rejects the pre-v2 format with a clear error.
7
+ */
8
+ export declare function loadSchemaFromJson(raw: string): NormalizedSchemaV2;
9
+ /**
10
+ * Load a Schema v2 artifact from disk.
11
+ *
12
+ * Autodetects between:
13
+ * - A v2 directory (`<schemaId>.schema/`) containing `schema.json`
14
+ * - A bundled JSON file (`*.bundle.json` or any JSON with `bundled: true`)
15
+ * - A direct path to a `schema.json` inside a directory
16
+ */
17
+ export declare function loadSchema(path: string): NormalizedSchemaV2;
18
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,iBAAiB,CAAC;AAWzB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAYlE;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAwB3D"}