@dipscope/type-manager 6.0.0 → 7.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 (446) hide show
  1. package/CHANGELOG.md +262 -247
  2. package/CONTRIBUTING.md +58 -58
  3. package/LICENSE.md +201 -201
  4. package/README.md +1901 -1887
  5. package/dist/es2015/alias.js +1 -1
  6. package/dist/es2015/any.js +2 -2
  7. package/dist/es2015/custom-context.js +58 -0
  8. package/dist/es2015/custom-context.js.map +1 -0
  9. package/dist/es2015/custom-key.js +8 -0
  10. package/dist/es2015/custom-key.js.map +1 -0
  11. package/dist/es2015/custom-option.js +2 -0
  12. package/dist/es2015/custom-option.js.map +1 -0
  13. package/dist/es2015/custom-value-resolver.js +2 -0
  14. package/dist/es2015/custom-value-resolver.js.map +1 -0
  15. package/dist/es2015/custom-value.js +2 -0
  16. package/dist/es2015/custom-value.js.map +1 -0
  17. package/dist/es2015/default-value-resolver.js +1 -1
  18. package/dist/es2015/default-value.js +1 -1
  19. package/dist/es2015/discriminant.js +1 -1
  20. package/dist/es2015/discriminator.js +1 -1
  21. package/dist/es2015/factories/index.js +1 -1
  22. package/dist/es2015/factories/type-factory.js +33 -33
  23. package/dist/es2015/factory.js +1 -1
  24. package/dist/es2015/functions/get-own-reflect-metadata.js +7 -7
  25. package/dist/es2015/functions/get-reflect-metadata.js +7 -7
  26. package/dist/es2015/functions/get-words.js +4 -4
  27. package/dist/es2015/functions/index.js +18 -18
  28. package/dist/es2015/functions/is-arrow-function.js +4 -4
  29. package/dist/es2015/functions/is-ctor-function.js +4 -4
  30. package/dist/es2015/functions/is-data-view.js +3 -3
  31. package/dist/es2015/functions/is-float-32-array.js +3 -3
  32. package/dist/es2015/functions/is-float-64-array.js +3 -3
  33. package/dist/es2015/functions/is-int-16-array.js +3 -3
  34. package/dist/es2015/functions/is-int-32-array.js +3 -3
  35. package/dist/es2015/functions/is-int-8-array.js +3 -3
  36. package/dist/es2015/functions/is-uint-16-array.js +3 -3
  37. package/dist/es2015/functions/is-uint-32-array.js +3 -3
  38. package/dist/es2015/functions/is-uint-8-array.js +3 -3
  39. package/dist/es2015/functions/is-uint-8-clamped-array.js +3 -3
  40. package/dist/es2015/functions/json-parse.js +3 -3
  41. package/dist/es2015/functions/json-stringify.js +66 -66
  42. package/dist/es2015/functions/name-of.js +7 -7
  43. package/dist/es2015/generic-argument.js +1 -1
  44. package/dist/es2015/generic-metadata-resolver.js +1 -1
  45. package/dist/es2015/generic-metadata.js +1 -1
  46. package/dist/es2015/generic-structure.js +1 -1
  47. package/dist/es2015/index.js +70 -66
  48. package/dist/es2015/index.js.map +1 -1
  49. package/dist/es2015/inject-index.js +1 -1
  50. package/dist/es2015/inject-internals.js +1 -1
  51. package/dist/es2015/inject-metadata.js +62 -62
  52. package/dist/es2015/inject-metadata.js.map +1 -1
  53. package/dist/es2015/inject-options.js +1 -1
  54. package/dist/es2015/inject-sorter.js +1 -1
  55. package/dist/es2015/inject-sorters/asc-inject-sorter.js +13 -13
  56. package/dist/es2015/inject-sorters/desc-inject-sorter.js +13 -13
  57. package/dist/es2015/inject-sorters/index.js +2 -2
  58. package/dist/es2015/inject.js +23 -23
  59. package/dist/es2015/injector.js +1 -1
  60. package/dist/es2015/injectors/index.js +1 -1
  61. package/dist/es2015/injectors/singleton-injector.js +30 -30
  62. package/dist/es2015/log-level.js +7 -7
  63. package/dist/es2015/log.js +49 -49
  64. package/dist/es2015/metadata.js +80 -80
  65. package/dist/es2015/metadata.js.map +1 -1
  66. package/dist/es2015/naming-convention.js +1 -1
  67. package/dist/es2015/naming-conventions/camel-case-naming-convention.js +16 -16
  68. package/dist/es2015/naming-conventions/flat-case-naming-convention.js +12 -12
  69. package/dist/es2015/naming-conventions/flat-upper-case-naming-convention.js +12 -12
  70. package/dist/es2015/naming-conventions/index.js +8 -8
  71. package/dist/es2015/naming-conventions/kebab-case-naming-convention.js +16 -16
  72. package/dist/es2015/naming-conventions/kebab-upper-case-naming-convention.js +16 -16
  73. package/dist/es2015/naming-conventions/pascal-case-naming-convention.js +17 -17
  74. package/dist/es2015/naming-conventions/snake-case-naming-convention.js +16 -16
  75. package/dist/es2015/naming-conventions/snake-upper-case-naming-convention.js +16 -16
  76. package/dist/es2015/property-internals.js +1 -1
  77. package/dist/es2015/property-metadata.js +268 -258
  78. package/dist/es2015/property-metadata.js.map +1 -1
  79. package/dist/es2015/property-name.js +1 -1
  80. package/dist/es2015/property-options.js +1 -1
  81. package/dist/es2015/property-sorter.js +1 -1
  82. package/dist/es2015/property-sorters/asc-property-sorter.js +13 -13
  83. package/dist/es2015/property-sorters/desc-property-sorter.js +13 -13
  84. package/dist/es2015/property-sorters/index.js +2 -2
  85. package/dist/es2015/property.js +38 -38
  86. package/dist/es2015/reference-callback.js +1 -1
  87. package/dist/es2015/reference-handler.js +1 -1
  88. package/dist/es2015/reference-handlers/circular-reference-handler.js +35 -35
  89. package/dist/es2015/reference-handlers/index.js +3 -3
  90. package/dist/es2015/reference-handlers/json-path-reference-handler.js +68 -68
  91. package/dist/es2015/reference-handlers/plain-reference-handler.js +31 -31
  92. package/dist/es2015/reference-key.js +1 -1
  93. package/dist/es2015/reference-value-getter.js +1 -1
  94. package/dist/es2015/reference-value-setter.js +1 -1
  95. package/dist/es2015/reference-value.js +1 -1
  96. package/dist/es2015/serializer-context-options.js +1 -1
  97. package/dist/es2015/serializer-context.js +281 -294
  98. package/dist/es2015/serializer-context.js.map +1 -1
  99. package/dist/es2015/serializer.js +1 -1
  100. package/dist/es2015/serializers/any-serializer.js +21 -21
  101. package/dist/es2015/serializers/array-buffer-serializer.js +40 -40
  102. package/dist/es2015/serializers/array-serializer.js +59 -59
  103. package/dist/es2015/serializers/boolean-serializer.js +54 -54
  104. package/dist/es2015/serializers/data-view-serializer.js +41 -41
  105. package/dist/es2015/serializers/date-serializer.js +33 -33
  106. package/dist/es2015/serializers/float-32-array-serializer.js +34 -34
  107. package/dist/es2015/serializers/float-64-array-serializer.js +34 -34
  108. package/dist/es2015/serializers/index.js +21 -21
  109. package/dist/es2015/serializers/int-16-array-serializer.js +34 -34
  110. package/dist/es2015/serializers/int-32-array-serializer.js +34 -34
  111. package/dist/es2015/serializers/int-8-array-serializer.js +34 -34
  112. package/dist/es2015/serializers/map-serializer.js +95 -95
  113. package/dist/es2015/serializers/number-serializer.js +48 -48
  114. package/dist/es2015/serializers/set-serializer.js +61 -61
  115. package/dist/es2015/serializers/string-serializer.js +54 -54
  116. package/dist/es2015/serializers/type-serializer.js +120 -120
  117. package/dist/es2015/serializers/uint-16-array-serializer.js +34 -34
  118. package/dist/es2015/serializers/uint-32-array-serializer.js +34 -34
  119. package/dist/es2015/serializers/uint-8-array-serializer.js +34 -34
  120. package/dist/es2015/serializers/uint-8-clamped-array-serializer.js +34 -34
  121. package/dist/es2015/serializers/unknown-serializer.js +21 -21
  122. package/dist/es2015/type-abstraction.js +1 -1
  123. package/dist/es2015/type-argument.js +1 -1
  124. package/dist/es2015/type-configuration.js +1 -1
  125. package/dist/es2015/type-context-entry.js +8 -8
  126. package/dist/es2015/type-context.js +30 -24
  127. package/dist/es2015/type-context.js.map +1 -1
  128. package/dist/es2015/type-ctor.js +1 -1
  129. package/dist/es2015/type-fn.js +1 -1
  130. package/dist/es2015/type-internals.js +2 -0
  131. package/dist/es2015/type-internals.js.map +1 -0
  132. package/dist/es2015/type-like.js +1 -1
  133. package/dist/es2015/type-manager-options.js +1 -1
  134. package/dist/es2015/type-manager.js +319 -313
  135. package/dist/es2015/type-manager.js.map +1 -1
  136. package/dist/es2015/type-metadata-resolver.js +1 -1
  137. package/dist/es2015/type-metadata-symbol.js +1 -1
  138. package/dist/es2015/type-metadata.js +413 -398
  139. package/dist/es2015/type-metadata.js.map +1 -1
  140. package/dist/es2015/type-name.js +1 -1
  141. package/dist/es2015/type-options-base.js +1 -1
  142. package/dist/es2015/type-options.js +1 -1
  143. package/dist/es2015/type-resolver.js +1 -1
  144. package/dist/es2015/type.js +7 -7
  145. package/dist/es2015/unknown.js +2 -2
  146. package/dist/es5/alias.js +1 -1
  147. package/dist/es5/any.js +6 -6
  148. package/dist/es5/custom-context.js +94 -0
  149. package/dist/es5/custom-context.js.map +1 -0
  150. package/dist/es5/custom-key.js +10 -0
  151. package/dist/es5/custom-key.js.map +1 -0
  152. package/dist/es5/custom-option.js +2 -0
  153. package/dist/es5/custom-option.js.map +1 -0
  154. package/dist/es5/custom-value-resolver.js +2 -0
  155. package/dist/es5/custom-value-resolver.js.map +1 -0
  156. package/dist/es5/custom-value.js +2 -0
  157. package/dist/es5/custom-value.js.map +1 -0
  158. package/dist/es5/default-value-resolver.js +1 -1
  159. package/dist/es5/default-value.js +1 -1
  160. package/dist/es5/discriminant.js +1 -1
  161. package/dist/es5/discriminator.js +1 -1
  162. package/dist/es5/factories/index.js +1 -1
  163. package/dist/es5/factories/type-factory.js +59 -59
  164. package/dist/es5/factory.js +1 -1
  165. package/dist/es5/functions/get-own-reflect-metadata.js +7 -7
  166. package/dist/es5/functions/get-reflect-metadata.js +7 -7
  167. package/dist/es5/functions/get-words.js +4 -4
  168. package/dist/es5/functions/index.js +18 -18
  169. package/dist/es5/functions/is-arrow-function.js +4 -4
  170. package/dist/es5/functions/is-ctor-function.js +4 -4
  171. package/dist/es5/functions/is-data-view.js +3 -3
  172. package/dist/es5/functions/is-float-32-array.js +3 -3
  173. package/dist/es5/functions/is-float-64-array.js +3 -3
  174. package/dist/es5/functions/is-int-16-array.js +3 -3
  175. package/dist/es5/functions/is-int-32-array.js +3 -3
  176. package/dist/es5/functions/is-int-8-array.js +3 -3
  177. package/dist/es5/functions/is-uint-16-array.js +3 -3
  178. package/dist/es5/functions/is-uint-32-array.js +3 -3
  179. package/dist/es5/functions/is-uint-8-array.js +3 -3
  180. package/dist/es5/functions/is-uint-8-clamped-array.js +3 -3
  181. package/dist/es5/functions/json-parse.js +3 -3
  182. package/dist/es5/functions/json-stringify.js +66 -66
  183. package/dist/es5/functions/name-of.js +7 -7
  184. package/dist/es5/generic-argument.js +1 -1
  185. package/dist/es5/generic-metadata-resolver.js +1 -1
  186. package/dist/es5/generic-metadata.js +1 -1
  187. package/dist/es5/generic-structure.js +1 -1
  188. package/dist/es5/index.js +70 -66
  189. package/dist/es5/index.js.map +1 -1
  190. package/dist/es5/inject-index.js +1 -1
  191. package/dist/es5/inject-internals.js +1 -1
  192. package/dist/es5/inject-metadata.js +83 -83
  193. package/dist/es5/inject-metadata.js.map +1 -1
  194. package/dist/es5/inject-options.js +1 -1
  195. package/dist/es5/inject-sorter.js +1 -1
  196. package/dist/es5/inject-sorters/asc-inject-sorter.js +17 -17
  197. package/dist/es5/inject-sorters/desc-inject-sorter.js +17 -17
  198. package/dist/es5/inject-sorters/index.js +2 -2
  199. package/dist/es5/inject.js +23 -23
  200. package/dist/es5/injector.js +1 -1
  201. package/dist/es5/injectors/index.js +1 -1
  202. package/dist/es5/injectors/singleton-injector.js +44 -44
  203. package/dist/es5/log-level.js +7 -7
  204. package/dist/es5/log.js +64 -64
  205. package/dist/es5/metadata.js +105 -105
  206. package/dist/es5/metadata.js.map +1 -1
  207. package/dist/es5/naming-convention.js +1 -1
  208. package/dist/es5/naming-conventions/camel-case-naming-convention.js +20 -20
  209. package/dist/es5/naming-conventions/flat-case-naming-convention.js +16 -16
  210. package/dist/es5/naming-conventions/flat-upper-case-naming-convention.js +16 -16
  211. package/dist/es5/naming-conventions/index.js +8 -8
  212. package/dist/es5/naming-conventions/kebab-case-naming-convention.js +20 -20
  213. package/dist/es5/naming-conventions/kebab-upper-case-naming-convention.js +20 -20
  214. package/dist/es5/naming-conventions/pascal-case-naming-convention.js +21 -21
  215. package/dist/es5/naming-conventions/snake-case-naming-convention.js +20 -20
  216. package/dist/es5/naming-conventions/snake-upper-case-naming-convention.js +20 -20
  217. package/dist/es5/property-internals.js +1 -1
  218. package/dist/es5/property-metadata.js +377 -363
  219. package/dist/es5/property-metadata.js.map +1 -1
  220. package/dist/es5/property-name.js +1 -1
  221. package/dist/es5/property-options.js +1 -1
  222. package/dist/es5/property-sorter.js +1 -1
  223. package/dist/es5/property-sorters/asc-property-sorter.js +17 -17
  224. package/dist/es5/property-sorters/desc-property-sorter.js +17 -17
  225. package/dist/es5/property-sorters/index.js +2 -2
  226. package/dist/es5/property.js +38 -38
  227. package/dist/es5/reference-callback.js +1 -1
  228. package/dist/es5/reference-handler.js +1 -1
  229. package/dist/es5/reference-handlers/circular-reference-handler.js +39 -39
  230. package/dist/es5/reference-handlers/index.js +3 -3
  231. package/dist/es5/reference-handlers/json-path-reference-handler.js +92 -92
  232. package/dist/es5/reference-handlers/plain-reference-handler.js +35 -35
  233. package/dist/es5/reference-key.js +1 -1
  234. package/dist/es5/reference-value-getter.js +1 -1
  235. package/dist/es5/reference-value-setter.js +1 -1
  236. package/dist/es5/reference-value.js +1 -1
  237. package/dist/es5/serializer-context-options.js +1 -1
  238. package/dist/es5/serializer-context.js +416 -433
  239. package/dist/es5/serializer-context.js.map +1 -1
  240. package/dist/es5/serializer.js +1 -1
  241. package/dist/es5/serializers/any-serializer.js +25 -25
  242. package/dist/es5/serializers/array-buffer-serializer.js +44 -44
  243. package/dist/es5/serializers/array-serializer.js +69 -69
  244. package/dist/es5/serializers/boolean-serializer.js +58 -58
  245. package/dist/es5/serializers/data-view-serializer.js +45 -45
  246. package/dist/es5/serializers/date-serializer.js +37 -37
  247. package/dist/es5/serializers/float-32-array-serializer.js +38 -38
  248. package/dist/es5/serializers/float-64-array-serializer.js +38 -38
  249. package/dist/es5/serializers/index.js +21 -21
  250. package/dist/es5/serializers/int-16-array-serializer.js +38 -38
  251. package/dist/es5/serializers/int-32-array-serializer.js +38 -38
  252. package/dist/es5/serializers/int-8-array-serializer.js +38 -38
  253. package/dist/es5/serializers/map-serializer.js +114 -114
  254. package/dist/es5/serializers/number-serializer.js +52 -52
  255. package/dist/es5/serializers/set-serializer.js +77 -77
  256. package/dist/es5/serializers/string-serializer.js +58 -58
  257. package/dist/es5/serializers/type-serializer.js +153 -153
  258. package/dist/es5/serializers/uint-16-array-serializer.js +38 -38
  259. package/dist/es5/serializers/uint-32-array-serializer.js +38 -38
  260. package/dist/es5/serializers/uint-8-array-serializer.js +38 -38
  261. package/dist/es5/serializers/uint-8-clamped-array-serializer.js +38 -38
  262. package/dist/es5/serializers/unknown-serializer.js +25 -25
  263. package/dist/es5/type-abstraction.js +1 -1
  264. package/dist/es5/type-argument.js +1 -1
  265. package/dist/es5/type-configuration.js +1 -1
  266. package/dist/es5/type-context-entry.js +10 -10
  267. package/dist/es5/type-context.js +32 -26
  268. package/dist/es5/type-context.js.map +1 -1
  269. package/dist/es5/type-ctor.js +1 -1
  270. package/dist/es5/type-fn.js +1 -1
  271. package/dist/es5/type-internals.js +2 -0
  272. package/dist/es5/type-internals.js.map +1 -0
  273. package/dist/es5/type-like.js +1 -1
  274. package/dist/es5/type-manager-options.js +1 -1
  275. package/dist/es5/type-manager.js +412 -406
  276. package/dist/es5/type-manager.js.map +1 -1
  277. package/dist/es5/type-metadata-resolver.js +1 -1
  278. package/dist/es5/type-metadata-symbol.js +1 -1
  279. package/dist/es5/type-metadata.js +563 -544
  280. package/dist/es5/type-metadata.js.map +1 -1
  281. package/dist/es5/type-name.js +1 -1
  282. package/dist/es5/type-options-base.js +1 -1
  283. package/dist/es5/type-options.js +1 -1
  284. package/dist/es5/type-resolver.js +1 -1
  285. package/dist/es5/type.js +7 -7
  286. package/dist/es5/unknown.js +6 -6
  287. package/dist/types/alias.d.ts +6 -6
  288. package/dist/types/any.d.ts +9 -9
  289. package/dist/types/custom-context.d.ts +89 -0
  290. package/dist/types/custom-context.d.ts.map +1 -0
  291. package/dist/types/custom-key.d.ts +29 -0
  292. package/dist/types/custom-key.d.ts.map +1 -0
  293. package/dist/types/custom-option.d.ts +11 -0
  294. package/dist/types/custom-option.d.ts.map +1 -0
  295. package/dist/types/custom-value-resolver.d.ts +7 -0
  296. package/dist/types/custom-value-resolver.d.ts.map +1 -0
  297. package/dist/types/custom-value.d.ts +7 -0
  298. package/dist/types/custom-value.d.ts.map +1 -0
  299. package/dist/types/default-value-resolver.d.ts +7 -7
  300. package/dist/types/default-value.d.ts +7 -7
  301. package/dist/types/discriminant.d.ts +8 -8
  302. package/dist/types/discriminator.d.ts +6 -6
  303. package/dist/types/factories/index.d.ts +1 -1
  304. package/dist/types/factories/type-factory.d.ts +19 -19
  305. package/dist/types/factory.d.ts +18 -18
  306. package/dist/types/functions/get-own-reflect-metadata.d.ts +9 -9
  307. package/dist/types/functions/get-reflect-metadata.d.ts +10 -10
  308. package/dist/types/functions/get-words.d.ts +8 -8
  309. package/dist/types/functions/index.d.ts +18 -18
  310. package/dist/types/functions/is-arrow-function.d.ts +8 -8
  311. package/dist/types/functions/is-ctor-function.d.ts +8 -8
  312. package/dist/types/functions/is-data-view.d.ts +8 -8
  313. package/dist/types/functions/is-float-32-array.d.ts +8 -8
  314. package/dist/types/functions/is-float-64-array.d.ts +8 -8
  315. package/dist/types/functions/is-int-16-array.d.ts +8 -8
  316. package/dist/types/functions/is-int-32-array.d.ts +8 -8
  317. package/dist/types/functions/is-int-8-array.d.ts +8 -8
  318. package/dist/types/functions/is-uint-16-array.d.ts +8 -8
  319. package/dist/types/functions/is-uint-32-array.d.ts +8 -8
  320. package/dist/types/functions/is-uint-8-array.d.ts +8 -8
  321. package/dist/types/functions/is-uint-8-clamped-array.d.ts +8 -8
  322. package/dist/types/functions/json-parse.d.ts +9 -9
  323. package/dist/types/functions/json-stringify.d.ts +10 -10
  324. package/dist/types/functions/name-of.d.ts +8 -8
  325. package/dist/types/generic-argument.d.ts +7 -7
  326. package/dist/types/generic-metadata-resolver.d.ts +7 -7
  327. package/dist/types/generic-metadata.d.ts +7 -7
  328. package/dist/types/generic-structure.d.ts +7 -7
  329. package/dist/types/index.d.ts +70 -66
  330. package/dist/types/index.d.ts.map +1 -1
  331. package/dist/types/inject-index.d.ts +6 -6
  332. package/dist/types/inject-internals.d.ts +14 -14
  333. package/dist/types/inject-internals.d.ts.map +1 -1
  334. package/dist/types/inject-metadata.d.ts +117 -117
  335. package/dist/types/inject-metadata.d.ts.map +1 -1
  336. package/dist/types/inject-options.d.ts +22 -22
  337. package/dist/types/inject-sorter.d.ts +19 -19
  338. package/dist/types/inject-sorters/asc-inject-sorter.d.ts +20 -20
  339. package/dist/types/inject-sorters/desc-inject-sorter.d.ts +20 -20
  340. package/dist/types/inject-sorters/index.d.ts +2 -2
  341. package/dist/types/inject.d.ts +10 -10
  342. package/dist/types/injector.d.ts +16 -16
  343. package/dist/types/injectors/index.d.ts +1 -1
  344. package/dist/types/injectors/singleton-injector.d.ts +31 -31
  345. package/dist/types/log-level.d.ts +11 -11
  346. package/dist/types/log.d.ts +95 -95
  347. package/dist/types/metadata.d.ts +99 -100
  348. package/dist/types/metadata.d.ts.map +1 -1
  349. package/dist/types/naming-convention.d.ts +15 -15
  350. package/dist/types/naming-conventions/camel-case-naming-convention.d.ts +26 -26
  351. package/dist/types/naming-conventions/flat-case-naming-convention.d.ts +25 -25
  352. package/dist/types/naming-conventions/flat-upper-case-naming-convention.d.ts +25 -25
  353. package/dist/types/naming-conventions/index.d.ts +8 -8
  354. package/dist/types/naming-conventions/kebab-case-naming-convention.d.ts +26 -26
  355. package/dist/types/naming-conventions/kebab-upper-case-naming-convention.d.ts +26 -26
  356. package/dist/types/naming-conventions/pascal-case-naming-convention.d.ts +26 -26
  357. package/dist/types/naming-conventions/snake-case-naming-convention.d.ts +26 -26
  358. package/dist/types/naming-conventions/snake-upper-case-naming-convention.d.ts +26 -26
  359. package/dist/types/property-internals.d.ts +35 -28
  360. package/dist/types/property-internals.d.ts.map +1 -1
  361. package/dist/types/property-metadata.d.ts +359 -352
  362. package/dist/types/property-metadata.d.ts.map +1 -1
  363. package/dist/types/property-name.d.ts +6 -6
  364. package/dist/types/property-options.d.ts +116 -116
  365. package/dist/types/property-options.d.ts.map +1 -1
  366. package/dist/types/property-sorter.d.ts +19 -19
  367. package/dist/types/property-sorters/asc-property-sorter.d.ts +20 -20
  368. package/dist/types/property-sorters/desc-property-sorter.d.ts +20 -20
  369. package/dist/types/property-sorters/index.d.ts +2 -2
  370. package/dist/types/property.d.ts +13 -13
  371. package/dist/types/reference-callback.d.ts +7 -7
  372. package/dist/types/reference-handler.d.ts +31 -31
  373. package/dist/types/reference-handlers/circular-reference-handler.d.ts +32 -32
  374. package/dist/types/reference-handlers/index.d.ts +3 -3
  375. package/dist/types/reference-handlers/json-path-reference-handler.d.ts +55 -55
  376. package/dist/types/reference-handlers/plain-reference-handler.d.ts +33 -33
  377. package/dist/types/reference-key.d.ts +6 -6
  378. package/dist/types/reference-value-getter.d.ts +7 -7
  379. package/dist/types/reference-value-setter.d.ts +7 -7
  380. package/dist/types/reference-value.d.ts +6 -6
  381. package/dist/types/serializer-context-options.d.ts +50 -50
  382. package/dist/types/serializer-context.d.ts +418 -425
  383. package/dist/types/serializer-context.d.ts.map +1 -1
  384. package/dist/types/serializer.d.ts +27 -27
  385. package/dist/types/serializers/any-serializer.d.ts +28 -28
  386. package/dist/types/serializers/array-buffer-serializer.d.ts +28 -28
  387. package/dist/types/serializers/array-serializer.d.ts +28 -28
  388. package/dist/types/serializers/boolean-serializer.d.ts +37 -37
  389. package/dist/types/serializers/data-view-serializer.d.ts +28 -28
  390. package/dist/types/serializers/date-serializer.d.ts +28 -28
  391. package/dist/types/serializers/float-32-array-serializer.d.ts +28 -28
  392. package/dist/types/serializers/float-64-array-serializer.d.ts +28 -28
  393. package/dist/types/serializers/index.d.ts +21 -21
  394. package/dist/types/serializers/int-16-array-serializer.d.ts +28 -28
  395. package/dist/types/serializers/int-32-array-serializer.d.ts +28 -28
  396. package/dist/types/serializers/int-8-array-serializer.d.ts +28 -28
  397. package/dist/types/serializers/map-serializer.d.ts +28 -28
  398. package/dist/types/serializers/number-serializer.d.ts +37 -37
  399. package/dist/types/serializers/set-serializer.d.ts +28 -28
  400. package/dist/types/serializers/string-serializer.d.ts +37 -37
  401. package/dist/types/serializers/type-serializer.d.ts +28 -28
  402. package/dist/types/serializers/uint-16-array-serializer.d.ts +28 -28
  403. package/dist/types/serializers/uint-32-array-serializer.d.ts +28 -28
  404. package/dist/types/serializers/uint-8-array-serializer.d.ts +28 -28
  405. package/dist/types/serializers/uint-8-clamped-array-serializer.d.ts +28 -28
  406. package/dist/types/serializers/unknown-serializer.d.ts +28 -28
  407. package/dist/types/type-abstraction.d.ts +6 -6
  408. package/dist/types/type-argument.d.ts +9 -9
  409. package/dist/types/type-configuration.d.ts +16 -16
  410. package/dist/types/type-context-entry.d.ts +36 -36
  411. package/dist/types/type-context.d.ts +70 -58
  412. package/dist/types/type-context.d.ts.map +1 -1
  413. package/dist/types/type-ctor.d.ts +6 -6
  414. package/dist/types/type-fn.d.ts +8 -8
  415. package/dist/types/type-internals.d.ts +15 -0
  416. package/dist/types/type-internals.d.ts.map +1 -0
  417. package/dist/types/type-like.d.ts +7 -7
  418. package/dist/types/type-manager-options.d.ts +33 -33
  419. package/dist/types/type-manager.d.ts +413 -397
  420. package/dist/types/type-manager.d.ts.map +1 -1
  421. package/dist/types/type-metadata-resolver.d.ts +8 -8
  422. package/dist/types/type-metadata-symbol.d.ts +6 -6
  423. package/dist/types/type-metadata.d.ts +513 -495
  424. package/dist/types/type-metadata.d.ts.map +1 -1
  425. package/dist/types/type-name.d.ts +6 -6
  426. package/dist/types/type-options-base.d.ts +106 -106
  427. package/dist/types/type-options-base.d.ts.map +1 -1
  428. package/dist/types/type-options.d.ts +72 -72
  429. package/dist/types/type-resolver.d.ts +7 -7
  430. package/dist/types/type.d.ts +9 -9
  431. package/dist/types/unknown.d.ts +9 -9
  432. package/dist/umd/index.js +1 -1
  433. package/dist/umd/index.js.map +1 -1
  434. package/package.json +63 -63
  435. package/dist/es2015/custom-data.js +0 -2
  436. package/dist/es2015/custom-data.js.map +0 -1
  437. package/dist/es2015/type-metadata-extractor.js +0 -2
  438. package/dist/es2015/type-metadata-extractor.js.map +0 -1
  439. package/dist/es5/custom-data.js +0 -2
  440. package/dist/es5/custom-data.js.map +0 -1
  441. package/dist/es5/type-metadata-extractor.js +0 -2
  442. package/dist/es5/type-metadata-extractor.js.map +0 -1
  443. package/dist/types/custom-data.d.ts +0 -7
  444. package/dist/types/custom-data.d.ts.map +0 -1
  445. package/dist/types/type-metadata-extractor.d.ts +0 -9
  446. package/dist/types/type-metadata-extractor.d.ts.map +0 -1
