@dipscope/type-manager 4.1.1 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +140 -320
  3. package/alias.d.ts +3 -7
  4. package/custom-data.d.ts +3 -8
  5. package/{core/default-value-resolver.d.ts → default-value-resolver.d.ts} +0 -0
  6. package/default-value.d.ts +4 -8
  7. package/discriminant.d.ts +5 -8
  8. package/discriminator.d.ts +3 -8
  9. package/factories/type-factory.d.ts +3 -3
  10. package/factory.d.ts +15 -8
  11. package/functions/get-own-reflect-metadata.d.ts +9 -0
  12. package/functions/get-reflect-metadata.d.ts +10 -0
  13. package/functions/get-words.d.ts +8 -0
  14. package/functions/index.d.ts +16 -0
  15. package/functions/is-arrow-function.d.ts +8 -0
  16. package/functions/is-ctor-function.d.ts +8 -0
  17. package/functions/is-data-view.d.ts +8 -0
  18. package/functions/is-float-32-array.d.ts +8 -0
  19. package/functions/is-float-64-array.d.ts +8 -0
  20. package/functions/is-int-16-array.d.ts +8 -0
  21. package/functions/is-int-32-array.d.ts +8 -0
  22. package/functions/is-int-8-array.d.ts +8 -0
  23. package/functions/is-uint-16-array.d.ts +8 -0
  24. package/functions/is-uint-32-array.d.ts +8 -0
  25. package/functions/is-uint-8-array.d.ts +8 -0
  26. package/functions/is-uint-8-clamped-array.d.ts +8 -0
  27. package/functions/name-of.d.ts +8 -0
  28. package/{core/generic-argument.d.ts → generic-argument.d.ts} +0 -0
  29. package/{core/generic-metadata.d.ts → generic-metadata.d.ts} +0 -0
  30. package/index.d.ts +39 -9
  31. package/index.js +1 -2
  32. package/{core/inject-index.d.ts → inject-index.d.ts} +0 -0
  33. package/{core/inject-metadata.d.ts → inject-metadata.d.ts} +17 -1
  34. package/{core/inject-options.d.ts → inject-options.d.ts} +2 -2
  35. package/inject.d.ts +2 -2
  36. package/injector.d.ts +13 -8
  37. package/injectors/singleton-injector.d.ts +2 -2
  38. package/{core/log-level.d.ts → log-level.d.ts} +0 -0
  39. package/{core/log.d.ts → log.d.ts} +41 -11
  40. package/{core/metadata.d.ts → metadata.d.ts} +0 -0
  41. package/naming-convention.d.ts +12 -8
  42. package/naming-conventions/camel-case-naming-convention.d.ts +1 -1
  43. package/naming-conventions/flat-case-naming-convention.d.ts +1 -1
  44. package/naming-conventions/flat-upper-case-naming-convention.d.ts +1 -1
  45. package/naming-conventions/kebab-case-naming-convention.d.ts +1 -1
  46. package/naming-conventions/kebab-upper-case-naming-convention.d.ts +1 -1
  47. package/naming-conventions/pascal-case-naming-convention.d.ts +1 -1
  48. package/naming-conventions/snake-case-naming-convention.d.ts +1 -1
  49. package/naming-conventions/snake-upper-case-naming-convention.d.ts +1 -1
  50. package/package.json +15 -8
  51. package/property-metadata.d.ts +309 -0
  52. package/{core/property-name.d.ts → property-name.d.ts} +0 -0
  53. package/{core/property-options.d.ts → property-options.d.ts} +18 -2
  54. package/property.d.ts +3 -2
  55. package/{core/reference-callback.d.ts → reference-callback.d.ts} +1 -1
  56. package/reference-handler.d.ts +28 -8
  57. package/reference-handlers/direct-reference-handler.d.ts +11 -12
  58. package/reference-handlers/lead-reference-handler.d.ts +11 -12
  59. package/reference-handlers/path-reference-handler.d.ts +11 -12
  60. package/{core/reference-key.d.ts → reference-key.d.ts} +0 -0
  61. package/reference-value-getter.d.ts +7 -0
  62. package/reference-value-setter.d.ts +7 -0
  63. package/{core/reference-value.d.ts → reference-value.d.ts} +0 -0
  64. package/serializer-context-options.d.ts +43 -0
  65. package/{core/serializer-context.d.ts → serializer-context.d.ts} +153 -39
  66. package/serializer.d.ts +24 -8
  67. package/serializers/array-buffer-serializer.d.ts +3 -3
  68. package/serializers/array-serializer.d.ts +3 -3
  69. package/serializers/boolean-serializer.d.ts +3 -3
  70. package/serializers/data-view-serializer.d.ts +3 -3
  71. package/serializers/date-serializer.d.ts +3 -3
  72. package/serializers/float-32-array-serializer.d.ts +3 -3
  73. package/serializers/float-64-array-serializer.d.ts +3 -3
  74. package/serializers/int-16-array-serializer.d.ts +3 -3
  75. package/serializers/int-32-array-serializer.d.ts +3 -3
  76. package/serializers/int-8-array-serializer.d.ts +3 -3
  77. package/serializers/map-serializer.d.ts +3 -3
  78. package/serializers/number-serializer.d.ts +3 -3
  79. package/serializers/set-serializer.d.ts +3 -3
  80. package/serializers/string-serializer.d.ts +3 -3
  81. package/serializers/type-serializer.d.ts +3 -3
  82. package/serializers/uint-16-array-serializer.d.ts +3 -3
  83. package/serializers/uint-32-array-serializer.d.ts +3 -3
  84. package/serializers/uint-8-array-serializer.d.ts +3 -3
  85. package/serializers/uint-8-clamped-array-serializer.d.ts +3 -3
  86. package/{core/type-abstraction.d.ts → type-abstraction.d.ts} +0 -0
  87. package/{core/type-argument.d.ts → type-argument.d.ts} +0 -0
  88. package/{core/type-context-entry.d.ts → type-context-entry.d.ts} +0 -0
  89. package/{core/type-context.d.ts → type-context.d.ts} +0 -0
  90. package/{core/type-ctor.d.ts → type-ctor.d.ts} +0 -0
  91. package/{core/type-fn.d.ts → type-fn.d.ts} +0 -0
  92. package/{core/type-like.d.ts → type-like.d.ts} +0 -0
  93. package/type-manager-options.d.ts +5 -5
  94. package/type-manager.d.ts +10 -10
  95. package/{core/type-metadata-resolver.d.ts → type-metadata-resolver.d.ts} +0 -0
  96. package/{core/type-metadata-symbol.d.ts → type-metadata-symbol.d.ts} +0 -0
  97. package/{core/type-metadata.d.ts → type-metadata.d.ts} +183 -15
  98. package/{core/type-name.d.ts → type-name.d.ts} +0 -0
  99. package/{core/type-options-base.d.ts → type-options-base.d.ts} +9 -19
  100. package/{core/type-options.d.ts → type-options.d.ts} +28 -2
  101. package/{core/type-resolver.d.ts → type-resolver.d.ts} +0 -0
  102. package/type.d.ts +1 -1
  103. package/core/alias.d.ts +0 -6
  104. package/core/custom-data.d.ts +0 -6
  105. package/core/default-value.d.ts +0 -7
  106. package/core/discriminant.d.ts +0 -8
  107. package/core/discriminator.d.ts +0 -6
  108. package/core/factory.d.ts +0 -18
  109. package/core/fn.d.ts +0 -316
  110. package/core/index.d.ts +0 -44
  111. package/core/index.js +0 -2
  112. package/core/index.js.map +0 -1
  113. package/core/injector.d.ts +0 -16
  114. package/core/naming-convention.d.ts +0 -15
  115. package/core/property-metadata.d.ts +0 -178
  116. package/core/reference-handler.d.ts +0 -32
  117. package/core/reference-value-initializer.d.ts +0 -8
  118. package/core/reference-value-resolver.d.ts +0 -8
  119. package/core/serializer-context-options.d.ts +0 -63
  120. package/core/serializer.d.ts +0 -27
  121. package/deserializable.d.ts +0 -11
  122. package/deserialized-default-value.d.ts +0 -11
  123. package/factories/index.js +0 -2
  124. package/factories/index.js.map +0 -1
  125. package/index.js.map +0 -1
  126. package/injectable.d.ts +0 -10
  127. package/injectors/index.js +0 -2
  128. package/injectors/index.js.map +0 -1
  129. package/naming-conventions/index.js +0 -2
  130. package/naming-conventions/index.js.map +0 -1
  131. package/preserve-discriminator.d.ts +0 -10
  132. package/reference-handlers/index.js +0 -2
  133. package/reference-handlers/index.js.map +0 -1
  134. package/serializable.d.ts +0 -11
  135. package/serialized-default-value.d.ts +0 -11
  136. package/serializers/index.js +0 -2
  137. package/serializers/index.js.map +0 -1
  138. package/type-and-property.d.ts +0 -12
  139. package/use-default-value.d.ts +0 -10
  140. package/use-implicit-conversion.d.ts +0 -10
