@metaobjectsdev/codegen-ts 0.8.1 → 0.9.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.map +1 -1
- package/dist/column-mapper.js +123 -46
- package/dist/column-mapper.js.map +1 -1
- package/dist/generators/callable-file.d.ts +8 -0
- package/dist/generators/callable-file.d.ts.map +1 -0
- package/dist/generators/callable-file.js +32 -0
- package/dist/generators/callable-file.js.map +1 -0
- package/dist/generators/docs-data-builder.d.ts.map +1 -1
- package/dist/generators/docs-data-builder.js +5 -2
- package/dist/generators/docs-data-builder.js.map +1 -1
- package/dist/generators/extractor-file.d.ts +9 -0
- package/dist/generators/extractor-file.d.ts.map +1 -0
- package/dist/generators/extractor-file.js +45 -0
- package/dist/generators/extractor-file.js.map +1 -0
- package/dist/generators/index.d.ts +3 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +3 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/render-helper-file.d.ts +9 -0
- package/dist/generators/render-helper-file.d.ts.map +1 -0
- package/dist/generators/render-helper-file.js +58 -0
- package/dist/generators/render-helper-file.js.map +1 -0
- package/dist/payload-codegen.d.ts.map +1 -1
- package/dist/payload-codegen.js +42 -8
- package/dist/payload-codegen.js.map +1 -1
- package/dist/projection/extract-view-spec.d.ts.map +1 -1
- package/dist/projection/extract-view-spec.js +11 -3
- package/dist/projection/extract-view-spec.js.map +1 -1
- package/dist/render-engine/framework-provider.d.ts +6 -5
- package/dist/render-engine/framework-provider.d.ts.map +1 -1
- package/dist/render-engine/framework-provider.js +53 -11
- package/dist/render-engine/framework-provider.js.map +1 -1
- package/dist/templates/callable-file.d.ts +8 -0
- package/dist/templates/callable-file.d.ts.map +1 -0
- package/dist/templates/callable-file.js +98 -0
- package/dist/templates/callable-file.js.map +1 -0
- package/dist/templates/extract-delegate-emitter.d.ts +42 -0
- package/dist/templates/extract-delegate-emitter.d.ts.map +1 -0
- package/dist/templates/extract-delegate-emitter.js +339 -0
- package/dist/templates/extract-delegate-emitter.js.map +1 -0
- package/dist/templates/{recover-schema-emitter.d.ts → extract-schema-emitter.d.ts} +2 -2
- package/dist/templates/extract-schema-emitter.d.ts.map +1 -0
- package/dist/templates/{recover-schema-emitter.js → extract-schema-emitter.js} +37 -20
- package/dist/templates/extract-schema-emitter.js.map +1 -0
- package/dist/templates/extractor.d.ts +9 -0
- package/dist/templates/extractor.d.ts.map +1 -0
- package/dist/templates/extractor.js +296 -0
- package/dist/templates/extractor.js.map +1 -0
- package/dist/templates/field-meta.d.ts.map +1 -1
- package/dist/templates/field-meta.js +2 -1
- package/dist/templates/field-meta.js.map +1 -1
- package/dist/templates/filter-type.d.ts.map +1 -1
- package/dist/templates/filter-type.js +8 -5
- package/dist/templates/filter-type.js.map +1 -1
- package/dist/templates/fr010-field-mapping.d.ts +22 -6
- package/dist/templates/fr010-field-mapping.d.ts.map +1 -1
- package/dist/templates/fr010-field-mapping.js +66 -21
- package/dist/templates/fr010-field-mapping.js.map +1 -1
- package/dist/templates/inferred-types.d.ts +15 -1
- package/dist/templates/inferred-types.d.ts.map +1 -1
- package/dist/templates/inferred-types.js +30 -17
- package/dist/templates/inferred-types.js.map +1 -1
- package/dist/templates/output-parser.d.ts.map +1 -1
- package/dist/templates/output-parser.js +98 -34
- package/dist/templates/output-parser.js.map +1 -1
- package/dist/templates/output-prompt.js +2 -2
- package/dist/templates/render-helper.d.ts +14 -0
- package/dist/templates/render-helper.d.ts.map +1 -0
- package/dist/templates/render-helper.js +180 -0
- package/dist/templates/render-helper.js.map +1 -0
- package/dist/templates/zod-validators.d.ts.map +1 -1
- package/dist/templates/zod-validators.js +59 -3
- package/dist/templates/zod-validators.js.map +1 -1
- package/package.json +10 -4
- package/src/column-mapper.ts +128 -45
- package/src/generators/callable-file.ts +44 -0
- package/src/generators/docs-data-builder.ts +5 -1
- package/src/generators/extractor-file.ts +57 -0
- package/src/generators/index.ts +3 -0
- package/src/generators/render-helper-file.ts +74 -0
- package/src/payload-codegen.ts +52 -7
- package/src/projection/extract-view-spec.ts +11 -3
- package/src/render-engine/framework-provider.ts +53 -16
- package/src/templates/callable-file.ts +122 -0
- package/src/templates/extract-delegate-emitter.ts +370 -0
- package/src/templates/{recover-schema-emitter.ts → extract-schema-emitter.ts} +39 -19
- package/src/templates/extractor.ts +333 -0
- package/src/templates/field-meta.ts +2 -0
- package/src/templates/filter-type.ts +7 -5
- package/src/templates/fr010-field-mapping.ts +71 -18
- package/src/templates/inferred-types.ts +32 -18
- package/src/templates/output-parser.ts +108 -35
- package/src/templates/output-prompt.ts +2 -2
- package/src/templates/render-helper.ts +244 -0
- package/src/templates/zod-validators.ts +51 -4
- package/dist/templates/recover-schema-emitter.d.ts.map +0 -1
- package/dist/templates/recover-schema-emitter.js.map +0 -1
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
// server/typescript/packages/codegen-ts/src/templates/extractor.ts
|
|
2
|
+
//
|
|
3
|
+
// The strict `extract` tier — a generated `<Name>.extractor.ts` that sits OVER the existing tolerant
|
|
4
|
+
// extractLenient<Name> and turns dirty LLM text into the STRICT typed payload graph (nested objects +
|
|
5
|
+
// arrays-of-objects populated) in one call.
|
|
6
|
+
//
|
|
7
|
+
// Cross-port parity: this mirrors the Java ExtractorCodeGenerator (FOC Task 6). The Java port's
|
|
8
|
+
// extract(loader, text) / extractLenient(loader, text) both take the loaded MetaDataLoader and delegate
|
|
9
|
+
// to the Phase-B runtime extract (MetaObjectExtractor) so the WHOLE nested graph is assembled; the
|
|
10
|
+
// returned flavored object IS the strict type there (the binding provider makes newInstance()
|
|
11
|
+
// return it). TS has no flavored object-class — extractLenient returns an all-nullable `<Name>Extracted`
|
|
12
|
+
// mirror and the strict payload is a separate `interface`, so the TS port adds the recursive
|
|
13
|
+
// mirror→strict mapper (toStrict<Type>) that the Java/Kotlin ports get for free from the runtime.
|
|
14
|
+
//
|
|
15
|
+
// Why extract takes the MetaRoot: the SELF-CONTAINED extractLenient<Name>(text) leaves nested objects
|
|
16
|
+
// null (the historical FR-010 gap). The nested-capable path is extractLenient<Name>WithLoader(root, text),
|
|
17
|
+
// which delegates to the runtime extract. So the extract tier — like the Java port — is loader
|
|
18
|
+
// (MetaRoot)-driven. extractLenient<Name>WithLoader is re-exposed here under the public name extractLenient<Name>.
|
|
19
|
+
//
|
|
20
|
+
// NO registry / binding provider / factory; codegen walks the whole type graph statically (the
|
|
21
|
+
// same MetaObject walk the extract-schema / payload emitters use).
|
|
22
|
+
import { TYPE_OBJECT, TYPE_TEMPLATE, TEMPLATE_SUBTYPE_OUTPUT, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_ENUM, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_REQUIRED, TEMPLATE_ATTR_PAYLOAD_REF, TEMPLATE_ATTR_FORMAT, PACKAGE_SEPARATOR, } from "@metaobjectsdev/metadata";
|
|
23
|
+
import { fields, isArray } from "./fr010-field-mapping.js";
|
|
24
|
+
import { mirrorName } from "./extract-delegate-emitter.js";
|
|
25
|
+
import { enumUnionAliasName } from "./inferred-types.js";
|
|
26
|
+
import { enumValues } from "../enum-meta.js";
|
|
27
|
+
function findObject(root, name) {
|
|
28
|
+
return root.ownChildren().find((c) => c.type === TYPE_OBJECT && c.name === name);
|
|
29
|
+
}
|
|
30
|
+
function findTemplate(root, name) {
|
|
31
|
+
return root.ownChildren().find((c) => c.type === TYPE_TEMPLATE && c.name === name);
|
|
32
|
+
}
|
|
33
|
+
/** The @objectRef target VO for a nested-object field, or undefined when unresolvable. */
|
|
34
|
+
function refVo(field, root) {
|
|
35
|
+
const ref = field.ownAttr(FIELD_ATTR_OBJECT_REF);
|
|
36
|
+
if (typeof ref !== "string")
|
|
37
|
+
return undefined;
|
|
38
|
+
const direct = findObject(root, ref);
|
|
39
|
+
if (direct !== undefined)
|
|
40
|
+
return direct;
|
|
41
|
+
const sep = ref.lastIndexOf(PACKAGE_SEPARATOR);
|
|
42
|
+
if (sep >= 0)
|
|
43
|
+
return findObject(root, ref.slice(sep + PACKAGE_SEPARATOR.length));
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
function isObjectField(field) {
|
|
47
|
+
return field.subType === FIELD_SUBTYPE_OBJECT;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The union-alias type name for a `field.enum` with effective `@values`, or undefined when the
|
|
51
|
+
* field is not a value-constrained enum. Reuses `enumUnionAliasName` — the SAME naming the payload
|
|
52
|
+
* emitter (`payload-codegen.ts`) types the field as — so the cast target resolves to the exact
|
|
53
|
+
* alias exported from `payloads.ts`. `ownerName` is the owning value-object's interface name.
|
|
54
|
+
*/
|
|
55
|
+
function enumAlias(field, ownerName) {
|
|
56
|
+
if (field.subType !== FIELD_SUBTYPE_ENUM)
|
|
57
|
+
return undefined;
|
|
58
|
+
const values = enumValues(field);
|
|
59
|
+
if (values === undefined)
|
|
60
|
+
return undefined;
|
|
61
|
+
return enumUnionAliasName(ownerName, field);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* True iff the field is required IN THE STRICT PAYLOAD TYPE. This MUST match
|
|
65
|
+
* payload-codegen.ts's `isFieldRequired` predicate EXACTLY (boolean `true` only) — the payload
|
|
66
|
+
* interface decides `T` vs `T | null` by that predicate, and the mapper's optionality assumption
|
|
67
|
+
* (`m.f!` vs `m.f ?? null`) has to agree with the type it is constructing. A `@required:"true"`
|
|
68
|
+
* string field is therefore `T | null` in the payload AND optional here (no skew).
|
|
69
|
+
*/
|
|
70
|
+
function isFieldRequired(field) {
|
|
71
|
+
return field.ownAttr(FIELD_ATTR_REQUIRED) === true;
|
|
72
|
+
}
|
|
73
|
+
/** The mirror→strict mapper name for a value-object (`toStrict<Name>`). */
|
|
74
|
+
function mapperName(vo) {
|
|
75
|
+
return `toStrict${vo.name}`;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The mapper-body initializer expression for one field, reading mirror member `m.<name>` and
|
|
79
|
+
* mapping it onto the strict payload's exact optionality (required → `m.f!`; optional → `m.f ?? null`).
|
|
80
|
+
* Nested single/array objects recurse into their toStrict<Type> mapper, guarding null when optional.
|
|
81
|
+
*/
|
|
82
|
+
function strictArg(field, root, ownerName) {
|
|
83
|
+
const name = field.name;
|
|
84
|
+
const required = isFieldRequired(field);
|
|
85
|
+
if (isObjectField(field)) {
|
|
86
|
+
const target = refVo(field, root);
|
|
87
|
+
if (target === undefined) {
|
|
88
|
+
// Unresolved @objectRef — the payload type would be `unknown`; pass through as-is.
|
|
89
|
+
return required ? `m.${name}!` : `m.${name} ?? null`;
|
|
90
|
+
}
|
|
91
|
+
const fn = mapperName(target);
|
|
92
|
+
if (isArray(field)) {
|
|
93
|
+
// Required array-of-objects: each element mapped; element nulls dropped at the type level
|
|
94
|
+
// via the non-null assertion (extract never yields null elements for a present array).
|
|
95
|
+
if (required)
|
|
96
|
+
return `m.${name}!.map((e) => ${fn}(e!))`;
|
|
97
|
+
return `m.${name} ? m.${name}!.map((e) => ${fn}(e!)) : null`;
|
|
98
|
+
}
|
|
99
|
+
// Single nested object.
|
|
100
|
+
if (required)
|
|
101
|
+
return `${fn}(m.${name}!)`;
|
|
102
|
+
return `m.${name} ? ${fn}(m.${name}) : null`;
|
|
103
|
+
}
|
|
104
|
+
// Scalar ARRAY (e.g. `field.string` with isArray): the mirror types it `(T | null)[] | null`
|
|
105
|
+
// but the strict payload types it `T[]` (required) / `T[] | null` (optional). A bare `m.f!`
|
|
106
|
+
// would leave the element type `T | null`, a `tsc --strict` TS2322 error. Filter out null
|
|
107
|
+
// elements so the element type narrows to non-null (consistent with the lost-element DROP policy
|
|
108
|
+
// already used for required arrays-of-objects above).
|
|
109
|
+
//
|
|
110
|
+
// ENUM arrays: the mirror element is a plain `string`, but the strict payload types it as the
|
|
111
|
+
// closed `<Alias>[]` union. The null-filter alone narrows to `string[]`, not `<Alias>[]` — a
|
|
112
|
+
// `tsc --strict` TS2322 error. So the null-filtered result is CAST to `<Alias>[]`. The cast is
|
|
113
|
+
// sound: the engine validated each present element is a member of the closed set (else the field
|
|
114
|
+
// is lost/MALFORMED and extract throws), so the runtime string IS a valid union member.
|
|
115
|
+
const alias = enumAlias(field, ownerName);
|
|
116
|
+
if (isArray(field)) {
|
|
117
|
+
if (required) {
|
|
118
|
+
const filtered = `(m.${name} ?? []).filter((x): x is NonNullable<typeof x> => x != null)`;
|
|
119
|
+
return alias !== undefined ? `(${filtered}) as ${alias}[]` : filtered;
|
|
120
|
+
}
|
|
121
|
+
const filtered = `m.${name}.filter((x): x is NonNullable<typeof x> => x != null)`;
|
|
122
|
+
const guarded = `m.${name} == null ? null : ${filtered}`;
|
|
123
|
+
return alias !== undefined
|
|
124
|
+
? `m.${name} == null ? null : (${filtered}) as ${alias}[]`
|
|
125
|
+
: guarded;
|
|
126
|
+
}
|
|
127
|
+
// Scalar / enum (single): the strict payload's optionality decides the shape.
|
|
128
|
+
// Required → non-null assertion; optional → `?? null` (matches the payload's `f?: T | null`).
|
|
129
|
+
//
|
|
130
|
+
// ENUM scalar: the mirror member is a plain `string`, but the strict payload types it as the
|
|
131
|
+
// closed `<Alias>` union — assigning `string` into `<Alias>` is a `tsc --strict` TS2322 error.
|
|
132
|
+
// So the value is CAST to `<Alias>`. Sound for the same reason as enum arrays above: the engine
|
|
133
|
+
// already validated membership (or extract throws on a lost required field).
|
|
134
|
+
if (alias !== undefined) {
|
|
135
|
+
return required ? `m.${name}! as ${alias}` : `(m.${name} ?? null) as ${alias} | null`;
|
|
136
|
+
}
|
|
137
|
+
return required ? `m.${name}!` : `m.${name} ?? null`;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Emit one `toStrict<VO>(m)` mapper per value-object reachable from `vo` (payload + nested,
|
|
141
|
+
* deduped, cycle-safe). Each maps the all-nullable `<VO>Extracted` mirror onto the strict `<VO>`
|
|
142
|
+
* payload interface. The ROOT mapper reads the canonically-named root mirror (`<Template>Extracted`)
|
|
143
|
+
* since the template name may differ from the payload VO name.
|
|
144
|
+
*/
|
|
145
|
+
function emitMappers(payloadVo, root, rootMirror) {
|
|
146
|
+
const out = [];
|
|
147
|
+
const seen = new Set();
|
|
148
|
+
emitMapper(payloadVo, root, seen, out, rootMirror);
|
|
149
|
+
return out.join("\n\n");
|
|
150
|
+
}
|
|
151
|
+
function emitMapper(vo, root, seen, out, mirrorOverride) {
|
|
152
|
+
if (seen.has(vo.name))
|
|
153
|
+
return;
|
|
154
|
+
seen.add(vo.name);
|
|
155
|
+
const fn = mapperName(vo);
|
|
156
|
+
const strict = vo.name;
|
|
157
|
+
const mir = mirrorOverride ?? mirrorName(vo);
|
|
158
|
+
const assigns = fields(vo).map((f) => ` ${f.name}: ${strictArg(f, root, vo.name)},`);
|
|
159
|
+
out.push([
|
|
160
|
+
`/** Map the all-nullable \`${mir}\` mirror onto the strict \`${strict}\` payload. Generated. */`,
|
|
161
|
+
`function ${fn}(m: ${mir}): ${strict} {`,
|
|
162
|
+
` return {`,
|
|
163
|
+
...assigns,
|
|
164
|
+
` };`,
|
|
165
|
+
`}`,
|
|
166
|
+
].join("\n"));
|
|
167
|
+
for (const f of fields(vo)) {
|
|
168
|
+
if (isObjectField(f)) {
|
|
169
|
+
const target = refVo(f, root);
|
|
170
|
+
if (target !== undefined)
|
|
171
|
+
emitMapper(target, root, seen, out);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Collect the strict payload-interface names reachable from `vo` (for the type-only import),
|
|
177
|
+
* PLUS every enum union-alias reachable from those VOs. Both are exported from `payloads.ts`
|
|
178
|
+
* (the alias is hoisted above the interface there), so the extractor's `as <Alias>` casts need
|
|
179
|
+
* the alias names imported alongside the interface names. Deduped, in discovery order.
|
|
180
|
+
*/
|
|
181
|
+
function reachablePayloadTypes(vo, root) {
|
|
182
|
+
const order = [];
|
|
183
|
+
const seen = new Set();
|
|
184
|
+
const visit = (cur) => {
|
|
185
|
+
if (seen.has(cur.name))
|
|
186
|
+
return;
|
|
187
|
+
seen.add(cur.name);
|
|
188
|
+
order.push(cur.name);
|
|
189
|
+
for (const f of fields(cur)) {
|
|
190
|
+
const alias = enumAlias(f, cur.name);
|
|
191
|
+
if (alias !== undefined && !seen.has(alias)) {
|
|
192
|
+
seen.add(alias);
|
|
193
|
+
order.push(alias);
|
|
194
|
+
}
|
|
195
|
+
if (isObjectField(f)) {
|
|
196
|
+
const target = refVo(f, root);
|
|
197
|
+
if (target !== undefined)
|
|
198
|
+
visit(target);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
visit(vo);
|
|
203
|
+
return order;
|
|
204
|
+
}
|
|
205
|
+
/** Collect the mirror-interface names reachable from `vo` (root mirror + nested VO mirrors). */
|
|
206
|
+
function reachableMirrorTypes(vo, root, rootMirror) {
|
|
207
|
+
const out = [rootMirror];
|
|
208
|
+
const seen = new Set([vo.name]);
|
|
209
|
+
const visit = (cur) => {
|
|
210
|
+
for (const f of fields(cur)) {
|
|
211
|
+
if (isObjectField(f)) {
|
|
212
|
+
const target = refVo(f, root);
|
|
213
|
+
if (target !== undefined && !seen.has(target.name)) {
|
|
214
|
+
seen.add(target.name);
|
|
215
|
+
out.push(mirrorName(target));
|
|
216
|
+
visit(target);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
visit(vo);
|
|
222
|
+
return out;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Render the full `<TemplateName>.extractor.ts` for one `template.output` node.
|
|
226
|
+
* Throws if the template isn't found / isn't a template.output / its @payloadRef doesn't resolve,
|
|
227
|
+
* or if the target format is not json/xml (the extract tier requires the extract<Name> API, which
|
|
228
|
+
* only the json/xml output-parsers emit).
|
|
229
|
+
*/
|
|
230
|
+
export function renderExtractor(root, templateName) {
|
|
231
|
+
const tmpl = findTemplate(root, templateName);
|
|
232
|
+
if (!tmpl) {
|
|
233
|
+
throw new Error(`template "${templateName}" not found in metadata root`);
|
|
234
|
+
}
|
|
235
|
+
if (tmpl.subType !== TEMPLATE_SUBTYPE_OUTPUT) {
|
|
236
|
+
throw new Error(`template "${templateName}" is not a template.output (got subtype "${tmpl.subType}")`);
|
|
237
|
+
}
|
|
238
|
+
const payloadRef = tmpl.ownAttr(TEMPLATE_ATTR_PAYLOAD_REF);
|
|
239
|
+
if (typeof payloadRef !== "string") {
|
|
240
|
+
throw new Error(`template "${templateName}" missing @payloadRef`);
|
|
241
|
+
}
|
|
242
|
+
const vo = findObject(root, payloadRef);
|
|
243
|
+
if (!vo) {
|
|
244
|
+
throw new Error(`template "${templateName}" @payloadRef "${payloadRef}" not found in metadata root`);
|
|
245
|
+
}
|
|
246
|
+
const format = (tmpl.ownAttr(TEMPLATE_ATTR_FORMAT) ?? "text").toLowerCase();
|
|
247
|
+
if (format !== "json" && format !== "xml") {
|
|
248
|
+
throw new Error(`template "${templateName}" @format "${format}" has no extract API to extract over (json/xml only)`);
|
|
249
|
+
}
|
|
250
|
+
const strictType = vo.name; // the payload VO's interface name (payload-codegen emits the bare VO name)
|
|
251
|
+
const rootMirror = `${templateName}Extracted`;
|
|
252
|
+
const extractLenientWithName = `extractLenient${templateName}WithLoader`; // the nested-capable lenient extract (output-parser)
|
|
253
|
+
const extractLenientPublic = `extractLenient${templateName}`; // re-exposed never-throws lenient tier name
|
|
254
|
+
const extractName = `extract${templateName}`;
|
|
255
|
+
const rootMapper = mapperName(vo);
|
|
256
|
+
const payloadTypes = reachablePayloadTypes(vo, root);
|
|
257
|
+
const mirrorTypes = reachableMirrorTypes(vo, root, rootMirror);
|
|
258
|
+
const mappers = emitMappers(vo, root, rootMirror);
|
|
259
|
+
const lostMsg = `${extractName}: lost required field(s): `;
|
|
260
|
+
return (`// GENERATED — extractor for "${templateName}".\n` +
|
|
261
|
+
`//\n` +
|
|
262
|
+
`// Turns dirty LLM text into a fully-typed \`${strictType}\` graph (nested objects +\n` +
|
|
263
|
+
`// arrays-of-objects populated) in one call, by delegating to the nested-capable extract and\n` +
|
|
264
|
+
`// mapping the all-nullable mirror onto the strict payload. No registry / binding / factory.\n` +
|
|
265
|
+
`\n` +
|
|
266
|
+
`import {\n ${extractLenientWithName},\n type ${mirrorTypes.join(",\n type ")},\n} from "./${templateName}.output.js";\n` +
|
|
267
|
+
`import type { ${payloadTypes.join(", ")} } from "./payloads.js";\n` +
|
|
268
|
+
`import type { MetaRoot } from "@metaobjectsdev/metadata";\n` +
|
|
269
|
+
`import type { ExtractionResult } from "@metaobjectsdev/render";\n` +
|
|
270
|
+
`\n` +
|
|
271
|
+
`/**\n` +
|
|
272
|
+
` * Extract a fully-typed \`${strictType}\` from dirty \`text\` using the loaded \`root\` (which must\n` +
|
|
273
|
+
` * declare the "${payloadRef}" payload value-object). Runs the tolerant extract, then maps the\n` +
|
|
274
|
+
` * extracted mirror onto the strict payload.\n` +
|
|
275
|
+
` *\n` +
|
|
276
|
+
` * @throws Error iff a \`@required\` field was lost (the strict opt-in gate).\n` +
|
|
277
|
+
` */\n` +
|
|
278
|
+
`export function ${extractName}(root: MetaRoot, text: string): ${strictType} {\n` +
|
|
279
|
+
` const r = ${extractLenientWithName}(root, text);\n` +
|
|
280
|
+
` if (r.report.hasLostRequired()) {\n` +
|
|
281
|
+
` throw new Error(${JSON.stringify(lostMsg)} + r.report.lostRequired().join(", "));\n` +
|
|
282
|
+
` }\n` +
|
|
283
|
+
` return ${rootMapper}(r.data!);\n` +
|
|
284
|
+
`}\n` +
|
|
285
|
+
`\n` +
|
|
286
|
+
`/**\n` +
|
|
287
|
+
` * Extract a \`${strictType}\` from dirty \`text\` using the loaded \`root\`, never throwing.\n` +
|
|
288
|
+
` * Re-exposes the nested-capable extract; inspect \`report\` for lost/defaulted fields.\n` +
|
|
289
|
+
` */\n` +
|
|
290
|
+
`export function ${extractLenientPublic}(root: MetaRoot, text: string): ExtractionResult<${rootMirror}> {\n` +
|
|
291
|
+
` return ${extractLenientWithName}(root, text);\n` +
|
|
292
|
+
`}\n` +
|
|
293
|
+
`\n` +
|
|
294
|
+
`${mappers}\n`);
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/templates/extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-meta.d.ts","sourceRoot":"","sources":["../../src/templates/field-meta.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"field-meta.d.ts","sourceRoot":"","sources":["../../src/templates/field-meta.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAiCrD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAMtD;AA6BD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA6BnD;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS7F;AAMD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAMjD"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
// All helpers take a MetaField node.
|
|
5
5
|
import { MetaField } from "@metaobjectsdev/metadata";
|
|
6
|
-
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_ENUM, VIEW_SUBTYPE_TEXT, VIEW_SUBTYPE_DATE, VIEW_SUBTYPE_NUMBER, VIEW_SUBTYPE_CHECKBOX, VIEW_SUBTYPE_CURRENCY, FIELD_ATTR_CURRENCY, FIELD_ATTR_CURRENCY_DEFAULT, VIEW_CURRENCY_ATTR_LOCALE, VIEW_CURRENCY_ATTR_LOCALE_DEFAULT, } from "@metaobjectsdev/metadata";
|
|
6
|
+
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_UUID, VIEW_SUBTYPE_TEXT, VIEW_SUBTYPE_DATE, VIEW_SUBTYPE_NUMBER, VIEW_SUBTYPE_CHECKBOX, VIEW_SUBTYPE_CURRENCY, FIELD_ATTR_CURRENCY, FIELD_ATTR_CURRENCY_DEFAULT, VIEW_CURRENCY_ATTR_LOCALE, VIEW_CURRENCY_ATTR_LOCALE_DEFAULT, } from "@metaobjectsdev/metadata";
|
|
7
7
|
import { enumValues, zodEnumExpr } from "../enum-meta.js";
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
9
|
// inferViewKind
|
|
@@ -51,6 +51,7 @@ function defaultViewForSubType(subType) {
|
|
|
51
51
|
export function zodTypeFor(field) {
|
|
52
52
|
switch (field.subType) {
|
|
53
53
|
case FIELD_SUBTYPE_STRING:
|
|
54
|
+
case FIELD_SUBTYPE_UUID:
|
|
54
55
|
return "z.string()";
|
|
55
56
|
case FIELD_SUBTYPE_BOOLEAN:
|
|
56
57
|
return "z.boolean()";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-meta.js","sourceRoot":"","sources":["../../src/templates/field-meta.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,+EAA+E;AAC/E,EAAE;AACF,qCAAqC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,yBAAyB,EACzB,iCAAiC,GAClC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE1D,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,qEAAqE;IACrE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC;IACxC,gCAAgC;IAChC,OAAO,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC5C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,qBAAqB;YACxB,OAAO,qBAAqB,CAAC;QAC/B,KAAK,iBAAiB,CAAC;QACvB,KAAK,kBAAkB,CAAC;QACxB,KAAK,mBAAmB,CAAC;QACzB,KAAK,kBAAkB,CAAC;QACxB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,mBAAmB,CAAC;QACzB,KAAK,qBAAqB;YACxB,OAAO,mBAAmB,CAAC;QAC7B,KAAK,kBAAkB,CAAC;QACxB,KAAK,kBAAkB,CAAC;QACxB,KAAK,uBAAuB;YAC1B,OAAO,iBAAiB,CAAC;QAC3B,KAAK,sBAAsB;YACzB,OAAO,qBAAqB,CAAC;QAC/B;YACE,OAAO,iBAAiB,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAgB;IACzC,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,oBAAoB;
|
|
1
|
+
{"version":3,"file":"field-meta.js","sourceRoot":"","sources":["../../src/templates/field-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-type.d.ts","sourceRoot":"","sources":["../../src/templates/filter-type.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAa,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-type.d.ts","sourceRoot":"","sources":["../../src/templates/filter-type.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAa,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA8CjE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CA2CzD"}
|
|
@@ -3,22 +3,25 @@
|
|
|
3
3
|
// datetimes get eq/ne/gt/gte/lt/lte/in.
|
|
4
4
|
import { code } from "ts-poet";
|
|
5
5
|
import { MetaField, MetaObject } from "@metaobjectsdev/metadata";
|
|
6
|
-
import { FIELD_ATTR_FILTERABLE, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT,
|
|
6
|
+
import { FIELD_ATTR_FILTERABLE, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, opsForSubType, } from "@metaobjectsdev/metadata";
|
|
7
7
|
import { isSortableField } from "./filter-shared.js";
|
|
8
|
-
|
|
8
|
+
// VALUE-type classification only (distinct from the OPERATOR band, which comes from
|
|
9
|
+
// opsForSubType). decimal is deliberately NOT here: its operator band stays NUMERIC
|
|
10
|
+
// (eq/ne/gt/gte/lt/lte/in/isNull, see OPS_BY_SUBTYPE) but its VALUE type is `string`,
|
|
11
|
+
// matching the entity field representation (exact decimal string, not lossy number).
|
|
12
|
+
const NUMBER_VALUE_SUBTYPES = new Set([
|
|
9
13
|
FIELD_SUBTYPE_INT,
|
|
10
14
|
FIELD_SUBTYPE_SHORT,
|
|
11
15
|
FIELD_SUBTYPE_BYTE,
|
|
12
16
|
FIELD_SUBTYPE_LONG,
|
|
13
17
|
FIELD_SUBTYPE_DOUBLE,
|
|
14
18
|
FIELD_SUBTYPE_FLOAT,
|
|
15
|
-
FIELD_SUBTYPE_DECIMAL,
|
|
16
19
|
]);
|
|
17
|
-
/** Maps a field subtype to its TS
|
|
20
|
+
/** Maps a field subtype to its TS VALUE type name for operator union codegen. */
|
|
18
21
|
function tsNameFor(fieldSubType) {
|
|
19
22
|
if (fieldSubType === FIELD_SUBTYPE_BOOLEAN)
|
|
20
23
|
return "boolean";
|
|
21
|
-
if (
|
|
24
|
+
if (NUMBER_VALUE_SUBTYPES.has(fieldSubType))
|
|
22
25
|
return "number";
|
|
23
26
|
return "string";
|
|
24
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-type.js","sourceRoot":"","sources":["../../src/templates/filter-type.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,oGAAoG;AACpG,wCAAwC;AAExC,OAAO,EAAE,IAAI,EAAa,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"filter-type.js","sourceRoot":"","sources":["../../src/templates/filter-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type MetaData } from "@metaobjectsdev/metadata";
|
|
1
|
+
import { type MetaData, type NormalizeMode } from "@metaobjectsdev/metadata";
|
|
2
2
|
/** The render-engine FieldKind member name for a scalar field subtype, or null if non-scalar. */
|
|
3
3
|
export declare function scalarKind(subType: string): string | null;
|
|
4
4
|
/** The field children of a payload value-object, in declaration order. */
|
|
@@ -9,12 +9,28 @@ export declare function isArray(field: MetaData): boolean;
|
|
|
9
9
|
export declare function isRequired(field: MetaData): boolean;
|
|
10
10
|
/** The string members of an enum field's @values attr (empty when absent). */
|
|
11
11
|
export declare function enumValues(field: MetaData): string[];
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* FR-011: the field's `@coerceDefault` member symbol (present-but-uncoercible enum fallback),
|
|
14
|
+
* or null when absent. Read own-attr only — `@coerceDefault` is concrete, never inherited.
|
|
15
|
+
*/
|
|
16
|
+
export declare function coerceDefault(field: MetaData): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* FR-011: the field's `@default` member symbol (absent-fill enum value), or null when absent.
|
|
19
|
+
*/
|
|
20
|
+
export declare function defaultValue(field: MetaData): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* FR-011: resolve the enum normalization mode for a field — field-level `@normalize`,
|
|
23
|
+
* else the owning `object.value`'s `@normalize` (the per-object default), else the global
|
|
24
|
+
* `NORMALIZE_DEFAULT` ("strip"). `ownerObject` may be null (resolution then skips the
|
|
25
|
+
* object tier). Mirrors the cross-port field → object → global resolution.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveNormalize(field: MetaData, ownerObject: MetaData | null): NormalizeMode;
|
|
28
|
+
/** The nullable TS type for a field in the extract mirror interface. */
|
|
13
29
|
export declare function mirrorType(field: MetaData): string;
|
|
14
|
-
/** The
|
|
15
|
-
export declare function
|
|
16
|
-
/** Distinct
|
|
17
|
-
export declare function
|
|
30
|
+
/** The ExtractMap.as* helper name + call that reads this field from the forgiving map `d`. */
|
|
31
|
+
export declare function extractMapCall(field: MetaData): string;
|
|
32
|
+
/** Distinct ExtractMap helper names used across a value-object's fields (for the import). */
|
|
33
|
+
export declare function extractMapHelpersUsed(vo: MetaData): string[];
|
|
18
34
|
/** A TS double-quoted string literal for `value`, with the load-bearing chars escaped. */
|
|
19
35
|
export declare function jsonStringLiteral(value: string): string;
|
|
20
36
|
/** A TS array literal `["a", "b"]` for the given members. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr010-field-mapping.d.ts","sourceRoot":"","sources":["../../src/templates/fr010-field-mapping.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"fr010-field-mapping.d.ts","sourceRoot":"","sources":["../../src/templates/fr010-field-mapping.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,QAAQ,EAyBb,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAElC,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4BzD;AAED,0EAA0E;AAC1E,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAE/C;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAEhD;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAInD;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,CAIpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa,CAM7F;AAQD,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAmBlD;AA4BD,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAItD;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,CAO5D;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAwBvD;AAED,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAS1D"}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
// server/typescript/packages/codegen-ts/src/templates/fr010-field-mapping.ts
|
|
2
2
|
//
|
|
3
|
-
// Shared field-kind mapping for the FR-010 codegen emitters (
|
|
3
|
+
// Shared field-kind mapping for the FR-010 codegen emitters (extract-schema-emitter +
|
|
4
4
|
// output-format-spec-emitter). Maps a metadata field subtype onto the render engine's
|
|
5
|
-
// FieldKind member, the idiomatic nullable TS type used by the
|
|
6
|
-
// and the
|
|
5
|
+
// FieldKind member, the idiomatic nullable TS type used by the extract mirror interface,
|
|
6
|
+
// and the ExtractMap accessor that reads it from the forgiving outcome map.
|
|
7
7
|
//
|
|
8
8
|
// Mirrors the C# Fr010FieldMapping (adapted to TS syntax + the `| null` nullable mirror).
|
|
9
9
|
// Bounded scope (parity with Java/Kotlin/C#): scalar / enum / scalar-array. Nested object +
|
|
10
10
|
// array-of-enum are deferred.
|
|
11
|
-
import { TYPE_FIELD, FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_CLASS, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_OBJECT, FIELD_ATTR_REQUIRED, FIELD_ATTR_VALUES, } from "@metaobjectsdev/metadata";
|
|
11
|
+
import { TYPE_FIELD, FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_CLASS, FIELD_SUBTYPE_UUID, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_OBJECT, FIELD_ATTR_REQUIRED, FIELD_ATTR_VALUES, FIELD_ATTR_COERCE_DEFAULT, FIELD_ATTR_DEFAULT, FIELD_ATTR_NORMALIZE, NORMALIZE_DEFAULT, } from "@metaobjectsdev/metadata";
|
|
12
12
|
/** The render-engine FieldKind member name for a scalar field subtype, or null if non-scalar. */
|
|
13
13
|
export function scalarKind(subType) {
|
|
14
14
|
switch (subType) {
|
|
15
15
|
case FIELD_SUBTYPE_STRING:
|
|
16
16
|
case FIELD_SUBTYPE_CLASS:
|
|
17
|
+
case FIELD_SUBTYPE_UUID:
|
|
17
18
|
case FIELD_SUBTYPE_DATE:
|
|
18
19
|
case FIELD_SUBTYPE_TIME:
|
|
19
20
|
case FIELD_SUBTYPE_TIMESTAMP:
|
|
21
|
+
// field.decimal is a precision-exact decimal STRING on the wire (not a
|
|
22
|
+
// float64): extract/output map it as a string scalar so digits survive a
|
|
23
|
+
// round-trip — matching the generated TS `string` representation.
|
|
24
|
+
case FIELD_SUBTYPE_DECIMAL:
|
|
20
25
|
return "STRING";
|
|
21
26
|
case FIELD_SUBTYPE_INT:
|
|
22
27
|
case FIELD_SUBTYPE_SHORT:
|
|
@@ -27,7 +32,6 @@ export function scalarKind(subType) {
|
|
|
27
32
|
return "LONG";
|
|
28
33
|
case FIELD_SUBTYPE_DOUBLE:
|
|
29
34
|
case FIELD_SUBTYPE_FLOAT:
|
|
30
|
-
case FIELD_SUBTYPE_DECIMAL:
|
|
31
35
|
return "DOUBLE";
|
|
32
36
|
case FIELD_SUBTYPE_BOOLEAN:
|
|
33
37
|
return "BOOLEAN";
|
|
@@ -57,14 +61,52 @@ export function enumValues(field) {
|
|
|
57
61
|
return v.map((e) => String(e));
|
|
58
62
|
return [];
|
|
59
63
|
}
|
|
60
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* FR-011: the field's `@coerceDefault` member symbol (present-but-uncoercible enum fallback),
|
|
66
|
+
* or null when absent. Read own-attr only — `@coerceDefault` is concrete, never inherited.
|
|
67
|
+
*/
|
|
68
|
+
export function coerceDefault(field) {
|
|
69
|
+
const v = field.ownAttr(FIELD_ATTR_COERCE_DEFAULT);
|
|
70
|
+
return typeof v === "string" && v.length > 0 ? v : null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* FR-011: the field's `@default` member symbol (absent-fill enum value), or null when absent.
|
|
74
|
+
*/
|
|
75
|
+
export function defaultValue(field) {
|
|
76
|
+
const v = field.ownAttr(FIELD_ATTR_DEFAULT);
|
|
77
|
+
return typeof v === "string" && v.length > 0 ? v : null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* FR-011: resolve the enum normalization mode for a field — field-level `@normalize`,
|
|
81
|
+
* else the owning `object.value`'s `@normalize` (the per-object default), else the global
|
|
82
|
+
* `NORMALIZE_DEFAULT` ("strip"). `ownerObject` may be null (resolution then skips the
|
|
83
|
+
* object tier). Mirrors the cross-port field → object → global resolution.
|
|
84
|
+
*/
|
|
85
|
+
export function resolveNormalize(field, ownerObject) {
|
|
86
|
+
const fieldMode = normalizeAttrOf(field);
|
|
87
|
+
if (fieldMode != null)
|
|
88
|
+
return fieldMode;
|
|
89
|
+
const objMode = ownerObject == null ? null : normalizeAttrOf(ownerObject);
|
|
90
|
+
if (objMode != null)
|
|
91
|
+
return objMode;
|
|
92
|
+
return NORMALIZE_DEFAULT;
|
|
93
|
+
}
|
|
94
|
+
/** The `@normalize` attr of a node as a NormalizeMode, or null when absent. */
|
|
95
|
+
function normalizeAttrOf(node) {
|
|
96
|
+
const v = node.ownAttr(FIELD_ATTR_NORMALIZE);
|
|
97
|
+
return typeof v === "string" && v.length > 0 ? v : null;
|
|
98
|
+
}
|
|
99
|
+
/** The nullable TS type for a field in the extract mirror interface. */
|
|
61
100
|
export function mirrorType(field) {
|
|
62
|
-
//
|
|
101
|
+
// Nested object (single or array): the self-contained path defers to null (typed unknown);
|
|
102
|
+
// the runtime-delegating path overrides this with the nested mirror type. Checked BEFORE the
|
|
103
|
+
// generic isArray branch so an array-of-objects is NOT mistyped as a string array.
|
|
104
|
+
if (field.subType === FIELD_SUBTYPE_OBJECT)
|
|
105
|
+
return "unknown"; // nested deferred
|
|
106
|
+
// Matches asStringList's `(string | null)[] | null` return — a extracted array
|
|
63
107
|
// can contain null elements where individual items were lost.
|
|
64
108
|
if (isArray(field))
|
|
65
109
|
return "(string | null)[] | null";
|
|
66
|
-
if (field.subType === FIELD_SUBTYPE_OBJECT)
|
|
67
|
-
return "unknown"; // nested deferred
|
|
68
110
|
if (field.subType === FIELD_SUBTYPE_ENUM)
|
|
69
111
|
return "string | null"; // enum is string-backed
|
|
70
112
|
switch (scalarKind(field.subType)) {
|
|
@@ -79,15 +121,18 @@ export function mirrorType(field) {
|
|
|
79
121
|
}
|
|
80
122
|
}
|
|
81
123
|
/**
|
|
82
|
-
* The
|
|
124
|
+
* The ExtractMap.as* helper name that reads this field from the forgiving map, or null
|
|
83
125
|
* for a nested object (which emits a null literal, not a helper call). Single source of
|
|
84
|
-
* truth for the per-field dispatch — both
|
|
126
|
+
* truth for the per-field dispatch — both extractMapCall and extractMapHelpersUsed use it.
|
|
85
127
|
*/
|
|
86
|
-
function
|
|
128
|
+
function extractMapHelper(field) {
|
|
129
|
+
// Nested object (single or array) → null literal in the self-contained path (no helper).
|
|
130
|
+
// Checked BEFORE isArray so an array-of-objects is NOT read via asStringList (which would not
|
|
131
|
+
// type-check against the nested mirror's `(NestedExtracted | null)[]`). Mirrors the Java fix.
|
|
132
|
+
if (field.subType === FIELD_SUBTYPE_OBJECT)
|
|
133
|
+
return null;
|
|
87
134
|
if (isArray(field))
|
|
88
135
|
return "asStringList";
|
|
89
|
-
if (field.subType === FIELD_SUBTYPE_OBJECT)
|
|
90
|
-
return null; // null literal, no helper
|
|
91
136
|
if (field.subType === FIELD_SUBTYPE_ENUM)
|
|
92
137
|
return "asString";
|
|
93
138
|
switch (scalarKind(field.subType)) {
|
|
@@ -103,18 +148,18 @@ function recoverMapHelper(field) {
|
|
|
103
148
|
return "asString";
|
|
104
149
|
}
|
|
105
150
|
}
|
|
106
|
-
/** The
|
|
107
|
-
export function
|
|
108
|
-
const helper =
|
|
151
|
+
/** The ExtractMap.as* helper name + call that reads this field from the forgiving map `d`. */
|
|
152
|
+
export function extractMapCall(field) {
|
|
153
|
+
const helper = extractMapHelper(field);
|
|
109
154
|
if (helper === null)
|
|
110
|
-
return "null /* FR-010: nested
|
|
155
|
+
return "null /* FR-010: nested extract deferred */";
|
|
111
156
|
return `${helper}(d, ${jsonStringLiteral(field.name)})`;
|
|
112
157
|
}
|
|
113
|
-
/** Distinct
|
|
114
|
-
export function
|
|
158
|
+
/** Distinct ExtractMap helper names used across a value-object's fields (for the import). */
|
|
159
|
+
export function extractMapHelpersUsed(vo) {
|
|
115
160
|
const used = new Set();
|
|
116
161
|
for (const f of fields(vo)) {
|
|
117
|
-
const helper =
|
|
162
|
+
const helper = extractMapHelper(f);
|
|
118
163
|
if (helper !== null)
|
|
119
164
|
used.add(helper);
|
|
120
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr010-field-mapping.js","sourceRoot":"","sources":["../../src/templates/fr010-field-mapping.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,sFAAsF;AACtF,sFAAsF;AACtF,yFAAyF;AACzF,4EAA4E;AAC5E,EAAE;AACF,0FAA0F;AAC1F,4FAA4F;AAC5F,8BAA8B;AAE9B,OAAO,EAEL,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"fr010-field-mapping.js","sourceRoot":"","sources":["../../src/templates/fr010-field-mapping.ts"],"names":[],"mappings":"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"}
|