@metaobjectsdev/codegen-ts 0.23.1 → 0.24.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/column-mapper.d.ts +32 -0
- package/dist/column-mapper.d.ts.map +1 -1
- package/dist/column-mapper.js +91 -8
- package/dist/column-mapper.js.map +1 -1
- package/dist/enum-meta.d.ts +20 -0
- package/dist/enum-meta.d.ts.map +1 -1
- package/dist/enum-meta.js +32 -1
- package/dist/enum-meta.js.map +1 -1
- package/dist/generator.d.ts +9 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js.map +1 -1
- package/dist/generators/api-field-shape.js +1 -1
- package/dist/generators/api-field-shape.js.map +1 -1
- package/dist/generators/api-model.d.ts.map +1 -1
- package/dist/generators/api-model.js +71 -42
- package/dist/generators/api-model.js.map +1 -1
- package/dist/generators/docs-data-builder.d.ts.map +1 -1
- package/dist/generators/docs-data-builder.js +36 -1
- package/dist/generators/docs-data-builder.js.map +1 -1
- package/dist/generators/docs-data.d.ts +14 -0
- package/dist/generators/docs-data.d.ts.map +1 -1
- package/dist/generators/docs-file.d.ts.map +1 -1
- package/dist/generators/docs-file.js +13 -4
- package/dist/generators/docs-file.js.map +1 -1
- package/dist/generators/extractor-file.d.ts.map +1 -1
- package/dist/generators/extractor-file.js +7 -11
- package/dist/generators/extractor-file.js.map +1 -1
- package/dist/generators/index.d.ts +4 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +5 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/output-parser-file.d.ts.map +1 -1
- package/dist/generators/output-parser-file.js +12 -7
- package/dist/generators/output-parser-file.js.map +1 -1
- package/dist/generators/output-prompt-file.d.ts.map +1 -1
- package/dist/generators/output-prompt-file.js +14 -24
- package/dist/generators/output-prompt-file.js.map +1 -1
- package/dist/generators/requirement-tests.d.ts +44 -0
- package/dist/generators/requirement-tests.d.ts.map +1 -0
- package/dist/generators/requirement-tests.js +127 -0
- package/dist/generators/requirement-tests.js.map +1 -0
- package/dist/generators/requirements-file.d.ts +9 -0
- package/dist/generators/requirements-file.d.ts.map +1 -0
- package/dist/generators/requirements-file.js +53 -0
- package/dist/generators/requirements-file.js.map +1 -0
- package/dist/generators/requirements-markdown.d.ts +10 -0
- package/dist/generators/requirements-markdown.d.ts.map +1 -0
- package/dist/generators/requirements-markdown.js +71 -0
- package/dist/generators/requirements-markdown.js.map +1 -0
- package/dist/generators/requirements-toon.d.ts +3 -0
- package/dist/generators/requirements-toon.d.ts.map +1 -0
- package/dist/generators/requirements-toon.js +47 -0
- package/dist/generators/requirements-toon.js.map +1 -0
- package/dist/generators/requirements-view.d.ts +32 -0
- package/dist/generators/requirements-view.d.ts.map +1 -0
- package/dist/generators/requirements-view.js +64 -0
- package/dist/generators/requirements-view.js.map +1 -0
- package/dist/generators/trace-helper-file.d.ts.map +1 -1
- package/dist/generators/trace-helper-file.js +19 -11
- package/dist/generators/trace-helper-file.js.map +1 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/metaobjects-config.d.ts +12 -20
- package/dist/metaobjects-config.d.ts.map +1 -1
- package/dist/metaobjects-config.js +5 -1
- package/dist/metaobjects-config.js.map +1 -1
- package/dist/orphan-sweep.d.ts +38 -0
- package/dist/orphan-sweep.d.ts.map +1 -0
- package/dist/orphan-sweep.js +129 -0
- package/dist/orphan-sweep.js.map +1 -0
- package/dist/overwrite-policy.d.ts +97 -3
- package/dist/overwrite-policy.d.ts.map +1 -1
- package/dist/overwrite-policy.js +293 -81
- package/dist/overwrite-policy.js.map +1 -1
- package/dist/projection/build-projection-views.d.ts +8 -0
- package/dist/projection/build-projection-views.d.ts.map +1 -1
- package/dist/projection/build-projection-views.js +2 -0
- package/dist/projection/build-projection-views.js.map +1 -1
- package/dist/projection/extract-view-spec.d.ts.map +1 -1
- package/dist/projection/extract-view-spec.js +70 -6
- package/dist/projection/extract-view-spec.js.map +1 -1
- package/dist/reconcile-orphans.d.ts +80 -0
- package/dist/reconcile-orphans.d.ts.map +1 -0
- package/dist/reconcile-orphans.js +61 -0
- package/dist/reconcile-orphans.js.map +1 -0
- package/dist/render-engine/embedded-templates.generated.js +1 -1
- package/dist/render-engine/embedded-templates.generated.js.map +1 -1
- package/dist/requirement-walk.d.ts +57 -0
- package/dist/requirement-walk.d.ts.map +1 -0
- package/dist/requirement-walk.js +94 -0
- package/dist/requirement-walk.js.map +1 -0
- package/dist/runner.d.ts +35 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +217 -21
- package/dist/runner.js.map +1 -1
- package/dist/templates/drizzle-schema.d.ts.map +1 -1
- package/dist/templates/drizzle-schema.js +67 -4
- package/dist/templates/drizzle-schema.js.map +1 -1
- package/dist/templates/extractor.d.ts +4 -4
- package/dist/templates/extractor.d.ts.map +1 -1
- package/dist/templates/extractor.js +18 -22
- package/dist/templates/extractor.js.map +1 -1
- package/dist/templates/filter-allowlist.d.ts.map +1 -1
- package/dist/templates/filter-allowlist.js +4 -2
- package/dist/templates/filter-allowlist.js.map +1 -1
- package/dist/templates/filter-type.d.ts.map +1 -1
- package/dist/templates/filter-type.js +6 -2
- package/dist/templates/filter-type.js.map +1 -1
- package/dist/templates/find-inbound.d.ts +44 -0
- package/dist/templates/find-inbound.d.ts.map +1 -0
- package/dist/templates/find-inbound.js +69 -0
- package/dist/templates/find-inbound.js.map +1 -0
- package/dist/templates/output-format-spec-emitter.d.ts.map +1 -1
- package/dist/templates/output-format-spec-emitter.js +7 -4
- package/dist/templates/output-format-spec-emitter.js.map +1 -1
- package/dist/templates/output-parser.d.ts +8 -3
- package/dist/templates/output-parser.d.ts.map +1 -1
- package/dist/templates/output-parser.js +71 -31
- package/dist/templates/output-parser.js.map +1 -1
- package/dist/templates/output-prompt.d.ts +6 -5
- package/dist/templates/output-prompt.d.ts.map +1 -1
- package/dist/templates/output-prompt.js +26 -37
- package/dist/templates/output-prompt.js.map +1 -1
- package/dist/templates/queries.js +1 -1
- package/dist/templates/queries.js.map +1 -1
- package/dist/templates/requirement-test.d.ts +12 -0
- package/dist/templates/requirement-test.d.ts.map +1 -0
- package/dist/templates/requirement-test.js +120 -0
- package/dist/templates/requirement-test.js.map +1 -0
- package/dist/templates/zod-validators.d.ts.map +1 -1
- package/dist/templates/zod-validators.js +32 -15
- package/dist/templates/zod-validators.js.map +1 -1
- package/package.json +7 -6
- package/src/column-mapper.ts +124 -8
- package/src/enum-meta.ts +37 -1
- package/src/generator.ts +9 -0
- package/src/generators/api-field-shape.ts +1 -1
- package/src/generators/api-model.ts +69 -44
- package/src/generators/docs-data-builder.ts +37 -0
- package/src/generators/docs-data.ts +15 -0
- package/src/generators/docs-file.ts +13 -4
- package/src/generators/extractor-file.ts +7 -11
- package/src/generators/index.ts +11 -0
- package/src/generators/output-parser-file.ts +12 -7
- package/src/generators/output-prompt-file.ts +14 -27
- package/src/generators/requirement-tests.ts +203 -0
- package/src/generators/requirements-file.ts +71 -0
- package/src/generators/requirements-markdown.ts +72 -0
- package/src/generators/requirements-toon.ts +64 -0
- package/src/generators/requirements-view.ts +93 -0
- package/src/generators/trace-helper-file.ts +20 -10
- package/src/index.ts +47 -1
- package/src/metaobjects-config.ts +17 -22
- package/src/orphan-sweep.ts +178 -0
- package/src/overwrite-policy.ts +362 -89
- package/src/projection/build-projection-views.ts +10 -0
- package/src/projection/extract-view-spec.ts +88 -4
- package/src/reconcile-orphans.ts +136 -0
- package/src/reference/barrel.ts +4 -0
- package/src/reference/entity.ts +4 -0
- package/src/reference/queries.ts +4 -0
- package/src/reference/routes.ts +4 -0
- package/src/render-engine/embedded-templates.generated.ts +1 -1
- package/src/requirement-walk.ts +124 -0
- package/src/runner.ts +266 -27
- package/src/templates/drizzle-schema.ts +70 -6
- package/src/templates/extractor.ts +19 -24
- package/src/templates/filter-allowlist.ts +4 -2
- package/src/templates/filter-type.ts +6 -2
- package/src/templates/find-inbound.ts +96 -0
- package/src/templates/output-format-spec-emitter.ts +7 -4
- package/src/templates/output-parser.ts +76 -34
- package/src/templates/output-prompt.ts +29 -42
- package/src/templates/queries.ts +1 -1
- package/src/templates/requirement-test.ts +140 -0
- package/src/templates/zod-validators.ts +32 -15
- package/templates/docs/entity-page.md.mustache +8 -0
|
@@ -22,7 +22,8 @@ import {
|
|
|
22
22
|
IDENTITY_ATTR_FIELDS, IDENTITY_ATTR_GENERATION,
|
|
23
23
|
FIELD_ATTR_STRING_FORMAT, FIELD_ATTR_LENIENT, STRING_FORMAT_EMAIL, STRING_FORMAT_HOSTNAME,
|
|
24
24
|
FIELD_ATTR_REQUIRED, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_DEFAULT,
|
|
25
|
-
FIELD_ATTR_AUTO_SET, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_VALUE_TYPE,
|
|
25
|
+
FIELD_ATTR_AUTO_SET, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_VALUE_TYPE,
|
|
26
|
+
isReadOnlyMutability, isWriteOnceMutability,
|
|
26
27
|
FIELD_ATTR_DB_COLUMN_TYPE, DB_COLUMN_TYPE_JSONB,
|
|
27
28
|
AUTO_SET_ON_CREATE, AUTO_SET_ON_UPDATE,
|
|
28
29
|
VALIDATOR_ATTR_MAX, VALIDATOR_ATTR_MIN, VALIDATOR_ATTR_PATTERN,
|
|
@@ -215,12 +216,13 @@ export function renderInsertSchemaOnly(obj: MetaObject, ctx?: RenderContext): Co
|
|
|
215
216
|
const insertFieldLines: Code[] = [];
|
|
216
217
|
for (const child of obj.fields()) {
|
|
217
218
|
if (autoGenPkFields.has(child.name)) continue;
|
|
218
|
-
// FR-
|
|
219
|
-
// owner; the application has no path to write
|
|
220
|
-
// create-shape schema entirely.
|
|
219
|
+
// FR-037 R1: an @mutability:"readOnly" field is populated by DB / replication /
|
|
220
|
+
// external owner; the application has no path to write it. Exclude from the
|
|
221
|
+
// create-shape schema entirely. ("writeOnce" is NOT excluded here — that is
|
|
222
|
+
// the whole point of the mode: settable on create, frozen after.)
|
|
221
223
|
// #213 — a derived (origin-bearing) field is read-only (FR-024 §7 / ADR-0028):
|
|
222
|
-
// excluded from the Insert/Update/preserving schemas, exactly like
|
|
223
|
-
if (child
|
|
224
|
+
// excluded from the Insert/Update/preserving schemas, exactly like readOnly.
|
|
225
|
+
if (isReadOnlyMutability(child) || child.isDerived()) continue;
|
|
224
226
|
|
|
225
227
|
// FR-017 Tier 1: TPH subtype pins its discriminator field to z.literal(...).
|
|
226
228
|
if (tphPin !== undefined && child.name === tphPin.fieldName) {
|
|
@@ -300,8 +302,9 @@ export function insertSchemaFields(obj: MetaObject): SchemaFieldShape[] {
|
|
|
300
302
|
for (const child of obj.fields()) {
|
|
301
303
|
if (autoGenPkFields.has(child.name)) continue;
|
|
302
304
|
// #213 — a derived (origin-bearing) field is read-only (FR-024 §7 / ADR-0028):
|
|
303
|
-
// excluded from the Insert/Update/preserving schemas, exactly like
|
|
304
|
-
|
|
305
|
+
// excluded from the Insert/Update/preserving schemas, exactly like readOnly.
|
|
306
|
+
// "writeOnce" stays IN the create shape — it is settable exactly once.
|
|
307
|
+
if (isReadOnlyMutability(child) || child.isDerived()) continue;
|
|
305
308
|
if (tphPin !== undefined && child.name === tphPin.fieldName) {
|
|
306
309
|
out.push({ name: child.name, optional: false, pinnedLiteral: tphPin.value });
|
|
307
310
|
continue;
|
|
@@ -335,8 +338,16 @@ export function updateSchemaFields(obj: MetaObject): SchemaFieldShape[] {
|
|
|
335
338
|
for (const child of obj.fields()) {
|
|
336
339
|
if (autoGenPkFields.has(child.name)) continue;
|
|
337
340
|
// #213 — a derived (origin-bearing) field is read-only (FR-024 §7 / ADR-0028):
|
|
338
|
-
// excluded from the Insert/Update/preserving schemas, exactly like
|
|
339
|
-
if (child
|
|
341
|
+
// excluded from the Insert/Update/preserving schemas, exactly like readOnly.
|
|
342
|
+
if (isReadOnlyMutability(child) || child.isDerived()) continue;
|
|
343
|
+
// FR-037 R1 — "writeOnce" leaves the UPDATE shape, and only the update shape.
|
|
344
|
+
// Omitted, not rejected: a key absent from the settable set is STRIPPED on this
|
|
345
|
+
// path today (D1), and the generated edit form submits EVERY registered field
|
|
346
|
+
// (0.19.2 switched the resolver to UpdateSchema on edit and does not
|
|
347
|
+
// diff-and-omit), so 400-on-present would fail every save on every generated
|
|
348
|
+
// edit form for an entity carrying one. Clearing counts as a write, so the
|
|
349
|
+
// FR-035 present-null arm never reaches it either.
|
|
350
|
+
if (isWriteOnceMutability(child)) continue;
|
|
340
351
|
// TPH subtype discriminator: omitted from the update schema entirely.
|
|
341
352
|
if (tphPin !== undefined && child.name === tphPin.fieldName) continue;
|
|
342
353
|
const autoSet = child.attr(FIELD_ATTR_AUTO_SET);
|
|
@@ -370,13 +381,13 @@ export function renderZodValidators(obj: MetaObject, ctx?: RenderContext): Code
|
|
|
370
381
|
const emitPreserving = hasAutoSetFields(obj);
|
|
371
382
|
for (const child of obj.fields()) {
|
|
372
383
|
if (autoGenPkFields.has(child.name)) continue;
|
|
373
|
-
// FR-
|
|
374
|
-
// The DB / trigger / replication owns the write path; the app
|
|
375
|
-
// pass these values in POST/PATCH bodies (routesFile enforces the same
|
|
384
|
+
// FR-037 R1: an @mutability:"readOnly" field appears in neither InsertSchema
|
|
385
|
+
// nor UpdateSchema. The DB / trigger / replication owns the write path; the app
|
|
386
|
+
// must not pass these values in POST/PATCH bodies (routesFile enforces the same
|
|
376
387
|
// contract at the boundary with a 400 response).
|
|
377
388
|
// #213 — a derived (origin-bearing) field is read-only (FR-024 §7 / ADR-0028):
|
|
378
|
-
// excluded from the Insert/Update/preserving schemas, exactly like
|
|
379
|
-
if (child
|
|
389
|
+
// excluded from the Insert/Update/preserving schemas, exactly like readOnly.
|
|
390
|
+
if (isReadOnlyMutability(child) || child.isDerived()) continue;
|
|
380
391
|
|
|
381
392
|
// FR-017 Tier 1: TPH subtype pins its discriminator field to z.literal(...).
|
|
382
393
|
// The discriminator is implicit on subtype rows (controlled by URL / insert
|
|
@@ -413,6 +424,12 @@ export function renderZodValidators(obj: MetaObject, ctx?: RenderContext): Code
|
|
|
413
424
|
preservingFieldLines.push(fieldLine);
|
|
414
425
|
}
|
|
415
426
|
|
|
427
|
+
// FR-037 R1 — "writeOnce": present in Insert + preserving (both are CREATE
|
|
428
|
+
// shapes), absent from Update. Same mechanism that drops @autoSet onCreate
|
|
429
|
+
// below; a value presented on PATCH is stripped, not 400'd (see
|
|
430
|
+
// updateSchemaFields for the grounding).
|
|
431
|
+
if (isWriteOnceMutability(child)) continue;
|
|
432
|
+
|
|
416
433
|
// Update schema: @autoSet onCreate → omit entirely; onUpdate → transform
|
|
417
434
|
if (autoSet === AUTO_SET_ON_CREATE) {
|
|
418
435
|
// Omit: creation timestamps cannot be changed after creation
|