@adminiumjs/engine 0.1.0-rc.1
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 +661 -0
- package/dist/adapter-registry.d.ts +62 -0
- package/dist/adapter-registry.d.ts.map +1 -0
- package/dist/adapter-registry.js +75 -0
- package/dist/adapter-registry.js.map +1 -0
- package/dist/adapter.d.ts +384 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +54 -0
- package/dist/adapter.js.map +1 -0
- package/dist/capabilities.d.ts +57 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +131 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/classify/columns.d.ts +57 -0
- package/dist/classify/columns.d.ts.map +1 -0
- package/dist/classify/columns.js +535 -0
- package/dist/classify/columns.js.map +1 -0
- package/dist/classify/index.d.ts +29 -0
- package/dist/classify/index.d.ts.map +1 -0
- package/dist/classify/index.js +44 -0
- package/dist/classify/index.js.map +1 -0
- package/dist/classify/names.d.ts +11 -0
- package/dist/classify/names.d.ts.map +1 -0
- package/dist/classify/names.js +19 -0
- package/dist/classify/names.js.map +1 -0
- package/dist/classify/pii.d.ts +29 -0
- package/dist/classify/pii.d.ts.map +1 -0
- package/dist/classify/pii.js +55 -0
- package/dist/classify/pii.js.map +1 -0
- package/dist/classify/tables.d.ts +64 -0
- package/dist/classify/tables.d.ts.map +1 -0
- package/dist/classify/tables.js +303 -0
- package/dist/classify/tables.js.map +1 -0
- package/dist/config-schema/envelope.d.ts +83 -0
- package/dist/config-schema/envelope.d.ts.map +1 -0
- package/dist/config-schema/envelope.js +87 -0
- package/dist/config-schema/envelope.js.map +1 -0
- package/dist/config-schema/index.d.ts +14 -0
- package/dist/config-schema/index.d.ts.map +1 -0
- package/dist/config-schema/index.js +15 -0
- package/dist/config-schema/index.js.map +1 -0
- package/dist/config-schema/migrations.d.ts +44 -0
- package/dist/config-schema/migrations.d.ts.map +1 -0
- package/dist/config-schema/migrations.js +62 -0
- package/dist/config-schema/migrations.js.map +1 -0
- package/dist/generate/archetype.d.ts +76 -0
- package/dist/generate/archetype.d.ts.map +1 -0
- package/dist/generate/archetype.js +250 -0
- package/dist/generate/archetype.js.map +1 -0
- package/dist/generate/crud.d.ts +36 -0
- package/dist/generate/crud.d.ts.map +1 -0
- package/dist/generate/crud.js +45 -0
- package/dist/generate/crud.js.map +1 -0
- package/dist/generate/dashboard.d.ts +43 -0
- package/dist/generate/dashboard.d.ts.map +1 -0
- package/dist/generate/dashboard.js +61 -0
- package/dist/generate/dashboard.js.map +1 -0
- package/dist/generate/domains.d.ts +29 -0
- package/dist/generate/domains.d.ts.map +1 -0
- package/dist/generate/domains.js +145 -0
- package/dist/generate/domains.js.map +1 -0
- package/dist/generate/index.d.ts +78 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +301 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/generate/util.d.ts +46 -0
- package/dist/generate/util.d.ts.map +1 -0
- package/dist/generate/util.js +123 -0
- package/dist/generate/util.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/schema-model.d.ts +1853 -0
- package/dist/schema-model.d.ts.map +1 -0
- package/dist/schema-model.js +463 -0
- package/dist/schema-model.js.map +1 -0
- package/dist/snapshot/diff.d.ts +258 -0
- package/dist/snapshot/diff.d.ts.map +1 -0
- package/dist/snapshot/diff.js +151 -0
- package/dist/snapshot/diff.js.map +1 -0
- package/dist/snapshot/hash.d.ts +23 -0
- package/dist/snapshot/hash.d.ts.map +1 -0
- package/dist/snapshot/hash.js +47 -0
- package/dist/snapshot/hash.js.map +1 -0
- package/dist/snapshot/index.d.ts +28 -0
- package/dist/snapshot/index.d.ts.map +1 -0
- package/dist/snapshot/index.js +26 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/snapshot/sha256.d.ts +14 -0
- package/dist/snapshot/sha256.d.ts.map +1 -0
- package/dist/snapshot/sha256.js +99 -0
- package/dist/snapshot/sha256.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-model.d.ts","sourceRoot":"","sources":["../src/schema-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The normalized schema model (the IR) — 05-introspection-engine.md §2.
|
|
4
|
+
*
|
|
5
|
+
* One model for everything: live introspection, every schema-import parser,
|
|
6
|
+
* the LLM round-trip, snapshots, and the generator all speak this shape.
|
|
7
|
+
* TypeScript types are `z.infer<>` of the Zod schemas below — never
|
|
8
|
+
* hand-duplicated. All objects are strict so unknown keys fail loudly, and
|
|
9
|
+
* every value is JSON-native (no Dates, no undefined-bearing unions) because
|
|
10
|
+
* the serialized model persists verbatim into
|
|
11
|
+
* `adminium_schema_snapshots.model`.
|
|
12
|
+
*
|
|
13
|
+
* Minimal valid IR (§2.3): `irVersion`, `dialect: 'generic'`, `name`, one
|
|
14
|
+
* table with one column — everything else has defaults so third-party
|
|
15
|
+
* emitters stay small.
|
|
16
|
+
*/
|
|
17
|
+
export const IR_VERSION = 1;
|
|
18
|
+
export const DIALECTS = ['postgres', 'mysql', 'sqlite', 'generic'];
|
|
19
|
+
/** 'generic' = ORM import that doesn't pin a dialect. */
|
|
20
|
+
export const dialectSchema = z.enum(DIALECTS);
|
|
21
|
+
export const IMPORT_FORMATS = [
|
|
22
|
+
'sql-ddl',
|
|
23
|
+
'prisma',
|
|
24
|
+
'drizzle',
|
|
25
|
+
'typeorm',
|
|
26
|
+
'sequelize',
|
|
27
|
+
'rails',
|
|
28
|
+
'django',
|
|
29
|
+
'json-ir',
|
|
30
|
+
];
|
|
31
|
+
export const importFormatSchema = z.enum(IMPORT_FORMATS);
|
|
32
|
+
/** §2.2 — every adapter/parser maps native types onto this closed set. */
|
|
33
|
+
export const LOGICAL_TYPES = [
|
|
34
|
+
'text',
|
|
35
|
+
'varchar',
|
|
36
|
+
'integer',
|
|
37
|
+
'bigint',
|
|
38
|
+
'decimal',
|
|
39
|
+
'float',
|
|
40
|
+
'boolean',
|
|
41
|
+
'date',
|
|
42
|
+
'time',
|
|
43
|
+
'timestamp',
|
|
44
|
+
'timestamptz',
|
|
45
|
+
'interval',
|
|
46
|
+
'uuid',
|
|
47
|
+
'json',
|
|
48
|
+
'binary',
|
|
49
|
+
'enum',
|
|
50
|
+
'geometry',
|
|
51
|
+
'inet',
|
|
52
|
+
'unknown',
|
|
53
|
+
];
|
|
54
|
+
export const logicalTypeSchema = z.enum(LOGICAL_TYPES);
|
|
55
|
+
/** Where a model came from: a live connection or a schema import. */
|
|
56
|
+
export const modelSourceSchema = z.discriminatedUnion('kind', [
|
|
57
|
+
z.strictObject({ kind: z.literal('live'), connectionId: z.string().min(1) }),
|
|
58
|
+
z.strictObject({
|
|
59
|
+
kind: z.literal('import'),
|
|
60
|
+
format: importFormatSchema,
|
|
61
|
+
fileName: z.string().min(1).optional(),
|
|
62
|
+
}),
|
|
63
|
+
]);
|
|
64
|
+
/**
|
|
65
|
+
* Capability flags describing what the SOURCE could express (drives UI
|
|
66
|
+
* degradation) — 05 §2.1 `AdapterCapabilities`. Adapters also expose these
|
|
67
|
+
* statically per dialect; imports set them to what the format expresses.
|
|
68
|
+
*/
|
|
69
|
+
export const adapterCapabilitiesSchema = z.strictObject({
|
|
70
|
+
/** Native enum types (pg) or column enums (mysql). */
|
|
71
|
+
hasEnums: z.boolean().default(false),
|
|
72
|
+
/** False per-table for MyISAM; false for Mongo later. */
|
|
73
|
+
hasFKs: z.boolean().default(true),
|
|
74
|
+
/** pg true; mysql/sqlite false. */
|
|
75
|
+
hasSchemas: z.boolean().default(false),
|
|
76
|
+
hasComments: z.boolean().default(false),
|
|
77
|
+
hasChecks: z.boolean().default(false),
|
|
78
|
+
hasRLS: z.boolean().default(false),
|
|
79
|
+
hasMaterializedViews: z.boolean().default(false),
|
|
80
|
+
hasRowEstimates: z.boolean().default(false),
|
|
81
|
+
supportsStatementTimeout: z.boolean().default(false),
|
|
82
|
+
/** pg/sqlite ≥ 3.35 true; mysql false (mutate re-selects). */
|
|
83
|
+
supportsReturning: z.boolean().default(false),
|
|
84
|
+
/** 63 pg, 64 mysql, 128 for sqlite/generic. */
|
|
85
|
+
maxIdentifierLength: z.number().int().positive().default(128),
|
|
86
|
+
});
|
|
87
|
+
/** Workplan alias — several docs call these "capability flags". */
|
|
88
|
+
export const capabilityFlagsSchema = adapterCapabilitiesSchema;
|
|
89
|
+
/** §2.1 `EnumDef` — native = pg CREATE TYPE AS ENUM · column-type = MySQL enum(...) · check = CHECK (col IN (...)). */
|
|
90
|
+
export const enumDefSchema = z.strictObject({
|
|
91
|
+
/** pg: `${schema}.${typname}`; mysql/check: `${tableId}.${column}`. */
|
|
92
|
+
id: z.string().min(1),
|
|
93
|
+
name: z.string().min(1),
|
|
94
|
+
/** Ordered; capped at 256 (adapters emit a warning beyond and truncate). */
|
|
95
|
+
values: z.array(z.string()).min(1).max(256),
|
|
96
|
+
source: z.enum(['native', 'column-type', 'check', 'import']).default('import'),
|
|
97
|
+
});
|
|
98
|
+
export const indexModelSchema = z.strictObject({
|
|
99
|
+
name: z.string().min(1),
|
|
100
|
+
/** Empty for pure expression indexes. */
|
|
101
|
+
columns: z.array(z.string()).default([]),
|
|
102
|
+
expression: z.string().nullable().default(null),
|
|
103
|
+
unique: z.boolean().default(false),
|
|
104
|
+
primary: z.boolean().default(false),
|
|
105
|
+
/** 'btree', 'gin', … (pg); null elsewhere. */
|
|
106
|
+
method: z.string().nullable().default(null),
|
|
107
|
+
partial: z.boolean().default(false),
|
|
108
|
+
});
|
|
109
|
+
export const columnDefaultSchema = z
|
|
110
|
+
.union([
|
|
111
|
+
z.strictObject({ kind: z.enum(['literal', 'expression']), text: z.string() }),
|
|
112
|
+
z.strictObject({ kind: z.enum(['autoincrement', 'now', 'uuid']) }),
|
|
113
|
+
])
|
|
114
|
+
.nullable();
|
|
115
|
+
/**
|
|
116
|
+
* §7 column semantic tags — one kebab-case id per §7.1 rule row, in
|
|
117
|
+
* precedence order. Later docs and the LLM prompt reference these exact ids;
|
|
118
|
+
* the classifier (classify/columns.ts, 05-T07) must emit only these.
|
|
119
|
+
*/
|
|
120
|
+
export const SEMANTIC_TAGS = [
|
|
121
|
+
'secret',
|
|
122
|
+
'pk-id',
|
|
123
|
+
'fk',
|
|
124
|
+
'money',
|
|
125
|
+
'percent',
|
|
126
|
+
'score',
|
|
127
|
+
'status-workflow',
|
|
128
|
+
'category-enum',
|
|
129
|
+
'created-at',
|
|
130
|
+
'updated-at',
|
|
131
|
+
'date-range', // §7.1 row 11 "start/end pair" — pair roles carry start/end
|
|
132
|
+
'event-timestamp',
|
|
133
|
+
'duration',
|
|
134
|
+
'geo-point', // §7.1 row 14 "geo-lat/lng" — pair roles carry lat/lng
|
|
135
|
+
'geo-region',
|
|
136
|
+
'person-name',
|
|
137
|
+
'email',
|
|
138
|
+
'phone',
|
|
139
|
+
'image-url',
|
|
140
|
+
'file-ref',
|
|
141
|
+
'url',
|
|
142
|
+
'boolean-flag',
|
|
143
|
+
'color',
|
|
144
|
+
'tags',
|
|
145
|
+
'slug',
|
|
146
|
+
'ip-address',
|
|
147
|
+
'json-config',
|
|
148
|
+
'external-id',
|
|
149
|
+
'free-text',
|
|
150
|
+
'plain',
|
|
151
|
+
];
|
|
152
|
+
export const semanticTagSchema = z.enum(SEMANTIC_TAGS);
|
|
153
|
+
/** §7.2 PII kinds — a flag layer independent of the primary semantic. */
|
|
154
|
+
export const PII_KINDS = [
|
|
155
|
+
'email',
|
|
156
|
+
'phone',
|
|
157
|
+
'ip',
|
|
158
|
+
'person-name',
|
|
159
|
+
'address',
|
|
160
|
+
'dob',
|
|
161
|
+
'gov-id',
|
|
162
|
+
'payment-id',
|
|
163
|
+
'geo-precise',
|
|
164
|
+
];
|
|
165
|
+
export const piiKindSchema = z.enum(PII_KINDS);
|
|
166
|
+
/** §7 `ColumnSemantics` — classifier output persisted with the model. */
|
|
167
|
+
export const columnSemanticsSchema = z.strictObject({
|
|
168
|
+
primary: semanticTagSchema,
|
|
169
|
+
flags: z.strictObject({
|
|
170
|
+
secret: z.boolean().default(false),
|
|
171
|
+
pii: piiKindSchema.nullable().default(null),
|
|
172
|
+
maskedByDefault: z.boolean().default(false),
|
|
173
|
+
}),
|
|
174
|
+
/** Open set: 'currency' | 'percent' | 'duration' | 'relative-time' | 'filesize' | 'color-swatch' | 'mono' | … */
|
|
175
|
+
format: z.string().nullable().default(null),
|
|
176
|
+
pair: z
|
|
177
|
+
.strictObject({
|
|
178
|
+
role: z.enum(['start', 'end', 'lat', 'lng', 'poly-type', 'poly-id']),
|
|
179
|
+
partner: z.string().min(1),
|
|
180
|
+
})
|
|
181
|
+
.nullable()
|
|
182
|
+
.default(null),
|
|
183
|
+
confidence: z.number().min(0).max(1),
|
|
184
|
+
/** override (Studio remap / accepted LLM) always wins. */
|
|
185
|
+
source: z.enum(['heuristic', 'llm', 'override']).default('heuristic'),
|
|
186
|
+
});
|
|
187
|
+
/** §8 `TableSemantics` — table-shape classifier output. */
|
|
188
|
+
export const TABLE_ROLES = [
|
|
189
|
+
'entity',
|
|
190
|
+
'join-table',
|
|
191
|
+
'log',
|
|
192
|
+
'people',
|
|
193
|
+
'messages',
|
|
194
|
+
'line-items',
|
|
195
|
+
'system',
|
|
196
|
+
];
|
|
197
|
+
export const tableRoleSchema = z.enum(TABLE_ROLES);
|
|
198
|
+
export const tableSemanticsSchema = z.strictObject({
|
|
199
|
+
role: tableRoleSchema,
|
|
200
|
+
/** Self-FK hierarchy (§6 rule 3) → tree/org-chart triggers. */
|
|
201
|
+
hierarchy: z.strictObject({ parentColumn: z.string().min(1) }).nullable().default(null),
|
|
202
|
+
/** §6 rule 4 — no Relation is fabricated for polymorphic pairs. */
|
|
203
|
+
polymorphic: z
|
|
204
|
+
.array(z.strictObject({
|
|
205
|
+
typeColumn: z.string().min(1),
|
|
206
|
+
idColumn: z.string().min(1),
|
|
207
|
+
/** Filled only when the type column's enum/CHECK values match table names. */
|
|
208
|
+
targets: z.array(z.string()).default([]),
|
|
209
|
+
}))
|
|
210
|
+
.default([]),
|
|
211
|
+
});
|
|
212
|
+
export const columnModelSchema = z.strictObject({
|
|
213
|
+
name: z.string().min(1),
|
|
214
|
+
/** 1-based position (pg attnum-style); 0 = unspecified (imports). */
|
|
215
|
+
ordinal: z.number().int().nonnegative().default(0),
|
|
216
|
+
/** Verbatim native type, e.g. 'character varying(120)', "enum('a','b')". */
|
|
217
|
+
dbType: z.string().default('text'),
|
|
218
|
+
logicalType: logicalTypeSchema.default('text'),
|
|
219
|
+
nullable: z.boolean().default(true),
|
|
220
|
+
default: columnDefaultSchema.default(null),
|
|
221
|
+
isPrimaryKey: z.boolean().default(false),
|
|
222
|
+
/** Covered by a single-column unique constraint/index. */
|
|
223
|
+
isUnique: z.boolean().default(false),
|
|
224
|
+
/** Computed/stored generated column. */
|
|
225
|
+
isGenerated: z.boolean().default(false),
|
|
226
|
+
/** EnumDef.id when logicalType='enum'. */
|
|
227
|
+
enumRef: z.string().nullable().default(null),
|
|
228
|
+
maxLength: z.number().int().positive().nullable().default(null),
|
|
229
|
+
numericPrecision: z.number().int().nonnegative().nullable().default(null),
|
|
230
|
+
numericScale: z.number().int().nonnegative().nullable().default(null),
|
|
231
|
+
isArray: z.boolean().default(false),
|
|
232
|
+
comment: z.string().nullable().default(null),
|
|
233
|
+
/** Convenience mirror of the declared FK relation. */
|
|
234
|
+
references: z
|
|
235
|
+
.strictObject({ tableId: z.string().min(1), column: z.string().min(1) })
|
|
236
|
+
.nullable()
|
|
237
|
+
.default(null),
|
|
238
|
+
/** Classifier output (§7); null until classification runs. */
|
|
239
|
+
semantics: columnSemanticsSchema.nullable().default(null),
|
|
240
|
+
});
|
|
241
|
+
const tableModelBaseSchema = z.strictObject({
|
|
242
|
+
/** `${schema}.${name}` — stable key used by overrides/pages. Derived when omitted. */
|
|
243
|
+
id: z.string().min(1).optional(),
|
|
244
|
+
schema: z.string().min(1).default('public'),
|
|
245
|
+
name: z.string().min(1),
|
|
246
|
+
/**
|
|
247
|
+
* Effective display label (Studio remap `table.label` / accepted LLM
|
|
248
|
+
* `llm.label`, provenance user > llm > heuristic). Never emitted by
|
|
249
|
+
* introspection — snapshots stay label-free; the server overlays it onto
|
|
250
|
+
* the parsed model before generation so title fallbacks read
|
|
251
|
+
* `table.label ?? humanize(table.name)`. Absent ⇔ heuristic naming.
|
|
252
|
+
*/
|
|
253
|
+
label: z.string().min(1).optional(),
|
|
254
|
+
kind: z.enum(['table', 'view', 'materialized-view']).default('table'),
|
|
255
|
+
comment: z.string().nullable().default(null),
|
|
256
|
+
columns: z.array(columnModelSchema).min(1),
|
|
257
|
+
/** Ordered column names; [] = no PK (table becomes read-only). */
|
|
258
|
+
primaryKey: z.array(z.string()).default([]),
|
|
259
|
+
uniques: z
|
|
260
|
+
.array(z.strictObject({ name: z.string().nullable(), columns: z.array(z.string()).min(1) }))
|
|
261
|
+
.default([]),
|
|
262
|
+
checks: z
|
|
263
|
+
.array(z.strictObject({ name: z.string().nullable(), expression: z.string().min(1) }))
|
|
264
|
+
.default([]),
|
|
265
|
+
indexes: z.array(indexModelSchema).default([]),
|
|
266
|
+
/** ESTIMATE only during setup; null = unknown. Never COUNT at setup. */
|
|
267
|
+
rowCountEstimate: z.number().int().nonnegative().nullable().default(null),
|
|
268
|
+
/** True only for SQLite small-file exact counts. */
|
|
269
|
+
rowCountExact: z.boolean().default(false),
|
|
270
|
+
sizeBytes: z.number().int().nonnegative().nullable().default(null),
|
|
271
|
+
/** pg_stat_user_tables; null elsewhere. */
|
|
272
|
+
activity: z
|
|
273
|
+
.strictObject({
|
|
274
|
+
inserts: z.number().int().nonnegative(),
|
|
275
|
+
updates: z.number().int().nonnegative(),
|
|
276
|
+
deletes: z.number().int().nonnegative(),
|
|
277
|
+
})
|
|
278
|
+
.nullable()
|
|
279
|
+
.default(null),
|
|
280
|
+
/** Postgres only. */
|
|
281
|
+
rls: z
|
|
282
|
+
.strictObject({
|
|
283
|
+
enabled: z.boolean(),
|
|
284
|
+
forced: z.boolean(),
|
|
285
|
+
policyCount: z.number().int().nonnegative(),
|
|
286
|
+
})
|
|
287
|
+
.nullable()
|
|
288
|
+
.default(null),
|
|
289
|
+
/** Migration/meta tables (adminium_*, _prisma_migrations, …). */
|
|
290
|
+
system: z.boolean().default(false),
|
|
291
|
+
/** Table-shape classifier output (§8); null until classification runs. */
|
|
292
|
+
semantics: tableSemanticsSchema.nullable().default(null),
|
|
293
|
+
});
|
|
294
|
+
export const tableModelSchema = tableModelBaseSchema.transform((table) => ({
|
|
295
|
+
...table,
|
|
296
|
+
id: table.id ?? `${table.schema}.${table.name}`,
|
|
297
|
+
}));
|
|
298
|
+
export const FK_ACTIONS = ['cascade', 'restrict', 'set-null', 'set-default', 'no-action'];
|
|
299
|
+
export const fkActionSchema = z.enum(FK_ACTIONS);
|
|
300
|
+
export const RELATION_KINDS = [
|
|
301
|
+
'declared-fk',
|
|
302
|
+
'inferred-name',
|
|
303
|
+
'inferred-join-table',
|
|
304
|
+
'override',
|
|
305
|
+
'manifest',
|
|
306
|
+
];
|
|
307
|
+
export const relationKindSchema = z.enum(RELATION_KINDS);
|
|
308
|
+
export const CARDINALITIES = ['one-to-one', 'one-to-many', 'many-to-many'];
|
|
309
|
+
export const cardinalitySchema = z.enum(CARDINALITIES);
|
|
310
|
+
const relationEndpointSchema = z.strictObject({
|
|
311
|
+
tableId: z.string().min(1),
|
|
312
|
+
columns: z.array(z.string().min(1)).min(1),
|
|
313
|
+
});
|
|
314
|
+
/** §2.1 `Relation` — declared + inferred + overrides, deduped. */
|
|
315
|
+
export const relationSchema = z.strictObject({
|
|
316
|
+
/** Stable hash (or readable key) of kind+from+to. */
|
|
317
|
+
id: z.string().min(1),
|
|
318
|
+
kind: relationKindSchema,
|
|
319
|
+
cardinality: cardinalitySchema,
|
|
320
|
+
/** FK side ("many" side for 1:N). */
|
|
321
|
+
from: relationEndpointSchema,
|
|
322
|
+
/** Referenced side. */
|
|
323
|
+
to: relationEndpointSchema,
|
|
324
|
+
/** M2M join table. */
|
|
325
|
+
through: z
|
|
326
|
+
.strictObject({
|
|
327
|
+
tableId: z.string().min(1),
|
|
328
|
+
fromColumns: z.array(z.string().min(1)).min(1),
|
|
329
|
+
toColumns: z.array(z.string().min(1)).min(1),
|
|
330
|
+
})
|
|
331
|
+
.nullable()
|
|
332
|
+
.default(null),
|
|
333
|
+
onDelete: fkActionSchema.nullable().default(null),
|
|
334
|
+
onUpdate: fkActionSchema.nullable().default(null),
|
|
335
|
+
selfReferential: z.boolean().default(false),
|
|
336
|
+
/** 1.0 declared/override; <1 inferred (§6 thresholds). */
|
|
337
|
+
confidence: z.number().min(0).max(1).default(1),
|
|
338
|
+
});
|
|
339
|
+
/** Non-fatal issues: skipped statements, capped enums, permission gaps. */
|
|
340
|
+
export const modelWarningSchema = z.strictObject({
|
|
341
|
+
code: z.string().min(1),
|
|
342
|
+
message: z.string().min(1),
|
|
343
|
+
/** Table the warning concerns, when applicable. */
|
|
344
|
+
tableId: z.string().nullable().default(null),
|
|
345
|
+
});
|
|
346
|
+
export const modelStatsSchema = z.strictObject({
|
|
347
|
+
tableCount: z.number().int().nonnegative().default(0),
|
|
348
|
+
columnCount: z.number().int().nonnegative().default(0),
|
|
349
|
+
relationCount: z.number().int().nonnegative().default(0),
|
|
350
|
+
durationMs: z.number().nonnegative().default(0),
|
|
351
|
+
});
|
|
352
|
+
const databaseModelBaseSchema = z.strictObject({
|
|
353
|
+
irVersion: z.literal(IR_VERSION).default(IR_VERSION),
|
|
354
|
+
dialect: dialectSchema,
|
|
355
|
+
source: modelSourceSchema.default({ kind: 'import', format: 'json-ir' }),
|
|
356
|
+
/** Database name or import file stem. */
|
|
357
|
+
name: z.string().min(1),
|
|
358
|
+
/** 'public' | <db name> | 'main'. */
|
|
359
|
+
defaultSchema: z.string().min(1).default('public'),
|
|
360
|
+
/** ['public'] when hasSchemas=false. */
|
|
361
|
+
schemas: z.array(z.string().min(1)).min(1).default(['public']),
|
|
362
|
+
tables: z.array(tableModelSchema),
|
|
363
|
+
enums: z.array(enumDefSchema).default([]),
|
|
364
|
+
/** Declared + inferred + overrides, deduped. */
|
|
365
|
+
relations: z.array(relationSchema).default([]),
|
|
366
|
+
capabilities: adapterCapabilitiesSchema.prefault({}),
|
|
367
|
+
/** ISO 8601. */
|
|
368
|
+
introspectedAt: z.iso
|
|
369
|
+
.datetime({ offset: true })
|
|
370
|
+
.default(() => new Date().toISOString()),
|
|
371
|
+
stats: modelStatsSchema.prefault({}),
|
|
372
|
+
warnings: z.array(modelWarningSchema).default([]),
|
|
373
|
+
});
|
|
374
|
+
/**
|
|
375
|
+
* Cross-reference integrity: relations, FK mirrors, enum refs, and primary
|
|
376
|
+
* keys must point at tables/columns/enums that exist in the model. Runs on
|
|
377
|
+
* every parse so a snapshot can never persist dangling references.
|
|
378
|
+
*/
|
|
379
|
+
export const databaseModelSchema = databaseModelBaseSchema.superRefine((model, ctx) => {
|
|
380
|
+
const tables = new Map();
|
|
381
|
+
for (const [i, table] of model.tables.entries()) {
|
|
382
|
+
if (tables.has(table.id)) {
|
|
383
|
+
ctx.addIssue({
|
|
384
|
+
code: 'custom',
|
|
385
|
+
message: `duplicate table id "${table.id}"`,
|
|
386
|
+
path: ['tables', i, 'id'],
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
tables.set(table.id, new Set(table.columns.map((c) => c.name)));
|
|
390
|
+
}
|
|
391
|
+
const enumIds = new Set(model.enums.map((e) => e.id));
|
|
392
|
+
const requireColumns = (tableId, columns, path) => {
|
|
393
|
+
const known = tables.get(tableId);
|
|
394
|
+
if (!known) {
|
|
395
|
+
ctx.addIssue({ code: 'custom', message: `unknown table "${tableId}"`, path });
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
for (const column of columns) {
|
|
399
|
+
if (!known.has(column)) {
|
|
400
|
+
ctx.addIssue({
|
|
401
|
+
code: 'custom',
|
|
402
|
+
message: `unknown column "${column}" on table "${tableId}"`,
|
|
403
|
+
path,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
for (const [i, table] of model.tables.entries()) {
|
|
409
|
+
requireColumns(table.id, table.primaryKey, ['tables', i, 'primaryKey']);
|
|
410
|
+
for (const [j, column] of table.columns.entries()) {
|
|
411
|
+
if (column.references !== null) {
|
|
412
|
+
requireColumns(column.references.tableId, [column.references.column], [
|
|
413
|
+
'tables',
|
|
414
|
+
i,
|
|
415
|
+
'columns',
|
|
416
|
+
j,
|
|
417
|
+
'references',
|
|
418
|
+
]);
|
|
419
|
+
}
|
|
420
|
+
if (column.enumRef !== null && !enumIds.has(column.enumRef)) {
|
|
421
|
+
ctx.addIssue({
|
|
422
|
+
code: 'custom',
|
|
423
|
+
message: `unknown enum "${column.enumRef}"`,
|
|
424
|
+
path: ['tables', i, 'columns', j, 'enumRef'],
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
const relationIds = new Set();
|
|
430
|
+
for (const [i, relation] of model.relations.entries()) {
|
|
431
|
+
if (relationIds.has(relation.id)) {
|
|
432
|
+
ctx.addIssue({
|
|
433
|
+
code: 'custom',
|
|
434
|
+
message: `duplicate relation id "${relation.id}"`,
|
|
435
|
+
path: ['relations', i, 'id'],
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
relationIds.add(relation.id);
|
|
439
|
+
requireColumns(relation.from.tableId, relation.from.columns, ['relations', i, 'from']);
|
|
440
|
+
requireColumns(relation.to.tableId, relation.to.columns, ['relations', i, 'to']);
|
|
441
|
+
if (relation.through !== null) {
|
|
442
|
+
requireColumns(relation.through.tableId, [...relation.through.fromColumns, ...relation.through.toColumns], ['relations', i, 'through']);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
/**
|
|
447
|
+
* Workplan aliases: the milestone plan and several sibling docs refer to the
|
|
448
|
+
* IR as `SchemaModel` (e.g. 01-architecture.md §2.3 "interface + SchemaModel
|
|
449
|
+
* types"). Same schema, same type.
|
|
450
|
+
*/
|
|
451
|
+
export const schemaModelSchema = databaseModelSchema;
|
|
452
|
+
/**
|
|
453
|
+
* Single entry point used by the JSON IR importer, the LLM response
|
|
454
|
+
* validator (06-llm-assist.md), and snapshot loading. Accepts a parsed JSON
|
|
455
|
+
* value or a JSON string. Throws ZodError (or SyntaxError for bad JSON).
|
|
456
|
+
*/
|
|
457
|
+
export function parseDatabaseModel(json) {
|
|
458
|
+
const value = typeof json === 'string' ? JSON.parse(json) : json;
|
|
459
|
+
return databaseModelSchema.parse(value);
|
|
460
|
+
}
|
|
461
|
+
/** Alias of {@link parseDatabaseModel} under the `SchemaModel` naming. */
|
|
462
|
+
export const parseSchemaModel = parseDatabaseModel;
|
|
463
|
+
//# sourceMappingURL=schema-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-model.js","sourceRoot":"","sources":["../src/schema-model.ts"],"names":[],"mappings":"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"}
|