@metaobjectsdev/codegen-ts 0.7.0-rc.1 → 0.7.0-rc.2
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/README.md +30 -0
- package/dist/column-mapper.d.ts +16 -0
- package/dist/column-mapper.d.ts.map +1 -1
- package/dist/column-mapper.js +71 -1
- package/dist/column-mapper.js.map +1 -1
- package/dist/generators/entity-file.d.ts +15 -0
- package/dist/generators/entity-file.d.ts.map +1 -1
- package/dist/generators/entity-file.js +2 -1
- package/dist/generators/entity-file.js.map +1 -1
- package/dist/generators/prompt-render-file.d.ts.map +1 -1
- package/dist/generators/prompt-render-file.js +30 -12
- package/dist/generators/prompt-render-file.js.map +1 -1
- package/dist/generators/queries-file.d.ts +1 -1
- package/dist/generators/queries-file.d.ts.map +1 -1
- package/dist/generators/queries-file.js +11 -3
- package/dist/generators/queries-file.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/payload-codegen.d.ts +8 -0
- package/dist/payload-codegen.d.ts.map +1 -1
- package/dist/payload-codegen.js +33 -3
- package/dist/payload-codegen.js.map +1 -1
- package/dist/source-detect.d.ts +10 -0
- package/dist/source-detect.d.ts.map +1 -0
- package/dist/source-detect.js +30 -0
- package/dist/source-detect.js.map +1 -0
- package/dist/templates/drizzle-schema.js +27 -3
- package/dist/templates/drizzle-schema.js.map +1 -1
- package/dist/templates/entity-file.d.ts +15 -1
- package/dist/templates/entity-file.d.ts.map +1 -1
- package/dist/templates/entity-file.js +15 -5
- package/dist/templates/entity-file.js.map +1 -1
- package/dist/templates/inferred-types.d.ts +9 -0
- package/dist/templates/inferred-types.d.ts.map +1 -1
- package/dist/templates/inferred-types.js +88 -2
- package/dist/templates/inferred-types.js.map +1 -1
- package/dist/templates/value-object-file.d.ts +3 -0
- package/dist/templates/value-object-file.d.ts.map +1 -0
- package/dist/templates/value-object-file.js +27 -0
- package/dist/templates/value-object-file.js.map +1 -0
- package/dist/templates/zod-validators.d.ts +10 -0
- package/dist/templates/zod-validators.d.ts.map +1 -1
- package/dist/templates/zod-validators.js +108 -30
- package/dist/templates/zod-validators.js.map +1 -1
- package/package.json +4 -4
- package/src/column-mapper.ts +84 -0
- package/src/generators/entity-file.ts +17 -1
- package/src/generators/prompt-render-file.ts +38 -12
- package/src/generators/queries-file.ts +13 -4
- package/src/index.ts +1 -1
- package/src/payload-codegen.ts +34 -2
- package/src/source-detect.ts +28 -0
- package/src/templates/drizzle-schema.ts +27 -3
- package/src/templates/entity-file.ts +36 -5
- package/src/templates/inferred-types.ts +117 -3
- package/src/templates/value-object-file.ts +30 -0
- package/src/templates/zod-validators.ts +121 -35
|
@@ -162,9 +162,17 @@ function buildCompositeKeyCallback(pkFieldNames, importModule) {
|
|
|
162
162
|
.join(", ");
|
|
163
163
|
return code `${primaryKeySym}({ columns: [${columnRefs}] })`;
|
|
164
164
|
}
|
|
165
|
-
/** Build a JS-style object literal string (not JSON.stringify which uses quoted keys).
|
|
165
|
+
/** Build a JS-style object literal string (not JSON.stringify which uses quoted keys).
|
|
166
|
+
* Array values get `as const` appended so Drizzle's text(...,{ enum: [...] })
|
|
167
|
+
* narrows the inferred column type to a literal union instead of bare `string`. */
|
|
166
168
|
function inlineObjectLiteral(obj) {
|
|
167
|
-
const entries = Object.entries(obj).map(([k, v]) =>
|
|
169
|
+
const entries = Object.entries(obj).map(([k, v]) => {
|
|
170
|
+
const lit = JSON.stringify(v);
|
|
171
|
+
if (Array.isArray(v)) {
|
|
172
|
+
return `${k}: ${lit} as const`;
|
|
173
|
+
}
|
|
174
|
+
return `${k}: ${lit}`;
|
|
175
|
+
});
|
|
168
176
|
return `{ ${entries.join(", ")} }`;
|
|
169
177
|
}
|
|
170
178
|
/** Render one column line (field name + Drizzle column expression). */
|
|
@@ -262,7 +270,23 @@ function renderColumn(spec, field, ctx, isPk, pkGeneration, fkInfo, isComposite,
|
|
|
262
270
|
const autoSetSuffix = (autoSet === "onCreate" || autoSet === "onUpdate")
|
|
263
271
|
? `.$defaultFn(() => new Date().toISOString())`
|
|
264
272
|
: "";
|
|
265
|
-
|
|
273
|
+
// $type<E[]>() chain — emitted as Code (not a string modifier) so ts-poet can
|
|
274
|
+
// hoist the cross-module type import for objectRef variants. Positioned
|
|
275
|
+
// immediately after the baseCall so the chain reads `.text(...).$type<...>().notNull()...`
|
|
276
|
+
// which Drizzle accepts in any order but is conventional for "type narrowing
|
|
277
|
+
// first."
|
|
278
|
+
let dollarTypeSegment = "";
|
|
279
|
+
if (spec.dollarTypeRef !== undefined) {
|
|
280
|
+
const ref = spec.dollarTypeRef;
|
|
281
|
+
if (ref.kind === "scalar") {
|
|
282
|
+
dollarTypeSegment = `.$type<${ref.tsType}[]>()`;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
const refSym = imp(`${ref.name}@${ref.module}`);
|
|
286
|
+
dollarTypeSegment = code `.$type<${refSym}[]>()`;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const columnLine = code ` ${field.name}: ${baseCall}${dollarTypeSegment}${modifiersStr}${autoSetSuffix}${sqlDefaultSegment ?? ""}${fkRefSegment ?? ""}`;
|
|
266
290
|
return spec.leadingComment !== undefined
|
|
267
291
|
? code ` // ${spec.leadingComment}\n${columnLine}`
|
|
268
292
|
: columnLine;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle-schema.js","sourceRoot":"","sources":["../../src/templates/drizzle-schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"drizzle-schema.js","sourceRoot":"","sources":["../../src/templates/drizzle-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import type { MetaObject } from "@metaobjectsdev/metadata";
|
|
2
2
|
import type { RenderContext } from "../render-context.js";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Render-time options for the entity-file composer.
|
|
5
|
+
*
|
|
6
|
+
* `allowlists` (default `true`) controls whether the Fastify-flavored
|
|
7
|
+
* `<Entity>FilterAllowlist` + `<Entity>SortAllowlist` blocks (plus their
|
|
8
|
+
* `runtime-ts/drizzle-fastify` type-only imports) are emitted. Workers/Lambda
|
|
9
|
+
* consumers that don't mount Fastify-style server routes can pass `false` and
|
|
10
|
+
* drop `@metaobjectsdev/runtime-ts` from their deps entirely. The client-side
|
|
11
|
+
* `<Entity>Filter` type is always emitted — consumers still want it for typed
|
|
12
|
+
* client calls regardless of how the server is wired.
|
|
13
|
+
*/
|
|
14
|
+
export interface RenderEntityFileOpts {
|
|
15
|
+
readonly allowlists?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function renderEntityFile(entity: MetaObject, ctx: RenderContext, opts?: RenderEntityFileOpts): string;
|
|
4
18
|
//# sourceMappingURL=entity-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-file.d.ts","sourceRoot":"","sources":["../../src/templates/entity-file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity-file.d.ts","sourceRoot":"","sources":["../../src/templates/entity-file.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAa1D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,aAAa,EAClB,IAAI,CAAC,EAAE,oBAAoB,GAC1B,MAAM,CA2CR"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// into one file with the @generated header. ts-poet deduplicates imports.
|
|
3
3
|
//
|
|
4
4
|
// Dispatch:
|
|
5
|
-
// isProjection(entity)
|
|
6
|
-
//
|
|
5
|
+
// isProjection(entity) → renderProjectionDecl (read-only: view declaration + Zod + filter sections)
|
|
6
|
+
// !hasWritableRdbSource(entity) → renderValueObjectFile (in-memory / transit shape: interface + Zod schema)
|
|
7
|
+
// vanilla / write-through entity → Drizzle table path
|
|
7
8
|
import { joinCode } from "ts-poet";
|
|
8
9
|
import { renderDrizzleSchema } from "./drizzle-schema.js";
|
|
9
10
|
import { renderInferredTypes, renderEnumTypeAliases } from "./inferred-types.js";
|
|
@@ -14,7 +15,10 @@ import { renderFilterType } from "./filter-type.js";
|
|
|
14
15
|
import { GENERATED_HEADER } from "../constants.js";
|
|
15
16
|
import { isProjection } from "../projection/projection-detector.js";
|
|
16
17
|
import { renderProjectionDecl } from "./projection-decl.js";
|
|
17
|
-
|
|
18
|
+
import { hasWritableRdbSource } from "../source-detect.js";
|
|
19
|
+
import { renderValueObjectFile } from "./value-object-file.js";
|
|
20
|
+
export function renderEntityFile(entity, ctx, opts) {
|
|
21
|
+
const allowlists = opts?.allowlists ?? true;
|
|
18
22
|
// --- Projection path (read-only: view-backed entity with no table source) ---
|
|
19
23
|
// Projections intentionally get the z.enum() validator but NOT a named enum
|
|
20
24
|
// type alias — emitting aliases here is a deliberate v1 scope decision.
|
|
@@ -25,6 +29,13 @@ export function renderEntityFile(entity, ctx) {
|
|
|
25
29
|
apiPrefix: ctx.apiPrefix,
|
|
26
30
|
});
|
|
27
31
|
}
|
|
32
|
+
// --- Value-only path (no writable source.rdb: in-memory / transit shape) ---
|
|
33
|
+
// No Drizzle table, no migration footprint. Consumers that need to validate
|
|
34
|
+
// the shape (LLM tool_use input_schema, REST body parsing) use the Zod
|
|
35
|
+
// schema; consumers that need the type use the interface.
|
|
36
|
+
if (!hasWritableRdbSource(entity)) {
|
|
37
|
+
return renderValueObjectFile(entity);
|
|
38
|
+
}
|
|
28
39
|
// --- Vanilla / write-through entity path ---
|
|
29
40
|
const enumAliases = renderEnumTypeAliases(entity);
|
|
30
41
|
const sections = [
|
|
@@ -33,8 +44,7 @@ export function renderEntityFile(entity, ctx) {
|
|
|
33
44
|
...(enumAliases !== null ? [enumAliases] : []),
|
|
34
45
|
renderZodValidators(entity),
|
|
35
46
|
renderEntityConstants(entity, ctx.apiPrefix),
|
|
36
|
-
renderFilterAllowlist(entity),
|
|
37
|
-
renderSortAllowlist(entity),
|
|
47
|
+
...(allowlists ? [renderFilterAllowlist(entity), renderSortAllowlist(entity)] : []),
|
|
38
48
|
renderFilterType(entity),
|
|
39
49
|
];
|
|
40
50
|
// Render ts-poet body first (ts-poet hoists imp()-tracked imports to the top),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-file.js","sourceRoot":"","sources":["../../src/templates/entity-file.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,0EAA0E;AAC1E,EAAE;AACF,YAAY;AACZ,
|
|
1
|
+
{"version":3,"file":"entity-file.js","sourceRoot":"","sources":["../../src/templates/entity-file.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,0EAA0E;AAC1E,EAAE;AACF,YAAY;AACZ,oHAAoH;AACpH,mHAAmH;AACnH,4DAA4D;AAE5D,OAAO,EAAE,QAAQ,EAAa,MAAM,SAAS,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAiB/D,MAAM,UAAU,gBAAgB,CAC9B,MAAkB,EAClB,GAAkB,EAClB,IAA2B;IAE3B,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC;IAE5C,+EAA+E;IAC/E,4EAA4E;IAC5E,wEAAwE;IACxE,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE;YAClD,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;YAC9C,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,4EAA4E;IAC5E,uEAAuE;IACvE,0DAA0D;IAC1D,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,8CAA8C;IAC9C,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAW;QACvB,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC;QAChC,mBAAmB,CAAC,MAAM,CAAC;QAC3B,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,mBAAmB,CAAC,MAAM,CAAC;QAC3B,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC;QAC5C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,gBAAgB,CAAC,MAAM,CAAC;KACzB,CAAC;IAEF,+EAA+E;IAC/E,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzD,MAAM,MAAM,GACV,MAAM,gBAAgB,mBAAmB;QACzC,uBAAuB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK;QACxD,oBAAoB,MAAM,CAAC,IAAI,gCAAgC,CAAC;IAClE,OAAO,MAAM,GAAG,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -8,4 +8,13 @@ export declare function renderInferredTypes(entity: MetaObject): Code;
|
|
|
8
8
|
* Returns null if the entity has no enum fields.
|
|
9
9
|
*/
|
|
10
10
|
export declare function renderEnumTypeAliases(entity: MetaObject): Code | null;
|
|
11
|
+
/**
|
|
12
|
+
* Emit a structural `interface <Name> { ... }` for a value-only object.
|
|
13
|
+
*
|
|
14
|
+
* Optional fields use `name?: T` (matching the Zod `.optional()` inference
|
|
15
|
+
* `T | undefined`) instead of `name?: T | null`. Value objects never round-
|
|
16
|
+
* trip through Drizzle nullable columns, so the null-bridge is unnecessary
|
|
17
|
+
* here — and forces consumers into a residual cast at the call site.
|
|
18
|
+
*/
|
|
19
|
+
export declare function renderValueObjectInterface(entity: MetaObject): Code;
|
|
11
20
|
//# sourceMappingURL=inferred-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inferred-types.d.ts","sourceRoot":"","sources":["../../src/templates/inferred-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inferred-types.d.ts","sourceRoot":"","sources":["../../src/templates/inferred-types.ts"],"names":[],"mappings":"AASA,OAAO,EAAuB,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAC;AAyBtE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAW5D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAyBrE;AA+DD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAkBnE"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
// Inferred types template — emits Drizzle's InferSelectModel / InferInsertModel type aliases,
|
|
2
2
|
// plus named union types for field.enum fields.
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
//
|
|
4
|
+
// Also emits the structural TS interface for value-only objects (metaobjects
|
|
5
|
+
// with no writable source.rdb). That path side-steps Drizzle entirely: the
|
|
6
|
+
// interface is computed directly from the field tree, with `name?: T` for
|
|
7
|
+
// optional fields (matching Zod's `.optional()` inference — `T | undefined` —
|
|
8
|
+
// without the superfluous `| null` that Drizzle nullable columns introduce).
|
|
9
|
+
import { code, imp, joinCode } from "ts-poet";
|
|
10
|
+
import { FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_CLASS, FIELD_ATTR_REQUIRED, FIELD_ATTR_OBJECT_REF, } from "@metaobjectsdev/metadata";
|
|
5
11
|
import { variableNameFromEntity, toPascalCase } from "../naming.js";
|
|
6
12
|
import { enumValues } from "../enum-meta.js";
|
|
7
13
|
import { renderDocsFor } from "./jsdoc.js";
|
|
@@ -46,4 +52,84 @@ export function renderEnumTypeAliases(entity) {
|
|
|
46
52
|
}
|
|
47
53
|
return lines.length > 0 ? code `${lines.join("\n")}` : null;
|
|
48
54
|
}
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Value-object interface emitter
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
const SCALAR_TS_BY_SUBTYPE = {
|
|
59
|
+
[FIELD_SUBTYPE_STRING]: "string",
|
|
60
|
+
[FIELD_SUBTYPE_CLASS]: "string",
|
|
61
|
+
[FIELD_SUBTYPE_INT]: "number",
|
|
62
|
+
[FIELD_SUBTYPE_SHORT]: "number",
|
|
63
|
+
[FIELD_SUBTYPE_BYTE]: "number",
|
|
64
|
+
[FIELD_SUBTYPE_LONG]: "number",
|
|
65
|
+
[FIELD_SUBTYPE_DOUBLE]: "number",
|
|
66
|
+
[FIELD_SUBTYPE_FLOAT]: "number",
|
|
67
|
+
[FIELD_SUBTYPE_DECIMAL]: "number",
|
|
68
|
+
[FIELD_SUBTYPE_CURRENCY]: "number",
|
|
69
|
+
[FIELD_SUBTYPE_BOOLEAN]: "boolean",
|
|
70
|
+
[FIELD_SUBTYPE_DATE]: "string",
|
|
71
|
+
[FIELD_SUBTYPE_TIME]: "string",
|
|
72
|
+
[FIELD_SUBTYPE_TIMESTAMP]: "string",
|
|
73
|
+
};
|
|
74
|
+
/** Type-alias name for a field.enum, mirroring renderEnumTypeAliases. */
|
|
75
|
+
function enumTypeAliasName(entity, field) {
|
|
76
|
+
const superField = field.resolveSuper();
|
|
77
|
+
return superField !== undefined
|
|
78
|
+
? toPascalCase(superField.name)
|
|
79
|
+
: `${entity.name}${toPascalCase(field.name)}`;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* One-line TS type expression for a field on a value-only object.
|
|
83
|
+
* Returns a `Code` so cross-module `field.object` refs can be hoisted via
|
|
84
|
+
* ts-poet `imp(...)` — matching how the Zod emitter hoists `<Ref>InsertSchema`.
|
|
85
|
+
*/
|
|
86
|
+
function valueObjectFieldType(entity, field) {
|
|
87
|
+
// field.object: import the referenced TS interface from its sibling module
|
|
88
|
+
// so ts-poet hoists the import. Mirrors zod-validators.ts's `<Ref>InsertSchema`
|
|
89
|
+
// import strategy, just for the type alias instead of the schema constant.
|
|
90
|
+
if (field.subType === FIELD_SUBTYPE_OBJECT) {
|
|
91
|
+
const ref = field.ownAttr(FIELD_ATTR_OBJECT_REF);
|
|
92
|
+
if (typeof ref === "string" && ref.length > 0) {
|
|
93
|
+
const refImp = imp(`${ref}@./${ref}.js`);
|
|
94
|
+
return field.isArray ? code `${refImp}[]` : code `${refImp}`;
|
|
95
|
+
}
|
|
96
|
+
return field.isArray ? code `unknown[]` : code `unknown`;
|
|
97
|
+
}
|
|
98
|
+
// field.enum: use the same type-alias name as renderEnumTypeAliases emits.
|
|
99
|
+
if (field.subType === FIELD_SUBTYPE_ENUM) {
|
|
100
|
+
const values = enumValues(field);
|
|
101
|
+
if (values !== undefined) {
|
|
102
|
+
const alias = enumTypeAliasName(entity, field);
|
|
103
|
+
return field.isArray ? code `${alias}[]` : code `${alias}`;
|
|
104
|
+
}
|
|
105
|
+
return field.isArray ? code `string[]` : code `string`;
|
|
106
|
+
}
|
|
107
|
+
const scalar = SCALAR_TS_BY_SUBTYPE[field.subType] ?? "unknown";
|
|
108
|
+
return field.isArray ? code `${scalar}[]` : code `${scalar}`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Emit a structural `interface <Name> { ... }` for a value-only object.
|
|
112
|
+
*
|
|
113
|
+
* Optional fields use `name?: T` (matching the Zod `.optional()` inference
|
|
114
|
+
* `T | undefined`) instead of `name?: T | null`. Value objects never round-
|
|
115
|
+
* trip through Drizzle nullable columns, so the null-bridge is unnecessary
|
|
116
|
+
* here — and forces consumers into a residual cast at the call site.
|
|
117
|
+
*/
|
|
118
|
+
export function renderValueObjectInterface(entity) {
|
|
119
|
+
const docs = renderDocsFor(entity);
|
|
120
|
+
const docsPrefix = docs ? `${docs}\n` : "";
|
|
121
|
+
const lines = [];
|
|
122
|
+
for (const field of entity.fields()) {
|
|
123
|
+
const required = field.ownAttr(FIELD_ATTR_REQUIRED) === true;
|
|
124
|
+
const optional = required ? "" : "?";
|
|
125
|
+
const tsType = valueObjectFieldType(entity, field);
|
|
126
|
+
lines.push(code ` ${field.name}${optional}: ${tsType};`);
|
|
127
|
+
}
|
|
128
|
+
// joinCode with "\n" interpolates each Code segment on its own line and
|
|
129
|
+
// keeps the imp() registrations intact so ts-poet hoists the imports.
|
|
130
|
+
return code `${docsPrefix}export interface ${entity.name} {
|
|
131
|
+
${joinCode(lines, { on: "\n" })}
|
|
132
|
+
}
|
|
133
|
+
`;
|
|
134
|
+
}
|
|
49
135
|
//# sourceMappingURL=inferred-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inferred-types.js","sourceRoot":"","sources":["../../src/templates/inferred-types.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,gDAAgD;
|
|
1
|
+
{"version":3,"file":"inferred-types.js","sourceRoot":"","sources":["../../src/templates/inferred-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-object-file.d.ts","sourceRoot":"","sources":["../../src/templates/value-object-file.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAK3D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAa7D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Value-object file composer — emits a streamlined "value-only" module for
|
|
2
|
+
// metaobjects with no writable source.rdb child. Output is just the TS
|
|
3
|
+
// interface + the Zod schema (and enum type aliases when applicable); no
|
|
4
|
+
// Drizzle table, no Infer*Model aliases, no filter allowlists, no constants
|
|
5
|
+
// object.
|
|
6
|
+
//
|
|
7
|
+
// Dispatch: entity-file.ts routes here when hasWritableRdbSource(entity) is
|
|
8
|
+
// false. The entity may still have read-only source.* children (those are
|
|
9
|
+
// handled by the projection path before this one is reached).
|
|
10
|
+
import { joinCode } from "ts-poet";
|
|
11
|
+
import { renderValueObjectInterface, renderEnumTypeAliases } from "./inferred-types.js";
|
|
12
|
+
import { renderInsertSchemaOnly } from "./zod-validators.js";
|
|
13
|
+
import { GENERATED_HEADER } from "../constants.js";
|
|
14
|
+
export function renderValueObjectFile(obj) {
|
|
15
|
+
const enumAliases = renderEnumTypeAliases(obj);
|
|
16
|
+
const sections = [
|
|
17
|
+
renderValueObjectInterface(obj),
|
|
18
|
+
...(enumAliases !== null ? [enumAliases] : []),
|
|
19
|
+
renderInsertSchemaOnly(obj),
|
|
20
|
+
];
|
|
21
|
+
const body = joinCode(sections, { on: "\n" }).toString();
|
|
22
|
+
const header = `// ${GENERATED_HEADER} — DO NOT EDIT.\n` +
|
|
23
|
+
`// Source metadata: ${obj.name} (${obj.fqn()})\n` +
|
|
24
|
+
`// Customize via ${obj.name}.extra.ts in this directory.\n`;
|
|
25
|
+
return header + body;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=value-object-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-object-file.js","sourceRoot":"","sources":["../../src/templates/value-object-file.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,4EAA4E;AAC5E,UAAU;AACV,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,8DAA8D;AAE9D,OAAO,EAAE,QAAQ,EAAa,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,UAAU,qBAAqB,CAAC,GAAe;IACnD,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAW;QACvB,0BAA0B,CAAC,GAAG,CAAC;QAC/B,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,sBAAsB,CAAC,GAAG,CAAC;KAC5B,CAAC;IACF,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzD,MAAM,MAAM,GACV,MAAM,gBAAgB,mBAAmB;QACzC,uBAAuB,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK;QAClD,oBAAoB,GAAG,CAAC,IAAI,gCAAgC,CAAC;IAC/D,OAAO,MAAM,GAAG,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { type Code } from "ts-poet";
|
|
2
2
|
import { MetaObject } from "@metaobjectsdev/metadata";
|
|
3
|
+
/**
|
|
4
|
+
* Emit ONLY the `<Name>InsertSchema`. Used by the value-object file emitter
|
|
5
|
+
* for metaobjects with no writable source.rdb — those have no PATCH/update
|
|
6
|
+
* semantics, so emitting an UpdateSchema would be misleading.
|
|
7
|
+
*
|
|
8
|
+
* The schema name is kept as `<Name>InsertSchema` even for pure value objects
|
|
9
|
+
* so consumer imports don't churn. A future polish PR could add a `<Name>Schema`
|
|
10
|
+
* alias for clarity.
|
|
11
|
+
*/
|
|
12
|
+
export declare function renderInsertSchemaOnly(obj: MetaObject): Code;
|
|
3
13
|
export declare function renderZodValidators(obj: MetaObject): Code;
|
|
4
14
|
//# sourceMappingURL=zod-validators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-validators.d.ts","sourceRoot":"","sources":["../../src/templates/zod-validators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zod-validators.d.ts","sourceRoot":"","sources":["../../src/templates/zod-validators.ts"],"names":[],"mappings":"AAWA,OAAO,EAAuB,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAC;AA+BjE;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CA4B5D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAqDzD"}
|
|
@@ -2,24 +2,68 @@
|
|
|
2
2
|
// Auto-generated PKs are EXCLUDED from InsertSchema (caller doesn't provide them).
|
|
3
3
|
// @autoSet fields: INSERT → .optional().transform(() => new Date().toISOString())
|
|
4
4
|
// UPDATE → onCreate fields omitted entirely; onUpdate gets same transform
|
|
5
|
-
|
|
5
|
+
//
|
|
6
|
+
// field.object isArray:true objectRef:<Ref> — emits z.array(<Ref>InsertSchema)
|
|
7
|
+
// with a cross-module imp() so consumers passing the schema to
|
|
8
|
+
// zod-to-json-schema get a properly element-typed array. Without this, every
|
|
9
|
+
// object-array field collapsed to z.array(z.string()) and the JSON Schema sent
|
|
10
|
+
// downstream (e.g. to LLM tool_use input_schema) lost the nested object shape.
|
|
11
|
+
import { code, joinCode, imp } from "ts-poet";
|
|
6
12
|
import { MetaObject, MetaField } from "@metaobjectsdev/metadata";
|
|
7
|
-
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_ENUM, VALIDATOR_SUBTYPE_REQUIRED, VALIDATOR_SUBTYPE_LENGTH, VALIDATOR_SUBTYPE_REGEX, IDENTITY_ATTR_FIELDS, IDENTITY_ATTR_GENERATION, FIELD_ATTR_REQUIRED, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_DEFAULT, FIELD_ATTR_AUTO_SET, AUTO_SET_ON_CREATE, AUTO_SET_ON_UPDATE, VALIDATOR_ATTR_MAX, VALIDATOR_ATTR_MIN, VALIDATOR_ATTR_PATTERN, GENERATION_INCREMENT, GENERATION_UUID, } from "@metaobjectsdev/metadata";
|
|
13
|
+
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_OBJECT, VALIDATOR_SUBTYPE_REQUIRED, VALIDATOR_SUBTYPE_LENGTH, VALIDATOR_SUBTYPE_REGEX, IDENTITY_ATTR_FIELDS, IDENTITY_ATTR_GENERATION, FIELD_ATTR_REQUIRED, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_DEFAULT, FIELD_ATTR_AUTO_SET, FIELD_ATTR_OBJECT_REF, AUTO_SET_ON_CREATE, AUTO_SET_ON_UPDATE, VALIDATOR_ATTR_MAX, VALIDATOR_ATTR_MIN, VALIDATOR_ATTR_PATTERN, GENERATION_INCREMENT, GENERATION_UUID, } from "@metaobjectsdev/metadata";
|
|
8
14
|
import { enumValues, zodEnumExpr } from "../enum-meta.js";
|
|
9
15
|
import { renderDocsFor } from "./jsdoc.js";
|
|
10
|
-
|
|
11
|
-
|
|
16
|
+
/** Auto-generated PK field names that should be omitted from InsertSchema. */
|
|
17
|
+
function autoGenPkFieldNames(obj) {
|
|
18
|
+
const out = new Set();
|
|
12
19
|
const primary = obj.primaryIdentity();
|
|
13
|
-
const autoGenPkFields = new Set();
|
|
14
20
|
if (primary) {
|
|
15
21
|
const generation = primary.ownAttr(IDENTITY_ATTR_GENERATION);
|
|
16
22
|
if (generation === GENERATION_INCREMENT || generation === GENERATION_UUID) {
|
|
17
23
|
const fields = primary.ownAttr(IDENTITY_ATTR_FIELDS);
|
|
18
24
|
const fieldsList = Array.isArray(fields) ? fields : (typeof fields === "string" ? [fields] : []);
|
|
19
25
|
for (const f of fieldsList)
|
|
20
|
-
|
|
26
|
+
out.add(String(f));
|
|
21
27
|
}
|
|
22
28
|
}
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Emit ONLY the `<Name>InsertSchema`. Used by the value-object file emitter
|
|
33
|
+
* for metaobjects with no writable source.rdb — those have no PATCH/update
|
|
34
|
+
* semantics, so emitting an UpdateSchema would be misleading.
|
|
35
|
+
*
|
|
36
|
+
* The schema name is kept as `<Name>InsertSchema` even for pure value objects
|
|
37
|
+
* so consumer imports don't churn. A future polish PR could add a `<Name>Schema`
|
|
38
|
+
* alias for clarity.
|
|
39
|
+
*/
|
|
40
|
+
export function renderInsertSchemaOnly(obj) {
|
|
41
|
+
const z = imp("z@zod");
|
|
42
|
+
const autoGenPkFields = autoGenPkFieldNames(obj);
|
|
43
|
+
const insertFieldLines = [];
|
|
44
|
+
for (const child of obj.fields()) {
|
|
45
|
+
if (autoGenPkFields.has(child.name))
|
|
46
|
+
continue;
|
|
47
|
+
const autoSet = child.ownAttr(FIELD_ATTR_AUTO_SET);
|
|
48
|
+
if (autoSet === AUTO_SET_ON_CREATE || autoSet === AUTO_SET_ON_UPDATE) {
|
|
49
|
+
insertFieldLines.push(code ` ${child.name}: z.string().optional().transform(() => new Date().toISOString())`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
insertFieldLines.push(code ` ${child.name}: ${zodFieldExpr(child)}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const insertSchemaName = `${obj.name}InsertSchema`;
|
|
56
|
+
const docs = renderDocsFor(obj);
|
|
57
|
+
const docsPrefix = docs ? `${docs}\n` : "";
|
|
58
|
+
return code `
|
|
59
|
+
${docsPrefix}export const ${insertSchemaName} = ${z}.object({
|
|
60
|
+
${joinCode(insertFieldLines, { on: ",\n" })}
|
|
61
|
+
});
|
|
62
|
+
`;
|
|
63
|
+
}
|
|
64
|
+
export function renderZodValidators(obj) {
|
|
65
|
+
const z = imp("z@zod");
|
|
66
|
+
const autoGenPkFields = autoGenPkFieldNames(obj);
|
|
23
67
|
const insertFieldLines = [];
|
|
24
68
|
const updateFieldLines = [];
|
|
25
69
|
for (const child of obj.fields()) {
|
|
@@ -27,26 +71,25 @@ export function renderZodValidators(obj) {
|
|
|
27
71
|
continue;
|
|
28
72
|
const autoSet = child.ownAttr(FIELD_ATTR_AUTO_SET);
|
|
29
73
|
// Insert schema: @autoSet fields use transform (always override client input).
|
|
30
|
-
// NOTE: use "z" as a literal string here — these lines are embedded in the
|
|
31
|
-
// `code` template tag below which resolves the imp("z@zod") import.
|
|
32
74
|
if (autoSet === AUTO_SET_ON_CREATE || autoSet === AUTO_SET_ON_UPDATE) {
|
|
33
|
-
insertFieldLines.push(` ${child.name}: z.string().optional().transform(() => new Date().toISOString())`);
|
|
75
|
+
insertFieldLines.push(code ` ${child.name}: z.string().optional().transform(() => new Date().toISOString())`);
|
|
34
76
|
}
|
|
35
77
|
else {
|
|
36
|
-
insertFieldLines.push(` ${child.name}: ${zodFieldExpr(child)}`);
|
|
78
|
+
insertFieldLines.push(code ` ${child.name}: ${zodFieldExpr(child)}`);
|
|
37
79
|
}
|
|
38
80
|
// Update schema: @autoSet onCreate → omit entirely; onUpdate → transform
|
|
39
81
|
if (autoSet === AUTO_SET_ON_CREATE) {
|
|
40
82
|
// Omit: creation timestamps cannot be changed after creation
|
|
41
83
|
}
|
|
42
84
|
else if (autoSet === AUTO_SET_ON_UPDATE) {
|
|
43
|
-
updateFieldLines.push(` ${child.name}: z.string().optional().transform(() => new Date().toISOString())`);
|
|
85
|
+
updateFieldLines.push(code ` ${child.name}: z.string().optional().transform(() => new Date().toISOString())`);
|
|
44
86
|
}
|
|
45
87
|
else {
|
|
46
|
-
// All non-autoSet fields are optional in the update schema (PATCH semantics)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
88
|
+
// All non-autoSet fields are optional in the update schema (PATCH semantics).
|
|
89
|
+
// zodFieldExpr already appends .optional() when the field is non-required
|
|
90
|
+
// OR has a default; only append once more when it didn't.
|
|
91
|
+
const baseExpr = zodFieldExpr(child);
|
|
92
|
+
updateFieldLines.push(fieldWillBeOptional(child) ? code ` ${child.name}: ${baseExpr}` : code ` ${child.name}: ${baseExpr}.optional()`);
|
|
50
93
|
}
|
|
51
94
|
}
|
|
52
95
|
const insertSchemaName = `${obj.name}InsertSchema`;
|
|
@@ -55,46 +98,81 @@ export function renderZodValidators(obj) {
|
|
|
55
98
|
const docsPrefix = docs ? `${docs}\n` : "";
|
|
56
99
|
return code `
|
|
57
100
|
${docsPrefix}export const ${insertSchemaName} = ${z}.object({
|
|
58
|
-
${insertFieldLines
|
|
101
|
+
${joinCode(insertFieldLines, { on: ",\n" })}
|
|
59
102
|
});
|
|
60
103
|
|
|
61
104
|
${docsPrefix}export const ${updateSchemaName} = ${z}.object({
|
|
62
|
-
${updateFieldLines
|
|
105
|
+
${joinCode(updateFieldLines, { on: ",\n" })}
|
|
63
106
|
});
|
|
64
107
|
`;
|
|
65
108
|
}
|
|
66
109
|
function zodFieldExpr(field) {
|
|
67
|
-
|
|
110
|
+
// FIELD_SUBTYPE_OBJECT: emit z.array(<Ref>InsertSchema) / <Ref>InsertSchema
|
|
111
|
+
// via an imp() so ts-poet hoists the cross-module import. Without this the
|
|
112
|
+
// field used to collapse to z.string() / z.array(z.string()) and downstream
|
|
113
|
+
// JSON Schema (e.g. LLM tool_use input_schema) lost the nested object shape.
|
|
114
|
+
if (field.subType === FIELD_SUBTYPE_OBJECT) {
|
|
115
|
+
const ref = field.ownAttr(FIELD_ATTR_OBJECT_REF);
|
|
116
|
+
if (typeof ref === "string" && ref.length > 0) {
|
|
117
|
+
const refImp = imp(`${ref}InsertSchema@./${ref}.js`);
|
|
118
|
+
let base = code `${refImp}`;
|
|
119
|
+
if (field.isArray)
|
|
120
|
+
base = code `z.array(${base})`;
|
|
121
|
+
return appendValidatorChain(base, field);
|
|
122
|
+
}
|
|
123
|
+
// No resolvable @objectRef — fall through to z.unknown(); downstream code
|
|
124
|
+
// can still pass a value through but loses validation.
|
|
125
|
+
let base = code `z.unknown()`;
|
|
126
|
+
if (field.isArray)
|
|
127
|
+
base = code `z.array(${base})`;
|
|
128
|
+
return appendValidatorChain(base, field);
|
|
129
|
+
}
|
|
130
|
+
let baseStr;
|
|
68
131
|
switch (field.subType) {
|
|
69
132
|
case FIELD_SUBTYPE_INT:
|
|
70
133
|
case FIELD_SUBTYPE_CURRENCY:
|
|
71
134
|
case FIELD_SUBTYPE_LONG:
|
|
72
|
-
|
|
135
|
+
baseStr = "z.number().int()";
|
|
73
136
|
break;
|
|
74
137
|
case FIELD_SUBTYPE_DOUBLE:
|
|
75
138
|
case FIELD_SUBTYPE_FLOAT:
|
|
76
|
-
|
|
139
|
+
baseStr = "z.number()";
|
|
77
140
|
break;
|
|
78
141
|
case FIELD_SUBTYPE_BOOLEAN:
|
|
79
|
-
|
|
142
|
+
baseStr = "z.boolean()";
|
|
80
143
|
break;
|
|
81
144
|
case FIELD_SUBTYPE_DATE:
|
|
82
145
|
case FIELD_SUBTYPE_TIME:
|
|
83
146
|
case FIELD_SUBTYPE_TIMESTAMP:
|
|
84
|
-
|
|
147
|
+
baseStr = "z.string()";
|
|
85
148
|
break;
|
|
86
149
|
case FIELD_SUBTYPE_ENUM: {
|
|
87
150
|
const values = enumValues(field);
|
|
88
|
-
|
|
151
|
+
baseStr = values !== undefined ? zodEnumExpr(values) : "z.string()";
|
|
89
152
|
break;
|
|
90
153
|
}
|
|
91
154
|
case FIELD_SUBTYPE_STRING:
|
|
92
155
|
default:
|
|
93
|
-
|
|
156
|
+
baseStr = "z.string()";
|
|
94
157
|
break;
|
|
95
158
|
}
|
|
96
159
|
if (field.isArray)
|
|
97
|
-
|
|
160
|
+
baseStr = `z.array(${baseStr})`;
|
|
161
|
+
return appendValidatorChain(code `${baseStr}`, field);
|
|
162
|
+
}
|
|
163
|
+
/** Mirrors the optional-or-not decision inside appendValidatorChain so the update-schema
|
|
164
|
+
* caller can avoid stacking a second `.optional()` onto an already-optional expression. */
|
|
165
|
+
function fieldWillBeOptional(field) {
|
|
166
|
+
let isRequired = field.ownAttr(FIELD_ATTR_REQUIRED) === true;
|
|
167
|
+
for (const child of field.validators()) {
|
|
168
|
+
if (child.subType === VALIDATOR_SUBTYPE_REQUIRED)
|
|
169
|
+
isRequired = true;
|
|
170
|
+
}
|
|
171
|
+
const hasDefault = field.ownAttr(FIELD_ATTR_DEFAULT) !== undefined;
|
|
172
|
+
return !isRequired || hasDefault;
|
|
173
|
+
}
|
|
174
|
+
/** Append .min/.max/.regex/.optional() based on field-level validators + required state. */
|
|
175
|
+
function appendValidatorChain(base, field) {
|
|
98
176
|
let isRequired = field.ownAttr(FIELD_ATTR_REQUIRED) === true;
|
|
99
177
|
let maxLen = field.ownAttr(FIELD_ATTR_MAX_LENGTH);
|
|
100
178
|
let minLen;
|
|
@@ -119,20 +197,20 @@ function zodFieldExpr(field) {
|
|
|
119
197
|
let chain = base;
|
|
120
198
|
if (field.subType === FIELD_SUBTYPE_STRING && !field.isArray) {
|
|
121
199
|
if (minLen !== undefined)
|
|
122
|
-
chain
|
|
200
|
+
chain = code `${chain}.min(${minLen})`;
|
|
123
201
|
else if (isRequired)
|
|
124
|
-
chain
|
|
202
|
+
chain = code `${chain}.min(1)`;
|
|
125
203
|
if (maxLen !== undefined)
|
|
126
|
-
chain
|
|
204
|
+
chain = code `${chain}.max(${maxLen})`;
|
|
127
205
|
if (pattern !== undefined)
|
|
128
|
-
chain
|
|
206
|
+
chain = code `${chain}.regex(new RegExp(${JSON.stringify(pattern)}))`;
|
|
129
207
|
}
|
|
130
208
|
// Fields with DB-level defaults are optional in the InsertSchema: the caller
|
|
131
209
|
// can omit them and the DB will fill in. Otherwise required-with-default
|
|
132
210
|
// would force callers to repeat the default at every call site.
|
|
133
211
|
const hasDefault = field.ownAttr(FIELD_ATTR_DEFAULT) !== undefined;
|
|
134
212
|
if (!isRequired || hasDefault)
|
|
135
|
-
chain
|
|
213
|
+
chain = code `${chain}.optional()`;
|
|
136
214
|
return chain;
|
|
137
215
|
}
|
|
138
216
|
//# sourceMappingURL=zod-validators.js.map
|