@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.
- package/LICENSE +201 -0
- package/NOTICE +10 -0
- package/README.md +74 -0
- package/dist/ai/provider.d.ts +122 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +224 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ask.d.ts +81 -0
- package/dist/ask.d.ts.map +1 -0
- package/dist/ask.js +83 -0
- package/dist/ask.js.map +1 -0
- package/dist/enrichment/index.d.ts +4 -0
- package/dist/enrichment/index.d.ts.map +1 -0
- package/dist/enrichment/index.js +3 -0
- package/dist/enrichment/index.js.map +1 -0
- package/dist/enrichment/prompt.d.ts +4 -0
- package/dist/enrichment/prompt.d.ts.map +1 -0
- package/dist/enrichment/prompt.js +72 -0
- package/dist/enrichment/prompt.js.map +1 -0
- package/dist/enrichment/suggest.d.ts +23 -0
- package/dist/enrichment/suggest.d.ts.map +1 -0
- package/dist/enrichment/suggest.js +38 -0
- package/dist/enrichment/suggest.js.map +1 -0
- package/dist/enrichment/types.d.ts +44 -0
- package/dist/enrichment/types.d.ts.map +1 -0
- package/dist/enrichment/types.js +2 -0
- package/dist/enrichment/types.js.map +1 -0
- package/dist/errors.d.ts +21 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +33 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/askdb-logger.d.ts +13 -0
- package/dist/logging/askdb-logger.d.ts.map +1 -0
- package/dist/logging/askdb-logger.js +2 -0
- package/dist/logging/askdb-logger.js.map +1 -0
- package/dist/logging/create-askdb-logger.d.ts +25 -0
- package/dist/logging/create-askdb-logger.d.ts.map +1 -0
- package/dist/logging/create-askdb-logger.js +47 -0
- package/dist/logging/create-askdb-logger.js.map +1 -0
- package/dist/logging/log-contract.d.ts +16 -0
- package/dist/logging/log-contract.d.ts.map +1 -0
- package/dist/logging/log-contract.js +23 -0
- package/dist/logging/log-contract.js.map +1 -0
- package/dist/logging/log-events.d.ts +32 -0
- package/dist/logging/log-events.d.ts.map +1 -0
- package/dist/logging/log-events.js +31 -0
- package/dist/logging/log-events.js.map +1 -0
- package/dist/logging/pino-supported-levels.d.ts +9 -0
- package/dist/logging/pino-supported-levels.d.ts.map +1 -0
- package/dist/logging/pino-supported-levels.js +16 -0
- package/dist/logging/pino-supported-levels.js.map +1 -0
- package/dist/modes/types.d.ts +8 -0
- package/dist/modes/types.d.ts.map +1 -0
- package/dist/modes/types.js +20 -0
- package/dist/modes/types.js.map +1 -0
- package/dist/retrieval/synthesize-ddl.d.ts +29 -0
- package/dist/retrieval/synthesize-ddl.d.ts.map +1 -0
- package/dist/retrieval/synthesize-ddl.js +160 -0
- package/dist/retrieval/synthesize-ddl.js.map +1 -0
- package/dist/retrieval/types.d.ts +31 -0
- package/dist/retrieval/types.d.ts.map +1 -0
- package/dist/retrieval/types.js +2 -0
- package/dist/retrieval/types.js.map +1 -0
- package/dist/schema/format.d.ts +76 -0
- package/dist/schema/format.d.ts.map +1 -0
- package/dist/schema/format.js +20 -0
- package/dist/schema/format.js.map +1 -0
- package/dist/schema/normalize.d.ts +31 -0
- package/dist/schema/normalize.d.ts.map +1 -0
- package/dist/schema/normalize.js +89 -0
- package/dist/schema/normalize.js.map +1 -0
- package/dist/schema/parse.d.ts +5 -0
- package/dist/schema/parse.d.ts.map +1 -0
- package/dist/schema/parse.js +37 -0
- package/dist/schema/parse.js.map +1 -0
- package/dist/schema/types.d.ts +23 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +2 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/schema/v2/describable.d.ts +155 -0
- package/dist/schema/v2/describable.d.ts.map +1 -0
- package/dist/schema/v2/describable.js +44 -0
- package/dist/schema/v2/describable.js.map +1 -0
- package/dist/schema/v2/format.d.ts +15 -0
- package/dist/schema/v2/format.d.ts.map +1 -0
- package/dist/schema/v2/format.js +97 -0
- package/dist/schema/v2/format.js.map +1 -0
- package/dist/schema/v2/index.d.ts +10 -0
- package/dist/schema/v2/index.d.ts.map +1 -0
- package/dist/schema/v2/index.js +7 -0
- package/dist/schema/v2/index.js.map +1 -0
- package/dist/schema/v2/loader.d.ts +18 -0
- package/dist/schema/v2/loader.d.ts.map +1 -0
- package/dist/schema/v2/loader.js +230 -0
- package/dist/schema/v2/loader.js.map +1 -0
- package/dist/schema/v2/normalized.d.ts +58 -0
- package/dist/schema/v2/normalized.d.ts.map +1 -0
- package/dist/schema/v2/normalized.js +2 -0
- package/dist/schema/v2/normalized.js.map +1 -0
- package/dist/schema/v2/parser.d.ts +12 -0
- package/dist/schema/v2/parser.d.ts.map +1 -0
- package/dist/schema/v2/parser.js +48 -0
- package/dist/schema/v2/parser.js.map +1 -0
- package/dist/schema/v2/physical.d.ts +229 -0
- package/dist/schema/v2/physical.d.ts.map +1 -0
- package/dist/schema/v2/physical.js +28 -0
- package/dist/schema/v2/physical.js.map +1 -0
- package/dist/schema/v2/writer.d.ts +14 -0
- package/dist/schema/v2/writer.d.ts.map +1 -0
- package/dist/schema/v2/writer.js +49 -0
- package/dist/schema/v2/writer.js.map +1 -0
- package/dist/sql/extract-sql.d.ts +5 -0
- package/dist/sql/extract-sql.d.ts.map +1 -0
- package/dist/sql/extract-sql.js +12 -0
- package/dist/sql/extract-sql.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { SchemaParseError } from "../../errors.js";
|
|
4
|
+
import { parseConceptsMarkdown, parseTableMarkdown } from "./parser.js";
|
|
5
|
+
import { v2SchemaJsonSchema } from "./physical.js";
|
|
6
|
+
/**
|
|
7
|
+
* Load a Schema v2 artifact from a raw JSON string.
|
|
8
|
+
*
|
|
9
|
+
* Accepts a bundled JSON (has `bundled: true`) or a bare `schema.json` blob.
|
|
10
|
+
* Rejects the pre-v2 format with a clear error.
|
|
11
|
+
*/
|
|
12
|
+
export function loadSchemaFromJson(raw) {
|
|
13
|
+
let parsed;
|
|
14
|
+
try {
|
|
15
|
+
parsed = JSON.parse(raw);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
throw new SchemaParseError("Failed to parse schema JSON string");
|
|
19
|
+
}
|
|
20
|
+
if (typeof parsed === "object" && parsed !== null && "bundled" in parsed) {
|
|
21
|
+
return loadFromBundle(parsed, "<inline JSON>");
|
|
22
|
+
}
|
|
23
|
+
const physical = parsePhysicalLayer(parsed, "<inline JSON>");
|
|
24
|
+
return buildNormalized(physical, {}, undefined, []);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Load a Schema v2 artifact from disk.
|
|
28
|
+
*
|
|
29
|
+
* Autodetects between:
|
|
30
|
+
* - A v2 directory (`<schemaId>.schema/`) containing `schema.json`
|
|
31
|
+
* - A bundled JSON file (`*.bundle.json` or any JSON with `bundled: true`)
|
|
32
|
+
* - A direct path to a `schema.json` inside a directory
|
|
33
|
+
*/
|
|
34
|
+
export function loadSchema(path) {
|
|
35
|
+
const resolved = resolve(path);
|
|
36
|
+
const stat = statSync(resolved);
|
|
37
|
+
if (stat.isDirectory()) {
|
|
38
|
+
return loadFromDirectory(resolved);
|
|
39
|
+
}
|
|
40
|
+
const raw = readFileSync(resolved, "utf8");
|
|
41
|
+
let parsed;
|
|
42
|
+
try {
|
|
43
|
+
parsed = JSON.parse(raw);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
throw new SchemaParseError(`Failed to parse JSON at ${resolved}`);
|
|
47
|
+
}
|
|
48
|
+
// Could be a bundled JSON or a bare schema.json
|
|
49
|
+
if (typeof parsed === "object" && parsed !== null && "bundled" in parsed) {
|
|
50
|
+
return loadFromBundle(parsed, resolved);
|
|
51
|
+
}
|
|
52
|
+
// Bare schema.json — treat enclosing directory as the schema directory
|
|
53
|
+
const physical = parsePhysicalLayer(parsed, resolved);
|
|
54
|
+
return buildNormalized(physical, {}, undefined, []);
|
|
55
|
+
}
|
|
56
|
+
function loadFromDirectory(dir) {
|
|
57
|
+
const schemaJsonPath = join(dir, "schema.json");
|
|
58
|
+
let raw;
|
|
59
|
+
try {
|
|
60
|
+
raw = readFileSync(schemaJsonPath, "utf8");
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new SchemaParseError(`No schema.json found in directory: ${dir}`);
|
|
64
|
+
}
|
|
65
|
+
let parsed;
|
|
66
|
+
try {
|
|
67
|
+
parsed = JSON.parse(raw);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
throw new SchemaParseError(`Failed to parse schema.json in ${dir}`);
|
|
71
|
+
}
|
|
72
|
+
const physical = parsePhysicalLayer(parsed, schemaJsonPath);
|
|
73
|
+
// Load tables/*.md
|
|
74
|
+
const tableDir = join(dir, "tables");
|
|
75
|
+
const tableMarkdowns = {};
|
|
76
|
+
try {
|
|
77
|
+
const entries = readdirSync(tableDir);
|
|
78
|
+
for (const entry of entries) {
|
|
79
|
+
if (!entry.endsWith(".md"))
|
|
80
|
+
continue;
|
|
81
|
+
const filePath = join(tableDir, entry);
|
|
82
|
+
const content = readFileSync(filePath, "utf8");
|
|
83
|
+
const parsed = parseTableMarkdown(content, filePath);
|
|
84
|
+
tableMarkdowns[parsed.frontmatter.id] = parsed;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
// tables/ directory is optional; only rethrow SchemaParseError
|
|
89
|
+
if (e instanceof SchemaParseError)
|
|
90
|
+
throw e;
|
|
91
|
+
}
|
|
92
|
+
// Load optional concepts.md
|
|
93
|
+
let concepts;
|
|
94
|
+
try {
|
|
95
|
+
const conceptsPath = join(dir, "concepts.md");
|
|
96
|
+
const content = readFileSync(conceptsPath, "utf8");
|
|
97
|
+
concepts = parseConceptsMarkdown(content, conceptsPath).frontmatter;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// optional
|
|
101
|
+
}
|
|
102
|
+
return buildNormalized(physical, tableMarkdowns, concepts, []);
|
|
103
|
+
}
|
|
104
|
+
function loadFromBundle(bundle, filePath) {
|
|
105
|
+
const physical = parsePhysicalLayer(bundle.physical, filePath);
|
|
106
|
+
const tableMarkdowns = {};
|
|
107
|
+
for (const [filename, content] of Object.entries(bundle.tables)) {
|
|
108
|
+
const parsed = parseTableMarkdown(content, filename);
|
|
109
|
+
tableMarkdowns[parsed.frontmatter.id] = parsed;
|
|
110
|
+
}
|
|
111
|
+
let concepts;
|
|
112
|
+
if (bundle.concepts) {
|
|
113
|
+
concepts = parseConceptsMarkdown(bundle.concepts, "concepts.md").frontmatter;
|
|
114
|
+
}
|
|
115
|
+
return buildNormalized(physical, tableMarkdowns, concepts, []);
|
|
116
|
+
}
|
|
117
|
+
function parsePhysicalLayer(data, filePath) {
|
|
118
|
+
// Detect and reject pre-v2 format
|
|
119
|
+
if (typeof data === "object" &&
|
|
120
|
+
data !== null &&
|
|
121
|
+
"version" in data &&
|
|
122
|
+
data.version === 1) {
|
|
123
|
+
throw new SchemaParseError(`AskDB schema format \`version: 1\` is not supported as of \`@askdb/core@0.2.0\`. ` +
|
|
124
|
+
`Migrate to Schema v2 format. See \`docs/contracts/schema-v2.md\` for the format contract.`);
|
|
125
|
+
}
|
|
126
|
+
const result = v2SchemaJsonSchema.safeParse(data);
|
|
127
|
+
if (!result.success) {
|
|
128
|
+
throw new SchemaParseError(`Invalid schema.json at ${filePath}: ${result.error.message}`, result.error);
|
|
129
|
+
}
|
|
130
|
+
return result.data;
|
|
131
|
+
}
|
|
132
|
+
function buildNormalized(physical, tableMarkdowns, concepts, extraWarnings) {
|
|
133
|
+
const warnings = [...extraWarnings];
|
|
134
|
+
// Build a map of all physical table ids and column ids for ID validation
|
|
135
|
+
const physicalTableIds = new Set(physical.tables.map((t) => t.id));
|
|
136
|
+
const physicalColumnIds = new Set(physical.tables.flatMap((t) => t.columns.map((c) => c.id)));
|
|
137
|
+
// Validate all table markdown IDs against physical layer
|
|
138
|
+
for (const [id, parsed] of Object.entries(tableMarkdowns)) {
|
|
139
|
+
if (!physicalTableIds.has(id)) {
|
|
140
|
+
warnings.push({ kind: "orphaned_table_id", tableFile: `tables/${parsed.frontmatter.name}.md`, id });
|
|
141
|
+
}
|
|
142
|
+
for (const col of parsed.frontmatter.columns ?? []) {
|
|
143
|
+
if (!physicalColumnIds.has(col.id)) {
|
|
144
|
+
warnings.push({ kind: "orphaned_column_id", tableFile: `tables/${parsed.frontmatter.name}.md`, id: col.id });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const tables = physical.tables.map((physTable) => {
|
|
149
|
+
const md = tableMarkdowns[physTable.id];
|
|
150
|
+
const tableSensitive = physTable.sensitive === true;
|
|
151
|
+
const columns = physTable.columns.map((physCol) => {
|
|
152
|
+
const colSensitive = physCol.sensitive === true || tableSensitive;
|
|
153
|
+
const mdCol = md?.frontmatter.columns?.find((c) => c.id === physCol.id);
|
|
154
|
+
const normalized = {
|
|
155
|
+
id: physCol.id,
|
|
156
|
+
name: physCol.name,
|
|
157
|
+
type: physCol.type,
|
|
158
|
+
nullable: physCol.nullable,
|
|
159
|
+
primaryKey: physCol.primaryKey ?? false,
|
|
160
|
+
sensitive: colSensitive,
|
|
161
|
+
};
|
|
162
|
+
// Describable-layer fields excluded when sensitive
|
|
163
|
+
if (!colSensitive && mdCol) {
|
|
164
|
+
if (mdCol.description !== undefined)
|
|
165
|
+
normalized.description = mdCol.description;
|
|
166
|
+
if (mdCol.aliases?.length)
|
|
167
|
+
normalized.aliases = mdCol.aliases;
|
|
168
|
+
if (mdCol.enum?.length)
|
|
169
|
+
normalized.enum = mdCol.enum;
|
|
170
|
+
}
|
|
171
|
+
return normalized;
|
|
172
|
+
});
|
|
173
|
+
const normalized = {
|
|
174
|
+
id: physTable.id,
|
|
175
|
+
name: physTable.name,
|
|
176
|
+
schema: physTable.schema,
|
|
177
|
+
sensitive: tableSensitive,
|
|
178
|
+
columns,
|
|
179
|
+
relationships: physTable.relationships,
|
|
180
|
+
};
|
|
181
|
+
// Table-level describable fields excluded when sensitive
|
|
182
|
+
if (!tableSensitive && md) {
|
|
183
|
+
const fm = md.frontmatter;
|
|
184
|
+
if (fm.aliases?.length)
|
|
185
|
+
normalized.aliases = fm.aliases;
|
|
186
|
+
if (fm.primaryEntity)
|
|
187
|
+
normalized.primaryEntity = fm.primaryEntity;
|
|
188
|
+
// First paragraph of body is the table description
|
|
189
|
+
const firstParagraph = extractFirstParagraph(md.body);
|
|
190
|
+
if (firstParagraph)
|
|
191
|
+
normalized.description = firstParagraph;
|
|
192
|
+
const cql = md.sections["Common query language"];
|
|
193
|
+
if (cql?.trim())
|
|
194
|
+
normalized.commonQueryLanguage = cql.trim();
|
|
195
|
+
}
|
|
196
|
+
return normalized;
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
schemaId: physical.schemaId,
|
|
200
|
+
tables,
|
|
201
|
+
concepts: concepts?.concepts,
|
|
202
|
+
warnings,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/** Extract the first non-heading, non-empty paragraph from a markdown body. */
|
|
206
|
+
function extractFirstParagraph(body) {
|
|
207
|
+
const lines = body.split("\n");
|
|
208
|
+
const paragraphLines = [];
|
|
209
|
+
let inParagraph = false;
|
|
210
|
+
let seenHeading = false;
|
|
211
|
+
for (const line of lines) {
|
|
212
|
+
if (line.startsWith("#")) {
|
|
213
|
+
// Skip the leading H1 (table title), but stop at any subsequent heading
|
|
214
|
+
// so we don't leak content from the next section into the description.
|
|
215
|
+
if (seenHeading)
|
|
216
|
+
break;
|
|
217
|
+
seenHeading = true;
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (line.trim() === "") {
|
|
221
|
+
if (inParagraph)
|
|
222
|
+
break;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
inParagraph = true;
|
|
226
|
+
paragraphLines.push(line.trim());
|
|
227
|
+
}
|
|
228
|
+
return paragraphLines.length > 0 ? paragraphLines.join(" ") : undefined;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/schema/v2/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { V2Concept } from "./describable.js";
|
|
2
|
+
/** Normalized column with optional v2 describable-layer fields. */
|
|
3
|
+
export type NormalizedV2Column = {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
type: string;
|
|
7
|
+
nullable: boolean;
|
|
8
|
+
primaryKey: boolean;
|
|
9
|
+
sensitive: boolean;
|
|
10
|
+
/** Describable-layer fields. Absent when sensitive=true (excluded from prompts). */
|
|
11
|
+
description?: string;
|
|
12
|
+
aliases?: string[];
|
|
13
|
+
enum?: string[];
|
|
14
|
+
};
|
|
15
|
+
/** Normalized table with optional v2 describable-layer fields. */
|
|
16
|
+
export type NormalizedV2Table = {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
/** Database schema (namespace) this table belongs to, e.g. `"public"`, `"app"`. */
|
|
20
|
+
schema: string;
|
|
21
|
+
sensitive: boolean;
|
|
22
|
+
columns: NormalizedV2Column[];
|
|
23
|
+
relationships?: Array<{
|
|
24
|
+
from: string;
|
|
25
|
+
to: string;
|
|
26
|
+
}>;
|
|
27
|
+
/** Describable-layer fields. */
|
|
28
|
+
description?: string;
|
|
29
|
+
aliases?: string[];
|
|
30
|
+
primaryEntity?: string;
|
|
31
|
+
/** Verbatim content of the `Common query language` H2 section. */
|
|
32
|
+
commonQueryLanguage?: string;
|
|
33
|
+
};
|
|
34
|
+
/** Fully normalized Schema v2 artifact — physical + describable layers merged. */
|
|
35
|
+
export type NormalizedSchemaV2 = {
|
|
36
|
+
schemaId: string;
|
|
37
|
+
tables: NormalizedV2Table[];
|
|
38
|
+
concepts?: V2Concept[];
|
|
39
|
+
/** Structured warnings from ID validation (orphaned/missing ids). */
|
|
40
|
+
warnings: SchemaV2Warning[];
|
|
41
|
+
};
|
|
42
|
+
export type SchemaV2Warning = {
|
|
43
|
+
kind: "orphaned_table_id";
|
|
44
|
+
tableFile: string;
|
|
45
|
+
id: string;
|
|
46
|
+
} | {
|
|
47
|
+
kind: "orphaned_column_id";
|
|
48
|
+
tableFile: string;
|
|
49
|
+
id: string;
|
|
50
|
+
} | {
|
|
51
|
+
kind: "missing_table_md";
|
|
52
|
+
tableId: string;
|
|
53
|
+
} | {
|
|
54
|
+
kind: "missing_column_md";
|
|
55
|
+
tableId: string;
|
|
56
|
+
columnId: string;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=normalized.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalized.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/normalized.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,kFAAkF;AAClF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,qEAAqE;IACrE,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalized.js","sourceRoot":"","sources":["../../../src/schema/v2/normalized.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ParsedConceptsMarkdown, type ParsedTableMarkdown } from "./describable.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse a `tables/<table>.md` file.
|
|
4
|
+
* Front-matter is validated by zod (strict — unknown keys are errors).
|
|
5
|
+
* Recognized H2 sections are extracted; the rest of the body is preserved verbatim.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseTableMarkdown(content: string, filePath?: string): ParsedTableMarkdown;
|
|
8
|
+
/**
|
|
9
|
+
* Parse `concepts.md`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseConceptsMarkdown(content: string, filePath?: string): ParsedConceptsMarkdown;
|
|
12
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EAEzB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAe1F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAWhG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import matter from "gray-matter";
|
|
2
|
+
import { SchemaParseError } from "../../errors.js";
|
|
3
|
+
import { RECOGNIZED_H2_SECTIONS, v2ConceptsFrontmatterSchema, v2TableFrontmatterSchema, } from "./describable.js";
|
|
4
|
+
/**
|
|
5
|
+
* Parse a `tables/<table>.md` file.
|
|
6
|
+
* Front-matter is validated by zod (strict — unknown keys are errors).
|
|
7
|
+
* Recognized H2 sections are extracted; the rest of the body is preserved verbatim.
|
|
8
|
+
*/
|
|
9
|
+
export function parseTableMarkdown(content, filePath) {
|
|
10
|
+
const file = matter(content);
|
|
11
|
+
const result = v2TableFrontmatterSchema.safeParse(file.data);
|
|
12
|
+
if (!result.success) {
|
|
13
|
+
const loc = filePath ? ` in ${filePath}` : "";
|
|
14
|
+
throw new SchemaParseError(`Invalid table front-matter${loc}: ${result.error.message}`, result.error);
|
|
15
|
+
}
|
|
16
|
+
const body = file.content;
|
|
17
|
+
const sections = extractH2Sections(body);
|
|
18
|
+
return { frontmatter: result.data, body, sections };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse `concepts.md`.
|
|
22
|
+
*/
|
|
23
|
+
export function parseConceptsMarkdown(content, filePath) {
|
|
24
|
+
const file = matter(content);
|
|
25
|
+
const result = v2ConceptsFrontmatterSchema.safeParse(file.data);
|
|
26
|
+
if (!result.success) {
|
|
27
|
+
const loc = filePath ? ` in ${filePath}` : "";
|
|
28
|
+
throw new SchemaParseError(`Invalid concepts front-matter${loc}: ${result.error.message}`, result.error);
|
|
29
|
+
}
|
|
30
|
+
return { frontmatter: result.data, body: file.content };
|
|
31
|
+
}
|
|
32
|
+
/** Extract recognized H2 sections from a markdown body string. */
|
|
33
|
+
function extractH2Sections(body) {
|
|
34
|
+
const sections = {};
|
|
35
|
+
// Split on H2 headings
|
|
36
|
+
const parts = body.split(/^## /m);
|
|
37
|
+
for (const part of parts.slice(1)) {
|
|
38
|
+
const newline = part.indexOf("\n");
|
|
39
|
+
const heading = (newline === -1 ? part : part.slice(0, newline)).trim();
|
|
40
|
+
const sectionBody = newline === -1 ? "" : part.slice(newline + 1);
|
|
41
|
+
const matched = RECOGNIZED_H2_SECTIONS.find((s) => s.toLowerCase() === heading.toLowerCase());
|
|
42
|
+
if (matched) {
|
|
43
|
+
sections[matched] = sectionBody;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return sections;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/schema/v2/parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,GAIzB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,QAAiB;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,gBAAgB,CACxB,6BAA6B,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAC3D,MAAM,CAAC,KAAK,CACb,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;IAC1B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,QAAiB;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,gBAAgB,CACxB,gCAAgC,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAC9D,MAAM,CAAC,KAAK,CACb,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC1D,CAAC;AAED,kEAAkE;AAClE,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,QAAQ,GAAiD,EAAE,CAAC;IAClE,uBAAuB;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CACjD,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const v2ColumnSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
name: z.ZodString;
|
|
5
|
+
type: z.ZodString;
|
|
6
|
+
nullable: z.ZodBoolean;
|
|
7
|
+
primaryKey: z.ZodOptional<z.ZodBoolean>;
|
|
8
|
+
sensitive: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
name: string;
|
|
11
|
+
type: string;
|
|
12
|
+
nullable: boolean;
|
|
13
|
+
id: string;
|
|
14
|
+
primaryKey?: boolean | undefined;
|
|
15
|
+
sensitive?: boolean | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
name: string;
|
|
18
|
+
type: string;
|
|
19
|
+
nullable: boolean;
|
|
20
|
+
id: string;
|
|
21
|
+
primaryKey?: boolean | undefined;
|
|
22
|
+
sensitive?: boolean | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const v2RelationshipSchema: z.ZodObject<{
|
|
25
|
+
from: z.ZodString;
|
|
26
|
+
to: z.ZodString;
|
|
27
|
+
}, "strip", z.ZodTypeAny, {
|
|
28
|
+
from: string;
|
|
29
|
+
to: string;
|
|
30
|
+
}, {
|
|
31
|
+
from: string;
|
|
32
|
+
to: string;
|
|
33
|
+
}>;
|
|
34
|
+
export declare const v2TableSchema: z.ZodObject<{
|
|
35
|
+
id: z.ZodString;
|
|
36
|
+
name: z.ZodString;
|
|
37
|
+
/** Database schema (namespace) this table belongs to, e.g. `"public"`, `"app"`. Required. */
|
|
38
|
+
schema: z.ZodString;
|
|
39
|
+
sensitive: z.ZodOptional<z.ZodBoolean>;
|
|
40
|
+
columns: z.ZodArray<z.ZodObject<{
|
|
41
|
+
id: z.ZodString;
|
|
42
|
+
name: z.ZodString;
|
|
43
|
+
type: z.ZodString;
|
|
44
|
+
nullable: z.ZodBoolean;
|
|
45
|
+
primaryKey: z.ZodOptional<z.ZodBoolean>;
|
|
46
|
+
sensitive: z.ZodOptional<z.ZodBoolean>;
|
|
47
|
+
}, "strip", z.ZodTypeAny, {
|
|
48
|
+
name: string;
|
|
49
|
+
type: string;
|
|
50
|
+
nullable: boolean;
|
|
51
|
+
id: string;
|
|
52
|
+
primaryKey?: boolean | undefined;
|
|
53
|
+
sensitive?: boolean | undefined;
|
|
54
|
+
}, {
|
|
55
|
+
name: string;
|
|
56
|
+
type: string;
|
|
57
|
+
nullable: boolean;
|
|
58
|
+
id: string;
|
|
59
|
+
primaryKey?: boolean | undefined;
|
|
60
|
+
sensitive?: boolean | undefined;
|
|
61
|
+
}>, "many">;
|
|
62
|
+
relationships: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
63
|
+
from: z.ZodString;
|
|
64
|
+
to: z.ZodString;
|
|
65
|
+
}, "strip", z.ZodTypeAny, {
|
|
66
|
+
from: string;
|
|
67
|
+
to: string;
|
|
68
|
+
}, {
|
|
69
|
+
from: string;
|
|
70
|
+
to: string;
|
|
71
|
+
}>, "many">>;
|
|
72
|
+
}, "strip", z.ZodTypeAny, {
|
|
73
|
+
name: string;
|
|
74
|
+
columns: {
|
|
75
|
+
name: string;
|
|
76
|
+
type: string;
|
|
77
|
+
nullable: boolean;
|
|
78
|
+
id: string;
|
|
79
|
+
primaryKey?: boolean | undefined;
|
|
80
|
+
sensitive?: boolean | undefined;
|
|
81
|
+
}[];
|
|
82
|
+
id: string;
|
|
83
|
+
schema: string;
|
|
84
|
+
sensitive?: boolean | undefined;
|
|
85
|
+
relationships?: {
|
|
86
|
+
from: string;
|
|
87
|
+
to: string;
|
|
88
|
+
}[] | undefined;
|
|
89
|
+
}, {
|
|
90
|
+
name: string;
|
|
91
|
+
columns: {
|
|
92
|
+
name: string;
|
|
93
|
+
type: string;
|
|
94
|
+
nullable: boolean;
|
|
95
|
+
id: string;
|
|
96
|
+
primaryKey?: boolean | undefined;
|
|
97
|
+
sensitive?: boolean | undefined;
|
|
98
|
+
}[];
|
|
99
|
+
id: string;
|
|
100
|
+
schema: string;
|
|
101
|
+
sensitive?: boolean | undefined;
|
|
102
|
+
relationships?: {
|
|
103
|
+
from: string;
|
|
104
|
+
to: string;
|
|
105
|
+
}[] | undefined;
|
|
106
|
+
}>;
|
|
107
|
+
export declare const v2SchemaJsonSchema: z.ZodObject<{
|
|
108
|
+
version: z.ZodLiteral<2>;
|
|
109
|
+
schemaId: z.ZodString;
|
|
110
|
+
tables: z.ZodArray<z.ZodObject<{
|
|
111
|
+
id: z.ZodString;
|
|
112
|
+
name: z.ZodString;
|
|
113
|
+
/** Database schema (namespace) this table belongs to, e.g. `"public"`, `"app"`. Required. */
|
|
114
|
+
schema: z.ZodString;
|
|
115
|
+
sensitive: z.ZodOptional<z.ZodBoolean>;
|
|
116
|
+
columns: z.ZodArray<z.ZodObject<{
|
|
117
|
+
id: z.ZodString;
|
|
118
|
+
name: z.ZodString;
|
|
119
|
+
type: z.ZodString;
|
|
120
|
+
nullable: z.ZodBoolean;
|
|
121
|
+
primaryKey: z.ZodOptional<z.ZodBoolean>;
|
|
122
|
+
sensitive: z.ZodOptional<z.ZodBoolean>;
|
|
123
|
+
}, "strip", z.ZodTypeAny, {
|
|
124
|
+
name: string;
|
|
125
|
+
type: string;
|
|
126
|
+
nullable: boolean;
|
|
127
|
+
id: string;
|
|
128
|
+
primaryKey?: boolean | undefined;
|
|
129
|
+
sensitive?: boolean | undefined;
|
|
130
|
+
}, {
|
|
131
|
+
name: string;
|
|
132
|
+
type: string;
|
|
133
|
+
nullable: boolean;
|
|
134
|
+
id: string;
|
|
135
|
+
primaryKey?: boolean | undefined;
|
|
136
|
+
sensitive?: boolean | undefined;
|
|
137
|
+
}>, "many">;
|
|
138
|
+
relationships: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
139
|
+
from: z.ZodString;
|
|
140
|
+
to: z.ZodString;
|
|
141
|
+
}, "strip", z.ZodTypeAny, {
|
|
142
|
+
from: string;
|
|
143
|
+
to: string;
|
|
144
|
+
}, {
|
|
145
|
+
from: string;
|
|
146
|
+
to: string;
|
|
147
|
+
}>, "many">>;
|
|
148
|
+
}, "strip", z.ZodTypeAny, {
|
|
149
|
+
name: string;
|
|
150
|
+
columns: {
|
|
151
|
+
name: string;
|
|
152
|
+
type: string;
|
|
153
|
+
nullable: boolean;
|
|
154
|
+
id: string;
|
|
155
|
+
primaryKey?: boolean | undefined;
|
|
156
|
+
sensitive?: boolean | undefined;
|
|
157
|
+
}[];
|
|
158
|
+
id: string;
|
|
159
|
+
schema: string;
|
|
160
|
+
sensitive?: boolean | undefined;
|
|
161
|
+
relationships?: {
|
|
162
|
+
from: string;
|
|
163
|
+
to: string;
|
|
164
|
+
}[] | undefined;
|
|
165
|
+
}, {
|
|
166
|
+
name: string;
|
|
167
|
+
columns: {
|
|
168
|
+
name: string;
|
|
169
|
+
type: string;
|
|
170
|
+
nullable: boolean;
|
|
171
|
+
id: string;
|
|
172
|
+
primaryKey?: boolean | undefined;
|
|
173
|
+
sensitive?: boolean | undefined;
|
|
174
|
+
}[];
|
|
175
|
+
id: string;
|
|
176
|
+
schema: string;
|
|
177
|
+
sensitive?: boolean | undefined;
|
|
178
|
+
relationships?: {
|
|
179
|
+
from: string;
|
|
180
|
+
to: string;
|
|
181
|
+
}[] | undefined;
|
|
182
|
+
}>, "many">;
|
|
183
|
+
}, "strip", z.ZodTypeAny, {
|
|
184
|
+
version: 2;
|
|
185
|
+
tables: {
|
|
186
|
+
name: string;
|
|
187
|
+
columns: {
|
|
188
|
+
name: string;
|
|
189
|
+
type: string;
|
|
190
|
+
nullable: boolean;
|
|
191
|
+
id: string;
|
|
192
|
+
primaryKey?: boolean | undefined;
|
|
193
|
+
sensitive?: boolean | undefined;
|
|
194
|
+
}[];
|
|
195
|
+
id: string;
|
|
196
|
+
schema: string;
|
|
197
|
+
sensitive?: boolean | undefined;
|
|
198
|
+
relationships?: {
|
|
199
|
+
from: string;
|
|
200
|
+
to: string;
|
|
201
|
+
}[] | undefined;
|
|
202
|
+
}[];
|
|
203
|
+
schemaId: string;
|
|
204
|
+
}, {
|
|
205
|
+
version: 2;
|
|
206
|
+
tables: {
|
|
207
|
+
name: string;
|
|
208
|
+
columns: {
|
|
209
|
+
name: string;
|
|
210
|
+
type: string;
|
|
211
|
+
nullable: boolean;
|
|
212
|
+
id: string;
|
|
213
|
+
primaryKey?: boolean | undefined;
|
|
214
|
+
sensitive?: boolean | undefined;
|
|
215
|
+
}[];
|
|
216
|
+
id: string;
|
|
217
|
+
schema: string;
|
|
218
|
+
sensitive?: boolean | undefined;
|
|
219
|
+
relationships?: {
|
|
220
|
+
from: string;
|
|
221
|
+
to: string;
|
|
222
|
+
}[] | undefined;
|
|
223
|
+
}[];
|
|
224
|
+
schemaId: string;
|
|
225
|
+
}>;
|
|
226
|
+
export type V2SchemaJson = z.infer<typeof v2SchemaJsonSchema>;
|
|
227
|
+
export type V2Table = z.infer<typeof v2TableSchema>;
|
|
228
|
+
export type V2Column = z.infer<typeof v2ColumnSchema>;
|
|
229
|
+
//# sourceMappingURL=physical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physical.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/physical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;EAOzB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAEH,eAAO,MAAM,aAAa;;;IAGxB,6FAA6F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK7F,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;QAP7B,6FAA6F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW7F,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const v2ColumnSchema = z.object({
|
|
3
|
+
id: z.string().min(1),
|
|
4
|
+
name: z.string().min(1),
|
|
5
|
+
type: z.string().min(1),
|
|
6
|
+
nullable: z.boolean(),
|
|
7
|
+
primaryKey: z.boolean().optional(),
|
|
8
|
+
sensitive: z.boolean().optional(),
|
|
9
|
+
});
|
|
10
|
+
export const v2RelationshipSchema = z.object({
|
|
11
|
+
from: z.string().min(1),
|
|
12
|
+
to: z.string().min(1),
|
|
13
|
+
});
|
|
14
|
+
export const v2TableSchema = z.object({
|
|
15
|
+
id: z.string().min(1),
|
|
16
|
+
name: z.string().min(1),
|
|
17
|
+
/** Database schema (namespace) this table belongs to, e.g. `"public"`, `"app"`. Required. */
|
|
18
|
+
schema: z.string().min(1),
|
|
19
|
+
sensitive: z.boolean().optional(),
|
|
20
|
+
columns: z.array(v2ColumnSchema).min(1),
|
|
21
|
+
relationships: z.array(v2RelationshipSchema).optional(),
|
|
22
|
+
});
|
|
23
|
+
export const v2SchemaJsonSchema = z.object({
|
|
24
|
+
version: z.literal(2),
|
|
25
|
+
schemaId: z.string().min(1),
|
|
26
|
+
tables: z.array(v2TableSchema).min(1),
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=physical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physical.js","sourceRoot":"","sources":["../../../src/schema/v2/physical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,6FAA6F;IAC7F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACtC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { V2TableFrontmatter, V2ConceptsFrontmatter } from "./describable.js";
|
|
2
|
+
/**
|
|
3
|
+
* Serialize a table front-matter model back to markdown.
|
|
4
|
+
*
|
|
5
|
+
* - Front-matter keys are emitted in a stable order.
|
|
6
|
+
* - The markdown body is preserved verbatim from the parsed input.
|
|
7
|
+
* - Round-trip property: `parse(write(parse(file)))` equals `parse(file)` for structured fields.
|
|
8
|
+
*/
|
|
9
|
+
export declare function writeTableMarkdown(frontmatter: V2TableFrontmatter, body: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Serialize `concepts.md` front-matter + body back to markdown.
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeConceptsMarkdown(frontmatter: V2ConceptsFrontmatter, body: string): string;
|
|
14
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/schema/v2/writer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAElF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9F"}
|