@dipscope/type-manager 4.1.0 → 5.0.0-beta.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.
Files changed (133) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/{LICENSE.txt → LICENSE.md} +0 -0
  3. package/README.md +150 -324
  4. package/alias.d.ts +3 -7
  5. package/custom-data.d.ts +3 -8
  6. package/{core/default-value-resolver.d.ts → default-value-resolver.d.ts} +0 -0
  7. package/default-value.d.ts +4 -8
  8. package/discriminant.d.ts +5 -8
  9. package/discriminator.d.ts +3 -8
  10. package/factories/type-factory.d.ts +3 -3
  11. package/factory.d.ts +15 -8
  12. package/functions/get-own-reflect-metadata.d.ts +9 -0
  13. package/functions/get-reflect-metadata.d.ts +10 -0
  14. package/functions/get-words.d.ts +8 -0
  15. package/functions/index.d.ts +16 -0
  16. package/functions/is-arrow-function.d.ts +8 -0
  17. package/functions/is-ctor-function.d.ts +8 -0
  18. package/functions/is-data-view.d.ts +8 -0
  19. package/functions/is-float-32-array.d.ts +8 -0
  20. package/functions/is-float-64-array.d.ts +8 -0
  21. package/functions/is-int-16-array.d.ts +8 -0
  22. package/functions/is-int-32-array.d.ts +8 -0
  23. package/functions/is-int-8-array.d.ts +8 -0
  24. package/functions/is-uint-16-array.d.ts +8 -0
  25. package/functions/is-uint-32-array.d.ts +8 -0
  26. package/functions/is-uint-8-array.d.ts +8 -0
  27. package/functions/is-uint-8-clamped-array.d.ts +8 -0
  28. package/functions/name-of.d.ts +8 -0
  29. package/{core/generic-argument.d.ts → generic-argument.d.ts} +0 -0
  30. package/{core/generic-metadata.d.ts → generic-metadata.d.ts} +0 -0
  31. package/index.d.ts +39 -9
  32. package/index.js +1 -2
  33. package/{core/inject-index.d.ts → inject-index.d.ts} +0 -0
  34. package/{core/inject-metadata.d.ts → inject-metadata.d.ts} +0 -0
  35. package/{core/inject-options.d.ts → inject-options.d.ts} +2 -2
  36. package/inject.d.ts +2 -2
  37. package/injector.d.ts +13 -8
  38. package/injectors/singleton-injector.d.ts +2 -2
  39. package/{core/log-level.d.ts → log-level.d.ts} +0 -0
  40. package/{core/log.d.ts → log.d.ts} +41 -11
  41. package/{core/metadata.d.ts → metadata.d.ts} +0 -0
  42. package/naming-convention.d.ts +12 -8
  43. package/naming-conventions/camel-case-naming-convention.d.ts +1 -1
  44. package/naming-conventions/flat-case-naming-convention.d.ts +1 -1
  45. package/naming-conventions/flat-upper-case-naming-convention.d.ts +1 -1
  46. package/naming-conventions/kebab-case-naming-convention.d.ts +1 -1
  47. package/naming-conventions/kebab-upper-case-naming-convention.d.ts +1 -1
  48. package/naming-conventions/pascal-case-naming-convention.d.ts +1 -1
  49. package/naming-conventions/snake-case-naming-convention.d.ts +1 -1
  50. package/naming-conventions/snake-upper-case-naming-convention.d.ts +1 -1
  51. package/package.json +6 -3
  52. package/{core/property-metadata.d.ts → property-metadata.d.ts} +18 -0
  53. package/{core/property-name.d.ts → property-name.d.ts} +0 -0
  54. package/{core/property-options.d.ts → property-options.d.ts} +18 -2
  55. package/property.d.ts +3 -2
  56. package/{core/reference-callback.d.ts → reference-callback.d.ts} +1 -1
  57. package/reference-handler.d.ts +28 -8
  58. package/reference-handlers/direct-reference-handler.d.ts +11 -12
  59. package/reference-handlers/lead-reference-handler.d.ts +11 -12
  60. package/reference-handlers/path-reference-handler.d.ts +11 -12
  61. package/{core/reference-key.d.ts → reference-key.d.ts} +0 -0
  62. package/reference-value-getter.d.ts +7 -0
  63. package/reference-value-setter.d.ts +7 -0
  64. package/{core/reference-value.d.ts → reference-value.d.ts} +0 -0
  65. package/serializer-context-options.d.ts +43 -0
  66. package/{core/serializer-context.d.ts → serializer-context.d.ts} +110 -44
  67. package/serializer.d.ts +24 -8
  68. package/serializers/array-buffer-serializer.d.ts +3 -3
  69. package/serializers/array-serializer.d.ts +3 -3
  70. package/serializers/boolean-serializer.d.ts +3 -3
  71. package/serializers/data-view-serializer.d.ts +3 -3
  72. package/serializers/date-serializer.d.ts +3 -3
  73. package/serializers/float-32-array-serializer.d.ts +3 -3
  74. package/serializers/float-64-array-serializer.d.ts +3 -3
  75. package/serializers/int-16-array-serializer.d.ts +3 -3
  76. package/serializers/int-32-array-serializer.d.ts +3 -3
  77. package/serializers/int-8-array-serializer.d.ts +3 -3
  78. package/serializers/map-serializer.d.ts +15 -3
  79. package/serializers/number-serializer.d.ts +3 -3
  80. package/serializers/set-serializer.d.ts +3 -3
  81. package/serializers/string-serializer.d.ts +3 -3
  82. package/serializers/type-serializer.d.ts +3 -3
  83. package/serializers/uint-16-array-serializer.d.ts +3 -3
  84. package/serializers/uint-32-array-serializer.d.ts +3 -3
  85. package/serializers/uint-8-array-serializer.d.ts +3 -3
  86. package/serializers/uint-8-clamped-array-serializer.d.ts +3 -3
  87. package/{core/type-abstraction.d.ts → type-abstraction.d.ts} +0 -0
  88. package/{core/type-argument.d.ts → type-argument.d.ts} +0 -0
  89. package/{core/type-context-entry.d.ts → type-context-entry.d.ts} +0 -0
  90. package/{core/type-context.d.ts → type-context.d.ts} +0 -0
  91. package/{core/type-ctor.d.ts → type-ctor.d.ts} +0 -0
  92. package/{core/type-fn.d.ts → type-fn.d.ts} +0 -0
  93. package/{core/type-like.d.ts → type-like.d.ts} +0 -0
  94. package/type-manager-options.d.ts +5 -5
  95. package/type-manager.d.ts +10 -10
  96. package/{core/type-metadata-resolver.d.ts → type-metadata-resolver.d.ts} +0 -0
  97. package/{core/type-metadata-symbol.d.ts → type-metadata-symbol.d.ts} +0 -0
  98. package/{core/type-metadata.d.ts → type-metadata.d.ts} +24 -6
  99. package/{core/type-name.d.ts → type-name.d.ts} +0 -0
  100. package/{core/type-options-base.d.ts → type-options-base.d.ts} +9 -19
  101. package/{core/type-options.d.ts → type-options.d.ts} +28 -2
  102. package/{core/type-resolver.d.ts → type-resolver.d.ts} +0 -0
  103. package/type.d.ts +1 -1
  104. package/core/alias.d.ts +0 -6
  105. package/core/custom-data.d.ts +0 -6
  106. package/core/default-value.d.ts +0 -7
  107. package/core/discriminant.d.ts +0 -8
  108. package/core/discriminator.d.ts +0 -6
  109. package/core/factory.d.ts +0 -18
  110. package/core/fn.d.ts +0 -316
  111. package/core/index.d.ts +0 -44
  112. package/core/index.js +0 -2
  113. package/core/injector.d.ts +0 -16
  114. package/core/naming-convention.d.ts +0 -15
  115. package/core/reference-handler.d.ts +0 -32
  116. package/core/reference-value-initializer.d.ts +0 -8
  117. package/core/reference-value-resolver.d.ts +0 -8
  118. package/core/serializer-context-options.d.ts +0 -63
  119. package/core/serializer.d.ts +0 -27
  120. package/deserializable.d.ts +0 -11
  121. package/deserialized-default-value.d.ts +0 -11
  122. package/factories/index.js +0 -2
  123. package/injectable.d.ts +0 -10
  124. package/injectors/index.js +0 -2
  125. package/naming-conventions/index.js +0 -2
  126. package/preserve-discriminator.d.ts +0 -10
  127. package/reference-handlers/index.js +0 -2
  128. package/serializable.d.ts +0 -11
  129. package/serialized-default-value.d.ts +0 -11
  130. package/serializers/index.js +0 -2
  131. package/type-and-property.d.ts +0 -12
  132. package/use-default-value.d.ts +0 -10
  133. package/use-implicit-conversion.d.ts +0 -10
