@rtpaulino/entity 0.26.0 → 0.26.1
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/lib/primitive-deserializers.d.ts +17 -0
- package/dist/lib/primitive-deserializers.d.ts.map +1 -1
- package/dist/lib/primitive-deserializers.js +24 -1
- package/dist/lib/primitive-deserializers.js.map +1 -1
- package/dist/lib/property.d.ts +32 -0
- package/dist/lib/property.d.ts.map +1 -1
- package/dist/lib/property.js +15 -4
- package/dist/lib/property.js.map +1 -1
- package/dist/lib/test-entities.d.ts +12 -0
- package/dist/lib/test-entities.d.ts.map +1 -1
- package/dist/lib/test-entities.js +25 -0
- package/dist/lib/test-entities.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,23 @@ import type { PrimitiveConstructor } from './types.js';
|
|
|
3
3
|
* Checks if a constructor is a supported primitive type constructor
|
|
4
4
|
*/
|
|
5
5
|
export declare function isPrimitiveConstructor(constructor: any): constructor is PrimitiveConstructor;
|
|
6
|
+
/**
|
|
7
|
+
* Deserializes a number value
|
|
8
|
+
*/
|
|
9
|
+
export declare function deserializeNumber(value: unknown): number;
|
|
10
|
+
/**
|
|
11
|
+
* Deserializes a number from a `bigint` or an integer-formatted string.
|
|
12
|
+
*
|
|
13
|
+
* Accepts:
|
|
14
|
+
* - `number` — returned as-is (delegates to `deserializeNumber`)
|
|
15
|
+
* - `bigint` — converted via `Number(value)`
|
|
16
|
+
* - `string` — must consist solely of an optional leading `-` followed by digits;
|
|
17
|
+
* parsed as a bigint first and then converted to a number
|
|
18
|
+
*
|
|
19
|
+
* @warning Information may be lost if the `BigInt` value exceeds the safe integer
|
|
20
|
+
* range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).
|
|
21
|
+
*/
|
|
22
|
+
export declare function deserializeNumberFromBigInt(value: unknown): number;
|
|
6
23
|
/**
|
|
7
24
|
* Deserializes a primitive value based on its type constructor
|
|
8
25
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitive-deserializers.d.ts","sourceRoot":"","sources":["../../src/lib/primitive-deserializers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,GAAG,GACf,WAAW,IAAI,oBAAoB,CAQrC;
|
|
1
|
+
{"version":3,"file":"primitive-deserializers.d.ts","sourceRoot":"","sources":["../../src/lib/primitive-deserializers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,GAAG,GACf,WAAW,IAAI,oBAAoB,CAQrC;AAcD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAalE;AAoDD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,eAAe,EAAE,oBAAoB,GACpC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAkB3C"}
|
|
@@ -14,12 +14,35 @@
|
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* Deserializes a number value
|
|
17
|
-
*/ function deserializeNumber(value) {
|
|
17
|
+
*/ export function deserializeNumber(value) {
|
|
18
18
|
if (typeof value !== 'number') {
|
|
19
19
|
throw createValidationError(`Expects a number but received ${typeof value}`);
|
|
20
20
|
}
|
|
21
21
|
return value;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Deserializes a number from a `bigint` or an integer-formatted string.
|
|
25
|
+
*
|
|
26
|
+
* Accepts:
|
|
27
|
+
* - `number` — returned as-is (delegates to `deserializeNumber`)
|
|
28
|
+
* - `bigint` — converted via `Number(value)`
|
|
29
|
+
* - `string` — must consist solely of an optional leading `-` followed by digits;
|
|
30
|
+
* parsed as a bigint first and then converted to a number
|
|
31
|
+
*
|
|
32
|
+
* @warning Information may be lost if the `BigInt` value exceeds the safe integer
|
|
33
|
+
* range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).
|
|
34
|
+
*/ export function deserializeNumberFromBigInt(value) {
|
|
35
|
+
if (typeof value === 'number') {
|
|
36
|
+
return deserializeNumber(value);
|
|
37
|
+
}
|
|
38
|
+
if (typeof value === 'bigint') {
|
|
39
|
+
return Number(value);
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === 'string' && /^-?\d+$/.test(value)) {
|
|
42
|
+
return Number(BigInt(value));
|
|
43
|
+
}
|
|
44
|
+
throw createValidationError(`Expects a number, bigint, or integer string but received ${typeof value === 'string' ? `string '${value}'` : typeof value}`);
|
|
45
|
+
}
|
|
23
46
|
/**
|
|
24
47
|
* Deserializes a boolean value
|
|
25
48
|
*/ function deserializeBoolean(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/primitive-deserializers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { PrimitiveConstructor } from './types.js';\nimport { createValidationError } from './validation-utils.js';\n\n/**\n * Checks if a constructor is a supported primitive type constructor\n */\nexport function isPrimitiveConstructor(\n constructor: any,\n): constructor is PrimitiveConstructor {\n return (\n constructor === String ||\n constructor === Number ||\n constructor === Boolean ||\n constructor === BigInt ||\n constructor === Date\n );\n}\n\n/**\n * Deserializes a string value\n */\nfunction deserializeString(value: unknown): string {\n if (typeof value !== 'string') {\n throw createValidationError(\n `Expects a string but received ${typeof value}`,\n );\n }\n return value;\n}\n\n/**\n * Deserializes a number value\n */\
|
|
1
|
+
{"version":3,"sources":["../../src/lib/primitive-deserializers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { PrimitiveConstructor } from './types.js';\nimport { createValidationError } from './validation-utils.js';\n\n/**\n * Checks if a constructor is a supported primitive type constructor\n */\nexport function isPrimitiveConstructor(\n constructor: any,\n): constructor is PrimitiveConstructor {\n return (\n constructor === String ||\n constructor === Number ||\n constructor === Boolean ||\n constructor === BigInt ||\n constructor === Date\n );\n}\n\n/**\n * Deserializes a string value\n */\nfunction deserializeString(value: unknown): string {\n if (typeof value !== 'string') {\n throw createValidationError(\n `Expects a string but received ${typeof value}`,\n );\n }\n return value;\n}\n\n/**\n * Deserializes a number value\n */\nexport function deserializeNumber(value: unknown): number {\n if (typeof value !== 'number') {\n throw createValidationError(\n `Expects a number but received ${typeof value}`,\n );\n }\n return value;\n}\n\n/**\n * Deserializes a number from a `bigint` or an integer-formatted string.\n *\n * Accepts:\n * - `number` — returned as-is (delegates to `deserializeNumber`)\n * - `bigint` — converted via `Number(value)`\n * - `string` — must consist solely of an optional leading `-` followed by digits;\n * parsed as a bigint first and then converted to a number\n *\n * @warning Information may be lost if the `BigInt` value exceeds the safe integer\n * range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).\n */\nexport function deserializeNumberFromBigInt(value: unknown): number {\n if (typeof value === 'number') {\n return deserializeNumber(value);\n }\n if (typeof value === 'bigint') {\n return Number(value);\n }\n if (typeof value === 'string' && /^-?\\d+$/.test(value)) {\n return Number(BigInt(value));\n }\n throw createValidationError(\n `Expects a number, bigint, or integer string but received ${typeof value === 'string' ? `string '${value}'` : typeof value}`,\n );\n}\n\n/**\n * Deserializes a boolean value\n */\nfunction deserializeBoolean(value: unknown): boolean {\n if (typeof value !== 'boolean') {\n throw createValidationError(\n `Expects a boolean but received ${typeof value}`,\n );\n }\n return value;\n}\n\n/**\n * Deserializes a BigInt value (accepts bigint or string)\n */\nfunction deserializeBigInt(value: unknown): bigint {\n if (typeof value === 'bigint') {\n return value;\n }\n if (typeof value === 'string') {\n try {\n return BigInt(value);\n } catch {\n throw createValidationError(`Cannot parse '${value}' as BigInt`);\n }\n }\n throw createValidationError(\n `Expects a bigint or string but received ${typeof value}`,\n );\n}\n\n/**\n * Deserializes a Date value (accepts Date instance or ISO string)\n */\nfunction deserializeDate(value: unknown): Date {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n if (isNaN(date.getTime())) {\n throw createValidationError(`Cannot parse '${value}' as Date`);\n }\n return date;\n }\n throw createValidationError(\n `Expects a Date or ISO string but received ${typeof value}`,\n );\n}\n\n/**\n * Deserializes a primitive value based on its type constructor\n *\n * @param value - The value to deserialize\n * @param typeConstructor - The primitive type constructor (String, Number, Boolean, BigInt, Date)\n * @returns The deserialized value\n * @throws ValidationError with empty property if type mismatch or parse error\n */\nexport function deserializePrimitive(\n value: unknown,\n typeConstructor: PrimitiveConstructor,\n): string | number | boolean | bigint | Date {\n if (typeConstructor === String) {\n return deserializeString(value);\n }\n if (typeConstructor === Number) {\n return deserializeNumber(value);\n }\n if (typeConstructor === Boolean) {\n return deserializeBoolean(value);\n }\n if (typeConstructor === BigInt) {\n return deserializeBigInt(value);\n }\n if (typeConstructor === Date) {\n return deserializeDate(value);\n }\n\n throw createValidationError(`Unknown primitive type constructor`);\n}\n"],"names":["createValidationError","isPrimitiveConstructor","constructor","String","Number","Boolean","BigInt","Date","deserializeString","value","deserializeNumber","deserializeNumberFromBigInt","test","deserializeBoolean","deserializeBigInt","deserializeDate","date","isNaN","getTime","deserializePrimitive","typeConstructor"],"mappings":"AAAA,qDAAqD,GAErD,SAASA,qBAAqB,QAAQ,wBAAwB;AAE9D;;CAEC,GACD,OAAO,SAASC,uBACdC,WAAgB;IAEhB,OACEA,gBAAgBC,UAChBD,gBAAgBE,UAChBF,gBAAgBG,WAChBH,gBAAgBI,UAChBJ,gBAAgBK;AAEpB;AAEA;;CAEC,GACD,SAASC,kBAAkBC,KAAc;IACvC,IAAI,OAAOA,UAAU,UAAU;QAC7B,MAAMT,sBACJ,CAAC,8BAA8B,EAAE,OAAOS,OAAO;IAEnD;IACA,OAAOA;AACT;AAEA;;CAEC,GACD,OAAO,SAASC,kBAAkBD,KAAc;IAC9C,IAAI,OAAOA,UAAU,UAAU;QAC7B,MAAMT,sBACJ,CAAC,8BAA8B,EAAE,OAAOS,OAAO;IAEnD;IACA,OAAOA;AACT;AAEA;;;;;;;;;;;CAWC,GACD,OAAO,SAASE,4BAA4BF,KAAc;IACxD,IAAI,OAAOA,UAAU,UAAU;QAC7B,OAAOC,kBAAkBD;IAC3B;IACA,IAAI,OAAOA,UAAU,UAAU;QAC7B,OAAOL,OAAOK;IAChB;IACA,IAAI,OAAOA,UAAU,YAAY,UAAUG,IAAI,CAACH,QAAQ;QACtD,OAAOL,OAAOE,OAAOG;IACvB;IACA,MAAMT,sBACJ,CAAC,yDAAyD,EAAE,OAAOS,UAAU,WAAW,CAAC,QAAQ,EAAEA,MAAM,CAAC,CAAC,GAAG,OAAOA,OAAO;AAEhI;AAEA;;CAEC,GACD,SAASI,mBAAmBJ,KAAc;IACxC,IAAI,OAAOA,UAAU,WAAW;QAC9B,MAAMT,sBACJ,CAAC,+BAA+B,EAAE,OAAOS,OAAO;IAEpD;IACA,OAAOA;AACT;AAEA;;CAEC,GACD,SAASK,kBAAkBL,KAAc;IACvC,IAAI,OAAOA,UAAU,UAAU;QAC7B,OAAOA;IACT;IACA,IAAI,OAAOA,UAAU,UAAU;QAC7B,IAAI;YACF,OAAOH,OAAOG;QAChB,EAAE,OAAM;YACN,MAAMT,sBAAsB,CAAC,cAAc,EAAES,MAAM,WAAW,CAAC;QACjE;IACF;IACA,MAAMT,sBACJ,CAAC,wCAAwC,EAAE,OAAOS,OAAO;AAE7D;AAEA;;CAEC,GACD,SAASM,gBAAgBN,KAAc;IACrC,IAAIA,iBAAiBF,MAAM;QACzB,OAAOE;IACT;IACA,IAAI,OAAOA,UAAU,UAAU;QAC7B,MAAMO,OAAO,IAAIT,KAAKE;QACtB,IAAIQ,MAAMD,KAAKE,OAAO,KAAK;YACzB,MAAMlB,sBAAsB,CAAC,cAAc,EAAES,MAAM,SAAS,CAAC;QAC/D;QACA,OAAOO;IACT;IACA,MAAMhB,sBACJ,CAAC,0CAA0C,EAAE,OAAOS,OAAO;AAE/D;AAEA;;;;;;;CAOC,GACD,OAAO,SAASU,qBACdV,KAAc,EACdW,eAAqC;IAErC,IAAIA,oBAAoBjB,QAAQ;QAC9B,OAAOK,kBAAkBC;IAC3B;IACA,IAAIW,oBAAoBhB,QAAQ;QAC9B,OAAOM,kBAAkBD;IAC3B;IACA,IAAIW,oBAAoBf,SAAS;QAC/B,OAAOQ,mBAAmBJ;IAC5B;IACA,IAAIW,oBAAoBd,QAAQ;QAC9B,OAAOQ,kBAAkBL;IAC3B;IACA,IAAIW,oBAAoBb,MAAM;QAC5B,OAAOQ,gBAAgBN;IACzB;IAEA,MAAMT,sBAAsB,CAAC,kCAAkC,CAAC;AAClE"}
|
package/dist/lib/property.d.ts
CHANGED
|
@@ -100,6 +100,14 @@ export declare function EnumProperty<T extends Record<string, string>>(enumType:
|
|
|
100
100
|
export declare function numberPropertyOptions(options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {
|
|
101
101
|
min?: number;
|
|
102
102
|
max?: number;
|
|
103
|
+
/**
|
|
104
|
+
* When `true`, `bigint` values and integer-formatted strings (e.g. `"-42"`) will
|
|
105
|
+
* be coerced to `number` during deserialization.
|
|
106
|
+
*
|
|
107
|
+
* @warning Information may be lost if the `BigInt` value exceeds the safe integer
|
|
108
|
+
* range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).
|
|
109
|
+
*/
|
|
110
|
+
parseBigInt?: boolean;
|
|
103
111
|
}): PropertyOptions<number, NumberConstructor>;
|
|
104
112
|
/**
|
|
105
113
|
* Helper decorator for number properties
|
|
@@ -118,6 +126,14 @@ export declare function numberPropertyOptions(options?: Omit<PropertyOptions<num
|
|
|
118
126
|
export declare function NumberProperty(options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {
|
|
119
127
|
min?: number;
|
|
120
128
|
max?: number;
|
|
129
|
+
/**
|
|
130
|
+
* When `true`, `bigint` values and integer-formatted strings (e.g. `"-42"`) will
|
|
131
|
+
* be coerced to `number` during deserialization.
|
|
132
|
+
*
|
|
133
|
+
* @warning Information may be lost if the `BigInt` value exceeds the safe integer
|
|
134
|
+
* range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).
|
|
135
|
+
*/
|
|
136
|
+
parseBigInt?: boolean;
|
|
121
137
|
}): PropertyDecorator;
|
|
122
138
|
/**
|
|
123
139
|
* Creates property options for an integer property
|
|
@@ -126,6 +142,14 @@ export declare function NumberProperty(options?: Omit<PropertyOptions<number, Nu
|
|
|
126
142
|
export declare function intPropertyOptions(options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {
|
|
127
143
|
min?: number;
|
|
128
144
|
max?: number;
|
|
145
|
+
/**
|
|
146
|
+
* When `true`, `bigint` values and integer-formatted strings (e.g. `"-42"`) will
|
|
147
|
+
* be coerced to `number` during deserialization.
|
|
148
|
+
*
|
|
149
|
+
* @warning Information may be lost if the `BigInt` value exceeds the safe integer
|
|
150
|
+
* range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).
|
|
151
|
+
*/
|
|
152
|
+
parseBigInt?: boolean;
|
|
129
153
|
}): PropertyOptions<number, NumberConstructor>;
|
|
130
154
|
/**
|
|
131
155
|
* Helper decorator for integer properties
|
|
@@ -145,6 +169,14 @@ export declare function intPropertyOptions(options?: Omit<PropertyOptions<number
|
|
|
145
169
|
export declare function IntProperty(options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {
|
|
146
170
|
min?: number;
|
|
147
171
|
max?: number;
|
|
172
|
+
/**
|
|
173
|
+
* When `true`, `bigint` values and integer-formatted strings (e.g. `"-42"`) will
|
|
174
|
+
* be coerced to `number` during deserialization.
|
|
175
|
+
*
|
|
176
|
+
* @warning Information may be lost if the `BigInt` value exceeds the safe integer
|
|
177
|
+
* range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).
|
|
178
|
+
*/
|
|
179
|
+
parseBigInt?: boolean;
|
|
148
180
|
}): PropertyDecorator;
|
|
149
181
|
/**
|
|
150
182
|
* Creates property options for a boolean property
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property.d.ts","sourceRoot":"","sources":["../../src/lib/property.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,OAAO,EACP,KAAK,QAAQ,EAKb,eAAe,EAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"property.d.ts","sourceRoot":"","sources":["../../src/lib/property.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/property.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { PROPERTY_METADATA_KEY, PROPERTY_OPTIONS_METADATA_KEY, POLYMORPHIC_PROPERTY_METADATA_KEY } from './types.js';
|
|
3
3
|
import { enumValidator, intValidator, minLengthValidator, maxLengthValidator, patternValidator, minValidator, maxValidator, arrayMinLengthValidator, arrayMaxLengthValidator } from './validators.js';
|
|
4
4
|
import { PolymorphicRegistry } from './polymorphic-registry.js';
|
|
5
|
+
import { deserializeNumberFromBigInt } from './primitive-deserializers.js';
|
|
5
6
|
/**
|
|
6
7
|
* Property decorator that marks class properties with metadata.
|
|
7
8
|
* This decorator can be used to identify and track properties within classes.
|
|
@@ -170,11 +171,16 @@ import { PolymorphicRegistry } from './polymorphic-registry.js';
|
|
|
170
171
|
validators.unshift(maxValidator(options.max));
|
|
171
172
|
}
|
|
172
173
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
173
|
-
const { min, max, ...restOptions } = options || {};
|
|
174
|
+
const { min, max, parseBigInt, ...restOptions } = options || {};
|
|
175
|
+
const deserialize = parseBigInt ? deserializeNumberFromBigInt : undefined;
|
|
174
176
|
return {
|
|
175
177
|
...restOptions,
|
|
176
178
|
type: ()=>Number,
|
|
177
|
-
validators: validators.length > 0 ? validators : undefined
|
|
179
|
+
validators: validators.length > 0 ? validators : undefined,
|
|
180
|
+
...deserialize ? {
|
|
181
|
+
serialize: (v)=>v,
|
|
182
|
+
deserialize
|
|
183
|
+
} : {}
|
|
178
184
|
};
|
|
179
185
|
}
|
|
180
186
|
/**
|
|
@@ -208,11 +214,16 @@ import { PolymorphicRegistry } from './polymorphic-registry.js';
|
|
|
208
214
|
}
|
|
209
215
|
validators.unshift(intValidator());
|
|
210
216
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
211
|
-
const { min, max, ...restOptions } = options || {};
|
|
217
|
+
const { min, max, parseBigInt, ...restOptions } = options || {};
|
|
218
|
+
const deserialize = parseBigInt ? deserializeNumberFromBigInt : undefined;
|
|
212
219
|
return {
|
|
213
220
|
...restOptions,
|
|
214
221
|
type: ()=>Number,
|
|
215
|
-
validators: validators.length > 0 ? validators : undefined
|
|
222
|
+
validators: validators.length > 0 ? validators : undefined,
|
|
223
|
+
...deserialize ? {
|
|
224
|
+
serialize: (v)=>v,
|
|
225
|
+
deserialize
|
|
226
|
+
} : {}
|
|
216
227
|
};
|
|
217
228
|
}
|
|
218
229
|
/**
|
package/dist/lib/property.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/property.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-wrapper-object-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isEqual } from 'lodash-es';\nimport {\n AnyCtor,\n type CtorLike,\n type InstanceOfCtorLike,\n PROPERTY_METADATA_KEY,\n PROPERTY_OPTIONS_METADATA_KEY,\n POLYMORPHIC_PROPERTY_METADATA_KEY,\n PropertyOptions,\n} from './types.js';\nimport {\n enumValidator,\n intValidator,\n minLengthValidator,\n maxLengthValidator,\n patternValidator,\n minValidator,\n maxValidator,\n arrayMinLengthValidator,\n arrayMaxLengthValidator,\n} from './validators.js';\nimport { PolymorphicRegistry } from './polymorphic-registry.js';\n\n/**\n * Property decorator that marks class properties with metadata.\n * This decorator can be used to identify and track properties within classes.\n *\n * @param options - Configuration for the property (type is required)\n *\n * @example\n * class User {\n * @Property({ type: () => String })\n * name: string;\n *\n * @Property({ type: () => String, equals: (a, b) => a.toLowerCase() === b.toLowerCase() })\n * email: string;\n *\n * @Property({ type: () => Number })\n * age: number;\n * }\n */\nexport function Property<T, C extends CtorLike<T>>(\n options: PropertyOptions<T, C>,\n): PropertyDecorator {\n return (target: object, propertyKey: string | symbol): void => {\n if (typeof propertyKey !== 'string') {\n return;\n }\n\n const existingProperties: string[] =\n Reflect.getOwnMetadata(PROPERTY_METADATA_KEY, target) || [];\n\n if (!existingProperties.includes(propertyKey)) {\n existingProperties.push(propertyKey);\n }\n\n Reflect.defineMetadata(PROPERTY_METADATA_KEY, existingProperties, target);\n\n if (options.passthrough === true) {\n if (options.array === true) {\n throw new Error(\n `Property '${propertyKey}' has passthrough: true and array: true. Passthrough cannot be combined with array.`,\n );\n }\n if (options.optional === true) {\n throw new Error(\n `Property '${propertyKey}' has passthrough: true and optional: true. Passthrough cannot be combined with optional.`,\n );\n }\n if (options.sparse === true) {\n throw new Error(\n `Property '${propertyKey}' has passthrough: true and sparse: true. Passthrough cannot be combined with sparse.`,\n );\n }\n if (\n options.serialize !== undefined ||\n options.deserialize !== undefined\n ) {\n throw new Error(\n `Property '${propertyKey}' has passthrough: true and custom serialize/deserialize functions. Passthrough cannot be combined with serialize or deserialize.`,\n );\n }\n }\n\n if (options.sparse === true && options.array !== true) {\n throw new Error(\n `Property '${propertyKey}' has sparse: true but array is not true. The sparse option only applies to arrays.`,\n );\n }\n\n if (options.arrayValidators && options.array !== true) {\n throw new Error(\n `Property '${propertyKey}' has arrayValidators defined but array is not true. The arrayValidators option only applies to arrays.`,\n );\n }\n\n // Validate serialize/deserialize pairing\n const hasSerialize = options.serialize !== undefined;\n const hasDeserialize = options.deserialize !== undefined;\n if (hasSerialize !== hasDeserialize) {\n throw new Error(\n `Property '${propertyKey}' must define both serialize and deserialize functions, or neither. Found only ${hasSerialize ? 'serialize' : 'deserialize'}.`,\n );\n }\n\n const existingOptions: Record<\n string,\n PropertyOptions<any, any>\n > = Reflect.getOwnMetadata(PROPERTY_OPTIONS_METADATA_KEY, target) || {};\n\n existingOptions[propertyKey] = options;\n\n Reflect.defineMetadata(\n PROPERTY_OPTIONS_METADATA_KEY,\n existingOptions,\n target,\n );\n };\n}\n\n/**\n * Helper decorator for string properties\n * @example\n * class User {\n * @StringProperty()\n * name!: string;\n *\n * @StringProperty({ optional: true })\n * nickname?: string;\n *\n * @StringProperty({ minLength: 3, maxLength: 50 })\n * username!: string;\n *\n * @StringProperty({ pattern: /^[a-z]+$/ })\n * slug!: string;\n * }\n */\n/**\n * Creates property options for a string property with optional validation\n * Used internally by StringProperty decorator and Props.String helper\n */\nexport function stringPropertyOptions(\n options?: Omit<PropertyOptions<string, StringConstructor>, 'type'> & {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n patternMessage?: string;\n },\n): PropertyOptions<string, StringConstructor> {\n const validators = [...(options?.validators || [])];\n\n if (options?.minLength !== undefined) {\n validators.unshift(minLengthValidator(options.minLength));\n }\n if (options?.maxLength !== undefined) {\n validators.unshift(maxLengthValidator(options.maxLength));\n }\n if (options?.pattern !== undefined) {\n validators.unshift(\n patternValidator(options.pattern, options.patternMessage),\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { minLength, maxLength, pattern, patternMessage, ...restOptions } =\n options || {};\n\n return {\n ...restOptions,\n type: () => String,\n validators: validators.length > 0 ? validators : undefined,\n };\n}\n\n/**\n * Helper decorator for string properties\n * @example\n * class User {\n * @StringProperty()\n * name!: string;\n *\n * @StringProperty({ optional: true })\n * nickname?: string;\n *\n * @StringProperty({ minLength: 2, maxLength: 50 })\n * username!: string;\n *\n * @StringProperty({ pattern: /^[a-z]+$/, patternMessage: 'Must be lowercase letters only' })\n * slug!: string;\n * }\n */\nexport function StringProperty(\n options?: Omit<PropertyOptions<string, StringConstructor>, 'type'> & {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n patternMessage?: string;\n },\n): PropertyDecorator {\n return Property(stringPropertyOptions(options));\n}\n\n/**\n * Creates property options for an enum property\n * Used internally by EnumProperty decorator and Props.Enum helper\n */\nexport function enumPropertyOptions<T extends Record<string, string>>(\n enumType: T,\n options?: Omit<PropertyOptions<string, StringConstructor>, 'type'>,\n): PropertyOptions<string, StringConstructor> {\n const validators = options?.validators\n ? [enumValidator(enumType), ...options.validators]\n : [enumValidator(enumType)];\n\n return { ...options, type: () => String, validators };\n}\n\n/**\n * Helper decorator for enum properties (string enums)\n * Validates that the string value matches one of the enum values\n * @param enumType - The enum object (e.g., MyEnum)\n * @param options - Additional property options\n * @example\n * enum Status {\n * Active = 'active',\n * Inactive = 'inactive'\n * }\n *\n * class User {\n * @EnumProperty(Status)\n * status!: Status;\n *\n * @EnumProperty(Status, { optional: true })\n * previousStatus?: Status;\n * }\n */\nexport function EnumProperty<T extends Record<string, string>>(\n enumType: T,\n options?: Omit<PropertyOptions<string, StringConstructor>, 'type'>,\n): PropertyDecorator {\n return Property(enumPropertyOptions(enumType, options));\n}\n\n/**\n * Creates property options for a number property\n * Used internally by NumberProperty decorator and Props.Number helper\n */\nexport function numberPropertyOptions(\n options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {\n min?: number;\n max?: number;\n },\n): PropertyOptions<number, NumberConstructor> {\n const validators = [...(options?.validators || [])];\n\n if (options?.min !== undefined) {\n validators.unshift(minValidator(options.min));\n }\n if (options?.max !== undefined) {\n validators.unshift(maxValidator(options.max));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { min, max, ...restOptions } = options || {};\n\n return {\n ...restOptions,\n type: () => Number,\n validators: validators.length > 0 ? validators : undefined,\n };\n}\n\n/**\n * Helper decorator for number properties\n * @example\n * class User {\n * @NumberProperty()\n * age!: number;\n *\n * @NumberProperty({ optional: true })\n * score?: number;\n *\n * @NumberProperty({ min: 0, max: 100 })\n * percentage!: number;\n * }\n */\nexport function NumberProperty(\n options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {\n min?: number;\n max?: number;\n },\n): PropertyDecorator {\n return Property(numberPropertyOptions(options));\n}\n\n/**\n * Creates property options for an integer property\n * Used internally by IntProperty decorator and Props.Int helper\n */\nexport function intPropertyOptions(\n options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {\n min?: number;\n max?: number;\n },\n): PropertyOptions<number, NumberConstructor> {\n const validators = [...(options?.validators || [])];\n\n if (options?.min !== undefined) {\n validators.unshift(minValidator(options.min));\n }\n if (options?.max !== undefined) {\n validators.unshift(maxValidator(options.max));\n }\n\n validators.unshift(intValidator());\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { min, max, ...restOptions } = options || {};\n\n return {\n ...restOptions,\n type: () => Number,\n validators: validators.length > 0 ? validators : undefined,\n };\n}\n\n/**\n * Helper decorator for integer properties\n * Validates that the number is an integer (no decimal places)\n * @example\n * class User {\n * @IntProperty()\n * age!: number;\n *\n * @IntProperty({ optional: true })\n * count?: number;\n *\n * @IntProperty({ min: 0, max: 100 })\n * percentage!: number;\n * }\n */\nexport function IntProperty(\n options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {\n min?: number;\n max?: number;\n },\n): PropertyDecorator {\n return Property(intPropertyOptions(options));\n}\n\n/**\n * Creates property options for a boolean property\n * Used internally by BooleanProperty decorator and Props.Boolean helper\n */\nexport function booleanPropertyOptions(\n options?: Omit<PropertyOptions<boolean, BooleanConstructor>, 'type'>,\n): PropertyOptions<boolean, BooleanConstructor> {\n return { ...options, type: () => Boolean };\n}\n\n/**\n * Helper decorator for boolean properties\n * @example\n * class User {\n * @BooleanProperty()\n * active!: boolean;\n *\n * @BooleanProperty({ optional: true })\n * verified?: boolean;\n * }\n */\nexport function BooleanProperty(\n options?: Omit<PropertyOptions<boolean, BooleanConstructor>, 'type'>,\n): PropertyDecorator {\n return Property(booleanPropertyOptions(options));\n}\n\n/**\n * Creates property options for a Date property\n * Used internally by DateProperty decorator and Props.Date helper\n */\nexport function datePropertyOptions(\n options?: Omit<PropertyOptions<Date, DateConstructor>, 'type'>,\n): PropertyOptions<Date, DateConstructor> {\n return { ...options, type: () => Date };\n}\n\n/**\n * Helper decorator for Date properties\n * @example\n * class User {\n * @DateProperty()\n * createdAt!: Date;\n *\n * @DateProperty({ optional: true })\n * deletedAt?: Date;\n * }\n */\nexport function DateProperty(\n options?: Omit<PropertyOptions<Date, DateConstructor>, 'type'>,\n): PropertyDecorator {\n return Property(datePropertyOptions(options));\n}\n\n/**\n * Creates property options for a BigInt property\n * Used internally by BigIntProperty decorator and Props.BigInt helper\n */\nexport function bigIntPropertyOptions(\n options?: Omit<PropertyOptions<bigint, BigIntConstructor>, 'type'>,\n): PropertyOptions<bigint, BigIntConstructor> {\n return { ...options, type: () => BigInt };\n}\n\n/**\n * Helper decorator for BigInt properties\n * @example\n * class User {\n * @BigIntProperty()\n * id!: bigint;\n *\n * @BigIntProperty({ optional: true })\n * balance?: bigint;\n * }\n */\nexport function BigIntProperty(\n options?: Omit<PropertyOptions<bigint, BigIntConstructor>, 'type'>,\n): PropertyDecorator {\n return Property(bigIntPropertyOptions(options));\n}\n\n/**\n * Creates property options for an entity property\n * Used internally by EntityProperty decorator and Props.Entity helper\n */\nexport function entityPropertyOptions<\n T,\n C extends AnyCtor<T> & { new (data: any): T },\n>(\n type: () => C,\n options?: Omit<PropertyOptions<T, C>, 'type'>,\n): PropertyOptions<T, C> {\n return { ...options, type };\n}\n\n/**\n * Helper decorator for entity properties\n * @example\n * class User {\n * @EntityProperty(() => Address)\n * address!: Address;\n *\n * @EntityProperty(() => Profile, { optional: true })\n * profile?: Profile;\n * }\n */\nexport function EntityProperty<\n T,\n C extends AnyCtor<T> & { new (data: any): T },\n>(\n type: () => C,\n options?: Omit<PropertyOptions<T, C>, 'type'>,\n): PropertyDecorator {\n return Property<T, C>(entityPropertyOptions(type, options));\n}\n\n/**\n * Creates property options for an array property\n * Used internally by ArrayProperty decorator and Props.Array helper\n */\nexport function arrayPropertyOptions<T, C extends CtorLike<T>>(\n type: () => C,\n options?: Omit<PropertyOptions<T, C>, 'type' | 'array'> & {\n minLength?: number;\n maxLength?: number;\n },\n): PropertyOptions<T, C> {\n const validators = [...(options?.arrayValidators || [])];\n\n if (options?.minLength !== undefined) {\n validators.unshift(arrayMinLengthValidator(options.minLength));\n }\n if (options?.maxLength !== undefined) {\n validators.unshift(arrayMaxLengthValidator(options.maxLength));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { minLength, maxLength, ...restOptions } = options || {};\n\n return {\n ...restOptions,\n type,\n array: true,\n arrayValidators: validators.length > 0 ? validators : undefined,\n };\n}\n\n/**\n * Helper decorator for array properties\n * @example\n * class User {\n * @ArrayProperty(() => String)\n * tags!: string[];\n *\n * @ArrayProperty(() => Phone)\n * phones!: Phone[];\n *\n * @ArrayProperty(() => Number, { optional: true })\n * scores?: number[];\n *\n * @ArrayProperty(() => String, { sparse: true })\n * sparseList!: (string | null)[];\n *\n * @ArrayProperty(() => String, { minLength: 1, maxLength: 10 })\n * limitedList!: string[];\n * }\n */\nexport function ArrayProperty<T, C extends CtorLike<T>>(\n type: () => C,\n options?: Omit<PropertyOptions<T, C>, 'type' | 'array'> & {\n minLength?: number;\n maxLength?: number;\n },\n): PropertyDecorator {\n const arrayValidators = [...(options?.arrayValidators || [])];\n\n if (options?.minLength !== undefined) {\n arrayValidators.unshift(arrayMinLengthValidator(options.minLength));\n }\n if (options?.maxLength !== undefined) {\n arrayValidators.unshift(arrayMaxLengthValidator(options.maxLength));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { minLength, maxLength, ...restOptions } = options || {};\n\n return Property({\n ...restOptions,\n type,\n array: true,\n arrayValidators: arrayValidators.length > 0 ? arrayValidators : undefined,\n });\n}\n\n/**\n * Creates property options for a passthrough property\n * Used internally by PassthroughProperty decorator and Props.Passthrough helper\n */\nexport function passthroughPropertyOptions(\n options?: Omit<PropertyOptions, 'type' | 'passthrough'>,\n): PropertyOptions {\n return { ...options, type: () => Object, passthrough: true };\n}\n\n/**\n * Helper decorator for passthrough properties that bypass type validation.\n * Use this for generic types like Record<string, unknown>, any, or custom objects.\n * @example\n * class Config {\n * @PassthroughProperty()\n * metadata!: Record<string, unknown>;\n *\n * @PassthroughProperty()\n * customData!: any;\n * }\n */\nexport function PassthroughProperty(): PropertyDecorator {\n return Property(passthroughPropertyOptions());\n}\n\n/**\n * Property options for stringifiable types (types with toString() and static parse())\n * Used internally by StringifiableProperty decorator and EntityProps.Stringifiable helper\n */\nexport function stringifiablePropertyOptions<\n T extends { equals?(other: T): boolean; toString(): string },\n C extends CtorLike<T> & { parse(value: string): T },\n>(\n type: () => C,\n options?: Omit<\n PropertyOptions<T, C>,\n 'serialize' | 'deserialize' | 'passthrough' | 'type' | 'equals'\n >,\n): PropertyOptions<T, C> {\n return {\n ...options,\n type,\n equals: (a, b) => (a.equals ? a.equals(b) : a.toString() === b.toString()),\n serialize: (value) => value.toString(),\n deserialize: (value) => {\n if (typeof value === 'string') {\n return type().parse(value) as InstanceOfCtorLike<C>;\n }\n throw new Error(`Invalid value ${type().name}: ${String(value)}`);\n },\n };\n}\n\nexport const StringifiableProperty = <\n T extends { equals?(other: T): boolean; toString(): string },\n C extends CtorLike<T> & { parse(value: string): T },\n>(\n type: () => C,\n data: Omit<\n PropertyOptions<T, C>,\n 'serialize' | 'deserialize' | 'passthrough' | 'type' | 'equals'\n > = {},\n): PropertyDecorator =>\n Property<T, C>(stringifiablePropertyOptions(type, data));\n\nexport const SerializableProperty = <\n T extends { equals?(other: T): boolean; toJSON(): unknown },\n C extends CtorLike<T> & { parse(value: unknown): T },\n>(\n type: () => C,\n data: Omit<\n PropertyOptions<T, C>,\n 'serialize' | 'deserialize' | 'passthrough' | 'type' | 'equals'\n > = {},\n) =>\n Property({\n ...data,\n type,\n equals: (a: T, b: T) =>\n a.equals ? a.equals(b) : isEqual(a.toJSON(), b.toJSON()),\n serialize: (value: T) => value.toJSON(),\n deserialize: (value: unknown) => {\n return type().parse(value) as InstanceOfCtorLike<C>;\n },\n });\n\n/**\n * Helper decorator for discriminated entity properties.\n * The entity type is determined at runtime using a discriminator property.\n * Unlike EntityProperty, this does not require the type parameter upfront.\n *\n * @param options - Configuration for the discriminated property\n *\n * @example\n * ```typescript\n * // Define entity types\n * @Entity({ name: 'Circle' })\n * class Circle {\n * @StringProperty() readonly type = 'Circle';\n * @NumberProperty() radius!: number;\n * constructor(data: Partial<Circle>) { Object.assign(this, data); }\n * }\n *\n * @Entity({ name: 'Rectangle' })\n * class Rectangle {\n * @StringProperty() readonly type = 'Rectangle';\n * @NumberProperty() width!: number;\n * @NumberProperty() height!: number;\n * constructor(data: Partial<Rectangle>) { Object.assign(this, data); }\n * }\n *\n * // Use discriminated property\n * @Entity()\n * class Drawing {\n * @DiscriminatedEntityProperty()\n * shape!: Circle | Rectangle;\n *\n * @DiscriminatedEntityProperty({ discriminatorProperty: 'entityType' })\n * item!: BaseItem;\n * }\n *\n * // When serialized, the discriminator is included inline:\n * // { shape: { __type: 'Circle', radius: 5 } }\n *\n * // When deserialized, the discriminator is used to determine the type:\n * const drawing = await EntityUtils.parse(Drawing, {\n * shape: { __type: 'Circle', radius: 5 }\n * });\n * // drawing.shape is a Circle instance\n * ```\n */\n/**\n * Creates property options for a discriminated entity property\n * Used internally by DiscriminatedEntityProperty decorator and EntityProps.DiscriminatedEntity helper\n */\nexport function discriminatedEntityPropertyOptions(\n options?: Omit<PropertyOptions<any, any>, 'type' | 'discriminated'> & {\n discriminatorProperty?: string;\n },\n): PropertyOptions<any, any> {\n const discriminatorProperty = options?.discriminatorProperty ?? '__type';\n\n return {\n ...options,\n discriminated: true,\n discriminatorProperty,\n };\n}\n\nexport function DiscriminatedEntityProperty(\n options?: Omit<PropertyOptions<any, any>, 'type' | 'discriminated'> & {\n discriminatorProperty?: string;\n },\n): PropertyDecorator {\n return Property(discriminatedEntityPropertyOptions(options));\n}\n\n/**\n * Decorator that marks a property as a polymorphic discriminator.\n *\n * Used for class hierarchies where an abstract base class has multiple concrete implementations,\n * and the discriminator property value determines which subclass to instantiate.\n *\n * The discriminator is a regular class property (not injected during serialization like @DiscriminatedEntityProperty).\n *\n * This decorator can be used standalone (it will treat the property as a string) or combined\n * with another type decorator for more specific typing.\n *\n * @param enumType - Optional enum, union type, or stringifiable type for the discriminator (used for validation and schema generation)\n *\n * @example\n * ```typescript\n * // With regular enum\n * enum SchemaPropertyType {\n * STRING = 'string',\n * NUMBER = 'number',\n * }\n *\n * @Entity()\n * abstract class SchemaProperty {\n * @StringProperty({ minLength: 1 })\n * name!: string;\n *\n * @PolymorphicProperty(SchemaPropertyType)\n * type!: SchemaPropertyType;\n * }\n *\n * @Entity()\n * @PolymorphicVariant(SchemaProperty, SchemaPropertyType.STRING)\n * class StringSchemaProperty extends SchemaProperty {\n * type = SchemaPropertyType.STRING;\n *\n * @IntProperty({ optional: true })\n * minLength?: number;\n * }\n *\n * // With stringifiable type\n * class Status {\n * static ACTIVE = new Status('active');\n * static INACTIVE = new Status('inactive');\n *\n * constructor(private value: string) {}\n * toString() { return this.value; }\n * static parse(value: string) {\n * if (value === 'active') return Status.ACTIVE;\n * if (value === 'inactive') return Status.INACTIVE;\n * throw new Error('Invalid status');\n * }\n * }\n *\n * @Entity()\n * abstract class Record {\n * @PolymorphicProperty(() => Status)\n * status!: Status;\n * }\n *\n * // Parsing automatically instantiates the correct subclass\n * const data = { name: 'age', type: 'string', minLength: 5 };\n * const prop = await EntityUtils.parse(SchemaProperty, data);\n * // prop is StringSchemaProperty instance\n * ```\n */\nexport function PolymorphicProperty<\n T extends { equals?(other: T): boolean; toString(): string },\n C extends CtorLike<T> & { parse(value: string): T },\n>(enumTypeOrFactory?: Record<string, string> | (() => C)): PropertyDecorator {\n return (target: object, propertyKey: string | symbol): void => {\n if (typeof propertyKey !== 'string') {\n return;\n }\n\n // Store the polymorphic property metadata\n Reflect.defineMetadata(\n POLYMORPHIC_PROPERTY_METADATA_KEY,\n propertyKey,\n target.constructor,\n );\n\n // Register in PolymorphicRegistry\n PolymorphicRegistry.setDiscriminatorProperty(\n target.constructor,\n propertyKey,\n );\n\n // Check if property already has options (from another decorator)\n const existingOptions: PropertyOptions | undefined = Reflect.getOwnMetadata(\n PROPERTY_OPTIONS_METADATA_KEY,\n target,\n propertyKey,\n );\n\n if (existingOptions) {\n // Update existing options to add polymorphic flags\n const updatedOptions: PropertyOptions = {\n ...existingOptions,\n polymorphicDiscriminator: true,\n polymorphicEnumType: enumTypeOrFactory,\n };\n\n Reflect.defineMetadata(\n PROPERTY_OPTIONS_METADATA_KEY,\n updatedOptions,\n target,\n propertyKey,\n );\n } else {\n // No existing decorator - check if it's a stringifiable type or enum\n const isStringifiable = typeof enumTypeOrFactory === 'function';\n\n if (isStringifiable) {\n // Apply StringifiableProperty decorator with polymorphic flags\n const stringifiableOpts = stringifiablePropertyOptions(\n enumTypeOrFactory as () => C,\n );\n const options: PropertyOptions = {\n ...stringifiableOpts,\n polymorphicDiscriminator: true,\n polymorphicEnumType: enumTypeOrFactory,\n };\n\n Property(options)(target, propertyKey);\n } else {\n // Apply Property decorator with string type (for enum discriminators)\n const options: PropertyOptions = {\n type: () => String,\n polymorphicDiscriminator: true,\n polymorphicEnumType: enumTypeOrFactory,\n };\n\n Property(options)(target, propertyKey);\n }\n }\n };\n}\n"],"names":["isEqual","PROPERTY_METADATA_KEY","PROPERTY_OPTIONS_METADATA_KEY","POLYMORPHIC_PROPERTY_METADATA_KEY","enumValidator","intValidator","minLengthValidator","maxLengthValidator","patternValidator","minValidator","maxValidator","arrayMinLengthValidator","arrayMaxLengthValidator","PolymorphicRegistry","Property","options","target","propertyKey","existingProperties","Reflect","getOwnMetadata","includes","push","defineMetadata","passthrough","array","Error","optional","sparse","serialize","undefined","deserialize","arrayValidators","hasSerialize","hasDeserialize","existingOptions","stringPropertyOptions","validators","minLength","unshift","maxLength","pattern","patternMessage","restOptions","type","String","length","StringProperty","enumPropertyOptions","enumType","EnumProperty","numberPropertyOptions","min","max","Number","NumberProperty","intPropertyOptions","IntProperty","booleanPropertyOptions","Boolean","BooleanProperty","datePropertyOptions","Date","DateProperty","bigIntPropertyOptions","BigInt","BigIntProperty","entityPropertyOptions","EntityProperty","arrayPropertyOptions","ArrayProperty","passthroughPropertyOptions","Object","PassthroughProperty","stringifiablePropertyOptions","equals","a","b","toString","value","parse","name","StringifiableProperty","data","SerializableProperty","toJSON","discriminatedEntityPropertyOptions","discriminatorProperty","discriminated","DiscriminatedEntityProperty","PolymorphicProperty","enumTypeOrFactory","setDiscriminatorProperty","updatedOptions","polymorphicDiscriminator","polymorphicEnumType","isStringifiable","stringifiableOpts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/property.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-wrapper-object-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isEqual } from 'lodash-es';\nimport {\n AnyCtor,\n type CtorLike,\n type InstanceOfCtorLike,\n PROPERTY_METADATA_KEY,\n PROPERTY_OPTIONS_METADATA_KEY,\n POLYMORPHIC_PROPERTY_METADATA_KEY,\n PropertyOptions,\n} from './types.js';\nimport {\n enumValidator,\n intValidator,\n minLengthValidator,\n maxLengthValidator,\n patternValidator,\n minValidator,\n maxValidator,\n arrayMinLengthValidator,\n arrayMaxLengthValidator,\n} from './validators.js';\nimport { PolymorphicRegistry } from './polymorphic-registry.js';\nimport { deserializeNumberFromBigInt } from './primitive-deserializers.js';\n\n/**\n * Property decorator that marks class properties with metadata.\n * This decorator can be used to identify and track properties within classes.\n *\n * @param options - Configuration for the property (type is required)\n *\n * @example\n * class User {\n * @Property({ type: () => String })\n * name: string;\n *\n * @Property({ type: () => String, equals: (a, b) => a.toLowerCase() === b.toLowerCase() })\n * email: string;\n *\n * @Property({ type: () => Number })\n * age: number;\n * }\n */\nexport function Property<T, C extends CtorLike<T>>(\n options: PropertyOptions<T, C>,\n): PropertyDecorator {\n return (target: object, propertyKey: string | symbol): void => {\n if (typeof propertyKey !== 'string') {\n return;\n }\n\n const existingProperties: string[] =\n Reflect.getOwnMetadata(PROPERTY_METADATA_KEY, target) || [];\n\n if (!existingProperties.includes(propertyKey)) {\n existingProperties.push(propertyKey);\n }\n\n Reflect.defineMetadata(PROPERTY_METADATA_KEY, existingProperties, target);\n\n if (options.passthrough === true) {\n if (options.array === true) {\n throw new Error(\n `Property '${propertyKey}' has passthrough: true and array: true. Passthrough cannot be combined with array.`,\n );\n }\n if (options.optional === true) {\n throw new Error(\n `Property '${propertyKey}' has passthrough: true and optional: true. Passthrough cannot be combined with optional.`,\n );\n }\n if (options.sparse === true) {\n throw new Error(\n `Property '${propertyKey}' has passthrough: true and sparse: true. Passthrough cannot be combined with sparse.`,\n );\n }\n if (\n options.serialize !== undefined ||\n options.deserialize !== undefined\n ) {\n throw new Error(\n `Property '${propertyKey}' has passthrough: true and custom serialize/deserialize functions. Passthrough cannot be combined with serialize or deserialize.`,\n );\n }\n }\n\n if (options.sparse === true && options.array !== true) {\n throw new Error(\n `Property '${propertyKey}' has sparse: true but array is not true. The sparse option only applies to arrays.`,\n );\n }\n\n if (options.arrayValidators && options.array !== true) {\n throw new Error(\n `Property '${propertyKey}' has arrayValidators defined but array is not true. The arrayValidators option only applies to arrays.`,\n );\n }\n\n // Validate serialize/deserialize pairing\n const hasSerialize = options.serialize !== undefined;\n const hasDeserialize = options.deserialize !== undefined;\n if (hasSerialize !== hasDeserialize) {\n throw new Error(\n `Property '${propertyKey}' must define both serialize and deserialize functions, or neither. Found only ${hasSerialize ? 'serialize' : 'deserialize'}.`,\n );\n }\n\n const existingOptions: Record<\n string,\n PropertyOptions<any, any>\n > = Reflect.getOwnMetadata(PROPERTY_OPTIONS_METADATA_KEY, target) || {};\n\n existingOptions[propertyKey] = options;\n\n Reflect.defineMetadata(\n PROPERTY_OPTIONS_METADATA_KEY,\n existingOptions,\n target,\n );\n };\n}\n\n/**\n * Helper decorator for string properties\n * @example\n * class User {\n * @StringProperty()\n * name!: string;\n *\n * @StringProperty({ optional: true })\n * nickname?: string;\n *\n * @StringProperty({ minLength: 3, maxLength: 50 })\n * username!: string;\n *\n * @StringProperty({ pattern: /^[a-z]+$/ })\n * slug!: string;\n * }\n */\n/**\n * Creates property options for a string property with optional validation\n * Used internally by StringProperty decorator and Props.String helper\n */\nexport function stringPropertyOptions(\n options?: Omit<PropertyOptions<string, StringConstructor>, 'type'> & {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n patternMessage?: string;\n },\n): PropertyOptions<string, StringConstructor> {\n const validators = [...(options?.validators || [])];\n\n if (options?.minLength !== undefined) {\n validators.unshift(minLengthValidator(options.minLength));\n }\n if (options?.maxLength !== undefined) {\n validators.unshift(maxLengthValidator(options.maxLength));\n }\n if (options?.pattern !== undefined) {\n validators.unshift(\n patternValidator(options.pattern, options.patternMessage),\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { minLength, maxLength, pattern, patternMessage, ...restOptions } =\n options || {};\n\n return {\n ...restOptions,\n type: () => String,\n validators: validators.length > 0 ? validators : undefined,\n };\n}\n\n/**\n * Helper decorator for string properties\n * @example\n * class User {\n * @StringProperty()\n * name!: string;\n *\n * @StringProperty({ optional: true })\n * nickname?: string;\n *\n * @StringProperty({ minLength: 2, maxLength: 50 })\n * username!: string;\n *\n * @StringProperty({ pattern: /^[a-z]+$/, patternMessage: 'Must be lowercase letters only' })\n * slug!: string;\n * }\n */\nexport function StringProperty(\n options?: Omit<PropertyOptions<string, StringConstructor>, 'type'> & {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n patternMessage?: string;\n },\n): PropertyDecorator {\n return Property(stringPropertyOptions(options));\n}\n\n/**\n * Creates property options for an enum property\n * Used internally by EnumProperty decorator and Props.Enum helper\n */\nexport function enumPropertyOptions<T extends Record<string, string>>(\n enumType: T,\n options?: Omit<PropertyOptions<string, StringConstructor>, 'type'>,\n): PropertyOptions<string, StringConstructor> {\n const validators = options?.validators\n ? [enumValidator(enumType), ...options.validators]\n : [enumValidator(enumType)];\n\n return { ...options, type: () => String, validators };\n}\n\n/**\n * Helper decorator for enum properties (string enums)\n * Validates that the string value matches one of the enum values\n * @param enumType - The enum object (e.g., MyEnum)\n * @param options - Additional property options\n * @example\n * enum Status {\n * Active = 'active',\n * Inactive = 'inactive'\n * }\n *\n * class User {\n * @EnumProperty(Status)\n * status!: Status;\n *\n * @EnumProperty(Status, { optional: true })\n * previousStatus?: Status;\n * }\n */\nexport function EnumProperty<T extends Record<string, string>>(\n enumType: T,\n options?: Omit<PropertyOptions<string, StringConstructor>, 'type'>,\n): PropertyDecorator {\n return Property(enumPropertyOptions(enumType, options));\n}\n\n/**\n * Creates property options for a number property\n * Used internally by NumberProperty decorator and Props.Number helper\n */\nexport function numberPropertyOptions(\n options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {\n min?: number;\n max?: number;\n\n /**\n * When `true`, `bigint` values and integer-formatted strings (e.g. `\"-42\"`) will\n * be coerced to `number` during deserialization.\n *\n * @warning Information may be lost if the `BigInt` value exceeds the safe integer\n * range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).\n */\n parseBigInt?: boolean;\n },\n): PropertyOptions<number, NumberConstructor> {\n const validators = [...(options?.validators || [])];\n\n if (options?.min !== undefined) {\n validators.unshift(minValidator(options.min));\n }\n if (options?.max !== undefined) {\n validators.unshift(maxValidator(options.max));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { min, max, parseBigInt, ...restOptions } = options || {};\n\n const deserialize = parseBigInt ? deserializeNumberFromBigInt : undefined;\n\n return {\n ...restOptions,\n type: () => Number,\n validators: validators.length > 0 ? validators : undefined,\n ...(deserialize ? { serialize: (v: number) => v, deserialize } : {}),\n };\n}\n\n/**\n * Helper decorator for number properties\n * @example\n * class User {\n * @NumberProperty()\n * age!: number;\n *\n * @NumberProperty({ optional: true })\n * score?: number;\n *\n * @NumberProperty({ min: 0, max: 100 })\n * percentage!: number;\n * }\n */\nexport function NumberProperty(\n options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {\n min?: number;\n max?: number;\n /**\n * When `true`, `bigint` values and integer-formatted strings (e.g. `\"-42\"`) will\n * be coerced to `number` during deserialization.\n *\n * @warning Information may be lost if the `BigInt` value exceeds the safe integer\n * range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).\n */\n parseBigInt?: boolean;\n },\n): PropertyDecorator {\n return Property(numberPropertyOptions(options));\n}\n\n/**\n * Creates property options for an integer property\n * Used internally by IntProperty decorator and Props.Int helper\n */\nexport function intPropertyOptions(\n options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {\n min?: number;\n max?: number;\n /**\n * When `true`, `bigint` values and integer-formatted strings (e.g. `\"-42\"`) will\n * be coerced to `number` during deserialization.\n *\n * @warning Information may be lost if the `BigInt` value exceeds the safe integer\n * range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).\n */\n parseBigInt?: boolean;\n },\n): PropertyOptions<number, NumberConstructor> {\n const validators = [...(options?.validators || [])];\n\n if (options?.min !== undefined) {\n validators.unshift(minValidator(options.min));\n }\n if (options?.max !== undefined) {\n validators.unshift(maxValidator(options.max));\n }\n\n validators.unshift(intValidator());\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { min, max, parseBigInt, ...restOptions } = options || {};\n\n const deserialize = parseBigInt ? deserializeNumberFromBigInt : undefined;\n\n return {\n ...restOptions,\n type: () => Number,\n validators: validators.length > 0 ? validators : undefined,\n ...(deserialize ? { serialize: (v: number) => v, deserialize } : {}),\n };\n}\n\n/**\n * Helper decorator for integer properties\n * Validates that the number is an integer (no decimal places)\n * @example\n * class User {\n * @IntProperty()\n * age!: number;\n *\n * @IntProperty({ optional: true })\n * count?: number;\n *\n * @IntProperty({ min: 0, max: 100 })\n * percentage!: number;\n * }\n */\nexport function IntProperty(\n options?: Omit<PropertyOptions<number, NumberConstructor>, 'type'> & {\n min?: number;\n max?: number;\n /**\n * When `true`, `bigint` values and integer-formatted strings (e.g. `\"-42\"`) will\n * be coerced to `number` during deserialization.\n *\n * @warning Information may be lost if the `BigInt` value exceeds the safe integer\n * range for `number` (`Number.MAX_SAFE_INTEGER` / `Number.MIN_SAFE_INTEGER`).\n */\n parseBigInt?: boolean;\n },\n): PropertyDecorator {\n return Property(intPropertyOptions(options));\n}\n\n/**\n * Creates property options for a boolean property\n * Used internally by BooleanProperty decorator and Props.Boolean helper\n */\nexport function booleanPropertyOptions(\n options?: Omit<PropertyOptions<boolean, BooleanConstructor>, 'type'>,\n): PropertyOptions<boolean, BooleanConstructor> {\n return { ...options, type: () => Boolean };\n}\n\n/**\n * Helper decorator for boolean properties\n * @example\n * class User {\n * @BooleanProperty()\n * active!: boolean;\n *\n * @BooleanProperty({ optional: true })\n * verified?: boolean;\n * }\n */\nexport function BooleanProperty(\n options?: Omit<PropertyOptions<boolean, BooleanConstructor>, 'type'>,\n): PropertyDecorator {\n return Property(booleanPropertyOptions(options));\n}\n\n/**\n * Creates property options for a Date property\n * Used internally by DateProperty decorator and Props.Date helper\n */\nexport function datePropertyOptions(\n options?: Omit<PropertyOptions<Date, DateConstructor>, 'type'>,\n): PropertyOptions<Date, DateConstructor> {\n return { ...options, type: () => Date };\n}\n\n/**\n * Helper decorator for Date properties\n * @example\n * class User {\n * @DateProperty()\n * createdAt!: Date;\n *\n * @DateProperty({ optional: true })\n * deletedAt?: Date;\n * }\n */\nexport function DateProperty(\n options?: Omit<PropertyOptions<Date, DateConstructor>, 'type'>,\n): PropertyDecorator {\n return Property(datePropertyOptions(options));\n}\n\n/**\n * Creates property options for a BigInt property\n * Used internally by BigIntProperty decorator and Props.BigInt helper\n */\nexport function bigIntPropertyOptions(\n options?: Omit<PropertyOptions<bigint, BigIntConstructor>, 'type'>,\n): PropertyOptions<bigint, BigIntConstructor> {\n return { ...options, type: () => BigInt };\n}\n\n/**\n * Helper decorator for BigInt properties\n * @example\n * class User {\n * @BigIntProperty()\n * id!: bigint;\n *\n * @BigIntProperty({ optional: true })\n * balance?: bigint;\n * }\n */\nexport function BigIntProperty(\n options?: Omit<PropertyOptions<bigint, BigIntConstructor>, 'type'>,\n): PropertyDecorator {\n return Property(bigIntPropertyOptions(options));\n}\n\n/**\n * Creates property options for an entity property\n * Used internally by EntityProperty decorator and Props.Entity helper\n */\nexport function entityPropertyOptions<\n T,\n C extends AnyCtor<T> & { new (data: any): T },\n>(\n type: () => C,\n options?: Omit<PropertyOptions<T, C>, 'type'>,\n): PropertyOptions<T, C> {\n return { ...options, type };\n}\n\n/**\n * Helper decorator for entity properties\n * @example\n * class User {\n * @EntityProperty(() => Address)\n * address!: Address;\n *\n * @EntityProperty(() => Profile, { optional: true })\n * profile?: Profile;\n * }\n */\nexport function EntityProperty<\n T,\n C extends AnyCtor<T> & { new (data: any): T },\n>(\n type: () => C,\n options?: Omit<PropertyOptions<T, C>, 'type'>,\n): PropertyDecorator {\n return Property<T, C>(entityPropertyOptions(type, options));\n}\n\n/**\n * Creates property options for an array property\n * Used internally by ArrayProperty decorator and Props.Array helper\n */\nexport function arrayPropertyOptions<T, C extends CtorLike<T>>(\n type: () => C,\n options?: Omit<PropertyOptions<T, C>, 'type' | 'array'> & {\n minLength?: number;\n maxLength?: number;\n },\n): PropertyOptions<T, C> {\n const validators = [...(options?.arrayValidators || [])];\n\n if (options?.minLength !== undefined) {\n validators.unshift(arrayMinLengthValidator(options.minLength));\n }\n if (options?.maxLength !== undefined) {\n validators.unshift(arrayMaxLengthValidator(options.maxLength));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { minLength, maxLength, ...restOptions } = options || {};\n\n return {\n ...restOptions,\n type,\n array: true,\n arrayValidators: validators.length > 0 ? validators : undefined,\n };\n}\n\n/**\n * Helper decorator for array properties\n * @example\n * class User {\n * @ArrayProperty(() => String)\n * tags!: string[];\n *\n * @ArrayProperty(() => Phone)\n * phones!: Phone[];\n *\n * @ArrayProperty(() => Number, { optional: true })\n * scores?: number[];\n *\n * @ArrayProperty(() => String, { sparse: true })\n * sparseList!: (string | null)[];\n *\n * @ArrayProperty(() => String, { minLength: 1, maxLength: 10 })\n * limitedList!: string[];\n * }\n */\nexport function ArrayProperty<T, C extends CtorLike<T>>(\n type: () => C,\n options?: Omit<PropertyOptions<T, C>, 'type' | 'array'> & {\n minLength?: number;\n maxLength?: number;\n },\n): PropertyDecorator {\n const arrayValidators = [...(options?.arrayValidators || [])];\n\n if (options?.minLength !== undefined) {\n arrayValidators.unshift(arrayMinLengthValidator(options.minLength));\n }\n if (options?.maxLength !== undefined) {\n arrayValidators.unshift(arrayMaxLengthValidator(options.maxLength));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { minLength, maxLength, ...restOptions } = options || {};\n\n return Property({\n ...restOptions,\n type,\n array: true,\n arrayValidators: arrayValidators.length > 0 ? arrayValidators : undefined,\n });\n}\n\n/**\n * Creates property options for a passthrough property\n * Used internally by PassthroughProperty decorator and Props.Passthrough helper\n */\nexport function passthroughPropertyOptions(\n options?: Omit<PropertyOptions, 'type' | 'passthrough'>,\n): PropertyOptions {\n return { ...options, type: () => Object, passthrough: true };\n}\n\n/**\n * Helper decorator for passthrough properties that bypass type validation.\n * Use this for generic types like Record<string, unknown>, any, or custom objects.\n * @example\n * class Config {\n * @PassthroughProperty()\n * metadata!: Record<string, unknown>;\n *\n * @PassthroughProperty()\n * customData!: any;\n * }\n */\nexport function PassthroughProperty(): PropertyDecorator {\n return Property(passthroughPropertyOptions());\n}\n\n/**\n * Property options for stringifiable types (types with toString() and static parse())\n * Used internally by StringifiableProperty decorator and EntityProps.Stringifiable helper\n */\nexport function stringifiablePropertyOptions<\n T extends { equals?(other: T): boolean; toString(): string },\n C extends CtorLike<T> & { parse(value: string): T },\n>(\n type: () => C,\n options?: Omit<\n PropertyOptions<T, C>,\n 'serialize' | 'deserialize' | 'passthrough' | 'type' | 'equals'\n >,\n): PropertyOptions<T, C> {\n return {\n ...options,\n type,\n equals: (a, b) => (a.equals ? a.equals(b) : a.toString() === b.toString()),\n serialize: (value) => value.toString(),\n deserialize: (value) => {\n if (typeof value === 'string') {\n return type().parse(value) as InstanceOfCtorLike<C>;\n }\n throw new Error(`Invalid value ${type().name}: ${String(value)}`);\n },\n };\n}\n\nexport const StringifiableProperty = <\n T extends { equals?(other: T): boolean; toString(): string },\n C extends CtorLike<T> & { parse(value: string): T },\n>(\n type: () => C,\n data: Omit<\n PropertyOptions<T, C>,\n 'serialize' | 'deserialize' | 'passthrough' | 'type' | 'equals'\n > = {},\n): PropertyDecorator =>\n Property<T, C>(stringifiablePropertyOptions(type, data));\n\nexport const SerializableProperty = <\n T extends { equals?(other: T): boolean; toJSON(): unknown },\n C extends CtorLike<T> & { parse(value: unknown): T },\n>(\n type: () => C,\n data: Omit<\n PropertyOptions<T, C>,\n 'serialize' | 'deserialize' | 'passthrough' | 'type' | 'equals'\n > = {},\n) =>\n Property({\n ...data,\n type,\n equals: (a: T, b: T) =>\n a.equals ? a.equals(b) : isEqual(a.toJSON(), b.toJSON()),\n serialize: (value: T) => value.toJSON(),\n deserialize: (value: unknown) => {\n return type().parse(value) as InstanceOfCtorLike<C>;\n },\n });\n\n/**\n * Helper decorator for discriminated entity properties.\n * The entity type is determined at runtime using a discriminator property.\n * Unlike EntityProperty, this does not require the type parameter upfront.\n *\n * @param options - Configuration for the discriminated property\n *\n * @example\n * ```typescript\n * // Define entity types\n * @Entity({ name: 'Circle' })\n * class Circle {\n * @StringProperty() readonly type = 'Circle';\n * @NumberProperty() radius!: number;\n * constructor(data: Partial<Circle>) { Object.assign(this, data); }\n * }\n *\n * @Entity({ name: 'Rectangle' })\n * class Rectangle {\n * @StringProperty() readonly type = 'Rectangle';\n * @NumberProperty() width!: number;\n * @NumberProperty() height!: number;\n * constructor(data: Partial<Rectangle>) { Object.assign(this, data); }\n * }\n *\n * // Use discriminated property\n * @Entity()\n * class Drawing {\n * @DiscriminatedEntityProperty()\n * shape!: Circle | Rectangle;\n *\n * @DiscriminatedEntityProperty({ discriminatorProperty: 'entityType' })\n * item!: BaseItem;\n * }\n *\n * // When serialized, the discriminator is included inline:\n * // { shape: { __type: 'Circle', radius: 5 } }\n *\n * // When deserialized, the discriminator is used to determine the type:\n * const drawing = await EntityUtils.parse(Drawing, {\n * shape: { __type: 'Circle', radius: 5 }\n * });\n * // drawing.shape is a Circle instance\n * ```\n */\n/**\n * Creates property options for a discriminated entity property\n * Used internally by DiscriminatedEntityProperty decorator and EntityProps.DiscriminatedEntity helper\n */\nexport function discriminatedEntityPropertyOptions(\n options?: Omit<PropertyOptions<any, any>, 'type' | 'discriminated'> & {\n discriminatorProperty?: string;\n },\n): PropertyOptions<any, any> {\n const discriminatorProperty = options?.discriminatorProperty ?? '__type';\n\n return {\n ...options,\n discriminated: true,\n discriminatorProperty,\n };\n}\n\nexport function DiscriminatedEntityProperty(\n options?: Omit<PropertyOptions<any, any>, 'type' | 'discriminated'> & {\n discriminatorProperty?: string;\n },\n): PropertyDecorator {\n return Property(discriminatedEntityPropertyOptions(options));\n}\n\n/**\n * Decorator that marks a property as a polymorphic discriminator.\n *\n * Used for class hierarchies where an abstract base class has multiple concrete implementations,\n * and the discriminator property value determines which subclass to instantiate.\n *\n * The discriminator is a regular class property (not injected during serialization like @DiscriminatedEntityProperty).\n *\n * This decorator can be used standalone (it will treat the property as a string) or combined\n * with another type decorator for more specific typing.\n *\n * @param enumType - Optional enum, union type, or stringifiable type for the discriminator (used for validation and schema generation)\n *\n * @example\n * ```typescript\n * // With regular enum\n * enum SchemaPropertyType {\n * STRING = 'string',\n * NUMBER = 'number',\n * }\n *\n * @Entity()\n * abstract class SchemaProperty {\n * @StringProperty({ minLength: 1 })\n * name!: string;\n *\n * @PolymorphicProperty(SchemaPropertyType)\n * type!: SchemaPropertyType;\n * }\n *\n * @Entity()\n * @PolymorphicVariant(SchemaProperty, SchemaPropertyType.STRING)\n * class StringSchemaProperty extends SchemaProperty {\n * type = SchemaPropertyType.STRING;\n *\n * @IntProperty({ optional: true })\n * minLength?: number;\n * }\n *\n * // With stringifiable type\n * class Status {\n * static ACTIVE = new Status('active');\n * static INACTIVE = new Status('inactive');\n *\n * constructor(private value: string) {}\n * toString() { return this.value; }\n * static parse(value: string) {\n * if (value === 'active') return Status.ACTIVE;\n * if (value === 'inactive') return Status.INACTIVE;\n * throw new Error('Invalid status');\n * }\n * }\n *\n * @Entity()\n * abstract class Record {\n * @PolymorphicProperty(() => Status)\n * status!: Status;\n * }\n *\n * // Parsing automatically instantiates the correct subclass\n * const data = { name: 'age', type: 'string', minLength: 5 };\n * const prop = await EntityUtils.parse(SchemaProperty, data);\n * // prop is StringSchemaProperty instance\n * ```\n */\nexport function PolymorphicProperty<\n T extends { equals?(other: T): boolean; toString(): string },\n C extends CtorLike<T> & { parse(value: string): T },\n>(enumTypeOrFactory?: Record<string, string> | (() => C)): PropertyDecorator {\n return (target: object, propertyKey: string | symbol): void => {\n if (typeof propertyKey !== 'string') {\n return;\n }\n\n // Store the polymorphic property metadata\n Reflect.defineMetadata(\n POLYMORPHIC_PROPERTY_METADATA_KEY,\n propertyKey,\n target.constructor,\n );\n\n // Register in PolymorphicRegistry\n PolymorphicRegistry.setDiscriminatorProperty(\n target.constructor,\n propertyKey,\n );\n\n // Check if property already has options (from another decorator)\n const existingOptions: PropertyOptions | undefined = Reflect.getOwnMetadata(\n PROPERTY_OPTIONS_METADATA_KEY,\n target,\n propertyKey,\n );\n\n if (existingOptions) {\n // Update existing options to add polymorphic flags\n const updatedOptions: PropertyOptions = {\n ...existingOptions,\n polymorphicDiscriminator: true,\n polymorphicEnumType: enumTypeOrFactory,\n };\n\n Reflect.defineMetadata(\n PROPERTY_OPTIONS_METADATA_KEY,\n updatedOptions,\n target,\n propertyKey,\n );\n } else {\n // No existing decorator - check if it's a stringifiable type or enum\n const isStringifiable = typeof enumTypeOrFactory === 'function';\n\n if (isStringifiable) {\n // Apply StringifiableProperty decorator with polymorphic flags\n const stringifiableOpts = stringifiablePropertyOptions(\n enumTypeOrFactory as () => C,\n );\n const options: PropertyOptions = {\n ...stringifiableOpts,\n polymorphicDiscriminator: true,\n polymorphicEnumType: enumTypeOrFactory,\n };\n\n Property(options)(target, propertyKey);\n } else {\n // Apply Property decorator with string type (for enum discriminators)\n const options: PropertyOptions = {\n type: () => String,\n polymorphicDiscriminator: true,\n polymorphicEnumType: enumTypeOrFactory,\n };\n\n Property(options)(target, propertyKey);\n }\n }\n };\n}\n"],"names":["isEqual","PROPERTY_METADATA_KEY","PROPERTY_OPTIONS_METADATA_KEY","POLYMORPHIC_PROPERTY_METADATA_KEY","enumValidator","intValidator","minLengthValidator","maxLengthValidator","patternValidator","minValidator","maxValidator","arrayMinLengthValidator","arrayMaxLengthValidator","PolymorphicRegistry","deserializeNumberFromBigInt","Property","options","target","propertyKey","existingProperties","Reflect","getOwnMetadata","includes","push","defineMetadata","passthrough","array","Error","optional","sparse","serialize","undefined","deserialize","arrayValidators","hasSerialize","hasDeserialize","existingOptions","stringPropertyOptions","validators","minLength","unshift","maxLength","pattern","patternMessage","restOptions","type","String","length","StringProperty","enumPropertyOptions","enumType","EnumProperty","numberPropertyOptions","min","max","parseBigInt","Number","v","NumberProperty","intPropertyOptions","IntProperty","booleanPropertyOptions","Boolean","BooleanProperty","datePropertyOptions","Date","DateProperty","bigIntPropertyOptions","BigInt","BigIntProperty","entityPropertyOptions","EntityProperty","arrayPropertyOptions","ArrayProperty","passthroughPropertyOptions","Object","PassthroughProperty","stringifiablePropertyOptions","equals","a","b","toString","value","parse","name","StringifiableProperty","data","SerializableProperty","toJSON","discriminatedEntityPropertyOptions","discriminatorProperty","discriminated","DiscriminatedEntityProperty","PolymorphicProperty","enumTypeOrFactory","setDiscriminatorProperty","updatedOptions","polymorphicDiscriminator","polymorphicEnumType","isStringifiable","stringifiableOpts"],"mappings":"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"}
|
|
@@ -471,4 +471,16 @@ export declare class ComplexEntity {
|
|
|
471
471
|
validateProducts(): Problem[];
|
|
472
472
|
}
|
|
473
473
|
export declare function resetFactoryCallCount(): void;
|
|
474
|
+
/**
|
|
475
|
+
* Entity with NumberProperty and IntProperty configured with parseBigInt: true
|
|
476
|
+
* Features: coercion from bigint / integer string to number
|
|
477
|
+
*/
|
|
478
|
+
export declare class EntityWithParseBigInt {
|
|
479
|
+
amount: number;
|
|
480
|
+
count: number;
|
|
481
|
+
constructor(data: {
|
|
482
|
+
amount: number;
|
|
483
|
+
count: number;
|
|
484
|
+
});
|
|
485
|
+
}
|
|
474
486
|
//# sourceMappingURL=test-entities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-entities.d.ts","sourceRoot":"","sources":["../../src/lib/test-entities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test-entities.d.ts","sourceRoot":"","sources":["../../src/lib/test-entities.ts"],"names":[],"mappings":"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"}
|
|
@@ -983,5 +983,30 @@ ComplexEntity = _ts_decorate([
|
|
|
983
983
|
export function resetFactoryCallCount() {
|
|
984
984
|
factoryCallCount = 0;
|
|
985
985
|
}
|
|
986
|
+
export class EntityWithParseBigInt {
|
|
987
|
+
constructor(data){
|
|
988
|
+
this.amount = data.amount;
|
|
989
|
+
this.count = data.count;
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
_ts_decorate([
|
|
993
|
+
NumberProperty({
|
|
994
|
+
parseBigInt: true
|
|
995
|
+
}),
|
|
996
|
+
_ts_metadata("design:type", Number)
|
|
997
|
+
], EntityWithParseBigInt.prototype, "amount", void 0);
|
|
998
|
+
_ts_decorate([
|
|
999
|
+
IntProperty({
|
|
1000
|
+
parseBigInt: true
|
|
1001
|
+
}),
|
|
1002
|
+
_ts_metadata("design:type", Number)
|
|
1003
|
+
], EntityWithParseBigInt.prototype, "count", void 0);
|
|
1004
|
+
EntityWithParseBigInt = _ts_decorate([
|
|
1005
|
+
Entity(),
|
|
1006
|
+
_ts_metadata("design:type", Function),
|
|
1007
|
+
_ts_metadata("design:paramtypes", [
|
|
1008
|
+
Object
|
|
1009
|
+
])
|
|
1010
|
+
], EntityWithParseBigInt);
|
|
986
1011
|
|
|
987
1012
|
//# sourceMappingURL=test-entities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/test-entities.ts"],"sourcesContent":["import 'reflect-metadata';\nimport { z } from 'zod';\nimport {\n Entity,\n CollectionEntity,\n Stringifiable,\n EntityValidator,\n} from './entity.js';\nimport {\n Property,\n StringProperty,\n NumberProperty,\n IntProperty,\n BooleanProperty,\n DateProperty,\n BigIntProperty,\n EnumProperty,\n EntityProperty,\n ArrayProperty,\n PassthroughProperty,\n SerializableProperty,\n StringifiableProperty,\n} from './property.js';\nimport { InjectedProperty } from './injected-property.js';\nimport { ZodProperty } from './zod-property.js';\nimport { Problem } from './problem.js';\n\n// ============================================================================\n// SIMPLE ENTITIES WITH PRIMITIVES\n// ============================================================================\n\n/**\n * Basic entity with common primitive types\n * Features: String, Number, Boolean properties\n */\n@Entity()\nexport class TestUser {\n @StringProperty() name!: string;\n @NumberProperty() age!: number;\n @BooleanProperty() active!: boolean;\n\n constructor(data: { name: string; age: number; active: boolean }) {\n this.name = data.name;\n this.age = data.age;\n this.active = data.active;\n }\n}\n\n/**\n * Entity with different primitive combinations\n * Features: String, Number, Int, Date properties\n */\n@Entity()\nexport class TestProduct {\n @StringProperty() id!: string;\n @StringProperty() name!: string;\n @NumberProperty() price!: number;\n @IntProperty() quantity!: number;\n @DateProperty() createdAt!: Date;\n\n constructor(data: {\n id: string;\n name: string;\n price: number;\n quantity: number;\n createdAt: Date;\n }) {\n this.id = data.id;\n this.name = data.name;\n this.price = data.price;\n this.quantity = data.quantity;\n this.createdAt = data.createdAt;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH SPECIAL TYPES\n// ============================================================================\n\n/**\n * Entity with Date and BigInt types\n * Features: DateProperty, BigIntProperty\n */\n@Entity()\nexport class EntityWithSpecialTypes {\n @DateProperty() timestamp!: Date;\n @BigIntProperty() largeNumber!: bigint;\n @StringProperty() label!: string;\n\n constructor(data: { timestamp: Date; largeNumber: bigint; label: string }) {\n this.timestamp = data.timestamp;\n this.largeNumber = data.largeNumber;\n this.label = data.label;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH VALIDATION\n// ============================================================================\n\n/**\n * Entity with property-level validators\n * Features: String validators (minLength, maxLength, pattern)\n */\n@Entity()\nexport class ValidatedEntity {\n @StringProperty({\n minLength: 3,\n maxLength: 20,\n })\n username!: string;\n\n @StringProperty({\n pattern: /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i,\n })\n email!: string;\n\n @NumberProperty({ min: 0, max: 150 })\n age!: number;\n\n constructor(data: { username: string; email: string; age: number }) {\n this.username = data.username;\n this.email = data.email;\n this.age = data.age;\n }\n}\n\n/**\n * Entity with cross-property validation\n * Features: @EntityValidator decorator\n */\n@Entity()\nexport class CrossValidatedEntity {\n @StringProperty() password!: string;\n @StringProperty() confirmPassword!: string;\n @DateProperty() startDate!: Date;\n @DateProperty() endDate!: Date;\n\n constructor(data: {\n password: string;\n confirmPassword: string;\n startDate: Date;\n endDate: Date;\n }) {\n this.password = data.password;\n this.confirmPassword = data.confirmPassword;\n this.startDate = data.startDate;\n this.endDate = data.endDate;\n }\n\n @EntityValidator()\n validatePasswords(): Problem[] {\n if (this.password !== this.confirmPassword) {\n return [\n new Problem({\n property: 'confirmPassword',\n message: 'Passwords do not match',\n }),\n ];\n }\n return [];\n }\n\n @EntityValidator()\n validateDates(): Problem[] {\n if (this.startDate >= this.endDate) {\n return [\n new Problem({\n property: 'endDate',\n message: 'End date must be after start date',\n }),\n ];\n }\n return [];\n }\n}\n\n// ============================================================================\n// ENTITIES WITH OPTIONAL/REQUIRED FIELDS\n// ============================================================================\n\n/**\n * Entity with mix of optional and required properties\n * Features: optional flag\n */\n@Entity()\nexport class OptionalFieldsEntity {\n @StringProperty() requiredField!: string;\n @StringProperty({ optional: true }) optionalField?: string;\n @NumberProperty({ optional: true }) optionalNumber?: number;\n @BooleanProperty() requiredBoolean!: boolean;\n\n constructor(data: {\n requiredField: string;\n optionalField?: string;\n optionalNumber?: number;\n requiredBoolean: boolean;\n }) {\n this.requiredField = data.requiredField;\n this.optionalField = data.optionalField;\n this.optionalNumber = data.optionalNumber;\n this.requiredBoolean = data.requiredBoolean;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH DEFAULT VALUES\n// ============================================================================\n\nlet factoryCallCount = 0;\n\n/**\n * Entity with various default value strategies\n * Features: Static defaults, factory defaults, async factory defaults\n */\n@Entity()\nexport class EntityWithDefaults {\n @StringProperty({ default: 'default-name' })\n name!: string;\n\n @NumberProperty({ default: () => factoryCallCount++ })\n counter!: number;\n\n @DateProperty({ default: () => new Date('2025-01-01') })\n timestamp!: Date;\n\n @StringProperty({ default: async () => 'async-value' })\n asyncField!: string;\n\n @BooleanProperty({ default: true })\n enabled!: boolean;\n\n constructor(data: {\n name?: string;\n counter?: number;\n timestamp?: Date;\n asyncField?: string;\n enabled?: boolean;\n }) {\n this.name = data.name!;\n this.counter = data.counter!;\n this.timestamp = data.timestamp!;\n this.asyncField = data.asyncField!;\n this.enabled = data.enabled!;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH ARRAYS\n// ============================================================================\n\n/**\n * Entity with various array configurations\n * Features: Regular arrays, sparse arrays, array validators\n */\n@Entity()\nexport class EntityWithArrays {\n @ArrayProperty(() => String)\n tags!: string[];\n\n @ArrayProperty(() => Number, {\n minLength: 1,\n maxLength: 5,\n })\n ratings!: number[];\n\n @ArrayProperty(() => String, { sparse: true })\n sparseArray!: (string | null | undefined)[];\n\n @ArrayProperty(() => TestUser)\n users!: TestUser[];\n\n constructor(data: {\n tags: string[];\n ratings: number[];\n sparseArray: (string | null | undefined)[];\n users: TestUser[];\n }) {\n this.tags = data.tags;\n this.ratings = data.ratings;\n this.sparseArray = data.sparseArray;\n this.users = data.users;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH ENUMS\n// ============================================================================\n\nexport enum UserRole {\n ADMIN = 'admin',\n USER = 'user',\n GUEST = 'guest',\n}\n\nexport enum ProductStatus {\n DRAFT = 'draft',\n PUBLISHED = 'published',\n ARCHIVED = 'archived',\n}\n\n/**\n * Entity with enum properties\n * Features: EnumProperty decorator\n */\n@Entity()\nexport class EntityWithEnum {\n @StringProperty() name!: string;\n @EnumProperty(UserRole) role!: UserRole;\n @EnumProperty(ProductStatus) status!: ProductStatus;\n\n constructor(data: { name: string; role: UserRole; status: ProductStatus }) {\n this.name = data.name;\n this.role = data.role;\n this.status = data.status;\n }\n}\n\n// ============================================================================\n// NESTED ENTITIES (2-3 LEVELS)\n// ============================================================================\n\n/**\n * Level 1: Simple address entity\n * Features: Basic nested entity\n */\n@Entity()\nexport class TestAddress {\n @StringProperty() street!: string;\n @StringProperty() city!: string;\n @StringProperty() country!: string;\n @IntProperty() zipCode!: number;\n\n constructor(data: {\n street: string;\n city: string;\n country: string;\n zipCode: number;\n }) {\n this.street = data.street;\n this.city = data.city;\n this.country = data.country;\n this.zipCode = data.zipCode;\n }\n}\n\n/**\n * Level 2: Company with nested address\n * Features: 1-level nesting\n */\n@Entity()\nexport class TestCompany {\n @StringProperty() name!: string;\n @EntityProperty(() => TestAddress) address!: TestAddress;\n @IntProperty() employeeCount!: number;\n\n constructor(data: {\n name: string;\n address: TestAddress;\n employeeCount: number;\n }) {\n this.name = data.name;\n this.address = data.address;\n this.employeeCount = data.employeeCount;\n }\n}\n\n/**\n * Level 3: Employee with nested company (which has nested address)\n * Features: 2-level nesting\n */\n@Entity()\nexport class TestEmployee {\n @StringProperty() name!: string;\n @StringProperty() email!: string;\n @EntityProperty(() => TestCompany) company!: TestCompany;\n @NumberProperty() salary!: number;\n @DateProperty() hireDate!: Date;\n\n constructor(data: {\n name: string;\n email: string;\n company: TestCompany;\n salary: number;\n hireDate: Date;\n }) {\n this.name = data.name;\n this.email = data.email;\n this.company = data.company;\n this.salary = data.salary;\n this.hireDate = data.hireDate;\n }\n}\n\n/**\n * Entity with optional nested entities\n * Features: Optional nested entities\n */\n@Entity()\nexport class EntityWithOptionalNested {\n @StringProperty() id!: string;\n @EntityProperty(() => TestAddress, { optional: true })\n billingAddress?: TestAddress;\n @EntityProperty(() => TestAddress, { optional: true })\n shippingAddress?: TestAddress;\n\n constructor(data: {\n id: string;\n billingAddress?: TestAddress;\n shippingAddress?: TestAddress;\n }) {\n this.id = data.id;\n this.billingAddress = data.billingAddress;\n this.shippingAddress = data.shippingAddress;\n }\n}\n\n// ============================================================================\n// COLLECTION ENTITIES\n// ============================================================================\n\n/**\n * Collection entity wrapping string array\n * Features: @CollectionEntity decorator, unwraps to array\n */\n@CollectionEntity()\nexport class TestTags {\n @ArrayProperty(() => String)\n readonly collection: string[];\n\n constructor(data: { collection: string[] }) {\n this.collection = data.collection;\n }\n}\n\n/**\n * Collection entity wrapping number array\n * Features: @CollectionEntity with numbers\n */\n@CollectionEntity()\nexport class TestIdList {\n @ArrayProperty(() => Number)\n readonly collection: number[];\n\n constructor(data: { collection: number[] }) {\n this.collection = data.collection;\n }\n}\n\n/**\n * Collection entity with entity items\n * Features: @CollectionEntity with nested entities\n */\n@CollectionEntity()\nexport class TestUserCollection {\n @ArrayProperty(() => TestUser)\n readonly collection: TestUser[];\n\n constructor(data: { collection: TestUser[] }) {\n this.collection = data.collection;\n }\n}\n\n// ============================================================================\n// STRINGIFIABLE ENTITIES\n// ============================================================================\n\n/**\n * Stringifiable entity for user IDs\n * Features: @Stringifiable decorator, unwraps to string\n */\n@Stringifiable()\nexport class TestUserId {\n @StringProperty() readonly value: string;\n\n constructor(data: { value: string }) {\n this.value = data.value;\n }\n}\n\n/**\n * Stringifiable entity for emails with validation\n * Features: @Stringifiable with validation\n */\n@Stringifiable()\nexport class TestEmail {\n @StringProperty({\n pattern: /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i,\n })\n readonly value: string;\n\n constructor(data: { value: string }) {\n this.value = data.value;\n }\n}\n\n/**\n * Entity using stringifiable properties\n * Features: Properties that are stringifiable entities\n */\n@Entity()\nexport class EntityWithStringifiable {\n @EntityProperty(() => TestUserId) userId!: TestUserId;\n @EntityProperty(() => TestEmail) email!: TestEmail;\n @StringProperty() name!: string;\n\n constructor(data: { userId: TestUserId; email: TestEmail; name: string }) {\n this.userId = data.userId;\n this.email = data.email;\n this.name = data.name;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH DEPENDENCY INJECTION\n// ============================================================================\n\nexport interface ILogger {\n log(message: string): void;\n}\n\nexport const LOGGER_TOKEN = Symbol('Logger');\n\n/**\n * Entity with injected properties\n * Features: @InjectedProperty decorator\n */\n@Entity()\nexport class EntityWithDI {\n @StringProperty() name!: string;\n @InjectedProperty(LOGGER_TOKEN) logger!: ILogger;\n\n constructor(data: { name: string; logger?: ILogger }) {\n this.name = data.name;\n if (data.logger) {\n this.logger = data.logger;\n }\n }\n\n logName(): void {\n this.logger.log(`Name is: ${this.name}`);\n }\n}\n\n// ============================================================================\n// ENTITIES WITH PASSTHROUGH\n// ============================================================================\n\n/**\n * Entity with passthrough properties\n * Features: @PassthroughProperty for unknown types\n */\n@Entity()\nexport class EntityWithPassthrough {\n @StringProperty() id!: string;\n @PassthroughProperty() metadata!: Record<string, unknown>;\n @PassthroughProperty() config!: unknown;\n\n constructor(data: {\n id: string;\n metadata: Record<string, unknown>;\n config: unknown;\n }) {\n this.id = data.id;\n this.metadata = data.metadata;\n this.config = data.config;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH CUSTOM SERIALIZATION\n// ============================================================================\n\n/**\n * Custom serializable class\n */\nexport class CustomValue {\n constructor(\n public x: number,\n public y: number,\n ) {}\n\n toData() {\n return { x: this.x, y: this.y };\n }\n\n static fromData(data: { x: number; y: number }): CustomValue {\n return new CustomValue(data.x, data.y);\n }\n}\n\n/**\n * Entity with custom serialize/deserialize\n * Features: Custom serialization functions\n */\n@Entity()\nexport class EntityWithCustomSerialization {\n @StringProperty() name!: string;\n\n @Property({\n type: () => CustomValue,\n serialize: (v: CustomValue) => v.toData(),\n deserialize: (d: unknown) =>\n CustomValue.fromData(d as { x: number; y: number }),\n })\n position!: CustomValue;\n\n constructor(data: { name: string; position: CustomValue }) {\n this.name = data.name;\n this.position = data.position;\n }\n}\n\n/**\n * Custom class with equals method\n */\nexport class CustomPoint {\n constructor(\n public x: number,\n public y: number,\n ) {}\n\n equals(other: CustomPoint): boolean {\n return this.x === other.x && this.y === other.y;\n }\n\n toString(): string {\n return `${this.x},${this.y}`;\n }\n\n static fromString(str: string): CustomPoint {\n const [x, y] = str.split(',').map(Number);\n return new CustomPoint(x, y);\n }\n}\n\n/**\n * Entity with custom equals function\n * Features: Custom equality comparison\n */\n@Entity()\nexport class EntityWithCustomEquals {\n @StringProperty() id!: string;\n\n @Property({\n type: () => CustomPoint,\n serialize: (v: CustomPoint) => v.toString(),\n deserialize: (d: unknown) => CustomPoint.fromString(d as string),\n equals: (a: CustomPoint, b: CustomPoint) => a.equals(b),\n })\n location!: CustomPoint;\n\n constructor(data: { id: string; location: CustomPoint }) {\n this.id = data.id;\n this.location = data.location;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH SERIALIZABLE/PARSEABLE PROPERTIES\n// ============================================================================\n\n/**\n * Custom class implementing Serializable interface\n */\nexport class SerializableValue {\n constructor(public data: string) {}\n\n toJSON(): string {\n return this.data;\n }\n\n equals(other: SerializableValue): boolean {\n return this.data === other.data;\n }\n\n static parse(json: unknown): SerializableValue {\n return new SerializableValue(json as string);\n }\n}\n\n/**\n * Entity using SerializableProperty\n * Features: @SerializableProperty decorator\n */\n@Entity()\nexport class EntityWithSerializable {\n @StringProperty() name!: string;\n @SerializableProperty(() => SerializableValue)\n value!: SerializableValue;\n\n constructor(data: { name: string; value: SerializableValue }) {\n this.name = data.name;\n this.value = data.value;\n }\n}\n\n/**\n * Custom class implementing Parseable interface\n */\nexport class ParseableValue {\n constructor(public data: number) {}\n\n toString(): string {\n return String(this.data);\n }\n\n equals(other: ParseableValue): boolean {\n return this.data === other.data;\n }\n\n static parse(str: string): ParseableValue {\n return new ParseableValue(Number(str));\n }\n}\n\n/**\n * Entity using StringifiableProperty\n * Features: @StringifiableProperty decorator\n */\n@Entity()\nexport class EntityWithParseable {\n @StringProperty() label!: string;\n @StringifiableProperty(() => ParseableValue)\n value!: ParseableValue;\n\n constructor(data: { label: string; value: ParseableValue }) {\n this.label = data.label;\n this.value = data.value;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH ZOD VALIDATION\n// ============================================================================\n\nconst emailSchema = z.string().email();\nconst positiveIntSchema = z.number().int().positive();\n\n/**\n * Entity with Zod validation\n * Features: @ZodProperty decorator\n */\n@Entity()\nexport class EntityWithZod {\n @ZodProperty(z.string().min(3).max(20))\n username!: string;\n\n @ZodProperty(emailSchema)\n email!: string;\n\n @ZodProperty(positiveIntSchema)\n count!: number;\n\n constructor(data: { username: string; email: string; count: number }) {\n this.username = data.username;\n this.email = data.email;\n this.count = data.count;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH IMMUTABLE PROPERTIES\n// ============================================================================\n\n/**\n * Entity with immutable (preventUpdates) properties\n * Features: preventUpdates flag\n */\n@Entity()\nexport class EntityWithImmutable {\n @StringProperty({ preventUpdates: true })\n readonly id: string;\n\n @StringProperty() name!: string;\n\n @DateProperty({ preventUpdates: true })\n readonly createdAt: Date;\n\n @NumberProperty() value!: number;\n\n constructor(data: {\n id: string;\n name: string;\n createdAt: Date;\n value: number;\n }) {\n this.id = data.id;\n this.name = data.name;\n this.createdAt = data.createdAt;\n this.value = data.value;\n }\n}\n\n// ============================================================================\n// COMPLEX ENTITY (COMBINING MULTIPLE FEATURES)\n// ============================================================================\n\n/**\n * Complex entity combining multiple features\n * Features: All common features in one entity\n * - Primitives, enums, nested entities, arrays\n * - Optional fields, defaults, validation\n * - Custom serialization, stringifiable properties\n */\n@Entity()\nexport class ComplexEntity {\n @StringProperty({ preventUpdates: true })\n readonly id: string;\n\n @StringProperty({ minLength: 2, maxLength: 50 })\n name!: string;\n\n @EnumProperty(UserRole)\n role!: UserRole;\n\n @EntityProperty(() => TestUserId)\n userId!: TestUserId;\n\n @EntityProperty(() => TestAddress)\n address!: TestAddress;\n\n @ArrayProperty(() => String, { minLength: 0, maxLength: 10 })\n tags!: string[];\n\n @ArrayProperty(() => TestProduct)\n products!: TestProduct[];\n\n @NumberProperty({ optional: true, min: 0 })\n score?: number;\n\n @DateProperty({ default: () => new Date() })\n createdAt!: Date;\n\n @DateProperty({ optional: true })\n updatedAt?: Date;\n\n @BooleanProperty({ default: true })\n active!: boolean;\n\n @PassthroughProperty()\n metadata!: Record<string, unknown>;\n\n constructor(data: {\n id: string;\n name: string;\n role: UserRole;\n userId: TestUserId;\n address: TestAddress;\n tags: string[];\n products: TestProduct[];\n score?: number;\n createdAt?: Date;\n updatedAt?: Date;\n active?: boolean;\n metadata: Record<string, unknown>;\n }) {\n this.id = data.id;\n this.name = data.name;\n this.role = data.role;\n this.userId = data.userId;\n this.address = data.address;\n this.tags = data.tags;\n this.products = data.products;\n this.score = data.score;\n this.createdAt = data.createdAt!;\n this.updatedAt = data.updatedAt;\n this.active = data.active!;\n this.metadata = data.metadata;\n }\n\n @EntityValidator()\n validateProducts(): Problem[] {\n if (this.products.length === 0 && this.active) {\n return [\n new Problem({\n property: 'products',\n message: 'Active entity must have at least one product',\n }),\n ];\n }\n return [];\n }\n}\n\n// ============================================================================\n// HELPER TO RESET FACTORY COUNTER (FOR TESTING)\n// ============================================================================\n\nexport function resetFactoryCallCount(): void {\n factoryCallCount = 0;\n}\n"],"names":["z","Entity","CollectionEntity","Stringifiable","EntityValidator","Property","StringProperty","NumberProperty","IntProperty","BooleanProperty","DateProperty","BigIntProperty","EnumProperty","EntityProperty","ArrayProperty","PassthroughProperty","SerializableProperty","StringifiableProperty","InjectedProperty","ZodProperty","Problem","TestUser","data","name","age","active","TestProduct","id","price","quantity","createdAt","EntityWithSpecialTypes","timestamp","largeNumber","label","ValidatedEntity","username","email","minLength","maxLength","pattern","min","max","CrossValidatedEntity","password","confirmPassword","startDate","endDate","validatePasswords","property","message","validateDates","OptionalFieldsEntity","requiredField","optionalField","optionalNumber","requiredBoolean","optional","factoryCallCount","EntityWithDefaults","counter","asyncField","enabled","default","Date","EntityWithArrays","tags","ratings","sparseArray","users","String","Number","sparse","UserRole","ProductStatus","EntityWithEnum","role","status","TestAddress","street","city","country","zipCode","TestCompany","address","employeeCount","TestEmployee","company","salary","hireDate","EntityWithOptionalNested","billingAddress","shippingAddress","TestTags","collection","TestIdList","TestUserCollection","TestUserId","value","TestEmail","EntityWithStringifiable","userId","LOGGER_TOKEN","Symbol","EntityWithDI","logger","logName","log","EntityWithPassthrough","metadata","config","CustomValue","x","y","toData","fromData","EntityWithCustomSerialization","position","type","serialize","v","deserialize","d","CustomPoint","equals","other","toString","fromString","str","split","map","EntityWithCustomEquals","location","a","b","SerializableValue","toJSON","parse","json","EntityWithSerializable","ParseableValue","EntityWithParseable","emailSchema","string","positiveIntSchema","number","int","positive","EntityWithZod","count","EntityWithImmutable","preventUpdates","ComplexEntity","products","score","updatedAt","validateProducts","length","resetFactoryCallCount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/test-entities.ts"],"sourcesContent":["import 'reflect-metadata';\nimport { z } from 'zod';\nimport {\n Entity,\n CollectionEntity,\n Stringifiable,\n EntityValidator,\n} from './entity.js';\nimport {\n Property,\n StringProperty,\n NumberProperty,\n IntProperty,\n BooleanProperty,\n DateProperty,\n BigIntProperty,\n EnumProperty,\n EntityProperty,\n ArrayProperty,\n PassthroughProperty,\n SerializableProperty,\n StringifiableProperty,\n} from './property.js';\nimport { InjectedProperty } from './injected-property.js';\nimport { ZodProperty } from './zod-property.js';\nimport { Problem } from './problem.js';\n\n// ============================================================================\n// SIMPLE ENTITIES WITH PRIMITIVES\n// ============================================================================\n\n/**\n * Basic entity with common primitive types\n * Features: String, Number, Boolean properties\n */\n@Entity()\nexport class TestUser {\n @StringProperty() name!: string;\n @NumberProperty() age!: number;\n @BooleanProperty() active!: boolean;\n\n constructor(data: { name: string; age: number; active: boolean }) {\n this.name = data.name;\n this.age = data.age;\n this.active = data.active;\n }\n}\n\n/**\n * Entity with different primitive combinations\n * Features: String, Number, Int, Date properties\n */\n@Entity()\nexport class TestProduct {\n @StringProperty() id!: string;\n @StringProperty() name!: string;\n @NumberProperty() price!: number;\n @IntProperty() quantity!: number;\n @DateProperty() createdAt!: Date;\n\n constructor(data: {\n id: string;\n name: string;\n price: number;\n quantity: number;\n createdAt: Date;\n }) {\n this.id = data.id;\n this.name = data.name;\n this.price = data.price;\n this.quantity = data.quantity;\n this.createdAt = data.createdAt;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH SPECIAL TYPES\n// ============================================================================\n\n/**\n * Entity with Date and BigInt types\n * Features: DateProperty, BigIntProperty\n */\n@Entity()\nexport class EntityWithSpecialTypes {\n @DateProperty() timestamp!: Date;\n @BigIntProperty() largeNumber!: bigint;\n @StringProperty() label!: string;\n\n constructor(data: { timestamp: Date; largeNumber: bigint; label: string }) {\n this.timestamp = data.timestamp;\n this.largeNumber = data.largeNumber;\n this.label = data.label;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH VALIDATION\n// ============================================================================\n\n/**\n * Entity with property-level validators\n * Features: String validators (minLength, maxLength, pattern)\n */\n@Entity()\nexport class ValidatedEntity {\n @StringProperty({\n minLength: 3,\n maxLength: 20,\n })\n username!: string;\n\n @StringProperty({\n pattern: /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i,\n })\n email!: string;\n\n @NumberProperty({ min: 0, max: 150 })\n age!: number;\n\n constructor(data: { username: string; email: string; age: number }) {\n this.username = data.username;\n this.email = data.email;\n this.age = data.age;\n }\n}\n\n/**\n * Entity with cross-property validation\n * Features: @EntityValidator decorator\n */\n@Entity()\nexport class CrossValidatedEntity {\n @StringProperty() password!: string;\n @StringProperty() confirmPassword!: string;\n @DateProperty() startDate!: Date;\n @DateProperty() endDate!: Date;\n\n constructor(data: {\n password: string;\n confirmPassword: string;\n startDate: Date;\n endDate: Date;\n }) {\n this.password = data.password;\n this.confirmPassword = data.confirmPassword;\n this.startDate = data.startDate;\n this.endDate = data.endDate;\n }\n\n @EntityValidator()\n validatePasswords(): Problem[] {\n if (this.password !== this.confirmPassword) {\n return [\n new Problem({\n property: 'confirmPassword',\n message: 'Passwords do not match',\n }),\n ];\n }\n return [];\n }\n\n @EntityValidator()\n validateDates(): Problem[] {\n if (this.startDate >= this.endDate) {\n return [\n new Problem({\n property: 'endDate',\n message: 'End date must be after start date',\n }),\n ];\n }\n return [];\n }\n}\n\n// ============================================================================\n// ENTITIES WITH OPTIONAL/REQUIRED FIELDS\n// ============================================================================\n\n/**\n * Entity with mix of optional and required properties\n * Features: optional flag\n */\n@Entity()\nexport class OptionalFieldsEntity {\n @StringProperty() requiredField!: string;\n @StringProperty({ optional: true }) optionalField?: string;\n @NumberProperty({ optional: true }) optionalNumber?: number;\n @BooleanProperty() requiredBoolean!: boolean;\n\n constructor(data: {\n requiredField: string;\n optionalField?: string;\n optionalNumber?: number;\n requiredBoolean: boolean;\n }) {\n this.requiredField = data.requiredField;\n this.optionalField = data.optionalField;\n this.optionalNumber = data.optionalNumber;\n this.requiredBoolean = data.requiredBoolean;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH DEFAULT VALUES\n// ============================================================================\n\nlet factoryCallCount = 0;\n\n/**\n * Entity with various default value strategies\n * Features: Static defaults, factory defaults, async factory defaults\n */\n@Entity()\nexport class EntityWithDefaults {\n @StringProperty({ default: 'default-name' })\n name!: string;\n\n @NumberProperty({ default: () => factoryCallCount++ })\n counter!: number;\n\n @DateProperty({ default: () => new Date('2025-01-01') })\n timestamp!: Date;\n\n @StringProperty({ default: async () => 'async-value' })\n asyncField!: string;\n\n @BooleanProperty({ default: true })\n enabled!: boolean;\n\n constructor(data: {\n name?: string;\n counter?: number;\n timestamp?: Date;\n asyncField?: string;\n enabled?: boolean;\n }) {\n this.name = data.name!;\n this.counter = data.counter!;\n this.timestamp = data.timestamp!;\n this.asyncField = data.asyncField!;\n this.enabled = data.enabled!;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH ARRAYS\n// ============================================================================\n\n/**\n * Entity with various array configurations\n * Features: Regular arrays, sparse arrays, array validators\n */\n@Entity()\nexport class EntityWithArrays {\n @ArrayProperty(() => String)\n tags!: string[];\n\n @ArrayProperty(() => Number, {\n minLength: 1,\n maxLength: 5,\n })\n ratings!: number[];\n\n @ArrayProperty(() => String, { sparse: true })\n sparseArray!: (string | null | undefined)[];\n\n @ArrayProperty(() => TestUser)\n users!: TestUser[];\n\n constructor(data: {\n tags: string[];\n ratings: number[];\n sparseArray: (string | null | undefined)[];\n users: TestUser[];\n }) {\n this.tags = data.tags;\n this.ratings = data.ratings;\n this.sparseArray = data.sparseArray;\n this.users = data.users;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH ENUMS\n// ============================================================================\n\nexport enum UserRole {\n ADMIN = 'admin',\n USER = 'user',\n GUEST = 'guest',\n}\n\nexport enum ProductStatus {\n DRAFT = 'draft',\n PUBLISHED = 'published',\n ARCHIVED = 'archived',\n}\n\n/**\n * Entity with enum properties\n * Features: EnumProperty decorator\n */\n@Entity()\nexport class EntityWithEnum {\n @StringProperty() name!: string;\n @EnumProperty(UserRole) role!: UserRole;\n @EnumProperty(ProductStatus) status!: ProductStatus;\n\n constructor(data: { name: string; role: UserRole; status: ProductStatus }) {\n this.name = data.name;\n this.role = data.role;\n this.status = data.status;\n }\n}\n\n// ============================================================================\n// NESTED ENTITIES (2-3 LEVELS)\n// ============================================================================\n\n/**\n * Level 1: Simple address entity\n * Features: Basic nested entity\n */\n@Entity()\nexport class TestAddress {\n @StringProperty() street!: string;\n @StringProperty() city!: string;\n @StringProperty() country!: string;\n @IntProperty() zipCode!: number;\n\n constructor(data: {\n street: string;\n city: string;\n country: string;\n zipCode: number;\n }) {\n this.street = data.street;\n this.city = data.city;\n this.country = data.country;\n this.zipCode = data.zipCode;\n }\n}\n\n/**\n * Level 2: Company with nested address\n * Features: 1-level nesting\n */\n@Entity()\nexport class TestCompany {\n @StringProperty() name!: string;\n @EntityProperty(() => TestAddress) address!: TestAddress;\n @IntProperty() employeeCount!: number;\n\n constructor(data: {\n name: string;\n address: TestAddress;\n employeeCount: number;\n }) {\n this.name = data.name;\n this.address = data.address;\n this.employeeCount = data.employeeCount;\n }\n}\n\n/**\n * Level 3: Employee with nested company (which has nested address)\n * Features: 2-level nesting\n */\n@Entity()\nexport class TestEmployee {\n @StringProperty() name!: string;\n @StringProperty() email!: string;\n @EntityProperty(() => TestCompany) company!: TestCompany;\n @NumberProperty() salary!: number;\n @DateProperty() hireDate!: Date;\n\n constructor(data: {\n name: string;\n email: string;\n company: TestCompany;\n salary: number;\n hireDate: Date;\n }) {\n this.name = data.name;\n this.email = data.email;\n this.company = data.company;\n this.salary = data.salary;\n this.hireDate = data.hireDate;\n }\n}\n\n/**\n * Entity with optional nested entities\n * Features: Optional nested entities\n */\n@Entity()\nexport class EntityWithOptionalNested {\n @StringProperty() id!: string;\n @EntityProperty(() => TestAddress, { optional: true })\n billingAddress?: TestAddress;\n @EntityProperty(() => TestAddress, { optional: true })\n shippingAddress?: TestAddress;\n\n constructor(data: {\n id: string;\n billingAddress?: TestAddress;\n shippingAddress?: TestAddress;\n }) {\n this.id = data.id;\n this.billingAddress = data.billingAddress;\n this.shippingAddress = data.shippingAddress;\n }\n}\n\n// ============================================================================\n// COLLECTION ENTITIES\n// ============================================================================\n\n/**\n * Collection entity wrapping string array\n * Features: @CollectionEntity decorator, unwraps to array\n */\n@CollectionEntity()\nexport class TestTags {\n @ArrayProperty(() => String)\n readonly collection: string[];\n\n constructor(data: { collection: string[] }) {\n this.collection = data.collection;\n }\n}\n\n/**\n * Collection entity wrapping number array\n * Features: @CollectionEntity with numbers\n */\n@CollectionEntity()\nexport class TestIdList {\n @ArrayProperty(() => Number)\n readonly collection: number[];\n\n constructor(data: { collection: number[] }) {\n this.collection = data.collection;\n }\n}\n\n/**\n * Collection entity with entity items\n * Features: @CollectionEntity with nested entities\n */\n@CollectionEntity()\nexport class TestUserCollection {\n @ArrayProperty(() => TestUser)\n readonly collection: TestUser[];\n\n constructor(data: { collection: TestUser[] }) {\n this.collection = data.collection;\n }\n}\n\n// ============================================================================\n// STRINGIFIABLE ENTITIES\n// ============================================================================\n\n/**\n * Stringifiable entity for user IDs\n * Features: @Stringifiable decorator, unwraps to string\n */\n@Stringifiable()\nexport class TestUserId {\n @StringProperty() readonly value: string;\n\n constructor(data: { value: string }) {\n this.value = data.value;\n }\n}\n\n/**\n * Stringifiable entity for emails with validation\n * Features: @Stringifiable with validation\n */\n@Stringifiable()\nexport class TestEmail {\n @StringProperty({\n pattern: /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i,\n })\n readonly value: string;\n\n constructor(data: { value: string }) {\n this.value = data.value;\n }\n}\n\n/**\n * Entity using stringifiable properties\n * Features: Properties that are stringifiable entities\n */\n@Entity()\nexport class EntityWithStringifiable {\n @EntityProperty(() => TestUserId) userId!: TestUserId;\n @EntityProperty(() => TestEmail) email!: TestEmail;\n @StringProperty() name!: string;\n\n constructor(data: { userId: TestUserId; email: TestEmail; name: string }) {\n this.userId = data.userId;\n this.email = data.email;\n this.name = data.name;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH DEPENDENCY INJECTION\n// ============================================================================\n\nexport interface ILogger {\n log(message: string): void;\n}\n\nexport const LOGGER_TOKEN = Symbol('Logger');\n\n/**\n * Entity with injected properties\n * Features: @InjectedProperty decorator\n */\n@Entity()\nexport class EntityWithDI {\n @StringProperty() name!: string;\n @InjectedProperty(LOGGER_TOKEN) logger!: ILogger;\n\n constructor(data: { name: string; logger?: ILogger }) {\n this.name = data.name;\n if (data.logger) {\n this.logger = data.logger;\n }\n }\n\n logName(): void {\n this.logger.log(`Name is: ${this.name}`);\n }\n}\n\n// ============================================================================\n// ENTITIES WITH PASSTHROUGH\n// ============================================================================\n\n/**\n * Entity with passthrough properties\n * Features: @PassthroughProperty for unknown types\n */\n@Entity()\nexport class EntityWithPassthrough {\n @StringProperty() id!: string;\n @PassthroughProperty() metadata!: Record<string, unknown>;\n @PassthroughProperty() config!: unknown;\n\n constructor(data: {\n id: string;\n metadata: Record<string, unknown>;\n config: unknown;\n }) {\n this.id = data.id;\n this.metadata = data.metadata;\n this.config = data.config;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH CUSTOM SERIALIZATION\n// ============================================================================\n\n/**\n * Custom serializable class\n */\nexport class CustomValue {\n constructor(\n public x: number,\n public y: number,\n ) {}\n\n toData() {\n return { x: this.x, y: this.y };\n }\n\n static fromData(data: { x: number; y: number }): CustomValue {\n return new CustomValue(data.x, data.y);\n }\n}\n\n/**\n * Entity with custom serialize/deserialize\n * Features: Custom serialization functions\n */\n@Entity()\nexport class EntityWithCustomSerialization {\n @StringProperty() name!: string;\n\n @Property({\n type: () => CustomValue,\n serialize: (v: CustomValue) => v.toData(),\n deserialize: (d: unknown) =>\n CustomValue.fromData(d as { x: number; y: number }),\n })\n position!: CustomValue;\n\n constructor(data: { name: string; position: CustomValue }) {\n this.name = data.name;\n this.position = data.position;\n }\n}\n\n/**\n * Custom class with equals method\n */\nexport class CustomPoint {\n constructor(\n public x: number,\n public y: number,\n ) {}\n\n equals(other: CustomPoint): boolean {\n return this.x === other.x && this.y === other.y;\n }\n\n toString(): string {\n return `${this.x},${this.y}`;\n }\n\n static fromString(str: string): CustomPoint {\n const [x, y] = str.split(',').map(Number);\n return new CustomPoint(x, y);\n }\n}\n\n/**\n * Entity with custom equals function\n * Features: Custom equality comparison\n */\n@Entity()\nexport class EntityWithCustomEquals {\n @StringProperty() id!: string;\n\n @Property({\n type: () => CustomPoint,\n serialize: (v: CustomPoint) => v.toString(),\n deserialize: (d: unknown) => CustomPoint.fromString(d as string),\n equals: (a: CustomPoint, b: CustomPoint) => a.equals(b),\n })\n location!: CustomPoint;\n\n constructor(data: { id: string; location: CustomPoint }) {\n this.id = data.id;\n this.location = data.location;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH SERIALIZABLE/PARSEABLE PROPERTIES\n// ============================================================================\n\n/**\n * Custom class implementing Serializable interface\n */\nexport class SerializableValue {\n constructor(public data: string) {}\n\n toJSON(): string {\n return this.data;\n }\n\n equals(other: SerializableValue): boolean {\n return this.data === other.data;\n }\n\n static parse(json: unknown): SerializableValue {\n return new SerializableValue(json as string);\n }\n}\n\n/**\n * Entity using SerializableProperty\n * Features: @SerializableProperty decorator\n */\n@Entity()\nexport class EntityWithSerializable {\n @StringProperty() name!: string;\n @SerializableProperty(() => SerializableValue)\n value!: SerializableValue;\n\n constructor(data: { name: string; value: SerializableValue }) {\n this.name = data.name;\n this.value = data.value;\n }\n}\n\n/**\n * Custom class implementing Parseable interface\n */\nexport class ParseableValue {\n constructor(public data: number) {}\n\n toString(): string {\n return String(this.data);\n }\n\n equals(other: ParseableValue): boolean {\n return this.data === other.data;\n }\n\n static parse(str: string): ParseableValue {\n return new ParseableValue(Number(str));\n }\n}\n\n/**\n * Entity using StringifiableProperty\n * Features: @StringifiableProperty decorator\n */\n@Entity()\nexport class EntityWithParseable {\n @StringProperty() label!: string;\n @StringifiableProperty(() => ParseableValue)\n value!: ParseableValue;\n\n constructor(data: { label: string; value: ParseableValue }) {\n this.label = data.label;\n this.value = data.value;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH ZOD VALIDATION\n// ============================================================================\n\nconst emailSchema = z.string().email();\nconst positiveIntSchema = z.number().int().positive();\n\n/**\n * Entity with Zod validation\n * Features: @ZodProperty decorator\n */\n@Entity()\nexport class EntityWithZod {\n @ZodProperty(z.string().min(3).max(20))\n username!: string;\n\n @ZodProperty(emailSchema)\n email!: string;\n\n @ZodProperty(positiveIntSchema)\n count!: number;\n\n constructor(data: { username: string; email: string; count: number }) {\n this.username = data.username;\n this.email = data.email;\n this.count = data.count;\n }\n}\n\n// ============================================================================\n// ENTITIES WITH IMMUTABLE PROPERTIES\n// ============================================================================\n\n/**\n * Entity with immutable (preventUpdates) properties\n * Features: preventUpdates flag\n */\n@Entity()\nexport class EntityWithImmutable {\n @StringProperty({ preventUpdates: true })\n readonly id: string;\n\n @StringProperty() name!: string;\n\n @DateProperty({ preventUpdates: true })\n readonly createdAt: Date;\n\n @NumberProperty() value!: number;\n\n constructor(data: {\n id: string;\n name: string;\n createdAt: Date;\n value: number;\n }) {\n this.id = data.id;\n this.name = data.name;\n this.createdAt = data.createdAt;\n this.value = data.value;\n }\n}\n\n// ============================================================================\n// COMPLEX ENTITY (COMBINING MULTIPLE FEATURES)\n// ============================================================================\n\n/**\n * Complex entity combining multiple features\n * Features: All common features in one entity\n * - Primitives, enums, nested entities, arrays\n * - Optional fields, defaults, validation\n * - Custom serialization, stringifiable properties\n */\n@Entity()\nexport class ComplexEntity {\n @StringProperty({ preventUpdates: true })\n readonly id: string;\n\n @StringProperty({ minLength: 2, maxLength: 50 })\n name!: string;\n\n @EnumProperty(UserRole)\n role!: UserRole;\n\n @EntityProperty(() => TestUserId)\n userId!: TestUserId;\n\n @EntityProperty(() => TestAddress)\n address!: TestAddress;\n\n @ArrayProperty(() => String, { minLength: 0, maxLength: 10 })\n tags!: string[];\n\n @ArrayProperty(() => TestProduct)\n products!: TestProduct[];\n\n @NumberProperty({ optional: true, min: 0 })\n score?: number;\n\n @DateProperty({ default: () => new Date() })\n createdAt!: Date;\n\n @DateProperty({ optional: true })\n updatedAt?: Date;\n\n @BooleanProperty({ default: true })\n active!: boolean;\n\n @PassthroughProperty()\n metadata!: Record<string, unknown>;\n\n constructor(data: {\n id: string;\n name: string;\n role: UserRole;\n userId: TestUserId;\n address: TestAddress;\n tags: string[];\n products: TestProduct[];\n score?: number;\n createdAt?: Date;\n updatedAt?: Date;\n active?: boolean;\n metadata: Record<string, unknown>;\n }) {\n this.id = data.id;\n this.name = data.name;\n this.role = data.role;\n this.userId = data.userId;\n this.address = data.address;\n this.tags = data.tags;\n this.products = data.products;\n this.score = data.score;\n this.createdAt = data.createdAt!;\n this.updatedAt = data.updatedAt;\n this.active = data.active!;\n this.metadata = data.metadata;\n }\n\n @EntityValidator()\n validateProducts(): Problem[] {\n if (this.products.length === 0 && this.active) {\n return [\n new Problem({\n property: 'products',\n message: 'Active entity must have at least one product',\n }),\n ];\n }\n return [];\n }\n}\n\n// ============================================================================\n// HELPER TO RESET FACTORY COUNTER (FOR TESTING)\n// ============================================================================\n\nexport function resetFactoryCallCount(): void {\n factoryCallCount = 0;\n}\n\n// ============================================================================\n// ENTITIES FOR parseBigInt TESTING\n// ============================================================================\n\n/**\n * Entity with NumberProperty and IntProperty configured with parseBigInt: true\n * Features: coercion from bigint / integer string to number\n */\n@Entity()\nexport class EntityWithParseBigInt {\n @NumberProperty({ parseBigInt: true }) amount!: number;\n @IntProperty({ parseBigInt: true }) count!: number;\n\n constructor(data: { amount: number; count: number }) {\n this.amount = data.amount;\n this.count = data.count;\n }\n}\n"],"names":["z","Entity","CollectionEntity","Stringifiable","EntityValidator","Property","StringProperty","NumberProperty","IntProperty","BooleanProperty","DateProperty","BigIntProperty","EnumProperty","EntityProperty","ArrayProperty","PassthroughProperty","SerializableProperty","StringifiableProperty","InjectedProperty","ZodProperty","Problem","TestUser","data","name","age","active","TestProduct","id","price","quantity","createdAt","EntityWithSpecialTypes","timestamp","largeNumber","label","ValidatedEntity","username","email","minLength","maxLength","pattern","min","max","CrossValidatedEntity","password","confirmPassword","startDate","endDate","validatePasswords","property","message","validateDates","OptionalFieldsEntity","requiredField","optionalField","optionalNumber","requiredBoolean","optional","factoryCallCount","EntityWithDefaults","counter","asyncField","enabled","default","Date","EntityWithArrays","tags","ratings","sparseArray","users","String","Number","sparse","UserRole","ProductStatus","EntityWithEnum","role","status","TestAddress","street","city","country","zipCode","TestCompany","address","employeeCount","TestEmployee","company","salary","hireDate","EntityWithOptionalNested","billingAddress","shippingAddress","TestTags","collection","TestIdList","TestUserCollection","TestUserId","value","TestEmail","EntityWithStringifiable","userId","LOGGER_TOKEN","Symbol","EntityWithDI","logger","logName","log","EntityWithPassthrough","metadata","config","CustomValue","x","y","toData","fromData","EntityWithCustomSerialization","position","type","serialize","v","deserialize","d","CustomPoint","equals","other","toString","fromString","str","split","map","EntityWithCustomEquals","location","a","b","SerializableValue","toJSON","parse","json","EntityWithSerializable","ParseableValue","EntityWithParseable","emailSchema","string","positiveIntSchema","number","int","positive","EntityWithZod","count","EntityWithImmutable","preventUpdates","ComplexEntity","products","score","updatedAt","validateProducts","length","resetFactoryCallCount","EntityWithParseBigInt","amount","parseBigInt"],"mappings":"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"}
|