@weave-kit/engine 0.4.0 → 0.5.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/dist/adapters/openapi/schema.d.ts.map +1 -1
- package/dist/adapters/openapi/schema.js +7 -3
- package/dist/adapters/openapi/schema.js.map +1 -1
- package/dist/cli/commands/field-add.d.ts.map +1 -1
- package/dist/cli/commands/field-add.js +12 -6
- package/dist/cli/commands/field-add.js.map +1 -1
- package/dist/cli/commands/field-types.d.ts.map +1 -1
- package/dist/cli/commands/field-types.js +10 -1
- package/dist/cli/commands/field-types.js.map +1 -1
- package/dist/cli/commands/schema-map.d.ts.map +1 -1
- package/dist/cli/commands/schema-map.js +6 -0
- package/dist/cli/commands/schema-map.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/types/commands.d.ts +2 -0
- package/dist/cli/types/commands.d.ts.map +1 -1
- package/dist/core/api/error.js +1 -1
- package/dist/core/api/error.js.map +1 -1
- package/dist/core/i18n/ar.d.ts.map +1 -1
- package/dist/core/i18n/ar.js +22 -0
- package/dist/core/i18n/ar.js.map +1 -1
- package/dist/core/i18n/de.d.ts.map +1 -1
- package/dist/core/i18n/de.js +22 -0
- package/dist/core/i18n/de.js.map +1 -1
- package/dist/core/i18n/en.d.ts +22 -0
- package/dist/core/i18n/en.d.ts.map +1 -1
- package/dist/core/i18n/en.js +22 -0
- package/dist/core/i18n/en.js.map +1 -1
- package/dist/core/i18n/es.d.ts.map +1 -1
- package/dist/core/i18n/es.js +22 -0
- package/dist/core/i18n/es.js.map +1 -1
- package/dist/core/i18n/fr.d.ts.map +1 -1
- package/dist/core/i18n/fr.js +22 -0
- package/dist/core/i18n/fr.js.map +1 -1
- package/dist/core/i18n/hi.d.ts.map +1 -1
- package/dist/core/i18n/hi.js +22 -0
- package/dist/core/i18n/hi.js.map +1 -1
- package/dist/core/i18n/id.d.ts.map +1 -1
- package/dist/core/i18n/id.js +22 -0
- package/dist/core/i18n/id.js.map +1 -1
- package/dist/core/i18n/ja.d.ts.map +1 -1
- package/dist/core/i18n/ja.js +22 -0
- package/dist/core/i18n/ja.js.map +1 -1
- package/dist/core/i18n/ko.d.ts.map +1 -1
- package/dist/core/i18n/ko.js +22 -0
- package/dist/core/i18n/ko.js.map +1 -1
- package/dist/core/i18n/pt.d.ts.map +1 -1
- package/dist/core/i18n/pt.js +22 -0
- package/dist/core/i18n/pt.js.map +1 -1
- package/dist/core/i18n/ru.d.ts.map +1 -1
- package/dist/core/i18n/ru.js +22 -0
- package/dist/core/i18n/ru.js.map +1 -1
- package/dist/core/i18n/vi.d.ts.map +1 -1
- package/dist/core/i18n/vi.js +22 -0
- package/dist/core/i18n/vi.js.map +1 -1
- package/dist/core/i18n/zh-hant.d.ts.map +1 -1
- package/dist/core/i18n/zh-hant.js +22 -0
- package/dist/core/i18n/zh-hant.js.map +1 -1
- package/dist/core/i18n/zh.d.ts.map +1 -1
- package/dist/core/i18n/zh.js +22 -0
- package/dist/core/i18n/zh.js.map +1 -1
- package/dist/core/object/describe.d.ts +29 -1
- package/dist/core/object/describe.d.ts.map +1 -1
- package/dist/core/object/describe.js +34 -4
- package/dist/core/object/describe.js.map +1 -1
- package/dist/core/object/gen-types.d.ts.map +1 -1
- package/dist/core/object/gen-types.js +2 -0
- package/dist/core/object/gen-types.js.map +1 -1
- package/dist/core/object/graph.d.ts +3 -0
- package/dist/core/object/graph.d.ts.map +1 -1
- package/dist/core/object/graph.js +47 -1
- package/dist/core/object/graph.js.map +1 -1
- package/dist/core/object/index.d.ts +1 -1
- package/dist/core/object/index.d.ts.map +1 -1
- package/dist/core/object/index.js.map +1 -1
- package/dist/core/object/migrations.d.ts.map +1 -1
- package/dist/core/object/migrations.js +6 -0
- package/dist/core/object/migrations.js.map +1 -1
- package/dist/core/object/registry.js +1 -1
- package/dist/core/object/registry.js.map +1 -1
- package/dist/core/object/schema-version.d.ts +1 -1
- package/dist/core/object/schema-version.js +1 -1
- package/dist/core/object/validate/constraints.d.ts +9 -0
- package/dist/core/object/validate/constraints.d.ts.map +1 -0
- package/dist/core/object/validate/constraints.js +45 -0
- package/dist/core/object/validate/constraints.js.map +1 -0
- package/dist/core/object/validate/field.d.ts.map +1 -1
- package/dist/core/object/validate/field.js +105 -32
- package/dist/core/object/validate/field.js.map +1 -1
- package/dist/core/object/validate/object.d.ts.map +1 -1
- package/dist/core/object/validate/object.js +3 -0
- package/dist/core/object/validate/object.js.map +1 -1
- package/dist/core/storage/diff.d.ts +6 -0
- package/dist/core/storage/diff.d.ts.map +1 -1
- package/dist/core/storage/diff.js +21 -2
- package/dist/core/storage/diff.js.map +1 -1
- package/dist/core/storage/map.d.ts +14 -5
- package/dist/core/storage/map.d.ts.map +1 -1
- package/dist/core/storage/map.js +129 -15
- package/dist/core/storage/map.js.map +1 -1
- package/dist/core/storage/report.d.ts +10 -0
- package/dist/core/storage/report.d.ts.map +1 -1
- package/dist/core/storage/report.js +14 -2
- package/dist/core/storage/report.js.map +1 -1
- package/dist/core/types/field-type.d.ts +56 -5
- package/dist/core/types/field-type.d.ts.map +1 -1
- package/dist/core/types/field-type.js +19 -3
- package/dist/core/types/field-type.js.map +1 -1
- package/dist/core/types/fields.d.ts +13 -1
- package/dist/core/types/fields.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +6 -6
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +2 -2
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/object.d.ts +9 -1
- package/dist/core/types/object.d.ts.map +1 -1
- package/dist/core/types/values.d.ts +5 -0
- package/dist/core/types/values.d.ts.map +1 -1
- package/dist/core/types/values.js +4 -0
- package/dist/core/types/values.js.map +1 -1
- package/dist/runtime/data-access/query.d.ts.map +1 -1
- package/dist/runtime/data-access/query.js +18 -0
- package/dist/runtime/data-access/query.js.map +1 -1
- package/dist/runtime/data-access/validate.d.ts.map +1 -1
- package/dist/runtime/data-access/validate.js +124 -41
- package/dist/runtime/data-access/validate.js.map +1 -1
- package/dist/runtime/fieldtypes/loader.d.ts.map +1 -1
- package/dist/runtime/fieldtypes/loader.js +72 -1
- package/dist/runtime/fieldtypes/loader.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/core/storage/map.js
CHANGED
|
@@ -1,12 +1,68 @@
|
|
|
1
1
|
import { DEFAULT_FIELD_TYPE_REGISTRY, fieldBase } from '../types/index.js';
|
|
2
|
+
import { SchemaError } from '../types/errors.js';
|
|
2
3
|
import { FIELD_TYPES, ON_DELETE_ACTIONS } from '../types/values.js';
|
|
4
|
+
/** base PostgreSQL type names a registered `storage.pgType` may return */
|
|
5
|
+
const SAFE_PG_BASE = new Set([
|
|
6
|
+
'VARCHAR',
|
|
7
|
+
'CHARACTER VARYING',
|
|
8
|
+
'CHAR',
|
|
9
|
+
'BPCHAR',
|
|
10
|
+
'TEXT',
|
|
11
|
+
'SMALLINT',
|
|
12
|
+
'INTEGER',
|
|
13
|
+
'INT',
|
|
14
|
+
'INT2',
|
|
15
|
+
'INT4',
|
|
16
|
+
'INT8',
|
|
17
|
+
'BIGINT',
|
|
18
|
+
'NUMERIC',
|
|
19
|
+
'DECIMAL',
|
|
20
|
+
'REAL',
|
|
21
|
+
'DOUBLE PRECISION',
|
|
22
|
+
'BOOLEAN',
|
|
23
|
+
'DATE',
|
|
24
|
+
'TIME',
|
|
25
|
+
'TIMETZ',
|
|
26
|
+
'TIMESTAMP',
|
|
27
|
+
'TIMESTAMPTZ',
|
|
28
|
+
'TIMESTAMP WITH TIME ZONE',
|
|
29
|
+
'TIMESTAMP WITHOUT TIME ZONE',
|
|
30
|
+
'JSON',
|
|
31
|
+
'JSONB',
|
|
32
|
+
'UUID',
|
|
33
|
+
'MONEY',
|
|
34
|
+
]);
|
|
35
|
+
const SAFE_PG_RE = /^([A-Z][A-Z0-9_ ]*?)(\(\d+(?:\s*,\s*\d+)?\))?(\[\])?$/;
|
|
36
|
+
/**
|
|
37
|
+
* True when a registered `storage.pgType` output is a safe PostgreSQL column
|
|
38
|
+
* type: a known base type with optional numeric parameters and an optional
|
|
39
|
+
* array suffix. Rejects anything that could inject SQL (quotes, semicolons).
|
|
40
|
+
*/
|
|
41
|
+
export function isSafePgType(value) {
|
|
42
|
+
const match = SAFE_PG_RE.exec(value.trim().toUpperCase());
|
|
43
|
+
if (match === null)
|
|
44
|
+
return false;
|
|
45
|
+
return SAFE_PG_BASE.has(match[1].trim());
|
|
46
|
+
}
|
|
3
47
|
/**
|
|
4
48
|
* Map a field's declared type to a PostgreSQL column type. Dispatch is driven by
|
|
5
49
|
* the type's **base** primitive (resolved through the field-type registry), so a
|
|
6
|
-
* user/plugin registered type inherits its base's storage automatically
|
|
50
|
+
* user/plugin registered type inherits its base's storage automatically — unless
|
|
51
|
+
* it declares a custom `storage.pgType` hook (whose output is safety-checked).
|
|
7
52
|
* `targetPkType` is the mapped PK type of the target object (for `relation`).
|
|
8
53
|
*/
|
|
9
54
|
export function pgType(field, targetPkType, registry = DEFAULT_FIELD_TYPE_REGISTRY) {
|
|
55
|
+
const descriptor = registry.get(field.type);
|
|
56
|
+
if (descriptor?.storage !== undefined) {
|
|
57
|
+
const mapped = descriptor.storage.pgType(field);
|
|
58
|
+
if (typeof mapped !== 'string' || !isSafePgType(mapped)) {
|
|
59
|
+
throw new SchemaError('fieldtype.storage.invalid', {
|
|
60
|
+
name: field.type,
|
|
61
|
+
detail: `storage.pgType returned "${String(mapped)}", which is not a safe PostgreSQL type`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return mapped.trim().toUpperCase();
|
|
65
|
+
}
|
|
10
66
|
const base = fieldBase(registry, field.type);
|
|
11
67
|
switch (base) {
|
|
12
68
|
case FIELD_TYPES.STRING:
|
|
@@ -80,46 +136,104 @@ export function defaultExpr(field, registry = DEFAULT_FIELD_TYPE_REGISTRY) {
|
|
|
80
136
|
const ARRAY_ELEMENT_UDT = {
|
|
81
137
|
TEXT: 'text',
|
|
82
138
|
VARCHAR: 'varchar',
|
|
139
|
+
'CHARACTER VARYING': 'varchar',
|
|
140
|
+
CHAR: 'bpchar',
|
|
141
|
+
BPCHAR: 'bpchar',
|
|
142
|
+
SMALLINT: 'int2',
|
|
143
|
+
INT2: 'int2',
|
|
83
144
|
INTEGER: 'int4',
|
|
145
|
+
INT: 'int4',
|
|
146
|
+
INT4: 'int4',
|
|
147
|
+
BIGINT: 'int8',
|
|
148
|
+
INT8: 'int8',
|
|
149
|
+
NUMERIC: 'numeric',
|
|
150
|
+
DECIMAL: 'numeric',
|
|
151
|
+
REAL: 'float4',
|
|
152
|
+
'DOUBLE PRECISION': 'float8',
|
|
153
|
+
BOOLEAN: 'bool',
|
|
154
|
+
DATE: 'date',
|
|
155
|
+
TIME: 'time',
|
|
156
|
+
TIMETZ: 'timetz',
|
|
157
|
+
TIMESTAMP: 'timestamp',
|
|
158
|
+
TIMESTAMPTZ: 'timestamptz',
|
|
159
|
+
'TIMESTAMP WITH TIME ZONE': 'timestamptz',
|
|
160
|
+
'TIMESTAMP WITHOUT TIME ZONE': 'timestamp',
|
|
161
|
+
JSON: 'json',
|
|
162
|
+
JSONB: 'jsonb',
|
|
163
|
+
UUID: 'uuid',
|
|
164
|
+
MONEY: 'money',
|
|
84
165
|
};
|
|
85
166
|
/**
|
|
86
167
|
* Compare a declared column type (`pgType()` output, e.g. `VARCHAR(255)`,
|
|
87
|
-
* `NUMERIC(12,2)`, `TEXT[]
|
|
88
|
-
* the `weave schema:map` drift report. Length on
|
|
89
|
-
* tables often declare an unbounded/bespoke
|
|
90
|
-
* compared only when the declared type
|
|
168
|
+
* `NUMERIC(12,2)`, `TEXT[]`, or a custom `storage.pgType` value) against a live
|
|
169
|
+
* `information_schema` column, for the `weave schema:map` drift report. Length on
|
|
170
|
+
* `VARCHAR` is ignored (brownfield tables often declare an unbounded/bespoke
|
|
171
|
+
* varchar); numeric precision/scale is compared only when the declared type
|
|
172
|
+
* specifies them. Accepts the same type vocabulary as `isSafePgType`, so a
|
|
173
|
+
* custom storage mapping never reports a false drift.
|
|
91
174
|
*/
|
|
92
175
|
export function pgTypeMatches(expected, actual) {
|
|
93
176
|
const exp = expected.trim().toUpperCase();
|
|
94
|
-
|
|
95
|
-
const isArray = actual.dataType.toUpperCase() === 'ARRAY' || actual.udtName?.startsWith('_') === true;
|
|
96
|
-
if (!isArray)
|
|
97
|
-
return false;
|
|
98
|
-
const udt = actual.udtName?.replace(/^_/, '').toLowerCase();
|
|
99
|
-
return ARRAY_ELEMENT_UDT[exp.slice(0, -2)] === udt;
|
|
100
|
-
}
|
|
101
|
-
const match = /^([A-Z]+)(?:\(([^)]*)\))?$/.exec(exp);
|
|
177
|
+
const match = /^([A-Z][A-Z ]*?)(?:\(([^)]*)\))?(\[\])?$/.exec(exp);
|
|
102
178
|
if (match === null)
|
|
103
179
|
return false;
|
|
104
|
-
const base = match[1];
|
|
180
|
+
const base = match[1].trim();
|
|
105
181
|
const args = match[2];
|
|
182
|
+
const isArray = match[3] !== undefined;
|
|
183
|
+
if (isArray) {
|
|
184
|
+
const liveIsArray = actual.dataType.toUpperCase() === 'ARRAY' || actual.udtName?.startsWith('_') === true;
|
|
185
|
+
if (!liveIsArray)
|
|
186
|
+
return false;
|
|
187
|
+
const udt = actual.udtName?.replace(/^_/, '').toLowerCase();
|
|
188
|
+
return ARRAY_ELEMENT_UDT[base] === udt;
|
|
189
|
+
}
|
|
106
190
|
const actualBase = actual.dataType.toUpperCase();
|
|
107
191
|
switch (base) {
|
|
108
192
|
case 'VARCHAR':
|
|
193
|
+
case 'CHARACTER VARYING':
|
|
109
194
|
return actualBase === 'CHARACTER VARYING' || actualBase === 'VARCHAR';
|
|
195
|
+
case 'CHAR':
|
|
196
|
+
case 'BPCHAR':
|
|
197
|
+
return actualBase === 'CHARACTER' || actualBase === 'CHAR' || actualBase === 'BPCHAR';
|
|
110
198
|
case 'TEXT':
|
|
111
199
|
return actualBase === 'TEXT';
|
|
200
|
+
case 'SMALLINT':
|
|
201
|
+
case 'INT2':
|
|
202
|
+
return actualBase === 'SMALLINT' || actualBase === 'INT2';
|
|
112
203
|
case 'INTEGER':
|
|
204
|
+
case 'INT':
|
|
205
|
+
case 'INT4':
|
|
113
206
|
return actualBase === 'INTEGER' || actualBase === 'INT' || actualBase === 'INT4';
|
|
207
|
+
case 'BIGINT':
|
|
208
|
+
case 'INT8':
|
|
209
|
+
return actualBase === 'BIGINT' || actualBase === 'INT8';
|
|
210
|
+
case 'REAL':
|
|
211
|
+
return actualBase === 'REAL' || actualBase === 'FLOAT4';
|
|
212
|
+
case 'DOUBLE PRECISION':
|
|
213
|
+
return actualBase === 'DOUBLE PRECISION' || actualBase === 'FLOAT8';
|
|
114
214
|
case 'BOOLEAN':
|
|
115
215
|
return actualBase === 'BOOLEAN' || actualBase === 'BOOL';
|
|
116
216
|
case 'DATE':
|
|
117
217
|
return actualBase === 'DATE';
|
|
218
|
+
case 'TIME':
|
|
219
|
+
return actualBase === 'TIME' || actualBase === 'TIME WITHOUT TIME ZONE';
|
|
220
|
+
case 'TIMETZ':
|
|
221
|
+
return actualBase === 'TIME WITH TIME ZONE';
|
|
222
|
+
case 'TIMESTAMP':
|
|
223
|
+
return actualBase === 'TIMESTAMP' || actualBase === 'TIMESTAMP WITHOUT TIME ZONE';
|
|
118
224
|
case 'TIMESTAMPTZ':
|
|
225
|
+
case 'TIMESTAMP WITH TIME ZONE':
|
|
119
226
|
return actualBase === 'TIMESTAMP WITH TIME ZONE';
|
|
227
|
+
case 'JSON':
|
|
228
|
+
return actualBase === 'JSON';
|
|
120
229
|
case 'JSONB':
|
|
121
230
|
return actualBase === 'JSONB';
|
|
122
|
-
case '
|
|
231
|
+
case 'UUID':
|
|
232
|
+
return actualBase === 'UUID';
|
|
233
|
+
case 'MONEY':
|
|
234
|
+
return actualBase === 'MONEY';
|
|
235
|
+
case 'NUMERIC':
|
|
236
|
+
case 'DECIMAL': {
|
|
123
237
|
if (actualBase !== 'NUMERIC' && actualBase !== 'DECIMAL')
|
|
124
238
|
return false;
|
|
125
239
|
if (args === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/core/storage/map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAA0B,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEpE
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/core/storage/map.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,6 +62,13 @@ export interface MappingFk {
|
|
|
62
62
|
/** the FK constraint exists on the live table */
|
|
63
63
|
present: boolean;
|
|
64
64
|
}
|
|
65
|
+
/** a declared table-level UNIQUE constraint (composite/scoped) */
|
|
66
|
+
export interface MappingConstraint {
|
|
67
|
+
name: string;
|
|
68
|
+
columns: string[];
|
|
69
|
+
/** the backing unique index/constraint exists on the live table */
|
|
70
|
+
present: boolean;
|
|
71
|
+
}
|
|
65
72
|
export interface MappingRls {
|
|
66
73
|
enabled: boolean;
|
|
67
74
|
owner: string;
|
|
@@ -77,6 +84,8 @@ export interface MappingTable {
|
|
|
77
84
|
columns: MappingColumn[];
|
|
78
85
|
indexes: MappingIndex[];
|
|
79
86
|
fks: MappingFk[];
|
|
87
|
+
/** declared table-level UNIQUE constraints (composite/scoped) */
|
|
88
|
+
constraints: MappingConstraint[];
|
|
80
89
|
/** `details` edges declared on the object (no column on the parent table) */
|
|
81
90
|
details: Array<{
|
|
82
91
|
field: string;
|
|
@@ -99,6 +108,7 @@ export interface MappingTotals {
|
|
|
99
108
|
columnsExtra: number;
|
|
100
109
|
indexDrift: number;
|
|
101
110
|
fkDrift: number;
|
|
111
|
+
constraintDrift: number;
|
|
102
112
|
}
|
|
103
113
|
export interface MappingReport {
|
|
104
114
|
tables: MappingTable[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/core/storage/report.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/core/storage/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,10 @@ function schemaTypeOf(field, fk) {
|
|
|
30
30
|
case FIELD_TYPES.MULTI_RELATION:
|
|
31
31
|
return `${field.type} → ${field.target}`;
|
|
32
32
|
case FIELD_TYPES.ENUM:
|
|
33
|
-
|
|
33
|
+
if (Array.isArray(field.options)) {
|
|
34
|
+
return `${field.type}[${field.options.length}]${field.multiple === true ? '[]' : ''}`;
|
|
35
|
+
}
|
|
36
|
+
return `enum → ${field.options.from.object}.${field.options.from.column ?? 'pk'}${field.multiple === true ? '[]' : ''}`;
|
|
34
37
|
case FIELD_TYPES.IMAGE:
|
|
35
38
|
return field.multiple === true ? `${field.type}[]` : field.type;
|
|
36
39
|
default:
|
|
@@ -122,6 +125,11 @@ export function buildMappingReport(defs, actual, locale, registry = DEFAULT_FIEL
|
|
|
122
125
|
...fk,
|
|
123
126
|
present: actualTable?.fks.some((a) => a.column === fk.column && a.refTable === fk.refTable) === true,
|
|
124
127
|
}));
|
|
128
|
+
const constraints = expected.uniques.map((u) => ({
|
|
129
|
+
name: u.name,
|
|
130
|
+
columns: [...u.columns],
|
|
131
|
+
present: actualTable?.indexNames.includes(u.name) === true,
|
|
132
|
+
}));
|
|
125
133
|
const details = def.fields
|
|
126
134
|
.filter((field) => field.type === FIELD_TYPES.DETAILS)
|
|
127
135
|
.map((field) => ({ field: field.name, target: field.target }));
|
|
@@ -136,7 +144,8 @@ export function buildMappingReport(defs, actual, locale, registry = DEFAULT_FIEL
|
|
|
136
144
|
const drift = actualTable === undefined ||
|
|
137
145
|
columns.some((c) => c.status !== 'ok' && c.status !== 'extra') ||
|
|
138
146
|
indexes.some((idx) => !idx.present) ||
|
|
139
|
-
fks.some((fk) => !fk.present)
|
|
147
|
+
fks.some((fk) => !fk.present) ||
|
|
148
|
+
constraints.some((c) => !c.present);
|
|
140
149
|
if (actualTable === undefined) {
|
|
141
150
|
warnings.push(`table "${def.name}" does not exist yet (weave migrate would CREATE it)`);
|
|
142
151
|
}
|
|
@@ -148,6 +157,7 @@ export function buildMappingReport(defs, actual, locale, registry = DEFAULT_FIEL
|
|
|
148
157
|
columns,
|
|
149
158
|
indexes,
|
|
150
159
|
fks,
|
|
160
|
+
constraints,
|
|
151
161
|
details,
|
|
152
162
|
rls,
|
|
153
163
|
warnings,
|
|
@@ -165,12 +175,14 @@ export function buildMappingReport(defs, actual, locale, registry = DEFAULT_FIEL
|
|
|
165
175
|
columnsExtra: 0,
|
|
166
176
|
indexDrift: 0,
|
|
167
177
|
fkDrift: 0,
|
|
178
|
+
constraintDrift: 0,
|
|
168
179
|
};
|
|
169
180
|
for (const table of tables) {
|
|
170
181
|
if (!table.exists)
|
|
171
182
|
totals.tablesMissing += 1;
|
|
172
183
|
totals.indexDrift += table.indexes.filter((idx) => !idx.present).length;
|
|
173
184
|
totals.fkDrift += table.fks.filter((fk) => !fk.present).length;
|
|
185
|
+
totals.constraintDrift += table.constraints.filter((c) => !c.present).length;
|
|
174
186
|
for (const col of table.columns) {
|
|
175
187
|
totals.columns += 1;
|
|
176
188
|
if (col.status === 'ok')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/core/storage/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/core/storage/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import type { FieldType } from './values.js';
|
|
2
|
+
import type { RegisteredField } from './fields.js';
|
|
2
3
|
/**
|
|
3
4
|
* Field-type registration contract (open registration).
|
|
4
5
|
*
|
|
5
6
|
* Built-in field types are expressed as registrations too; user/plugin types
|
|
6
7
|
* declare a `base` primitive and inherit all behaviour (storage / TS / MCP /
|
|
7
|
-
* OpenAPI / describe) from it. The engine resolves every
|
|
8
|
-
* immutable {@link FieldTypeRegistry} built at load time
|
|
9
|
-
* no mutable global).
|
|
8
|
+
* OpenAPI / describe / write validation) from it. The engine resolves every
|
|
9
|
+
* field through an immutable {@link FieldTypeRegistry} built at load time
|
|
10
|
+
* (explicit injection — no mutable global).
|
|
11
|
+
*
|
|
12
|
+
* Beyond the base, a registration may declare:
|
|
13
|
+
* - `attrs` — typed extra attributes a field of this type accepts (validated);
|
|
14
|
+
* - `storage.pgType` — a pure function mapping the field to its PostgreSQL
|
|
15
|
+
* column type (its output is validated against a safe grammar);
|
|
16
|
+
* - `validate` — a pure, synchronous write-time check (returns a detail string
|
|
17
|
+
* to reject, or `undefined` to allow).
|
|
10
18
|
*/
|
|
11
19
|
/** single source of truth for registered-type name shape (namespace segment required) */
|
|
12
20
|
export declare const FIELD_TYPE_NAME_PATTERN = "^[a-z][a-z0-9]*(_[a-z0-9]+)+$";
|
|
@@ -14,6 +22,45 @@ export declare const FIELD_TYPE_NAME_PATTERN = "^[a-z][a-z0-9]*(_[a-z0-9]+)+$";
|
|
|
14
22
|
export interface FieldTypeUiHints {
|
|
15
23
|
visual?: string;
|
|
16
24
|
}
|
|
25
|
+
/** value kinds a declared extra attribute (`AttrSpec.type`) may take */
|
|
26
|
+
export declare const ATTR_KINDS: {
|
|
27
|
+
readonly STRING: "string";
|
|
28
|
+
readonly NUMBER: "number";
|
|
29
|
+
readonly INTEGER: "integer";
|
|
30
|
+
readonly BOOLEAN: "boolean";
|
|
31
|
+
readonly JSON: "json";
|
|
32
|
+
readonly ENUM: "enum";
|
|
33
|
+
};
|
|
34
|
+
export type AttrKind = typeof ATTR_KINDS[keyof typeof ATTR_KINDS];
|
|
35
|
+
/** typed spec for one extra attribute a registered type accepts */
|
|
36
|
+
export interface AttrSpec {
|
|
37
|
+
/** the value kind of the attribute */
|
|
38
|
+
type: AttrKind;
|
|
39
|
+
/** allowed values (enum only) */
|
|
40
|
+
values?: readonly string[];
|
|
41
|
+
/** the attribute must be declared on every field of this type */
|
|
42
|
+
required?: boolean;
|
|
43
|
+
/** default value (validated against the spec; not injected into the field) */
|
|
44
|
+
default?: unknown;
|
|
45
|
+
/** human description (docs / describe) */
|
|
46
|
+
description?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Custom storage mapping for a registered type. `pgType` must be pure and
|
|
50
|
+
* synchronous; its return value must be a PostgreSQL column type from the
|
|
51
|
+
* engine's safe grammar (validated before it reaches DDL). Only valid on
|
|
52
|
+
* non-relation value bases.
|
|
53
|
+
*/
|
|
54
|
+
export interface FieldTypeStorage {
|
|
55
|
+
pgType: (field: RegisteredField) => string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Write-time check for a registered type: return a human-readable detail to
|
|
59
|
+
* reject the value, or `undefined` to allow it. Must be pure and synchronous
|
|
60
|
+
* (no I/O); DB-backed or cross-record rules belong to server hooks or a
|
|
61
|
+
* data-driven `enum` (`options.from`) instead.
|
|
62
|
+
*/
|
|
63
|
+
export type FieldTypeValidator = (field: RegisteredField, value: unknown) => string | undefined;
|
|
17
64
|
/** one field-type registration (built-in or user-defined) */
|
|
18
65
|
export interface FieldTypeRegistration {
|
|
19
66
|
/** the type name as it appears in `schema.json` (namespace already applied) */
|
|
@@ -30,8 +77,12 @@ export interface FieldTypeRegistration {
|
|
|
30
77
|
ui?: FieldTypeUiHints;
|
|
31
78
|
/** OpenAPI `format` keyword for string-based types (e.g. `email`, `uri`) */
|
|
32
79
|
openApiFormat?: string;
|
|
33
|
-
/** extra attributes accepted on a field of this type (beyond the base attributes) */
|
|
34
|
-
attrs?:
|
|
80
|
+
/** typed extra attributes accepted on a field of this type (beyond the base attributes) */
|
|
81
|
+
attrs?: Record<string, AttrSpec>;
|
|
82
|
+
/** custom PostgreSQL column mapping (non-relation value bases only) */
|
|
83
|
+
storage?: FieldTypeStorage;
|
|
84
|
+
/** pure, synchronous write-time value check (non-relation value bases only) */
|
|
85
|
+
validate?: FieldTypeValidator;
|
|
35
86
|
/**
|
|
36
87
|
* reverse hint for `weave introspect`: a live PostgreSQL column type that maps
|
|
37
88
|
* back to this registered type (e.g. `{ pgType: 'NUMERIC(12,2)' }`). Only valid
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-type.d.ts","sourceRoot":"","sources":["../../../src/core/types/field-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"field-type.d.ts","sourceRoot":"","sources":["../../../src/core/types/field-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;;;;;;;;;GAeG;AAEH,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,kCAAkC,CAAC;AAEvE,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wEAAwE;AACxE,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAElE,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;AAEhG,6DAA6D;AAC7D,MAAM,WAAW,qBAAqB;IACpC,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mDAAmD;IACnD,EAAE,CAAC,EAAE,gBAAgB,CAAC;IACtB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,uEAAuE;IACvE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED,+CAA+C;AAC/C,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC"}
|
|
@@ -3,10 +3,26 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Built-in field types are expressed as registrations too; user/plugin types
|
|
5
5
|
* declare a `base` primitive and inherit all behaviour (storage / TS / MCP /
|
|
6
|
-
* OpenAPI / describe) from it. The engine resolves every
|
|
7
|
-
* immutable {@link FieldTypeRegistry} built at load time
|
|
8
|
-
* no mutable global).
|
|
6
|
+
* OpenAPI / describe / write validation) from it. The engine resolves every
|
|
7
|
+
* field through an immutable {@link FieldTypeRegistry} built at load time
|
|
8
|
+
* (explicit injection — no mutable global).
|
|
9
|
+
*
|
|
10
|
+
* Beyond the base, a registration may declare:
|
|
11
|
+
* - `attrs` — typed extra attributes a field of this type accepts (validated);
|
|
12
|
+
* - `storage.pgType` — a pure function mapping the field to its PostgreSQL
|
|
13
|
+
* column type (its output is validated against a safe grammar);
|
|
14
|
+
* - `validate` — a pure, synchronous write-time check (returns a detail string
|
|
15
|
+
* to reject, or `undefined` to allow).
|
|
9
16
|
*/
|
|
10
17
|
/** single source of truth for registered-type name shape (namespace segment required) */
|
|
11
18
|
export const FIELD_TYPE_NAME_PATTERN = '^[a-z][a-z0-9]*(_[a-z0-9]+)+$';
|
|
19
|
+
/** value kinds a declared extra attribute (`AttrSpec.type`) may take */
|
|
20
|
+
export const ATTR_KINDS = {
|
|
21
|
+
STRING: 'string',
|
|
22
|
+
NUMBER: 'number',
|
|
23
|
+
INTEGER: 'integer',
|
|
24
|
+
BOOLEAN: 'boolean',
|
|
25
|
+
JSON: 'json',
|
|
26
|
+
ENUM: 'enum',
|
|
27
|
+
};
|
|
12
28
|
//# sourceMappingURL=field-type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-type.js","sourceRoot":"","sources":["../../../src/core/types/field-type.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"field-type.js","sourceRoot":"","sources":["../../../src/core/types/field-type.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;AAOvE,wEAAwE;AACxE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACJ,CAAC"}
|
|
@@ -102,9 +102,21 @@ export interface JsonField extends FieldBase {
|
|
|
102
102
|
required?: boolean;
|
|
103
103
|
default?: unknown;
|
|
104
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Enum option source: an inline list of strings, or a data-driven source
|
|
107
|
+
* (`{ from: { object, column? } }`) whose allowed values are the distinct
|
|
108
|
+
* values of a modeled object's column (default: the object's primary key).
|
|
109
|
+
*/
|
|
110
|
+
export type EnumOptions = string[] | {
|
|
111
|
+
from: {
|
|
112
|
+
object: string;
|
|
113
|
+
column?: string;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
105
116
|
export interface EnumField extends FieldBase {
|
|
106
117
|
type: typeof FIELD_TYPES.ENUM;
|
|
107
|
-
options:
|
|
118
|
+
/** inline options, or a data-driven `{ from: { object, column? } }` source */
|
|
119
|
+
options: EnumOptions;
|
|
108
120
|
multiple?: boolean;
|
|
109
121
|
required?: boolean;
|
|
110
122
|
unique?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/core/types/fields.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/core/types/fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
export type { ScalarFieldType, BuiltinFieldType, FieldType, OnDeleteAction } from './fields.js';
|
|
2
|
-
export type { FieldBase, StringField, TextField, IntegerField, NumberField, CurrencyField, BooleanField, DateTimeField, DateField, JsonField, EnumField, RelationField, DetailsField, MultiRelationField, SeqNoField, FieldDefinition, } from './fields.js';
|
|
2
|
+
export type { FieldBase, StringField, TextField, IntegerField, NumberField, CurrencyField, BooleanField, DateTimeField, DateField, JsonField, EnumField, EnumOptions, RelationField, DetailsField, MultiRelationField, SeqNoField, RegisteredField, FieldDefinition, } from './fields.js';
|
|
3
3
|
export type { ReadScope, PermissionDefinition, Permissions } from './permission.js';
|
|
4
4
|
export type { BelongsToEdge, HasManyEdge, MultiRelationEdge, RelationEdge, } from './relation.js';
|
|
5
|
-
export type { IndexDefinition, ObjectDefinition } from './object.js';
|
|
6
|
-
export type { IndexType, SequenceCycle, SequenceToken, DetailsColumn, RelationKind, RowScopeMarker } from './values.js';
|
|
7
|
-
export { DETAILS_COLUMNS, FIELD_TYPES, READ_SCOPES, RELATION_KINDS, ROW_SCOPE_MARKERS } from './values.js';
|
|
5
|
+
export type { IndexDefinition, ConstraintDefinition, ObjectDefinition } from './object.js';
|
|
6
|
+
export type { IndexType, ConstraintType, SequenceCycle, SequenceToken, DetailsColumn, RelationKind, RowScopeMarker } from './values.js';
|
|
7
|
+
export { DETAILS_COLUMNS, FIELD_TYPES, READ_SCOPES, RELATION_KINDS, ROW_SCOPE_MARKERS, CONSTRAINT_TYPES } from './values.js';
|
|
8
8
|
export { primaryFieldOf, primaryKeyOf } from './primaryField.js';
|
|
9
9
|
export { SchemaError } from './errors.js';
|
|
10
10
|
export { buildFieldTypeRegistry, DEFAULT_FIELD_TYPE_REGISTRY, describeFieldType, fieldBase, fieldOpenApiFormat, fieldUiVisual, isRelationLike, isScalarFieldType, PRIMITIVE_FIELD_TYPES, SEMANTIC_FIELD_TYPES, } from './registry.js';
|
|
11
|
-
export type { FieldTypeRegistration, FieldTypeRegistry, FieldTypeUiHints } from './field-type.js';
|
|
12
|
-
export { FIELD_TYPE_NAME_PATTERN } from './field-type.js';
|
|
11
|
+
export type { AttrKind, AttrSpec, FieldTypeRegistration, FieldTypeRegistry, FieldTypeStorage, FieldTypeUiHints, FieldTypeValidator, } from './field-type.js';
|
|
12
|
+
export { ATTR_KINDS, FIELD_TYPE_NAME_PATTERN } from './field-type.js';
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChG,YAAY,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACpF,YAAY,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChG,YAAY,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACpF,YAAY,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxI,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC7H,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/core/types/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { DETAILS_COLUMNS, FIELD_TYPES, READ_SCOPES, RELATION_KINDS, ROW_SCOPE_MARKERS } from './values.js';
|
|
1
|
+
export { DETAILS_COLUMNS, FIELD_TYPES, READ_SCOPES, RELATION_KINDS, ROW_SCOPE_MARKERS, CONSTRAINT_TYPES } from './values.js';
|
|
2
2
|
export { primaryFieldOf, primaryKeyOf } from './primaryField.js';
|
|
3
3
|
export { SchemaError } from './errors.js';
|
|
4
4
|
export { buildFieldTypeRegistry, DEFAULT_FIELD_TYPE_REGISTRY, describeFieldType, fieldBase, fieldOpenApiFormat, fieldUiVisual, isRelationLike, isScalarFieldType, PRIMITIVE_FIELD_TYPES, SEMANTIC_FIELD_TYPES, } from './registry.js';
|
|
5
|
-
export { FIELD_TYPE_NAME_PATTERN } from './field-type.js';
|
|
5
|
+
export { ATTR_KINDS, FIELD_TYPE_NAME_PATTERN } from './field-type.js';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC7H,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAUvB,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import type { FieldDefinition } from './fields.js';
|
|
2
2
|
import type { Permissions } from './permission.js';
|
|
3
|
-
import type { IndexType } from './values.js';
|
|
3
|
+
import type { ConstraintType, IndexType } from './values.js';
|
|
4
4
|
/** a user-declared extra index */
|
|
5
5
|
export interface IndexDefinition {
|
|
6
6
|
type: IndexType;
|
|
7
7
|
fields: string[];
|
|
8
8
|
}
|
|
9
|
+
/** a declarative table-level constraint (currently `unique`, possibly composite/scoped) */
|
|
10
|
+
export interface ConstraintDefinition {
|
|
11
|
+
type: ConstraintType;
|
|
12
|
+
/** one or more field names the constraint spans */
|
|
13
|
+
fields: string[];
|
|
14
|
+
}
|
|
9
15
|
/** a validated object definition (the engine's core metadata unit) */
|
|
10
16
|
export interface ObjectDefinition {
|
|
11
17
|
/**
|
|
@@ -25,6 +31,8 @@ export interface ObjectDefinition {
|
|
|
25
31
|
permissions?: Permissions;
|
|
26
32
|
workflow?: unknown;
|
|
27
33
|
indexes?: IndexDefinition[];
|
|
34
|
+
/** declarative table-level constraints (composite/scoped UNIQUE) */
|
|
35
|
+
constraints?: ConstraintDefinition[];
|
|
28
36
|
/** composite title template, e.g. "{doc_no} {customer_name}" */
|
|
29
37
|
titleTemplate?: string;
|
|
30
38
|
/**
|