File without changes
@@ -4,7 +4,7 @@ import { TypeFn } from './type-fn';
4
4
  *
5
5
  * @type {InjectOptions<TType>}
6
6
  */
7
- export interface InjectOptions<TType> {
7
+ export declare type InjectOptions<TType> = {
8
8
  /**
9
9
  * Parameter key to inject within a type context. If specified then
10
10
  * type function will be ignored.
@@ -19,4 +19,4 @@ export interface InjectOptions<TType> {
19
19
  * @type {TypeFn<TType>}
20
20
  */
21
21
  typeFn?: TypeFn<TType>;
22
- }
22
+ };
package/inject.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { InjectOptions } from './core/inject-options';
2
- import { TypeFn } from './core/type-fn';
1
+ import { InjectOptions } from './inject-options';
2
+ import { TypeFn } from './type-fn';
3
3
  /**
4
4
  * Inject decorator.
5
5
  *
package/injector.d.ts CHANGED
@@ -1,11 +1,16 @@
1
- import { Injector } from './core/injector';
1
+ import { TypeMetadata } from './type-metadata';
2
2
  /**
3
- * Injector decorator.
3
+ * Injector used to resolve dependent types.
4
4
  *
5
- * Used to define custom injector for a type.
6
- *
7
- * @param {Injector} injector Injector.
8
- *
9
- * @returns {ClassDecorator} Class decorator.
5
+ * @type {Injector}
10
6
  */