@@ -1,295 +1,282 @@
1
- import { isNil, isNumber, isUndefined, merge } from 'lodash';
2
- import { isCtorFunction } from './functions/is-ctor-function';
3
- import { Metadata } from './metadata';
4
- export class SerializerContext extends Metadata {
5
- constructor($, referenceMap, referenceCallbackMap, serializerContextOptions, parentSerializerContext) {
6
- super(serializerContextOptions.typeMetadata.typeMetadataExtractor, serializerContextOptions.typeMetadata.typeFnMap);
7
- this.$ = $;
8
- this.referenceMap = referenceMap,
9
- this.referenceCallbackMap = referenceCallbackMap;
10
- this.serializerContextOptions = serializerContextOptions;
11
- this.parentSerializerContext = parentSerializerContext;
12
- return;
13
- }
14
- get jsonPathKey() {
15
- return this.serializerContextOptions.jsonPathKey;
16
- }
17
- get referenceValueSetter() {
18
- return this.serializerContextOptions.referenceValueSetter;
19
- }
20
- get customData() {
21
- var _a;
22
- const customData = {};
23
- const typeCustomData = this.typeMetadata.customData;
24
- const propertyCustomData = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.customData;
25
- if (!isNil(typeCustomData)) {
26
- merge(customData, typeCustomData);
27
- }
28
- if (!isNil(propertyCustomData)) {
29
- merge(customData, propertyCustomData);
30
- }
31
- return customData;
32
- }
33
- get serializedNullValue() {
34
- if (this.preserveNull) {
35
- return null;
36
- }
37
- return this.serializedDefaultValue;
38
- }
39
- get serializedDefaultValue() {
40
- var _a, _b;
41
- if (this.useDefaultValue) {
42
- return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.serializedDefaultValue) !== null && _b !== void 0 ? _b : this.typeMetadata.serializedDefaultValue;
43
- }
44
- return undefined;
45
- }
46
- get deserializedNullValue() {
47
- if (this.preserveNull) {
48
- return null;
49
- }
50
- return this.deserializedDefaultValue;
51
- }
52
- get deserializedDefaultValue() {
53
- var _a, _b;
54
- if (this.useDefaultValue) {
55
- return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.deserializedDefaultValue) !== null && _b !== void 0 ? _b : this.typeMetadata.deserializedDefaultValue;
56
- }
57
- return undefined;
58
- }
59
- get jsonPath() {
60
- const jsonPathKey = this.jsonPathKey;
61
- const parentSerializerContext = this.parentSerializerContext;
62
- if (isNil(parentSerializerContext)) {
63
- return jsonPathKey;
64
- }
65
- if (isNumber(jsonPathKey)) {
66
- return `${parentSerializerContext.jsonPath}[${jsonPathKey}]`;
67
- }
68
- return `${parentSerializerContext.jsonPath}['${jsonPathKey}']`;
69
- }
70
- get discriminant() {
71
- return this.typeMetadata.discriminant;
72
- }
73
- get discriminantMap() {
74
- return this.typeMetadata.discriminantMap;
75
- }
76
- get discriminator() {
77
- return this.typeMetadata.discriminator;
78
- }
79
- get factory() {
80
- return this.typeMetadata.factory;
81
- }
82
- get genericStructures() {
83
- return this.serializerContextOptions.genericStructures;
84
- }
85
- get genericMetadataResolvers() {
86
- return this.serializerContextOptions.genericMetadataResolvers;
87
- }
88
- get genericMetadatas() {
89
- const genericStructures = this.genericStructures;
90
- const genericMetadataResolvers = this.genericMetadataResolvers;
91
- if (isNil(genericStructures) || isNil(genericMetadataResolvers)) {
92
- return undefined;
93
- }
94
- return this.defineGenericMetadatas(genericStructures, genericMetadataResolvers);
95
- }
96
- get injector() {
97
- return this.typeMetadata.injector;
98
- }
99
- get log() {
100
- return this.typeMetadata.log;
101
- }
102
- get name() {
103
- if (isNil(this.propertyMetadata)) {
104
- return this.typeMetadata.typeName;
105
- }
106
- return `${this.propertyMetadata.declaringTypeMetadata.typeName}.${this.propertyMetadata.propertyName}`;
107
- }
108
- get namingConvention() {
109
- var _a, _b;
110
- return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.namingConvention) !== null && _b !== void 0 ? _b : this.typeMetadata.namingConvention;
111
- }
112
- get polymorphic() {
113
- return this.typeMetadata.polymorphic;
114
- }
115
- get propertyMetadata() {
116
- return this.serializerContextOptions.propertyMetadata;
117
- }
118
- get preserveDiscriminator() {
119
- return this.typeMetadata.preserveDiscriminator;
120
- }
121
- get referenceHandler() {
122
- var _a, _b;
123
- return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.referenceHandler) !== null && _b !== void 0 ? _b : this.typeMetadata.referenceHandler;
124
- }
125
- get serializer() {
126
- var _a, _b;
127
- return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.serializer) !== null && _b !== void 0 ? _b : this.typeMetadata.serializer;
128
- }
129
- get typeMetadata() {
130
- return this.serializerContextOptions.typeMetadata;
131
- }
132
- get preserveNull() {
133
- var _a, _b;
134
- return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.preserveNull) !== null && _b !== void 0 ? _b : this.typeMetadata.preserveNull;
135
- }
136
- get useDefaultValue() {
137
- var _a, _b;
138
- return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.useDefaultValue) !== null && _b !== void 0 ? _b : this.typeMetadata.useDefaultValue;
139
- }
140
- get useImplicitConversion() {
141
- var _a, _b;
142
- return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.useImplicitConversion) !== null && _b !== void 0 ? _b : this.typeMetadata.useImplicitConversion;
143
- }
144
- serialize(x) {
145
- return this.serializer.serialize(x, this);
146
- }
147
- deserialize(x) {
148
- return this.serializer.deserialize(x, this);
149
- }
150
- defineReference(referenceKey, referenceValueGetter) {
151
- return this.referenceHandler.define(this, referenceKey, referenceValueGetter);
152
- }
153
- restoreReference(referenceKey, referenceValueGetter) {
154
- return this.referenceHandler.restore(this, referenceKey, referenceValueGetter);
155
- }
156
- registerReferenceCallback(referenceKey) {
157
- const referenceValueSetter = this.referenceValueSetter;
158
- if (isNil(referenceValueSetter)) {
159
- return;
160
- }
161
- this.pushReferenceCallback(referenceKey, () => {
162
- const referenceValue = this.referenceMap.get(referenceKey);
163
- referenceValueSetter(referenceValue);
164
- });
165
- return;
166
- }
167
- pushReferenceCallback(referenceKey, referenceCallback) {
168
- let referenceCallbacks = this.referenceCallbackMap.get(referenceKey);
169
- if (isNil(referenceCallbacks)) {
170
- referenceCallbacks = [];
171
- this.referenceCallbackMap.set(referenceKey, referenceCallbacks);
172
- }
173
- referenceCallbacks.push(referenceCallback);
174
- return;
175
- }
176
- resolveReferenceCallbacks(referenceKey) {
177
- const referenceCallbacks = this.referenceCallbackMap.get(referenceKey);
178
- if (isNil(referenceCallbacks)) {
179
- return;
180
- }
181
- for (const referenceCallback of referenceCallbacks) {
182
- referenceCallback();
183
- }
184
- return;
185
- }
186
- defineSerializerContextOptions(serializerContextOptions) {
187
- var _a, _b, _c, _d, _e, _f;
188
- return {
189
- jsonPathKey: (_a = serializerContextOptions.jsonPathKey) !== null && _a !== void 0 ? _a : this.serializerContextOptions.jsonPathKey,
190
- typeMetadata: (_b = serializerContextOptions.typeMetadata) !== null && _b !== void 0 ? _b : this.serializerContextOptions.typeMetadata,
191
- genericStructures: (_c = serializerContextOptions.genericStructures) !== null && _c !== void 0 ? _c : this.serializerContextOptions.genericStructures,
192
- genericMetadataResolvers: (_d = serializerContextOptions.genericMetadataResolvers) !== null && _d !== void 0 ? _d : this.serializerContextOptions.genericMetadataResolvers,
193
- propertyMetadata: (_e = serializerContextOptions.propertyMetadata) !== null && _e !== void 0 ? _e : this.serializerContextOptions.propertyMetadata,
194
- referenceValueSetter: (_f = serializerContextOptions.referenceValueSetter) !== null && _f !== void 0 ? _f : this.serializerContextOptions.referenceValueSetter
195
- };
196
- }
197
- defineChildSerializerContext(childSerializerContextOptions) {
198
- const parentSerializerContext = isNil(childSerializerContextOptions.jsonPathKey) ? this.parentSerializerContext : this;
199
- const serializerContextOptions = this.defineSerializerContextOptions(childSerializerContextOptions);
200
- return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, serializerContextOptions, parentSerializerContext);
201
- }
202
- defineGenericSerializerContext(genericIndex) {
203
- const genericStructures = this.genericStructures;
204
- const genericMetadataResolvers = this.genericMetadataResolvers;
205
- if (isNil(genericStructures) || isNil(genericMetadataResolvers)) {
206
- throw new Error(`${this.jsonPath}: cannot define generic arguments. This is usually caused by invalid configuration.`);
207
- }
208
- const genericStructure = genericStructures[genericIndex];
209
- const genericMetadataResolver = genericMetadataResolvers[genericIndex];
210
- if (isNil(genericStructure) || isNil(genericMetadataResolver)) {
211
- throw new Error(`${this.jsonPath}: cannot define generic argument for index ${genericIndex}. This is usually caused by invalid configuration.`);
212
- }
213
- const genericTypeArgument = genericStructure[0];
214
- const genericGenericStructures = genericStructure[1];
215
- const genericTypeMetadataResolver = genericMetadataResolver[0];
216
- const genericGenericMetadataResolvers = genericMetadataResolver[1];
217
- const typeMetadata = genericTypeMetadataResolver(genericTypeArgument);
218
- const serializerContextOptions = this.defineSerializerContextOptions(this.serializerContextOptions);
219
- serializerContextOptions.typeMetadata = typeMetadata;
220
- serializerContextOptions.genericStructures = genericGenericStructures;
221
- serializerContextOptions.genericMetadataResolvers = genericGenericMetadataResolvers;
222
- serializerContextOptions.propertyMetadata = undefined;
223
- return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, serializerContextOptions, this.parentSerializerContext);
224
- }
225
- definePolymorphicSerializerContext(x) {
226
- return isCtorFunction(x) ? this.definePolymorphicSerializerContextByTypeFn(x) : this.definePolymorphicSerializerContextByDiscriminant(x);
227
- }
228
- definePolymorphicSerializerContextByTypeFn(typeFn) {
229
- const discriminant = this.discriminantMap.get(typeFn);
230
- if (isNil(discriminant)) {
231
- throw new Error(`${this.jsonPath}: cannot define discriminant of polymorphic type. This is usually caused by invalid configuration.`);
232
- }
233
- const typeMetadata = this.typeMetadataExtractor(typeFn);
234
- const serializerContextOptions = this.defineSerializerContextOptions(this.serializerContextOptions);
235
- serializerContextOptions.typeMetadata = typeMetadata;
236
- return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, serializerContextOptions, this.parentSerializerContext);
237
- }
238
- definePolymorphicSerializerContextByDiscriminant(record) {
239
- for (const [typeCtor, discriminant] of this.discriminantMap) {
240
- const typeMetadata = this.typeMetadataExtractor(typeCtor);
241
- if (record[typeMetadata.discriminator] === discriminant) {
242
- const serializerContextOptions = this.defineSerializerContextOptions(this.serializerContextOptions);
243
- serializerContextOptions.typeMetadata = typeMetadata;
244
- return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, serializerContextOptions, this.parentSerializerContext);
245
- }
246
- }
247
- throw new Error(`${this.jsonPath}: cannot define discriminant of polymorphic type. This is usually caused by invalid configuration.`);
248
- }
249
- hasJsonPathKey(jsonPathKey) {
250
- this.serializerContextOptions.jsonPathKey = jsonPathKey;
251
- return this;
252
- }
253
- hasReferenceValueSetter(referenceValueSetter) {
254
- this.serializerContextOptions.referenceValueSetter = referenceValueSetter;
255
- return this;
256
- }
257
- hasGenericStructures(genericStructures) {
258
- this.serializerContextOptions.genericStructures = genericStructures;
259
- return this;
260
- }
261
- hasGenericMetadataResolvers(genericMetadataResolvers) {
262
- this.serializerContextOptions.genericMetadataResolvers = genericMetadataResolvers;
263
- return this;
264
- }
265
- hasPropertyMetadata(propertyMetadata) {
266
- this.serializerContextOptions.propertyMetadata = propertyMetadata;
267
- return this;
268
- }
269
- hasTypeMetadata(typeMetadata) {
270
- this.serializerContextOptions.typeMetadata = typeMetadata;
271
- return this;
272
- }
273
- configure(serializerContextOptions) {
274
- if (!isUndefined(serializerContextOptions.jsonPathKey)) {
275
- this.hasJsonPathKey(serializerContextOptions.jsonPathKey);
276
- }
277
- if (!isUndefined(serializerContextOptions.referenceValueSetter)) {
278
- this.hasReferenceValueSetter(serializerContextOptions.referenceValueSetter);
279
- }
280
- if (!isUndefined(serializerContextOptions.genericStructures)) {
281
- this.hasGenericStructures(serializerContextOptions.genericStructures);
282
- }
283
- if (!isUndefined(serializerContextOptions.genericMetadataResolvers)) {
284
- this.hasGenericMetadataResolvers(serializerContextOptions.genericMetadataResolvers);
285
- }
286
- if (!isUndefined(serializerContextOptions.propertyMetadata)) {
287
- this.hasPropertyMetadata(serializerContextOptions.propertyMetadata);
288
- }
289
- if (!isUndefined(serializerContextOptions.typeMetadata)) {
290
- this.hasTypeMetadata(serializerContextOptions.typeMetadata);
291
- }
292
- return this;
293
- }
294
- }
1
+ import { isNil, isNumber, isUndefined } from 'lodash';
2
+ import { isCtorFunction } from './functions/is-ctor-function';
3
+ import { Metadata } from './metadata';
4
+ export class SerializerContext extends Metadata {
5
+ constructor($, referenceMap, referenceCallbackMap, serializerContextOptions, parentSerializerContext) {
6
+ super(serializerContextOptions.typeMetadata.typeManager);
7
+ this.$ = $;
8
+ this.referenceMap = referenceMap,
9
+ this.referenceCallbackMap = referenceCallbackMap;
10
+ this.serializerContextOptions = serializerContextOptions;
11
+ this.parentSerializerContext = parentSerializerContext;
12
+ return;
13
+ }
14
+ get jsonPathKey() {
15
+ return this.serializerContextOptions.jsonPathKey;
16
+ }
17
+ get referenceValueSetter() {
18
+ return this.serializerContextOptions.referenceValueSetter;
19
+ }
20
+ get serializedNullValue() {
21
+ if (this.preserveNull) {
22
+ return null;
23
+ }
24
+ return this.serializedDefaultValue;
25
+ }
26
+ get serializedDefaultValue() {
27
+ var _a, _b;
28
+ if (this.useDefaultValue) {
29
+ return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.serializedDefaultValue) !== null && _b !== void 0 ? _b : this.typeMetadata.serializedDefaultValue;
30
+ }
31
+ return undefined;
32
+ }
33
+ get deserializedNullValue() {
34
+ if (this.preserveNull) {
35
+ return null;
36
+ }
37
+ return this.deserializedDefaultValue;
38
+ }
39
+ get deserializedDefaultValue() {
40
+ var _a, _b;
41
+ if (this.useDefaultValue) {
42
+ return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.deserializedDefaultValue) !== null && _b !== void 0 ? _b : this.typeMetadata.deserializedDefaultValue;
43
+ }
44
+ return undefined;
45
+ }
46
+ get jsonPath() {
47
+ const jsonPathKey = this.jsonPathKey;
48
+ const parentSerializerContext = this.parentSerializerContext;
49
+ if (isNil(parentSerializerContext)) {
50
+ return jsonPathKey;
51
+ }
52
+ if (isNumber(jsonPathKey)) {
53
+ return `${parentSerializerContext.jsonPath}[${jsonPathKey}]`;
54
+ }
55
+ return `${parentSerializerContext.jsonPath}['${jsonPathKey}']`;
56
+ }
57
+ get discriminant() {
58
+ return this.typeMetadata.discriminant;
59
+ }
60
+ get discriminantMap() {
61
+ return this.typeMetadata.discriminantMap;
62
+ }
63
+ get discriminator() {
64
+ return this.typeMetadata.discriminator;
65
+ }
66
+ get factory() {
67
+ return this.typeMetadata.factory;
68
+ }
69
+ get genericStructures() {
70
+ return this.serializerContextOptions.genericStructures;
71
+ }
72
+ get genericMetadataResolvers() {
73
+ return this.serializerContextOptions.genericMetadataResolvers;
74
+ }
75
+ get genericMetadatas() {
76
+ const genericStructures = this.genericStructures;
77
+ const genericMetadataResolvers = this.genericMetadataResolvers;
78
+ if (isNil(genericStructures) || isNil(genericMetadataResolvers)) {
79
+ return undefined;
80
+ }
81
+ return this.defineGenericMetadatas(genericStructures, genericMetadataResolvers);
82
+ }
83
+ get injector() {
84
+ return this.typeMetadata.injector;
85
+ }
86
+ get log() {
87
+ return this.typeMetadata.log;
88
+ }
89
+ get name() {
90
+ if (isNil(this.propertyMetadata)) {
91
+ return this.typeMetadata.typeName;
92
+ }
93
+ return `${this.propertyMetadata.declaringTypeMetadata.typeName}.${this.propertyMetadata.propertyName}`;
94
+ }
95
+ get namingConvention() {
96
+ var _a, _b;
97
+ return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.namingConvention) !== null && _b !== void 0 ? _b : this.typeMetadata.namingConvention;
98
+ }
99
+ get polymorphic() {
100
+ return this.typeMetadata.polymorphic;
101
+ }
102
+ get propertyMetadata() {
103
+ return this.serializerContextOptions.propertyMetadata;
104
+ }
105
+ get preserveDiscriminator() {
106
+ return this.typeMetadata.preserveDiscriminator;
107
+ }
108
+ get referenceHandler() {
109
+ var _a, _b;
110
+ return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.referenceHandler) !== null && _b !== void 0 ? _b : this.typeMetadata.referenceHandler;
111
+ }
112
+ get serializer() {
113
+ var _a, _b;
114
+ return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.serializer) !== null && _b !== void 0 ? _b : this.typeMetadata.serializer;
115
+ }
116
+ get typeMetadata() {
117
+ return this.serializerContextOptions.typeMetadata;
118
+ }
119
+ get preserveNull() {
120
+ var _a, _b;
121
+ return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.preserveNull) !== null && _b !== void 0 ? _b : this.typeMetadata.preserveNull;
122
+ }
123
+ get useDefaultValue() {
124
+ var _a, _b;
125
+ return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.useDefaultValue) !== null && _b !== void 0 ? _b : this.typeMetadata.useDefaultValue;
126
+ }
127
+ get useImplicitConversion() {
128
+ var _a, _b;
129
+ return (_b = (_a = this.propertyMetadata) === null || _a === void 0 ? void 0 : _a.useImplicitConversion) !== null && _b !== void 0 ? _b : this.typeMetadata.useImplicitConversion;
130
+ }
131
+ serialize(x) {
132
+ return this.serializer.serialize(x, this);
133
+ }
134
+ deserialize(x) {
135
+ return this.serializer.deserialize(x, this);
136
+ }
137
+ defineReference(referenceKey, referenceValueGetter) {
138
+ return this.referenceHandler.define(this, referenceKey, referenceValueGetter);
139
+ }
140
+ restoreReference(referenceKey, referenceValueGetter) {
141
+ return this.referenceHandler.restore(this, referenceKey, referenceValueGetter);
142
+ }
143
+ registerReferenceCallback(referenceKey) {
144
+ const referenceValueSetter = this.referenceValueSetter;
145
+ if (isNil(referenceValueSetter)) {
146
+ return;
147
+ }
148
+ this.pushReferenceCallback(referenceKey, () => {
149
+ const referenceValue = this.referenceMap.get(referenceKey);
150
+ referenceValueSetter(referenceValue);
151
+ });
152
+ return;
153
+ }
154
+ pushReferenceCallback(referenceKey, referenceCallback) {
155
+ let referenceCallbacks = this.referenceCallbackMap.get(referenceKey);
156
+ if (isNil(referenceCallbacks)) {
157
+ referenceCallbacks = [];
158
+ this.referenceCallbackMap.set(referenceKey, referenceCallbacks);
159
+ }
160
+ referenceCallbacks.push(referenceCallback);
161
+ return;
162
+ }
163
+ resolveReferenceCallbacks(referenceKey) {
164
+ const referenceCallbacks = this.referenceCallbackMap.get(referenceKey);
165
+ if (isNil(referenceCallbacks)) {
166
+ return;
167
+ }
168
+ for (const referenceCallback of referenceCallbacks) {
169
+ referenceCallback();
170
+ }
171
+ return;
172
+ }
173
+ defineSerializerContextOptions(serializerContextOptions) {
174
+ var _a, _b, _c, _d, _e, _f;
175
+ return {
176
+ jsonPathKey: (_a = serializerContextOptions.jsonPathKey) !== null && _a !== void 0 ? _a : this.serializerContextOptions.jsonPathKey,
177
+ typeMetadata: (_b = serializerContextOptions.typeMetadata) !== null && _b !== void 0 ? _b : this.serializerContextOptions.typeMetadata,
178
+ genericStructures: (_c = serializerContextOptions.genericStructures) !== null && _c !== void 0 ? _c : this.serializerContextOptions.genericStructures,
179
+ genericMetadataResolvers: (_d = serializerContextOptions.genericMetadataResolvers) !== null && _d !== void 0 ? _d : this.serializerContextOptions.genericMetadataResolvers,
180
+ propertyMetadata: (_e = serializerContextOptions.propertyMetadata) !== null && _e !== void 0 ? _e : this.serializerContextOptions.propertyMetadata,
181
+ referenceValueSetter: (_f = serializerContextOptions.referenceValueSetter) !== null && _f !== void 0 ? _f : this.serializerContextOptions.referenceValueSetter
182
+ };
183
+ }
184
+ defineChildSerializerContext(childSerializerContextOptions) {
185
+ const parentSerializerContext = isNil(childSerializerContextOptions.jsonPathKey) ? this.parentSerializerContext : this;
186
+ const serializerContextOptions = this.defineSerializerContextOptions(childSerializerContextOptions);
187
+ return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, serializerContextOptions, parentSerializerContext);
188
+ }
189
+ defineGenericSerializerContext(genericIndex) {
190
+ const genericStructures = this.genericStructures;
191
+ const genericMetadataResolvers = this.genericMetadataResolvers;
192
+ if (isNil(genericStructures) || isNil(genericMetadataResolvers)) {
193
+ throw new Error(`${this.jsonPath}: cannot define generic arguments. This is usually caused by invalid configuration.`);
194
+ }
195
+ const genericStructure = genericStructures[genericIndex];
196
+ const genericMetadataResolver = genericMetadataResolvers[genericIndex];
197
+ if (isNil(genericStructure) || isNil(genericMetadataResolver)) {
198
+ throw new Error(`${this.jsonPath}: cannot define generic argument for index ${genericIndex}. This is usually caused by invalid configuration.`);
199
+ }
200
+ const genericTypeArgument = genericStructure[0];
201
+ const genericGenericStructures = genericStructure[1];
202
+ const genericTypeMetadataResolver = genericMetadataResolver[0];
203
+ const genericGenericMetadataResolvers = genericMetadataResolver[1];
204
+ const typeMetadata = genericTypeMetadataResolver(genericTypeArgument);
205
+ const serializerContextOptions = this.defineSerializerContextOptions(this.serializerContextOptions);
206
+ serializerContextOptions.typeMetadata = typeMetadata;
207
+ serializerContextOptions.genericStructures = genericGenericStructures;
208
+ serializerContextOptions.genericMetadataResolvers = genericGenericMetadataResolvers;
209
+ serializerContextOptions.propertyMetadata = undefined;
210
+ return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, serializerContextOptions, this.parentSerializerContext);
211
+ }
212
+ definePolymorphicSerializerContext(x) {
213
+ return isCtorFunction(x) ? this.definePolymorphicSerializerContextByTypeFn(x) : this.definePolymorphicSerializerContextByDiscriminant(x);
214
+ }
215
+ definePolymorphicSerializerContextByTypeFn(typeFn) {
216
+ const discriminant = this.discriminantMap.get(typeFn);
217
+ if (isNil(discriminant)) {
218
+ throw new Error(`${this.jsonPath}: cannot define discriminant of polymorphic type. This is usually caused by invalid configuration.`);
219
+ }
220
+ const typeMetadata = this.typeManager.extractTypeMetadata(typeFn);
221
+ const serializerContextOptions = this.defineSerializerContextOptions(this.serializerContextOptions);
222
+ serializerContextOptions.typeMetadata = typeMetadata;
223
+ return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, serializerContextOptions, this.parentSerializerContext);
224
+ }
225
+ definePolymorphicSerializerContextByDiscriminant(record) {
226
+ for (const [typeCtor, discriminant] of this.discriminantMap) {
227
+ const typeMetadata = this.typeManager.extractTypeMetadata(typeCtor);
228
+ if (record[typeMetadata.discriminator] === discriminant) {
229
+ const serializerContextOptions = this.defineSerializerContextOptions(this.serializerContextOptions);
230
+ serializerContextOptions.typeMetadata = typeMetadata;
231
+ return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, serializerContextOptions, this.parentSerializerContext);
232
+ }
233
+ }
234
+ throw new Error(`${this.jsonPath}: cannot define discriminant of polymorphic type. This is usually caused by invalid configuration.`);
235
+ }
236
+ hasJsonPathKey(jsonPathKey) {
237
+ this.serializerContextOptions.jsonPathKey = jsonPathKey;
238
+ return this;
239
+ }
240
+ hasReferenceValueSetter(referenceValueSetter) {
241
+ this.serializerContextOptions.referenceValueSetter = referenceValueSetter;
242
+ return this;
243
+ }
244
+ hasGenericStructures(genericStructures) {
245
+ this.serializerContextOptions.genericStructures = genericStructures;
246
+ return this;
247
+ }
248
+ hasGenericMetadataResolvers(genericMetadataResolvers) {
249
+ this.serializerContextOptions.genericMetadataResolvers = genericMetadataResolvers;
250
+ return this;
251
+ }
252
+ hasPropertyMetadata(propertyMetadata) {
253
+ this.serializerContextOptions.propertyMetadata = propertyMetadata;
254
+ return this;
255
+ }
256
+ hasTypeMetadata(typeMetadata) {
257
+ this.serializerContextOptions.typeMetadata = typeMetadata;
258
+ return this;
259
+ }
260
+ configure(serializerContextOptions) {
261
+ if (!isUndefined(serializerContextOptions.jsonPathKey)) {
262
+ this.hasJsonPathKey(serializerContextOptions.jsonPathKey);
263
+ }
264
+ if (!isUndefined(serializerContextOptions.referenceValueSetter)) {
265
+ this.hasReferenceValueSetter(serializerContextOptions.referenceValueSetter);
266
+ }
267
+ if (!isUndefined(serializerContextOptions.genericStructures)) {
268
+ this.hasGenericStructures(serializerContextOptions.genericStructures);
269
+ }
270
+ if (!isUndefined(serializerContextOptions.genericMetadataResolvers)) {
271
+ this.hasGenericMetadataResolvers(serializerContextOptions.genericMetadataResolvers);
272
+ }
273
+ if (!isUndefined(serializerContextOptions.propertyMetadata)) {
274
+ this.hasPropertyMetadata(serializerContextOptions.propertyMetadata);
275
+ }
276
+ if (!isUndefined(serializerContextOptions.typeMetadata)) {
277
+ this.hasTypeMetadata(serializerContextOptions.typeMetadata);
278
+ }
279
+ return this;
280
+ }
281
+ }
295
282
  //# sourceMappingURL=serializer-context.js.map