@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,6 +1,6 @@
1
1
  import { LogLevel } from './log-level';
2
2
  /**
3
- * Main logger class.
3
+ * Main logger class used by serializers for displaying messages.
4
4
  *
5
5
  * @type {Log}
6
6
  */
@@ -10,31 +10,61 @@ export declare class Log {
10
10
  *
11
11
  * @type {LogLevel}
12
12
  */
13
- logLevel: LogLevel;
13
+ readonly logLevel: LogLevel;
14
14
  /**
15
- * Constructor.
15
+ * Info enabled?
16
16
  *
17
- * @param {LogLevel} logLevel Log level.
17
+ * @type {boolean}
18
18
  */
19
- constructor(logLevel: LogLevel);
19
+ readonly infoEnabled: boolean;
20
+ /**
21
+ * Warn enabled?
22
+ *
23
+ * @type {boolean}
24
+ */
25
+ readonly warnEnabled: boolean;
26
+ /**
27
+ * Error enabled?
28
+ *
29
+ * @type {boolean}
30
+ */
31
+ readonly errorEnabled: boolean;
32
+ /**
33
+ * Supports console?
34
+ *
35
+ * @type {boolean}
36
+ */
37
+ readonly supportsConsole: boolean;
38
+ /**
39
+ * Supports console log?
40
+ *
41
+ * @type {boolean}
42
+ */
43
+ readonly supportsConsoleLog: boolean;
20
44
  /**
21
- * Info log level is enabled?
45
+ * Supports console info?
22
46
  *
23
47
  * @type {boolean}
24
48
  */
25
- get infoEnabled(): boolean;
49
+ readonly supportsConsoleInfo: boolean;
26
50
  /**
27
- * Warn log level is enabled?
51
+ * Supports console warn?
28
52
  *
29
53
  * @type {boolean}
30
54
  */
31
- get warnEnabled(): boolean;
55
+ readonly supportsConsoleWarn: boolean;
32
56
  /**
33
- * Error log level is enabled?
57
+ * Supports console error?
34
58
  *
35
59
  * @type {boolean}
36
60
  */
37
- get errorEnabled(): boolean;
61
+ readonly supportsConsoleError: boolean;
62
+ /**
63
+ * Constructor.
64
+ *
65
+ * @param {LogLevel} logLevel Log level.
66
+ */
67
+ constructor(logLevel: LogLevel);
38
68
  /**
39
69
  * Displays info message.
40
70
  *
File without changes
@@ -1,11 +1,15 @@
1
- import { NamingConvention } from './core/naming-convention';
2
1
  /**
3
- * Naming convention decorator.
2
+ * Represents naming convention.
4
3
  *
5
- * Used to define custom naming convention for type and property.
6
- *
7
- * @param {NamingConvention} namingConvention Naming convention.
8
- *
9
- * @returns {ClassDecorator&PropertyDecorator} Class and property decorator.
4
+ * @type {NamingConvention}
10
5
  */
11
- export declare function NamingConvention(namingConvention: NamingConvention): ClassDecorator & PropertyDecorator;
6
+ export interface NamingConvention {
7
+ /**
8
+ * Converts name from provided to target one.
9
+ *
10
+ * @param {string} name Name.
11
+ *
12
+ * @returns {string} Converted name.
13
+ */
14
+ convert(name: string): string;
15
+ }
@@ -1,4 +1,4 @@
1
- import { NamingConvention } from '../core/naming-convention';
1
+ import { NamingConvention } from '../naming-convention';
2
2
  /**
3
3
  * Camel case naming convention.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { NamingConvention } from '../core/naming-convention';
1
+ import { NamingConvention } from '../naming-convention';
2
2
  /**
3
3
  * Flat case naming convention.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { NamingConvention } from '../core/naming-convention';
1
+ import { NamingConvention } from '../naming-convention';
2
2
  /**
3
3
  * Flat upper case naming convention.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { NamingConvention } from '../core/naming-convention';
1
+ import { NamingConvention } from '../naming-convention';
2
2
  /**
3
3
  * Kebab case naming convention.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { NamingConvention } from '../core/naming-convention';
1
+ import { NamingConvention } from '../naming-convention';
2
2
  /**
3
3
  * Kebab upper naming case.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { NamingConvention } from '../core/naming-convention';
1
+ import { NamingConvention } from '../naming-convention';
2
2
  /**
3
3
  * Pascal case naming convention.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { NamingConvention } from '../core/naming-convention';
1
+ import { NamingConvention } from '../naming-convention';
2
2
  /**
3
3
  * Snake case naming convention.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { NamingConvention } from '../core/naming-convention';
1
+ import { NamingConvention } from '../naming-convention';
2
2
  /**
3
3
  * Snake upper case naming convention.
4
4
  *
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "author": "DipScope authors and contributors",
3
- "dependencies": {},
4
- "description": "A package which will help you to transform your JSON strings or plain objects into JS object instances.",
3
+ "dependencies": {
4
+ "lodash": "^4.17.21"
5
+ },
6
+ "description": "Transform JSON strings or plain objects into JS class instances.",
5
7
  "devDependencies": {
6
8
  "@types/jasmine": "^3.6.3",
9
+ "@types/lodash": "^4.14.182",
7
10
  "@typescript-eslint/eslint-plugin": "^4.14.2",
8
11
  "@typescript-eslint/parser": "^4.14.2",
9
12
  "circular-dependency-plugin": "^5.2.2",
@@ -16,18 +19,22 @@
16
19
  "ts-loader": "^8.0.15",
17
20
  "ts-node": "^8.10.2",
18
21
  "typescript": "^4.1.3",
19
- "webpack": "^5.21.1",
20
- "webpack-cli": "^4.5.0",
21
- "webpack-dev-server": "^3.11.2"
22
+ "webpack": "^5.74.0",
23
+ "webpack-cli": "^4.10.0",
24
+ "webpack-dev-server": "^4.9.3"
22
25
  },
23
26
  "keywords": [
24
27
  "json",
25
28
  "object",
26
- "entity",
27
29
  "class",
28
30
  "converter",
29
31
  "transformer",
30
- "manager"
32
+ "type",
33
+ "manager",
34
+ "serializer",
35
+ "deserializer",
36
+ "reflection",
37
+ "metadata"
31
38
  ],
32
39
  "license": "Apache-2.0",
33
40
  "main": "index.js",
@@ -44,5 +51,5 @@
44
51
  "lint": "eslint . --ext .ts"
45
52
  },
46
53
  "types": "index.d.ts",
47
- "version": "4.1.1"
54
+ "version": "5.0.0"
48
55
  }
@@ -0,0 +1,309 @@
1
+ import { Alias } from './alias';
2
+ import { CustomData } from './custom-data';
3
+ import { DefaultValue } from './default-value';
4
+ import { GenericArgument } from './generic-argument';
5
+ import { GenericMetadata } from './generic-metadata';
6
+ import { Metadata } from './metadata';
7
+ import { NamingConvention } from './naming-convention';
8
+ import { PropertyName } from './property-name';
9
+ import { PropertyOptions } from './property-options';
10
+ import { ReferenceHandler } from './reference-handler';
11
+ import { Serializer } from './serializer';
12
+ import { TypeArgument } from './type-argument';
13
+ import { TypeFn } from './type-fn';
14
+ import { TypeMetadata } from './type-metadata';
15
+ /**
16
+ * Main class used to describe a certain property.
17
+ *
18
+ * @type {PropertyMetadata<TDeclaringType, TType>}
19
+ */
20
+ export declare class PropertyMetadata<TDeclaringType, TType> extends Metadata {
21
+ /**
22
+ * Type metadata to which property metadata belongs to.
23
+ *
24
+ * @type {TypeMetadata<TDeclaringType>}
25
+ */
26
+ readonly declaringTypeMetadata: TypeMetadata<TDeclaringType>;
27
+ /**
28
+ * Type function defined using reflect metadata.
29
+ *
30
+ * Used as a fallback when type argument is not defined.
31
+ *
32
+ * @type {TypeFn<TType>}
33
+ */
34
+ readonly reflectTypeFn: TypeFn<TType>;
35
+ /**
36
+ * Property name as declared in type.
37
+ *
38
+ * @type {PropertyName}
39
+ */
40
+ readonly propertyName: PropertyName;
41
+ /**
42
+ * Property options.
43
+ *
44
+ * @type {PropertyOptions<TType>}
45
+ */
46
+ readonly propertyOptions: PropertyOptions<TType>;
47
+ /**
48
+ * Constructor.
49
+ *
50
+ * @param {TypeMetadata<TDeclaringType>} declaringTypeMetadata Type metadata to which property metadata belongs to.
51
+ * @param {PropertyName} propertyName Property name.
52
+ * @param {PropertyOptions<TType>} propertyOptions Property options.
53
+ */
54
+ constructor(declaringTypeMetadata: TypeMetadata<TDeclaringType>, propertyName: PropertyName, propertyOptions: PropertyOptions<TType>);
55
+ /**
56
+ * Gets alias.
57
+ *
58
+ * @returns {Alias|undefined} Alias or undefined.
59
+ */
60
+ get alias(): Alias | undefined;
61
+ /**
62
+ * Gets custom data.
63
+ *
64
+ * @returns {CustomData} Custom data.
65
+ */
66
+ get customData(): CustomData;
67
+ /**
68
+ * Gets serialized null value.
69
+ *
70
+ * @returns {any|undefined} Resolved serialized null value or undefined.
71
+ */
72
+ get serializedNullValue(): any | undefined;
73
+ /**
74
+ * Gets serialized default value.
75
+ *
76
+ * @returns {any|undefined} Resolved serialized default value or undefined.
77
+ */
78
+ get serializedDefaultValue(): any | undefined;
79
+ /**
80
+ * Gets deserialized null value.
81
+ *
82
+ * @returns {any|undefined} Resolved deserialized null value or undefined.
83
+ */
84
+ get deserializedNullValue(): any | undefined;
85
+ /**
86
+ * Gets deserialized default value.
87
+ *
88
+ * @returns {any|undefined} Resolved deserialized default value or undefined.
89
+ */
90
+ get deserializedDefaultValue(): any | undefined;
91
+ /**
92
+ * Gets serialized property name.
93
+ *
94
+ * @returns {string} Serialized property name.
95
+ */
96
+ get serializedPropertyName(): string;
97
+ /**
98
+ * Gets deserialized property name.
99
+ *
100
+ * @returns {string} Deserialized property name.
101
+ */
102
+ get deserializedPropertyName(): string;
103
+ /**
104
+ * Gets deserializable value.
105
+ *
106
+ * @returns {boolean|undefined} Deserializable indicator or undefined.
107
+ */
108
+ get deserializable(): boolean | undefined;
109
+ /**
110
+ * Gets generic arguments.
111
+ *
112
+ * @returns {Array<GenericArgument<any>>|undefined} Generic arguments or undefined.
113
+ */
114
+ get genericArguments(): Array<GenericArgument<any>> | undefined;
115
+ /**
116
+ * Gets generic metadatas.
117
+ *
118
+ * @returns {Array<GenericMetadata<any>>|undefined} Generic metadatas.
119
+ */
120
+ get genericMetadatas(): Array<GenericMetadata<any>> | undefined;
121
+ /**
122
+ * Gets naming convention.
123
+ *
124
+ * @returns {NamingConvention|undefined} Naming convention or undefined.
125
+ */
126
+ get namingConvention(): NamingConvention | undefined;
127
+ /**
128
+ * Gets reference handler.
129
+ *
130
+ * @returns {ReferenceHandler} Reference handler.
131
+ */
132
+ get referenceHandler(): ReferenceHandler;
133
+ /**
134
+ * Gets serializable value.
135
+ *
136
+ * @returns {boolean|undefined} Serializable indicator or undefined.
137
+ */
138
+ get serializable(): boolean | undefined;
139
+ /**
140
+ * Checks if serialization configured.
141
+ *
142
+ * @returns {boolean} True when serialization configured. False otherwise.
143
+ */
144
+ get serializationConfigured(): boolean;
145
+ /**
146
+ * Gets serializer.
147
+ *
148
+ * @returns {Serializer<TType>} Serializer.
149
+ */
150
+ get serializer(): Serializer<TType>;
151
+ /**
152
+ * Gets type argument.
153
+ *
154
+ * @returns {TypeArgument|undefined} Type argument or undefined.
155
+ */
156
+ get typeArgument(): TypeArgument<TType> | undefined;
157
+ /**
158
+ * Gets type metadata.
159
+ *
160
+ * @returns {TypeMetadata<TType>} Type metadata.
161
+ */
162
+ get typeMetadata(): TypeMetadata<TType>;
163
+ /**
164
+ * Gets indicator if null value should be preserved.
165
+ *
166
+ * @returns {boolean} True when null value should be preserved. False otherwise.
167
+ */
168
+ get preserveNull(): boolean;
169
+ /**
170
+ * Gets indicator if default value should be used.
171
+ *
172
+ * @returns {boolean} Use default value indicator.
173
+ */
174
+ get useDefaultValue(): boolean;
175
+ /**
176
+ * Gets indicator if implicit conversion should be used.
177
+ *
178
+ * @returns {boolean} Use implicit conversion indicator.
179
+ */
180
+ get useImplicitConversion(): boolean;
181
+ /**
182
+ * Configures alias.
183
+ *
184
+ * @param {Alias} alias Alias.
185
+ *
186
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
187
+ */
188
+ configureAlias(alias: Alias): PropertyMetadata<TDeclaringType, TType>;
189
+ /**
190
+ * Configures custom data.
191
+ *
192
+ * @param {CustomData} customData Custom data.
193
+ *
194
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
195
+ */
196
+ configureCustomData(customData: CustomData): PropertyMetadata<TDeclaringType, TType>;
197
+ /**
198
+ * Configures default value.
199
+ *
200
+ * @param {DefaultValue} defaultValue Default value.
201
+ *
202
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
203
+ */
204
+ configureDefaultValue(defaultValue: DefaultValue): PropertyMetadata<TDeclaringType, TType>;
205
+ /**
206
+ * Configures serialized default value.
207
+ *
208
+ * @param {DefaultValue} serializedDefaultValue Serialized default value.
209
+ *
210
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
211
+ */
212
+ configureSerializedDefaultValue(serializedDefaultValue: DefaultValue): PropertyMetadata<TDeclaringType, TType>;
213
+ /**
214
+ * Configures deserialized default value.
215
+ *
216
+ * @param {DefaultValue} deserializedDefaultValue Deserialized default value.
217
+ *
218
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
219
+ */
220
+ configureDeserializedDefaultValue(deserializedDefaultValue: DefaultValue): PropertyMetadata<TDeclaringType, TType>;
221
+ /**
222
+ * Configures deserializable.
223
+ *
224
+ * @param {boolean} deserializable Deserializable.
225
+ *
226
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
227
+ */
228
+ configureDeserializable(deserializable: boolean): PropertyMetadata<TDeclaringType, TType>;
229
+ /**
230
+ * Configures serializable.
231
+ *
232
+ * @param {boolean} serializable Serializable.
233
+ *
234
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
235
+ */
236
+ configureSerializable(serializable: boolean): PropertyMetadata<TDeclaringType, TType>;
237
+ /**
238
+ * Configures generic arguments.
239
+ *
240
+ * @param {Array<GenericArgument<any>>|undefined} genericArguments Generic arguments.
241
+ *
242
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
243
+ */
244
+ configureGenericArguments(genericArguments: Array<GenericArgument<any>> | undefined): PropertyMetadata<TDeclaringType, TType>;
245
+ /**
246
+ * Configures naming convention.
247
+ *
248
+ * @param {NamingConvention} namingConvention Naming convention.
249
+ *
250
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
251
+ */
252
+ configureNamingConvention(namingConvention: NamingConvention): PropertyMetadata<TDeclaringType, TType>;
253
+ /**
254
+ * Configures reference handler.
255
+ *
256
+ * @param {ReferenceHandler} referenceHandler Reference handler.
257
+ *
258
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
259
+ */
260
+ configureReferenceHandler(referenceHandler: ReferenceHandler): PropertyMetadata<TDeclaringType, TType>;
261
+ /**
262
+ * Configures serializer.
263
+ *
264
+ * @param {Serializer<TType>} serializer Serializer.
265
+ *
266
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
267
+ */
268
+ configureSerializer(serializer: Serializer<TType>): PropertyMetadata<TDeclaringType, TType>;
269
+ /**
270
+ * Configures type argument.
271
+ *
272
+ * @param {TypeArgument<TType>} typeArgument Type argument.
273
+ *
274
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
275
+ */
276
+ configureTypeArgument(typeArgument: TypeArgument<TType>): PropertyMetadata<TDeclaringType, TType>;
277
+ /**
278
+ * Configures preserve null.
279
+ *
280
+ * @param {boolean} preserveNull Preserve null.
281
+ *
282
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
283
+ */
284
+ configurePreserveNull(preserveNull: boolean): PropertyMetadata<TDeclaringType, TType>;
285
+ /**
286
+ * Configures use default value.
287
+ *
288
+ * @param {boolean} useDefaultValue Use default value.
289
+ *
290
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
291
+ */
292
+ configureUseDefaultValue(useDefaultValue: boolean): PropertyMetadata<TDeclaringType, TType>;
293
+ /**
294
+ * Configures use implicit convertion.
295
+ *
296
+ * @param {boolean} useImplicitConversion Use implicit convertion.
297
+ *
298
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
299
+ */
300
+ configureUseImplicitConversion(useImplicitConversion: boolean): PropertyMetadata<TDeclaringType, TType>;
301
+ /**
302
+ * Configures property metadata based on provided options.
303
+ *
304
+ * @param {PropertyOptions<TType>} propertyOptions Property options.
305
+ *
306
+ * @returns {PropertyMetadata<TDeclaringType, TType>} Current instance of property metadata.
307
+ */
308
+ configure(propertyOptions: PropertyOptions<TType>): PropertyMetadata<TDeclaringType, TType>;
309
+ }
File without changes
@@ -11,7 +11,7 @@ import { TypeArgument } from './type-argument';
11
11
  *
12
12
  * @type {PropertyOptions<TType>}
13
13
  */
14
- export interface PropertyOptions<TType> {
14
+ export declare type PropertyOptions<TType> = {
15
15
  /**
16
16
  * Property alias.
17
17
  *
@@ -26,6 +26,15 @@ export interface PropertyOptions<TType> {
26
26
  * @type {CustomData}
27
27
  */
28
28
  customData?: CustomData;
29
+ /**
30
+ * Default value for undefined ones.
31
+ *
32
+ * Used to set both serialized and deserialized default values and
33
+ * only when use default value option is true.
34
+ *
35
+ * @type {DefaultValue}
36
+ */
37
+ defaultValue?: DefaultValue;
29
38
  /**
30
39
  * Serialized default value for undefined ones.
31
40
  *
@@ -84,6 +93,13 @@ export interface PropertyOptions<TType> {
84
93
  * @type {TypeArgument<TType>}
85
94
  */
86
95
  typeArgument?: TypeArgument<TType>;
96
+ /**
97
+ * If set to true then null values are preserved. Otherwise they will be
98
+ * treated as undefined.
99
+ *
100
+ * @type {boolean}
101
+ */
102
+ preserveNull?: boolean;
87
103
  /**
88
104
  * Use default value assignment for undefined values?
89
105
  *
@@ -97,4 +113,4 @@ export interface PropertyOptions<TType> {
97
113
  * @type {boolean}
98
114
  */
99
115
  useImplicitConversion?: boolean;
100
- }
116
+ };
package/property.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { GenericArgument, TypeArgument } from './core';
2
- import { PropertyOptions } from './core/property-options';
1
+ import { GenericArgument } from './generic-argument';
2
+ import { PropertyOptions } from './property-options';
3
+ import { TypeArgument } from './type-argument';
3
4
  /**
4
5
  * Property decorator.
5
6
  *
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Reference callback function which is called when circular references can be resolved for
3
- * a certain object. May be created by serializers for serializer contexts.
3
+ * a certain object.
4
4
  *
5
5
  * @type {ReferenceCallback}
6
6
  */
@@ -1,11 +1,31 @@
1
- import { ReferenceHandler } from './core/reference-handler';
1
+ import { ReferenceKey } from './reference-key';
2
+ import { ReferenceValue } from './reference-value';
3
+ import { ReferenceValueGetter } from './reference-value-getter';
4
+ import { SerializerContext } from './serializer-context';
2
5
  /**
3
- * Reference handler decorator.
6
+ * Reference handler to resolve object references.
4
7
  *
5
- * Used to define custom reference handler for type and property.
6
- *
7
- * @param {ReferenceHandler} referenceHandler Reference handler.
8
- *
9
- * @returns {ClassDecorator&PropertyDecorator} Class and property decorator.
8
+ * @type {ReferenceHandler}
10
9
  */
11
- export declare function ReferenceHandler(referenceHandler: ReferenceHandler): ClassDecorator & PropertyDecorator;
10
+ export interface ReferenceHandler {
11
+ /**
12
+ * Defines reference. Called during serialization.
13
+ *
14
+ * @param {SerializerContext<any>} serializerContext Serializer context.
15
+ * @param {ReferenceKey} referenceKey Reference which acts as a key. This is basically a serializing object.
16
+ * @param {ReferenceValueGetter} referenceValueGetter Function to get a reference value when one is not yet present for a key.
17
+ *
18
+ * @returns {ReferenceValue} Resolved reference value.
19
+ */
20
+ define(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
21
+ /**
22
+ * Restores reference. Called during deserialization.
23
+ *
24
+ * @param {SerializerContext<any>} serializerContext Serializer context.
25
+ * @param {ReferenceKey} referenceKey Reference which acts as a key. This is basically a deserializing object.
26
+ * @param {ReferenceValueGetter} referenceValueGetter Function to get a reference value when one is not yet present for a key.
27
+ *
28
+ * @returns {ReferenceValue} Resolved reference value.
29
+ */
30
+ restore(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
31
+ }
@@ -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
  * Direct reference handler which preserves references as is.
9
8
  *
@@ -15,19 +14,19 @@ export declare class DirectReferenceHandler implements ReferenceHandler {
15
14
  *
16
15
  * @param {SerializerContext<any>} serializerContext Serializer context.
17
16
  * @param {ReferenceKey} referenceKey Reference which acts as a key. This is basically a serializing object.
18
- * @param {ReferenceValueInitializer} referenceValueInitializer Function to initialize a reference value when one is not yet present for a key.
17
+ * @param {ReferenceValueGetter} referenceValueGetter Function to get a reference value when one is not yet present for a key.
19
18
  *
20
- * @returns {ReferenceValue|ReferenceValueResolver} Resolved reference value or reference resolver when circular dependency is detected.
19
+ * @returns {ReferenceValue} Resolved reference value.
21
20
  */
22
- define(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueInitializer: ReferenceValueInitializer): ReferenceValue | ReferenceValueResolver;
21
+ define(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
23
22
  /**
24
23
  * Restores reference. Called during deserialization.
25
24
  *
26
25
  * @param {SerializerContext<any>} serializerContext Serializer context.
27
26
  * @param {ReferenceKey} referenceKey Reference which acts as a key. This is basically a deserializing object.
28
- * @param {ReferenceValueInitializer} referenceValueInitializer Function to initialize a reference value when one is not yet present for a key.
27
+ * @param {ReferenceValueGetter} referenceValueGetter Function to get a reference value when one is not yet present for a key.
29
28
  *
30
- * @returns {ReferenceValue|ReferenceValueResolver} Resolved reference value or reference resolver when circular dependency is detected.
29
+ * @returns {ReferenceValue} Resolved reference value.
31
30
  */
32
- restore(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueInitializer: ReferenceValueInitializer): ReferenceValue | ReferenceValueResolver;
31
+ restore(serializerContext: SerializerContext<any>, referenceKey: ReferenceKey, referenceValueGetter: ReferenceValueGetter): ReferenceValue;
33
32
  }