@@ -1,9 +1,8 @@
1
- import { ReferenceHandler } from '../core/reference-handler';
2
- import { ReferenceKey } from '../core/reference-key';
3
- import { ReferenceValue } from '../core/reference-value';
4
- import { ReferenceValueInitializer } from '../core/reference-value-initializer';
5
- import { ReferenceValueResolver } from '../core/reference-value-resolver';
6
- import { SerializerContext } from '../core/serializer-context';
1
+ import { ReferenceHandler } from '../reference-handler';
2
+ import { ReferenceKey } from '../reference-key';
3
+ import { ReferenceValue } from '../reference-value';
4
+ import { ReferenceValueGetter } from '../reference-value-getter';
5
+ import { SerializerContext } from '../serializer-context';
7
6
  /**
8
7
  * Lead reference handler preserves references except circular. If circular reference is detected the it will
9
8
  * be setted to undefined so only first occurance is handled.
@@ -16,19 +15,19 @@ export declare class LeadReferenceHandler implements ReferenceHandler {
16
15
  *
17
16
  * @param {SerializerContext<any>} serializerContext Serializer context.
18
17
  * @param {ReferenceKey} referenceKey Reference which acts as a key. This is basically a serializing object.
19
- * @param {ReferenceValueInitializer} referenceValueInitializer Function to initialize a reference value when one is not yet present for a key.
18
+ * @param {ReferenceValueGetter} referenceValueGetter Function to get a reference value when one is not yet present for a key.
20
19
  *
21
- * @returns {ReferenceValue|ReferenceValueResolver} Resolved reference value or reference resolver when circular dependency is detected.
20
+ * @returns {ReferenceValue} Resolved reference value.
22
21
  */
