dyna-record 0.6.4 → 0.6.5
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 +37 -3
- package/dist/src/decorators/attributes/ObjectAttribute.d.ts.map +1 -1
- package/dist/src/decorators/attributes/ObjectAttribute.js +31 -27
- package/dist/src/decorators/attributes/serializers.d.ts.map +1 -1
- package/dist/src/decorators/attributes/serializers.js +16 -18
- package/dist/src/decorators/attributes/types.d.ts +9 -10
- package/dist/src/decorators/attributes/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -286,10 +286,44 @@ await Drawing.update("123", {
|
|
|
286
286
|
});
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
|
|
289
|
+
##### Arrays of discriminated unions
|
|
290
290
|
|
|
291
|
-
|
|
292
|
-
|
|
291
|
+
Discriminated unions can be used as array items. Each element in the array is validated and serialized using variant-aware logic:
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
const dashboardSchema = {
|
|
295
|
+
widgets: {
|
|
296
|
+
type: "array",
|
|
297
|
+
items: {
|
|
298
|
+
type: "discriminatedUnion",
|
|
299
|
+
discriminator: "type",
|
|
300
|
+
variants: {
|
|
301
|
+
"metric-card": {
|
|
302
|
+
label: { type: "string" },
|
|
303
|
+
value: { type: "number" }
|
|
304
|
+
},
|
|
305
|
+
chart: {
|
|
306
|
+
title: { type: "string" },
|
|
307
|
+
chartType: { type: "enum", values: ["bar", "line", "pie"] }
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
} as const satisfies ObjectSchema;
|
|
313
|
+
|
|
314
|
+
// TypeScript infers:
|
|
315
|
+
// dashboard.widgets → Array<
|
|
316
|
+
// | { type: "metric-card"; label: string; value: number }
|
|
317
|
+
// | { type: "chart"; title: string; chartType: "bar" | "line" | "pie" }
|
|
318
|
+
// >
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Arrays of discriminated unions use **full replacement** on update (the entire array is replaced), consistent with all array fields.
|
|
322
|
+
|
|
323
|
+
**Scoping constraints:**
|
|
324
|
+
|
|
325
|
+
- Supported at the ObjectAttribute root level, as fields within an ObjectSchema, and as array items
|
|
326
|
+
- Not supported nested inside other discriminated unions
|
|
293
327
|
|
|
294
328
|
### Foreign Keys
|
|
295
329
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectAttribute.d.ts","sourceRoot":"","sources":["../../../../src/decorators/attributes/ObjectAttribute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EAGlB,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,YAAY,CAC5D,SAAQ,uBAAuB;IAC/B;;;;OAIG;IACH,MAAM,EAAE,CAAC,CAAC;CACX;
|
|
1
|
+
{"version":3,"file":"ObjectAttribute.d.ts","sourceRoot":"","sources":["../../../../src/decorators/attributes/ObjectAttribute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EAGlB,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,YAAY,CAC5D,SAAQ,uBAAuB;IAC/B;;;;OAIG;IACH,MAAM,EAAE,CAAC,CAAC;CACX;AAkKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,iBAAS,eAAe,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,CAAC,CAAC,SAAS,YAAY,EACzE,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,YAGtB,SAAS,WACR,yBAAyB,CAChC,CAAC,EACD,iBAAiB,CAAC,CAAC,CAAC,EACpB,sBAAsB,CAAC,CAAC,CAAC,CAC1B,UAoBJ;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -6,6 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const zod_1 = require("zod");
|
|
7
7
|
const metadata_1 = __importDefault(require("../../metadata"));
|
|
8
8
|
const serializers_1 = require("./serializers");
|
|
9
|
+
/**
|
|
10
|
+
* Builds a Zod shape record from an {@link ObjectSchema} using the provided
|
|
11
|
+
* field converter function. Shared by both full and partial schema builders.
|
|
12
|
+
*/
|
|
13
|
+
function buildZodShape(schema, fieldConverter) {
|
|
14
|
+
const shape = {};
|
|
15
|
+
for (const [key, fieldDef] of Object.entries(schema)) {
|
|
16
|
+
shape[key] = fieldConverter(fieldDef);
|
|
17
|
+
}
|
|
18
|
+
return shape;
|
|
19
|
+
}
|
|
9
20
|
/**
|
|
10
21
|
* Converts an {@link ObjectSchema} to a partial Zod schema for update validation.
|
|
11
22
|
*
|
|
@@ -17,11 +28,7 @@ const serializers_1 = require("./serializers");
|
|
|
17
28
|
* @returns A ZodType that validates partial objects matching the schema
|
|
18
29
|
*/
|
|
19
30
|
function objectSchemaToZodPartial(schema) {
|
|
20
|
-
|
|
21
|
-
for (const [key, fieldDef] of Object.entries(schema)) {
|
|
22
|
-
shape[key] = fieldDefToZodPartial(fieldDef);
|
|
23
|
-
}
|
|
24
|
-
return zod_1.z.object(shape).partial();
|
|
31
|
+
return zod_1.z.object(buildZodShape(schema, fieldDefToZodPartial)).partial();
|
|
25
32
|
}
|
|
26
33
|
/**
|
|
27
34
|
* Converts a single {@link FieldDef} to the corresponding partial Zod type.
|
|
@@ -31,15 +38,16 @@ function objectSchemaToZodPartial(schema) {
|
|
|
31
38
|
* always use full replacement on update.
|
|
32
39
|
*/
|
|
33
40
|
function fieldDefToZodPartial(fieldDef) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
switch (fieldDef.type) {
|
|
42
|
+
case "object":
|
|
43
|
+
return objectSchemaToZodPartial(fieldDef.fields);
|
|
44
|
+
case "discriminatedUnion":
|
|
45
|
+
// Discriminated unions use full replacement — same schema as create
|
|
46
|
+
return discriminatedUnionToZod(fieldDef);
|
|
47
|
+
default:
|
|
48
|
+
// For non-object fields, use the standard schema (includes nullable wrapping)
|
|
49
|
+
return fieldDefToZod(fieldDef);
|
|
40
50
|
}
|
|
41
|
-
// For non-object fields, use the standard schema (includes nullable wrapping)
|
|
42
|
-
return fieldDefToZod(fieldDef);
|
|
43
51
|
}
|
|
44
52
|
/**
|
|
45
53
|
* Converts an {@link ObjectSchema} to a Zod schema for runtime validation.
|
|
@@ -48,11 +56,7 @@ function fieldDefToZodPartial(fieldDef) {
|
|
|
48
56
|
* @returns A ZodType that validates objects matching the schema
|
|
49
57
|
*/
|
|
50
58
|
function objectSchemaToZod(schema) {
|
|
51
|
-
|
|
52
|
-
for (const [key, fieldDef] of Object.entries(schema)) {
|
|
53
|
-
shape[key] = fieldDefToZod(fieldDef);
|
|
54
|
-
}
|
|
55
|
-
return zod_1.z.object(shape);
|
|
59
|
+
return zod_1.z.object(buildZodShape(schema, fieldDefToZod));
|
|
56
60
|
}
|
|
57
61
|
/**
|
|
58
62
|
* Builds a Zod `discriminatedUnion` schema from a {@link DiscriminatedUnionFieldDef}.
|
|
@@ -65,10 +69,11 @@ function objectSchemaToZod(schema) {
|
|
|
65
69
|
* @returns A ZodType that validates discriminated union values
|
|
66
70
|
*/
|
|
67
71
|
function discriminatedUnionToZod(fieldDef) {
|
|
68
|
-
|
|
72
|
+
const variantEntries = Object.entries(fieldDef.variants);
|
|
73
|
+
if (variantEntries.length === 0) {
|
|
69
74
|
throw new Error("DiscriminatedUnionFieldDef requires at least one variant");
|
|
70
75
|
}
|
|
71
|
-
const variantSchemas =
|
|
76
|
+
const variantSchemas = variantEntries.map(([variantKey, variantObjectSchema]) => {
|
|
72
77
|
const variantZod = objectSchemaToZod(variantObjectSchema);
|
|
73
78
|
return variantZod.extend({
|
|
74
79
|
[fieldDef.discriminator]: zod_1.z.literal(variantKey)
|
|
@@ -99,13 +104,12 @@ function discriminatedUnionToZod(fieldDef) {
|
|
|
99
104
|
* @returns A ZodType that validates values matching the field definition
|
|
100
105
|
*/
|
|
101
106
|
function fieldDefToZod(fieldDef) {
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return discriminatedUnionToZod(fieldDef);
|
|
107
|
+
// These types handle their own nullable semantics or are never nullable
|
|
108
|
+
switch (fieldDef.type) {
|
|
109
|
+
case "object":
|
|
110
|
+
return objectSchemaToZod(fieldDef.fields);
|
|
111
|
+
case "discriminatedUnion":
|
|
112
|
+
return discriminatedUnionToZod(fieldDef);
|
|
109
113
|
}
|
|
110
114
|
let zodType;
|
|
111
115
|
switch (fieldDef.type) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializers.d.ts","sourceRoot":"","sources":["../../../../src/decorators/attributes/serializers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;6BACA,oBAAoB,KAAG,OAAO;4BAM/B,OAAO;CAEhC,CAAC;AAuBF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;
|
|
1
|
+
{"version":3,"file":"serializers.d.ts","sourceRoot":"","sources":["../../../../src/decorators/attributes/serializers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;6BACA,oBAAoB,KAAG,OAAO;4BAM/B,OAAO;CAEhC,CAAC;AAuBF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAwBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,OAAO,GACX,OAAO,CAmBT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CAOxE"}
|
|
@@ -64,6 +64,18 @@ function objectToTableItem(schema, value) {
|
|
|
64
64
|
}
|
|
65
65
|
return result;
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolves and converts a discriminated union value using the provided schema
|
|
69
|
+
* converter function. Shared by both serialization and deserialization paths.
|
|
70
|
+
*/
|
|
71
|
+
function convertDiscriminatedUnion(fieldDef, value, schemaConverter) {
|
|
72
|
+
const variantSchema = resolveVariantSchema(fieldDef, value);
|
|
73
|
+
if (variantSchema === undefined)
|
|
74
|
+
return value;
|
|
75
|
+
const result = schemaConverter(variantSchema, value);
|
|
76
|
+
result[fieldDef.discriminator] = value[fieldDef.discriminator];
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
67
79
|
/**
|
|
68
80
|
* Converts a single field value to its DynamoDB table representation based on
|
|
69
81
|
* the field definition.
|
|
@@ -87,15 +99,8 @@ function convertFieldToTableItem(fieldDef, val) {
|
|
|
87
99
|
return objectToTableItem(fieldDef.fields, val);
|
|
88
100
|
case "array":
|
|
89
101
|
return val.map(item => convertFieldToTableItem(fieldDef.items, item));
|
|
90
|
-
case "discriminatedUnion":
|
|
91
|
-
|
|
92
|
-
const variantSchema = resolveVariantSchema(fieldDef, value);
|
|
93
|
-
if (variantSchema === undefined)
|
|
94
|
-
return val;
|
|
95
|
-
const result = objectToTableItem(variantSchema, value);
|
|
96
|
-
result[fieldDef.discriminator] = value[fieldDef.discriminator];
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
102
|
+
case "discriminatedUnion":
|
|
103
|
+
return convertDiscriminatedUnion(fieldDef, val, objectToTableItem);
|
|
99
104
|
default:
|
|
100
105
|
return val;
|
|
101
106
|
}
|
|
@@ -144,15 +149,8 @@ function convertFieldToEntityValue(fieldDef, val) {
|
|
|
144
149
|
return tableItemToObject(fieldDef.fields, val);
|
|
145
150
|
case "array":
|
|
146
151
|
return val.map(item => convertFieldToEntityValue(fieldDef.items, item));
|
|
147
|
-
case "discriminatedUnion":
|
|
148
|
-
|
|
149
|
-
const variantSchema = resolveVariantSchema(fieldDef, value);
|
|
150
|
-
if (variantSchema === undefined)
|
|
151
|
-
return val;
|
|
152
|
-
const result = tableItemToObject(variantSchema, value);
|
|
153
|
-
result[fieldDef.discriminator] = value[fieldDef.discriminator];
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
152
|
+
case "discriminatedUnion":
|
|
153
|
+
return convertDiscriminatedUnion(fieldDef, val, tableItemToObject);
|
|
156
154
|
default:
|
|
157
155
|
return val;
|
|
158
156
|
}
|
|
@@ -92,12 +92,12 @@ export interface ArrayFieldDef {
|
|
|
92
92
|
/** Must be `"array"` to indicate a list/array field. */
|
|
93
93
|
type: "array";
|
|
94
94
|
/**
|
|
95
|
-
* A {@link
|
|
96
|
-
*
|
|
97
|
-
* full replacement on update
|
|
98
|
-
* are
|
|
95
|
+
* A {@link FieldDef} describing the type of each array element.
|
|
96
|
+
* All field types are supported as array items, including discriminated unions.
|
|
97
|
+
* Arrays always use full replacement on update, so discriminated union items
|
|
98
|
+
* are serialized per-element using variant-aware logic.
|
|
99
99
|
*/
|
|
100
|
-
items:
|
|
100
|
+
items: FieldDef;
|
|
101
101
|
/** When `true`, the field becomes optional. */
|
|
102
102
|
nullable?: boolean;
|
|
103
103
|
}
|
|
@@ -196,9 +196,10 @@ export interface DateFieldDef {
|
|
|
196
196
|
* they always use full replacement on update rather than document path expressions,
|
|
197
197
|
* so there is no risk of DynamoDB failing on a missing parent path.
|
|
198
198
|
*
|
|
199
|
-
* **Scoping constraints
|
|
200
|
-
* - Supported at the ObjectAttribute root level
|
|
201
|
-
*
|
|
199
|
+
* **Scoping constraints:**
|
|
200
|
+
* - Supported at the ObjectAttribute root level, as fields within an ObjectSchema,
|
|
201
|
+
* and as array items
|
|
202
|
+
* - Not supported nested inside other discriminated unions
|
|
202
203
|
*
|
|
203
204
|
* @example
|
|
204
205
|
* ```typescript
|
|
@@ -235,8 +236,6 @@ export interface DiscriminatedUnionFieldDef {
|
|
|
235
236
|
* A field definition that excludes {@link DiscriminatedUnionFieldDef}.
|
|
236
237
|
*
|
|
237
238
|
* Used in contexts where discriminated unions are not allowed:
|
|
238
|
-
* - {@link ArrayFieldDef} `items` — arrays use full replacement and variant-aware
|
|
239
|
-
* serialization is not defined for array item context
|
|
240
239
|
* - {@link DiscriminatedUnionFieldDef} `variants` — discriminated unions cannot
|
|
241
240
|
* be nested inside other discriminated unions
|
|
242
241
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/decorators/attributes/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,gBAAgB,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,IAAI,EAAE,kBAAkB,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,IAAI,EAAE,QAAQ,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,IAAI,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/decorators/attributes/types.ts"],"names":[],"mappings":"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"}
|