11
- export declare function Injector(injector: Injector): ClassDecorator;
7
+ export interface Injector {
8
+ /**
9
+ * Method to get instance described by type metadata.
10
+ *
11
+ * @param {TypeMetadata<TType>} typeMetadata Type metadata.
12
+ *
13
+ * @returns {TType|undefined} Instance of type described by type metadata or undefined.
14
+ */
15
+ get<TType>(typeMetadata: TypeMetadata<TType>): TType | undefined;
16
+ }
@@ -1,5 +1,5 @@
1
- import { Injector } from '../core/injector';
2
- import { TypeMetadata } from '../core/type-metadata';
1
+ import { Injector } from '../injector';
2
+ import { TypeMetadata } from '../type-metadata';
3
3
  /**
4
4
  * Singleton injector.
5
5
  *
File without changes
@@ -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,8 +1,11 @@
1
1
  {
2
2
  "author": "DipScope authors and contributors",
3
- "dependencies": {},
3
+ "dependencies": {
4
+ "lodash": "^4.17.21"
5
+ },
4
6
  "description": "A package which will help you to transform your JSON strings or plain objects into JS object instances.",
5
7
  "devDependencies": {
8
+ "@types/lodash": "^4.14.182",
6
9
  "@types/jasmine": "^3.6.3",
7
10
  "@typescript-eslint/eslint-plugin": "^4.14.2",
8
11
  "@typescript-eslint/parser": "^4.14.2",
@@ -39,10 +42,10 @@
39
42
  "scripts": {
40
43
  "build": "npm run clean && npx webpack --config=webpack.config.js && npm run copy",
41
44
  "clean": "shx rm -rf dist",
42
- "copy": "shx cp CHANGELOG.md dist && shx cp LICENSE.txt dist && shx cp package.json dist && shx cp README.md dist",
45
+ "copy": "shx cp CHANGELOG.md dist && shx cp LICENSE.md dist && shx cp package.json dist && shx cp README.md dist",
43
46
  "test": "jasmine-ts --config=jasmine.json",
44
47
  "lint": "eslint . --ext .ts"
45
48
  },
46
49
  "types": "index.d.ts",
47
- "version": "4.1.0"
50
+ "version": "5.0.0-beta.1"
48
51
  }
@@ -63,12 +63,24 @@ export declare class PropertyMetadata<TDeclaringType, TType> extends Metadata {
63
63
  * @returns {CustomData} Custom data.
64
64
  */
65
65
  get customData(): CustomData;
66
+ /**
67
+ * Gets serialized null value.
68
+ *
69
+ * @returns {any|undefined} Resolved serialized null value or undefined.
70
+ */
71
+ get serializedNullValue(): any | undefined;
66
72
  /**
67
73
  * Gets serialized default value.
68
74
  *
69
75
  * @returns {any|undefined} Resolved serialized default value or undefined.
70
76
  */
71
77
  get serializedDefaultValue(): any | undefined;
78
+ /**
79
+ * Gets deserialized null value.
80
+ *
81
+ * @returns {any|undefined} Resolved deserialized null value or undefined.
82
+ */
83
+ get deserializedNullValue(): any | undefined;
72
84
  /**
73
85
  * Gets deserialized default value.
74
86
  *
@@ -147,6 +159,12 @@ export declare class PropertyMetadata<TDeclaringType, TType> extends Metadata {
147
159
  * @returns {TypeMetadata<TType>} Type metadata.
148
160
  */
149
161
  get typeMetadata(): TypeMetadata<TType>;
162
+ /**
163
+ * Gets indicator if null value should be preserved.
164
+ *
165
+ * @returns {boolean} True when null value should be preserved. False otherwise.
166
+ */
167
+ get preserveNull(): boolean;
150
168
  /**
151
169
  * Gets indicator if default value should be used.
152
170
  *
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
  }
@@ -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
+ };