23
- define(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueInitializer: ReferenceValueInitializer): ReferenceValue | ReferenceValueResolver;
22
+ define(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
24
23
  /**
25
24
  * Restores reference. Called during deserialization.
26
25
  *
27
26
  * @param {SerializerContext<any>} serializerContext Serializer context.
28
27
  * @param {ReferenceKey} referenceKey Reference which acts as a key. This is basically a deserializing object.
29
- * @param {ReferenceValueInitializer} referenceValueInitializer Function to initialize a reference value when one is not yet present for a key.
28
+ * @param {ReferenceValueGetter} referenceValueGetter Function to get a reference value when one is not yet present for a key.
30
29
  *
31
- * @returns {ReferenceValue|ReferenceValueResolver} Resolved reference value or reference resolver when circular dependency is detected.
30
+ * @returns {ReferenceValue} Resolved reference value.
32
31
  */
33
- restore(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueInitializer: ReferenceValueInitializer): ReferenceValue | ReferenceValueResolver;
32
+ restore(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
34
33
  }
@@ -1,9 +1,8 @@
1
- import { ReferenceHandler } from '../core/reference-handler';
2
- import { ReferenceKey } from '../core/reference-key';
3
- import { ReferenceValue } from '../core/reference-value';
4
- import { ReferenceValueInitializer } from '../core/reference-value-initializer';
5
- import { ReferenceValueResolver } from '../core/reference-value-resolver';
6
- import { SerializerContext } from '../core/serializer-context';
1
+ import { ReferenceHandler } from '../reference-handler';
2
+ import { ReferenceKey } from '../reference-key';
3
+ import { ReferenceValue } from '../reference-value';
4
+ import { ReferenceValueGetter } from '../reference-value-getter';
5
+ import { SerializerContext } from '../serializer-context';
7
6
  /**
8
7
  * Path reference handler preserves references using JSONPath.
9
8
  *
@@ -21,21 +20,21 @@ export declare class PathReferenceHandler implements ReferenceHandler {
21
20
  *
22
21
  * @param {SerializerContext<any>} serializerContext Serializer context.
23
22
  * @param {ReferenceKey} referenceKey Reference which acts as a key. This is basically a serializing object.
24
- * @param {ReferenceValueInitializer} referenceValueInitializer Function to initialize a reference value when one is not yet present for a key.
23
+ * @param {ReferenceValueGetter} referenceValueGetter Function to get a reference value when one is not yet present for a key.
25
24
  *
26
- * @returns {ReferenceValue|ReferenceValueResolver} Resolved reference value or reference resolver when circular dependency is detected.
25
+ * @returns {ReferenceValue} Resolved reference value.
27
26
  */
28
- define(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueInitializer: ReferenceValueInitializer): ReferenceValue | ReferenceValueResolver;
27
+ define(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
29
28
  /**
30
29
  * Restores reference. Called during deserialization.
31
30
  *
32
31
  * @param {SerializerContext<any>} serializerContext Serializer context.
33
32
  * @param {ReferenceKey} referenceKey Reference which acts as a key. This is basically a deserializing object.
34
- * @param {ReferenceValueInitializer} referenceValueInitializer Function to initialize a reference value when one is not yet present for a key.
33
+ * @param {ReferenceValueGetter} referenceValueGetter Function to get a reference value when one is not yet present for a key.
35
34
  *
36
- * @returns {ReferenceValue|ReferenceValueResolver} Resolved reference value or reference resolver when circular dependency is detected.
35
+ * @returns {ReferenceValue} Resolved reference value.
37
36
  */
38
- restore(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueInitializer: ReferenceValueInitializer): ReferenceValue | ReferenceValueResolver;
37
+ restore(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
39
38
  /**
40
39
  * Defines reference target based on reference key.
41
40
  *
File without changes
@@ -0,0 +1,7 @@
1
+ import { ReferenceValue } from './reference-value';
2
+ /**
3
+ * Callback to get a reference value when one is not yet present for a reference key.
4
+ *
5
+ * @type {ReferenceValueGetter}
6
+ */
7
+ export declare type ReferenceValueGetter = () => ReferenceValue;
@@ -0,0 +1,7 @@
1
+ import { ReferenceValue } from './reference-value';
2
+ /**
3
+ * Callback to set a reference value when one may be resolved for a reference key.
4
+ *
5
+ * @type {ReferenceValueSetter}
6
+ */
7
+ export declare type ReferenceValueSetter = (referenceValue: ReferenceValue) => void;
@@ -0,0 +1,43 @@
1
+ import { GenericArgument } from './generic-argument';
2
+ import { PropertyMetadata } from './property-metadata';
3
+ import { ReferenceValueSetter } from './reference-value-setter';
4
+ import { TypeMetadata } from './type-metadata';
5
+ /**
6
+ * Serializer context options.
7
+ *
8
+ * @type {SerializerContextOptions<TType>}
9
+ */
10
+ export declare type SerializerContextOptions<TType> = {
11
+ /**
12
+ * Json path key of current serializer context. It equals to $ for
13
+ * root serializer context. Read about JSONPath for more info.
14
+ *
15
+ * @type {string|number}
16
+ */
17
+ jsonPathKey: string | number;
18
+ /**
19
+ * Reference value setter if serialization may result in circular dependency
20
+ * which must be resolved.
21
+ *
22
+ * @type {ReferenceValueSetter}
23
+ */
24
+ referenceValueSetter?: ReferenceValueSetter;
25
+ /**
26
+ * Generic arguments.
27
+ *
28
+ * @type {Array<GenericArgument<any>>}
29
+ */
30
+ genericArguments?: Array<GenericArgument<any>>;
31
+ /**
32
+ * Property metadata.
33
+ *
34
+ * @type {PropertyMetadata<any, TType>}
35
+ */
36
+ propertyMetadata?: PropertyMetadata<any, TType>;
37
+ /**
38
+ * Type metadata.
39
+ *
40
+ * @type {TypeMetadata<TType>}
41
+ */
42
+ typeMetadata: TypeMetadata<TType>;
43
+ };
@@ -13,8 +13,8 @@ import { ReferenceCallback } from './reference-callback';
13
13
  import { ReferenceHandler } from './reference-handler';
14
14
  import { ReferenceKey } from './reference-key';
15
15
  import { ReferenceValue } from './reference-value';
16
- import { ReferenceValueInitializer } from './reference-value-initializer';
17
- import { ReferenceValueResolver } from './reference-value-resolver';
16
+ import { ReferenceValueGetter } from './reference-value-getter';
17
+ import { ReferenceValueSetter } from './reference-value-setter';
18
18
  import { Serializer } from './serializer';
19
19
  import { SerializerContextOptions } from './serializer-context-options';
20
20
  import { TypeFn } from './type-fn';
@@ -26,42 +26,102 @@ import { TypeMetadata } from './type-metadata';
26
26
  * @type {SerializerContext<TType>}
27
27
  */
28
28
  export declare class SerializerContext<TType> extends Metadata {
29
+ /**
30
+ * Serializer context root.
31
+ *
32
+ * This is a value passed to the root serializer.
33
+ *
34
+ * @type {any}
35
+ */
36
+ readonly $: any;
37
+ /**
38
+ * Reference map.
39
+ *
40
+ * Used to preserve object references.
41
+ *
42
+ * @type {WeakMap<ReferenceKey, ReferenceValue>}
43
+ */
44
+ readonly referenceMap: WeakMap<ReferenceKey, ReferenceValue>;
45
+ /**
46
+ * Reference callback map.
47
+ *
48
+ * Used to assign object references in a later time due to circular dependency.
49
+ *
50
+ * @type {WeakMap<ReferenceKey, Array<ReferenceCallback>>}
51
+ */
52
+ readonly referenceCallbackMap: WeakMap<ReferenceKey, Array<ReferenceCallback>>;
29
53
  /**
30
54
  * Serializer context options.
31
55
  *
32
56
  * @type {SerializerContext<TType>}
33
57
  */
34
58
  readonly serializerContextOptions: SerializerContextOptions<TType>;
59
+ /**
60
+ * Parent serializer context.
61
+ *
62
+ * Present when any serializer defines child context.
63
+ *
64
+ * @type {SerializerContext<any>}
65
+ */
66
+ readonly parentSerializerContext?: SerializerContext<any>;
35
67
  /**
36
68
  * Constructor.
37
69
  *
70
+ * @param {any} $ Serializer context root.
71
+ * @param {WeakMap<ReferenceKey, ReferenceValue>} referenceMap Reference map.
72
+ * @param {WeakMap<ReferenceKey, Array<ReferenceCallback>>} referenceCallbackMap Reference callback map.
38
73
  * @param {SerializerContextOptions<TType>} serializerContextOptions Serializer context options.
74
+ * @param {SerializerContext<any>} parentSerializerContext Parent serializer context.
39
75
  */
40
- constructor(serializerContextOptions: SerializerContextOptions<TType>);
76
+ constructor($: any, referenceMap: WeakMap<ReferenceKey, ReferenceValue>, referenceCallbackMap: WeakMap<ReferenceKey, Array<ReferenceCallback>>, serializerContextOptions: SerializerContextOptions<TType>, parentSerializerContext?: SerializerContext<any>);
41
77
  /**
42
- * Gets serializer context root.
78
+ * Gets json path key.
43
79
  *
44
- * @returns {any} Serializer context root.
80
+ * @returns {string|number} Json path key.
45
81
  */
46
- get $(): any;
82
+ get jsonPathKey(): any;
83
+ /**
84
+ * Gets reference value setter.
85
+ *
86
+ * @returns {ReferenceValueSetter|undefined} Reference value setter or undefined if not present.
87
+ */
88
+ get referenceValueSetter(): ReferenceValueSetter | undefined;
47
89
  /**
48
90
  * Gets custom data.
49
91
  *
50
92
  * @returns {CustomData} Custom data.
51
93
  */
52
94
  get customData(): CustomData;
95
+ /**
96
+ * Gets serialized null value.
97
+ *
98
+ * @returns {any|undefined} Resolved serialized null value or undefined.
99
+ */
100
+ get serializedNullValue(): any | undefined;
53
101
  /**
54
102
  * Gets serialized default value.
55
103
  *
56
104
  * @returns {any|undefined} Resolved serialized default value or undefined.
57
105
  */
58
106
  get serializedDefaultValue(): any | undefined;
107
+ /**
108
+ * Gets deserialized null value.
109
+ *
110
+ * @returns {any|undefined} Resolved deserialized null value or undefined.
111
+ */
112
+ get deserializedNullValue(): any | undefined;
59
113
  /**
60
114
  * Gets deserialized default value.
61
115
  *
62
116
  * @returns {any|undefined} Resolved deserialized default value or undefined.
63
117
  */
64
118
  get deserializedDefaultValue(): any | undefined;
119
+ /**
120
+ * Gets json path from serializer context root.
121
+ *
122
+ * @returns {string} Json path.
123
+ */
124
+ get jsonPath(): string;
65
125
  /**
66
126
  * Gets discriminant.
67
127
  *
@@ -122,12 +182,6 @@ export declare class SerializerContext<TType> extends Metadata {
122
182
  * @returns {NamingConvention|undefined} Naming convention or undefined.
123
183
  */
124
184
  get namingConvention(): NamingConvention | undefined;
125
- /**
126
- * Gets JSONPath from serializer context root.
127
- *
128
- * @returns {string} Path.
129
- */
130
- get path(): string;
131
185
  /**
132
186
  * Gets indicator if context is polymorphic.
133
187
  *
@@ -152,18 +206,6 @@ export declare class SerializerContext<TType> extends Metadata {
152
206
  * @returns {ReferenceHandler} Reference handler.
153
207
  */
154
208
  get referenceHandler(): ReferenceHandler;
155
- /**
156
- * Gets reference callback map.
157
- *
158
- * @returns {WeakMap<ReferenceKey, Array<ReferenceCallback>>} Reference callback map.
159
- */
160
- get referenceCallbackMap(): WeakMap<ReferenceKey, Array<ReferenceCallback>>;
161
- /**
162
- * Gets reference map.
163
- *
164
- * @returns {WeakMap<ReferenceKey, ReferenceValue>} Reference map.
165
- */
166
- get referenceMap(): WeakMap<ReferenceKey, ReferenceValue>;
167
209
  /**
168
210
  * Gets serializer.
169
211
  *
@@ -176,6 +218,12 @@ export declare class SerializerContext<TType> extends Metadata {
176
218
  * @returns {TypeMetadata<TType>} Type metadata.
177
219
  */
178
220
  get typeMetadata(): TypeMetadata<TType>;
221
+ /**
222
+ * Gets indicator if null value should be preserved.
223
+ *
224
+ * @returns {boolean} True when null value should be preserved. False otherwise.
225
+ */
226
+ get preserveNull(): boolean;
179
227
  /**
180
228
  * Gets indicator if default value should be used.
181
229
  *
@@ -210,26 +258,36 @@ export declare class SerializerContext<TType> extends Metadata {
210
258
  * May be called during serialization to define reference.
211
259
  *
212
260
  * @param {ReferenceKey} referenceKey Reference key.
213
- * @param {ReferenceValueInitializer} referenceValueInitializer Reference value initializer.
261
+ * @param {ReferenceValueGetter} referenceValueGetter Reference value getter.
214
262
  *
215
- * @returns {ReferenceValue|ReferenceValueResolver} Reference value or reference value resolver when circular dependency is detected.
263
+ * @returns {ReferenceValue} Reference value.
216
264
  */
217
- defineReference(referenceKey: ReferenceKey, referenceValueInitializer: ReferenceValueInitializer): ReferenceValue | ReferenceValueResolver;
265
+ defineReference(referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
218
266
  /**
219
267
  * Restores reference.
220
268
  *
221
269
  * May be called during deserialization to restore reference.
222
270
  *
223
271
  * @param {ReferenceKey} referenceKey Reference key.
224
- * @param {ReferenceValueInitializer} referenceValueInitializer Reference value initializer.
272
+ * @param {ReferenceValueGetter} referenceValueGetter Reference value getter.
273
+ *
274
+ * @returns {ReferenceValue} Reference value.
275
+ */
276
+ restoreReference(referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
277
+ /**
278
+ * Registers callback for provided reference key.
279
+ *
280
+ * May be called by reference handlers to register a callback resolver for a circular reference.
281
+ *
282
+ * @param {ReferenceKey} referenceKey Reference key.
225
283
  *
226
- * @returns {ReferenceValue|ReferenceValueResolver} Reference value or reference value resolver when circular dependency is detected.
284
+ * @returns {void}
227
285
  */
228
- restoreReference(referenceKey: ReferenceKey, referenceValueInitializer: ReferenceValueInitializer): ReferenceValue | ReferenceValueResolver;
286
+ registerReferenceCallback(referenceKey: ReferenceKey): void;
229
287
  /**
230
288
  * Pushes callback for provided reference key.
231
289
  *
232
- * Called by serializers during handling of circular references.
290
+ * Called by reference handlers during handling of circular references.
233
291
  *
234
292
  * @param {ReferenceKey} referenceKey Reference key.
235
293
  * @param {ReferenceCallback} referenceCallback Reference callback.
@@ -240,19 +298,27 @@ export declare class SerializerContext<TType> extends Metadata {
240
298
  /**
241
299
  * Resolves callbacks for provided reference key.
242
300
  *
243
- * Called by reference handlers when circular references can be resolved.
301
+ * May be called by reference handlers when circular references can be resolved.
244
302
  *
245
303
  * @param {ReferenceKey} referenceKey Reference key.
246
304
  *
247
305
  * @returns {void}
248
306
  */
249
307
  resolveReferenceCallbacks(referenceKey: ReferenceKey): void;
308
+ /**
309
+ * Defines serializer context options based on partial.
310
+ *
311
+ * @param {Partial<SerializerContextOptions<any>>} serializerContextOptions Partial serializer context options.
312
+ *
313
+ * @returns {SerializerContextOptions<any>} Complete serializer context options.
314
+ */
315
+ private defineSerializerContextOptions;
250
316
  /**
251
317
  * Defines child serializer context.
252
318
  *
253
- * Called by serializers on context change.
319
+ * Called by serializers on drill down.
254
320
  *
255
- * @param {Partial<SerializerContextOptions<any>>} childSerializerContextOptions Partial of serializer context options to override.
321
+ * @param {Partial<SerializerContextOptions<any>>} childSerializerContextOptions Child serializer context options.
256
322
  *
257
323
  * @returns {SerializerContext<any>} Child serializer context.
258
324
  */
@@ -267,6 +333,16 @@ export declare class SerializerContext<TType> extends Metadata {
267
333
  * @returns {SerializerContext<any>} Generic serializer context.
268
334
  */
269
335
  defineGenericSerializerContext(genericIndex: number): SerializerContext<any>;
336
+ /**
337
+ * Defines polymorphic serializer context.
338
+ *
339
+ * Called by serializers which work with polymorphic types.
340
+ *
341
+ * @param {TypeFn<any>|Record<string, any>} x Type function or record.
342
+ *
343
+ * @returns {SerializerContext<any>} Polymorphic serializer context.
344
+ */
345
+ definePolymorphicSerializerContext(x: TypeFn<any> | Record<string, any>): SerializerContext<any>;
270
346
  /**
271
347
  * Defines polymorphic serializer context by type function.
272
348
  *
@@ -284,13 +360,51 @@ export declare class SerializerContext<TType> extends Metadata {
284
360
  */
285
361
  private definePolymorphicSerializerContextByDiscriminant;
286
362
  /**
287
- * Defines polymorphic serializer context.
363
+ * Configures json path key.
288
364
  *
289
- * Called by serializers which work with polymorphic types.
365
+ * @param {string|number} jsonPathKey Json path key.
290
366
  *
291
- * @param {TypeFn<any>|Record<string, any>} x Type function or record.
367
+ * @returns {SerializerContext<TType>} Current instance of serializer context.
368
+ */
369
+ configureJsonPathKey(jsonPathKey: string | number): SerializerContext<TType>;
370
+ /**
371
+ * Configures reference value setter.
292
372
  *
293
- * @returns {SerializerContext<any>} Polymorphic serializer context.
373
+ * @param {ReferenceValueSetter} referenceValueSetter Reference value setter.
374
+ *
375
+ * @returns {SerializerContext<TType>} Current instance of serializer context.
294
376
  */
295
- definePolymorphicSerializerContext(x: TypeFn<any> | Record<string, any>): SerializerContext<any>;
377
+ configureReferenceValueSetter(referenceValueSetter: ReferenceValueSetter): SerializerContext<TType>;
378
+ /**
379
+ * Configures generic arguments.
380
+ *
381
+ * @param {Array<GenericArgument<any>>|undefined} genericArguments Generic arguments.
382
+ *
383
+ * @returns {SerializerContext<TType>} Current instance of serializer context.
384
+ */
385
+ configureGenericArguments(genericArguments: Array<GenericArgument<any>> | undefined): SerializerContext<TType>;
386
+ /**
387
+ * Configures property metadata
388
+ *
389
+ * @param {PropertyMetadata<any,TType>} propertyMetadata Property metadata.
390
+ *
391
+ * @returns {SerializerContext<TType>} Current instance of serializer context.
392
+ */
393
+ configurePropertyMetadata(propertyMetadata: PropertyMetadata<any, TType>): SerializerContext<TType>;
394
+ /**
395
+ * Configures type metadata
396
+ *
397
+ * @param {TypeMetadata<TType>} typeMetadata Type metadata.
398
+ *
399
+ * @returns {SerializerContext<TType>} Current instance of serializer context.
400
+ */
401
+ configureTypeMetadata(typeMetadata: TypeMetadata<TType>): SerializerContext<TType>;
402
+ /**
403
+ * Configures serializer context based on provided options.
404
+ *
405
+ * @param {SerializerContextOptions<TType>} serializerContextOptions Serializer context options.
406
+ *
407
+ * @returns {SerializerContext<TType>} Current instance of serializer context.
408
+ */
409
+ configure(serializerContextOptions: SerializerContextOptions<TType>): SerializerContext<TType>;
296
410
  }
package/serializer.d.ts CHANGED
@@ -1,11 +1,27 @@
1
- import { Serializer } from './core/serializer';
1
+ import { SerializerContext } from './serializer-context';
2
+ import { TypeLike } from './type-like';
2
3
  /**
3
- * Serializer decorator.
4
+ * Serializer.
4
5
  *
5
- * Used to define custom serializer for type and property.
6
- *
7
- * @param {Serializer<TType>} serializer Serializer.
8
- *
9
- * @returns {ClassDecorator&PropertyDecorator} Class and property decorator.
6
+ * @type {Serializer<TType>}
10
7
  */
11
- export declare function Serializer<TType>(serializer: Serializer<TType>): ClassDecorator & PropertyDecorator;
8
+ export interface Serializer<TType> {
9
+ /**
10
+ * Serializes provided value.
11
+ *
12
+ * @param {TypeLike<TType>} x Some value.
13
+ * @param {SerializerContext<TType>} serializerContext Serializer context.
14
+ *
15
+ * @returns {TypeLike<any>} Serialized value.
16
+ */
17
+ serialize(x: TypeLike<TType>, serializerContext: SerializerContext<TType>): TypeLike<any>;
18
+ /**
19
+ * Deserializes provided value.
20
+ *
21
+ * @param {TypeLike<any>} x Some value.
22
+ * @param {SerializerContext<TType>} serializerContext Serializer context.
23
+ *
24
+ * @returns {TypeLike<TType>} Deserialized value.
25
+ */
26
+ deserialize(x: TypeLike<any>, serializerContext: SerializerContext<TType>): TypeLike<TType>;
27
+ }
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Array buffer serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Array serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Boolean serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Data view serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Date serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Float 32 array serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Float 64 array serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Int 16 array serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Int 32 array serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Int 8 array serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Map serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Number serializer.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { Serializer } from '../core/serializer';
2
- import { SerializerContext } from '../core/serializer-context';
3
- import { TypeLike } from '../core/type-like';
1
+ import { Serializer } from '../serializer';
2
+ import { SerializerContext } from '../serializer-context';
3
+ import { TypeLike } from '../type-like';
4
4
  /**
5
5
  * Set serializer.
6
6
  *