@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.
Files changed (94) hide show
  1. package/LICENSE +661 -0
  2. package/dist/adapter-registry.d.ts +62 -0
  3. package/dist/adapter-registry.d.ts.map +1 -0
  4. package/dist/adapter-registry.js +75 -0
  5. package/dist/adapter-registry.js.map +1 -0
  6. package/dist/adapter.d.ts +384 -0
  7. package/dist/adapter.d.ts.map +1 -0
  8. package/dist/adapter.js +54 -0
  9. package/dist/adapter.js.map +1 -0
  10. package/dist/capabilities.d.ts +57 -0
  11. package/dist/capabilities.d.ts.map +1 -0
  12. package/dist/capabilities.js +131 -0
  13. package/dist/capabilities.js.map +1 -0
  14. package/dist/classify/columns.d.ts +57 -0
  15. package/dist/classify/columns.d.ts.map +1 -0
  16. package/dist/classify/columns.js +535 -0
  17. package/dist/classify/columns.js.map +1 -0
  18. package/dist/classify/index.d.ts +29 -0
  19. package/dist/classify/index.d.ts.map +1 -0
  20. package/dist/classify/index.js +44 -0
  21. package/dist/classify/index.js.map +1 -0
  22. package/dist/classify/names.d.ts +11 -0
  23. package/dist/classify/names.d.ts.map +1 -0
  24. package/dist/classify/names.js +19 -0
  25. package/dist/classify/names.js.map +1 -0
  26. package/dist/classify/pii.d.ts +29 -0
  27. package/dist/classify/pii.d.ts.map +1 -0
  28. package/dist/classify/pii.js +55 -0
  29. package/dist/classify/pii.js.map +1 -0
  30. package/dist/classify/tables.d.ts +64 -0
  31. package/dist/classify/tables.d.ts.map +1 -0
  32. package/dist/classify/tables.js +303 -0
  33. package/dist/classify/tables.js.map +1 -0
  34. package/dist/config-schema/envelope.d.ts +83 -0
  35. package/dist/config-schema/envelope.d.ts.map +1 -0
  36. package/dist/config-schema/envelope.js +87 -0
  37. package/dist/config-schema/envelope.js.map +1 -0
  38. package/dist/config-schema/index.d.ts +14 -0
  39. package/dist/config-schema/index.d.ts.map +1 -0
  40. package/dist/config-schema/index.js +15 -0
  41. package/dist/config-schema/index.js.map +1 -0
  42. package/dist/config-schema/migrations.d.ts +44 -0
  43. package/dist/config-schema/migrations.d.ts.map +1 -0
  44. package/dist/config-schema/migrations.js +62 -0
  45. package/dist/config-schema/migrations.js.map +1 -0
  46. package/dist/generate/archetype.d.ts +76 -0
  47. package/dist/generate/archetype.d.ts.map +1 -0
  48. package/dist/generate/archetype.js +250 -0
  49. package/dist/generate/archetype.js.map +1 -0
  50. package/dist/generate/crud.d.ts +36 -0
  51. package/dist/generate/crud.d.ts.map +1 -0
  52. package/dist/generate/crud.js +45 -0
  53. package/dist/generate/crud.js.map +1 -0
  54. package/dist/generate/dashboard.d.ts +43 -0
  55. package/dist/generate/dashboard.d.ts.map +1 -0
  56. package/dist/generate/dashboard.js +61 -0
  57. package/dist/generate/dashboard.js.map +1 -0
  58. package/dist/generate/domains.d.ts +29 -0
  59. package/dist/generate/domains.d.ts.map +1 -0
  60. package/dist/generate/domains.js +145 -0
  61. package/dist/generate/domains.js.map +1 -0
  62. package/dist/generate/index.d.ts +78 -0
  63. package/dist/generate/index.d.ts.map +1 -0
  64. package/dist/generate/index.js +301 -0
  65. package/dist/generate/index.js.map +1 -0
  66. package/dist/generate/util.d.ts +46 -0
  67. package/dist/generate/util.d.ts.map +1 -0
  68. package/dist/generate/util.js +123 -0
  69. package/dist/generate/util.js.map +1 -0
  70. package/dist/index.d.ts +8 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +8 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/schema-model.d.ts +1853 -0
  75. package/dist/schema-model.d.ts.map +1 -0
  76. package/dist/schema-model.js +463 -0
  77. package/dist/schema-model.js.map +1 -0
  78. package/dist/snapshot/diff.d.ts +258 -0
  79. package/dist/snapshot/diff.d.ts.map +1 -0
  80. package/dist/snapshot/diff.js +151 -0
  81. package/dist/snapshot/diff.js.map +1 -0
  82. package/dist/snapshot/hash.d.ts +23 -0
  83. package/dist/snapshot/hash.d.ts.map +1 -0
  84. package/dist/snapshot/hash.js +47 -0
  85. package/dist/snapshot/hash.js.map +1 -0
  86. package/dist/snapshot/index.d.ts +28 -0
  87. package/dist/snapshot/index.d.ts.map +1 -0
  88. package/dist/snapshot/index.js +26 -0
  89. package/dist/snapshot/index.js.map +1 -0
  90. package/dist/snapshot/sha256.d.ts +14 -0
  91. package/dist/snapshot/sha256.d.ts.map +1 -0
  92. package/dist/snapshot/sha256.js +99 -0
  93. package/dist/snapshot/sha256.js.map +1 -0
  94. package/package.json +37 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-model.d.ts","sourceRoot":"","sources":["../src/schema-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,UAAU,EAAG,CAAU,CAAC;AAErC,eAAO,MAAM,QAAQ,qDAAsD,CAAC;AAC5E,yDAAyD;AACzD,eAAO,MAAM,aAAa;;;;;EAAmB,CAAC;AAC9C,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,eAAO,MAAM,cAAc,iGASjB,CAAC;AACX,eAAO,MAAM,kBAAkB;;;;;;;;;EAAyB,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,0EAA0E;AAC1E,eAAO,MAAM,aAAa,2MAoBhB,CAAC;AACX,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;EAAwB,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,qEAAqE;AACrE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;4BAO5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;kBAiBpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,mEAAmE;AACnE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;kBAA4B,CAAC;AAC/D,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAElD,uHAAuH;AACvH,eAAO,MAAM,aAAa;;;;;;;;;;kBAOxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,eAAO,MAAM,gBAAgB;;;;;;;;kBAU3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;qBAKnB,CAAC;AACd,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,aAAa,qXA+BhB,CAAC;AACX,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAwB,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,yEAAyE;AACzE,eAAO,MAAM,SAAS,2GAUZ,CAAC;AACX,eAAO,MAAM,aAAa;;;;;;;;;;EAAoB,CAAC;AAC/C,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,yEAAyE;AACzE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmBhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,2DAA2D;AAC3D,eAAO,MAAM,WAAW,wFAQd,CAAC;AACX,eAAO,MAAM,eAAe;;;;;;;;EAAsB,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;kBAe/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4B5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAwD5D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAG1B,CAAC;AACJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE3D,eAAO,MAAM,UAAU,0EAA2E,CAAC;AACnG,eAAO,MAAM,cAAc;;;;;;EAAqB,CAAC;AACjD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,cAAc,0FAMjB,CAAC;AACX,eAAO,MAAM,kBAAkB;;;;;;EAAyB,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,aAAa,wDAAyD,CAAC;AACpF,eAAO,MAAM,iBAAiB;;;;EAAwB,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,QAAA,MAAM,sBAAsB;;;kBAG1B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,kEAAkE;AAClE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAuBzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB;;;;kBAK7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,gBAAgB;;;;;kBAK3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAyB1D;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6E9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAsB,CAAC;AACrD,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAG/D;AAED,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,2BAAqB,CAAC"}
@@ -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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"}