@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,314 +1,320 @@
1
- import { isArray, isNil, isUndefined, merge } from 'lodash';
2
- import { Any } from './any';
3
- import { TypeFactory } from './factories/type-factory';
4
- import { jsonParse } from './functions/json-parse';
5
- import { jsonStringify } from './functions/json-stringify';
6
- import { SingletonInjector } from './injectors/singleton-injector';
7
- import { Log } from './log';
8
- import { LogLevel } from './log-level';
9
- import { CircularReferenceHandler } from './reference-handlers/circular-reference-handler';
10
- import { SerializerContext } from './serializer-context';
11
- import { AnySerializer } from './serializers/any-serializer';
12
- import { ArrayBufferSerializer } from './serializers/array-buffer-serializer';
13
- import { ArraySerializer } from './serializers/array-serializer';
14
- import { BooleanSerializer } from './serializers/boolean-serializer';
15
- import { DataViewSerializer } from './serializers/data-view-serializer';
16
- import { DateSerializer } from './serializers/date-serializer';
17
- import { Float32ArraySerializer } from './serializers/float-32-array-serializer';
18
- import { Float64ArraySerializer } from './serializers/float-64-array-serializer';
19
- import { Int16ArraySerializer } from './serializers/int-16-array-serializer';
20
- import { Int32ArraySerializer } from './serializers/int-32-array-serializer';
21
- import { Int8ArraySerializer } from './serializers/int-8-array-serializer';
22
- import { MapSerializer } from './serializers/map-serializer';
23
- import { NumberSerializer } from './serializers/number-serializer';
24
- import { SetSerializer } from './serializers/set-serializer';
25
- import { StringSerializer } from './serializers/string-serializer';
26
- import { TypeSerializer } from './serializers/type-serializer';
27
- import { Uint16ArraySerializer } from './serializers/uint-16-array-serializer';
28
- import { Uint32ArraySerializer } from './serializers/uint-32-array-serializer';
29
- import { Uint8ArraySerializer } from './serializers/uint-8-array-serializer';
30
- import { Uint8ClampedArraySerializer } from './serializers/uint-8-clamped-array-serializer';
31
- import { UnknownSerializer } from './serializers/unknown-serializer';
32
- import { TypeMetadata } from './type-metadata';
33
- import { typeMetadataSymbol } from './type-metadata-symbol';
34
- import { Unknown } from './unknown';
35
- export class TypeManager {
36
- constructor(typeManagerOptions = {}) {
37
- this.typeFnMap = new Map();
38
- this.symbol = Symbol(typeMetadataSymbol.description);
39
- this.typeManagerOptions = this.constructTypeManagerOptions(typeManagerOptions);
40
- this.configure(typeManagerOptions);
41
- return;
42
- }
43
- static get typeFnMap() {
44
- return this.staticTypeManager.typeFnMap;
45
- }
46
- static get symbol() {
47
- return this.staticTypeManager.symbol;
48
- }
49
- static get typeManagerOptions() {
50
- return this.staticTypeManager.typeManagerOptions;
51
- }
52
- static get typeOptionsBase() {
53
- return this.staticTypeManager.typeOptionsBase;
54
- }
55
- get typeOptionsBase() {
56
- let typeOptionsBase = this.typeManagerOptions.typeOptionsBase;
57
- if (isNil(typeOptionsBase)) {
58
- typeOptionsBase = merge({}, TypeManager.defaultTypeOptionsBase);
59
- this.typeManagerOptions.typeOptionsBase = typeOptionsBase;
60
- }
61
- return typeOptionsBase;
62
- }
63
- static get typeOptionsMap() {
64
- return this.staticTypeManager.typeOptionsMap;
65
- }
66
- get typeOptionsMap() {
67
- let typeOptionsMap = this.typeManagerOptions.typeOptionsMap;
68
- if (isNil(typeOptionsMap)) {
69
- typeOptionsMap = new Map(TypeManager.defaultTypeOptionsMap.entries());
70
- this.typeManagerOptions.typeOptionsMap = typeOptionsMap;
71
- }
72
- return typeOptionsMap;
73
- }
74
- static get typeConfigurationMap() {
75
- return this.staticTypeManager.typeConfigurationMap;
76
- }
77
- get typeConfigurationMap() {
78
- let typeConfigurationMap = this.typeManagerOptions.typeConfigurationMap;
79
- if (isNil(typeConfigurationMap)) {
80
- typeConfigurationMap = new Map();
81
- this.typeManagerOptions.typeConfigurationMap = typeConfigurationMap;
82
- }
83
- return typeConfigurationMap;
84
- }
85
- constructTypeManagerOptions(typeManagerOptions) {
86
- let typeOptionsBase = typeManagerOptions.typeOptionsBase;
87
- if (isNil(typeOptionsBase)) {
88
- typeOptionsBase = {};
89
- typeManagerOptions.typeOptionsBase = typeOptionsBase;
90
- }
91
- this.constructTypeOptionsBase(typeOptionsBase);
92
- let typeOptionsMap = typeManagerOptions.typeOptionsMap;
93
- if (isNil(typeOptionsMap)) {
94
- typeOptionsMap = new Map();
95
- typeManagerOptions.typeOptionsMap = typeOptionsMap;
96
- }
97
- this.constructTypeOptionsMap(typeOptionsMap);
98
- return typeManagerOptions;
99
- }
100
- constructTypeOptionsBase(typeOptionsBase) {
101
- const initialTypeOptionsBase = merge({}, TypeManager.defaultTypeOptionsBase, typeOptionsBase);
102
- merge(typeOptionsBase, initialTypeOptionsBase);
103
- return typeOptionsBase;
104
- }
105
- constructTypeOptionsMap(typeOptionsMap) {
106
- const initialTypeOptionsMap = new Map();
107
- for (const [typeFn, typeOptions] of TypeManager.defaultTypeOptionsMap) {
108
- let mapTypeOptions = initialTypeOptionsMap.get(typeFn);
109
- if (isNil(mapTypeOptions)) {
110
- mapTypeOptions = {};
111
- }
112
- initialTypeOptionsMap.set(typeFn, merge(mapTypeOptions, typeOptions));
113
- }
114
- for (const [typeFn, typeOptions] of typeOptionsMap) {
115
- let mapTypeOptions = initialTypeOptionsMap.get(typeFn);
116
- if (isNil(mapTypeOptions)) {
117
- mapTypeOptions = {};
118
- }
119
- initialTypeOptionsMap.set(typeFn, merge(typeOptions, merge(mapTypeOptions, typeOptions)));
120
- }
121
- typeOptionsMap.clear();
122
- for (const [typeFn, typeOptions] of initialTypeOptionsMap) {
123
- typeOptionsMap.set(typeFn, typeOptions);
124
- }
125
- return typeOptionsMap;
126
- }
127
- static configureTypeMetadata(typeFn, typeOptions) {
128
- return this.staticTypeManager.configureTypeMetadata(typeFn, typeOptions);
129
- }
130
- configureTypeMetadata(typeFn, typeOptions) {
131
- const symbol = this.symbol;
132
- const prototype = typeFn.prototype;
133
- const typeMetadataDefined = prototype.hasOwnProperty(symbol);
134
- const typeMetadata = typeMetadataDefined ? prototype[symbol] : this.declareTypeMetadata(typeFn);
135
- if (!typeMetadataDefined) {
136
- Object.defineProperty(prototype, symbol, {
137
- enumerable: false,
138
- configurable: false,
139
- writable: false,
140
- value: typeMetadata
141
- });
142
- }
143
- if (!isNil(typeOptions)) {
144
- typeMetadata.configure(typeOptions);
145
- }
146
- return typeMetadata;
147
- }
148
- declareTypeMetadata(typeFn) {
149
- var _a;
150
- let typeOptions = this.typeOptionsMap.get(typeFn);
151
- if (isNil(typeOptions)) {
152
- typeOptions = {};
153
- this.typeOptionsMap.set(typeFn, typeOptions);
154
- }
155
- const symbol = this.symbol;
156
- const typeMetadataExtractor = this.extractTypeMetadata.bind(this);
157
- const typeFnMap = this.typeFnMap;
158
- const typeOptionsBase = this.typeOptionsBase;
159
- const parentPrototype = (_a = Object.getPrototypeOf(typeFn.prototype)) !== null && _a !== void 0 ? _a : {};
160
- const parentTypeMetadata = parentPrototype[symbol];
161
- const typeMetadata = new TypeMetadata(typeMetadataExtractor, typeFnMap, typeFn, typeOptionsBase, typeOptions, parentTypeMetadata);
162
- return typeMetadata;
163
- }
164
- static extractTypeMetadata(typeFn) {
165
- return this.staticTypeManager.extractTypeMetadata(typeFn);
166
- }
167
- extractTypeMetadata(typeFn) {
168
- const symbol = this.symbol;
169
- const prototype = typeFn.prototype;
170
- const typeMetadataDefined = prototype.hasOwnProperty(symbol);
171
- const typeMetadata = typeMetadataDefined ? prototype[symbol] : this.configureTypeMetadata(typeFn);
172
- return typeMetadata;
173
- }
174
- static applyTypeOptionsBase(typeOptionsBase) {
175
- return this.staticTypeManager.applyTypeOptionsBase(typeOptionsBase);
176
- }
177
- applyTypeOptionsBase(typeOptionsBase) {
178
- merge(this.typeOptionsBase, typeOptionsBase);
179
- return this;
180
- }
181
- static applyTypeOptionsMap(typeOptionsMap) {
182
- return this.staticTypeManager.applyTypeOptionsMap(typeOptionsMap);
183
- }
184
- applyTypeOptionsMap(typeOptionsMap) {
185
- for (const [typeFn, typeOptions] of typeOptionsMap) {
186
- this.applyTypeOptions(typeFn, typeOptions);
187
- }
188
- return this;
189
- }
190
- static applyTypeOptions(typeFn, typeOptions) {
191
- return this.staticTypeManager.applyTypeOptions(typeFn, typeOptions);
192
- }
193
- applyTypeOptions(typeFn, typeOptions) {
194
- const typeMetadata = this.extractTypeMetadata(typeFn);
195
- typeMetadata.configure(typeOptions);
196
- return this;
197
- }
198
- static applyTypeConfigurationMap(typeConfigurationMap) {
199
- return this.staticTypeManager.applyTypeConfigurationMap(typeConfigurationMap);
200
- }
201
- applyTypeConfigurationMap(typeConfigurationMap) {
202
- for (const [typeFn, typeConfiguration] of typeConfigurationMap) {
203
- this.applyTypeConfiguration(typeFn, typeConfiguration);
204
- }
205
- return this;
206
- }
207
- static applyTypeConfiguration(typeFn, typeConfiguration) {
208
- return this.staticTypeManager.applyTypeConfiguration(typeFn, typeConfiguration);
209
- }
210
- applyTypeConfiguration(typeFn, typeConfiguration) {
211
- const typeMetadata = this.extractTypeMetadata(typeFn);
212
- typeConfiguration.configure(typeMetadata);
213
- return this;
214
- }
215
- static configure(typeManagerOptions) {
216
- return this.staticTypeManager.configure(typeManagerOptions);
217
- }
218
- configure(typeManagerOptions) {
219
- if (!isUndefined(typeManagerOptions.typeOptionsBase)) {
220
- this.applyTypeOptionsBase(typeManagerOptions.typeOptionsBase);
221
- }
222
- if (!isUndefined(typeManagerOptions.typeOptionsMap)) {
223
- this.applyTypeOptionsMap(typeManagerOptions.typeOptionsMap);
224
- }
225
- if (!isUndefined(typeManagerOptions.typeConfigurationMap)) {
226
- this.applyTypeConfigurationMap(typeManagerOptions.typeConfigurationMap);
227
- }
228
- return this;
229
- }
230
- static defineSerializerContext(typeFn, x, genericArguments) {
231
- return this.staticTypeManager.defineSerializerContext(typeFn, x, genericArguments);
232
- }
233
- defineSerializerContext(typeFn, x, genericArguments) {
234
- const typeMetadata = this.extractTypeMetadata(typeFn);
235
- const genericStructures = isNil(genericArguments) ? undefined : typeMetadata.defineGenericStructures(genericArguments);
236
- const genericMetadataResolvers = isNil(genericStructures) ? undefined : typeMetadata.defineGenericMetadataResolvers(genericStructures);
237
- return new SerializerContext(x, new Map(), new Map(), {
238
- jsonPathKey: '$',
239
- typeMetadata: typeMetadata,
240
- genericStructures: genericStructures,
241
- genericMetadataResolvers: genericMetadataResolvers
242
- });
243
- }
244
- static serialize(typeFn, x) {
245
- return this.staticTypeManager.serialize(typeFn, x);
246
- }
247
- serialize(typeFn, x) {
248
- const arrayFn = Array;
249
- if (isArray(x) && typeFn !== arrayFn) {
250
- return this.defineSerializerContext(arrayFn, x, [typeFn]).serialize(x);
251
- }
252
- return this.defineSerializerContext(typeFn, x).serialize(x);
253
- }
254
- static deserialize(typeFn, x) {
255
- return this.staticTypeManager.deserialize(typeFn, x);
256
- }
257
- deserialize(typeFn, x) {
258
- const arrayFn = Array;
259
- if (isArray(x) && typeFn !== arrayFn) {
260
- return this.defineSerializerContext(arrayFn, x, [typeFn]).deserialize(x);
261
- }
262
- return this.defineSerializerContext(typeFn, x).deserialize(x);
263
- }
264
- static stringify(typeFn, x, replacer, space) {
265
- return this.staticTypeManager.stringify(typeFn, x, replacer, space);
266
- }
267
- stringify(typeFn, x, replacer, space) {
268
- return jsonStringify(this.serialize(typeFn, x), replacer, space);
269
- }
270
- static parse(typeFn, x, reviver) {
271
- return this.staticTypeManager.parse(typeFn, x, reviver);
272
- }
273
- parse(typeFn, x, reviver) {
274
- return this.deserialize(typeFn, jsonParse(x, reviver));
275
- }
276
- }
277
- TypeManager.defaultTypeOptionsBase = {
278
- discriminator: '$type',
279
- factory: new TypeFactory(),
280
- injector: new SingletonInjector(),
281
- log: new Log(LogLevel.Error),
282
- preserveDiscriminator: false,
283
- referenceHandler: new CircularReferenceHandler(),
284
- serializer: new TypeSerializer(),
285
- preserveNull: true,
286
- useDefaultValue: false,
287
- useImplicitConversion: false,
288
- propertySorter: undefined,
289
- injectSorter: undefined
290
- };
291
- TypeManager.defaultTypeOptionsMap = new Map([
292
- [Any, { serializer: new AnySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
293
- [ArrayBuffer, { serializer: new ArrayBufferSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
294
- [Array, { serializer: new ArraySerializer(), serializedDefaultValue: () => [], deserializedDefaultValue: () => [] }],
295
- [Boolean, { serializer: new BooleanSerializer(), serializedDefaultValue: false, deserializedDefaultValue: false }],
296
- [DataView, { serializer: new DataViewSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
297
- [Date, { serializer: new DateSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
298
- [Float32Array, { serializer: new Float32ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
299
- [Float64Array, { serializer: new Float64ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
300
- [Int8Array, { serializer: new Int8ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
301
- [Int16Array, { serializer: new Int16ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
302
- [Int32Array, { serializer: new Int32ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
303
- [Map, { serializer: new MapSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
304
- [Number, { serializer: new NumberSerializer(), serializedDefaultValue: 0, deserializedDefaultValue: 0 }],
305
- [Set, { serializer: new SetSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
306
- [String, { serializer: new StringSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
307
- [Uint8Array, { serializer: new Uint8ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
308
- [Uint8ClampedArray, { serializer: new Uint8ClampedArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
309
- [Uint16Array, { serializer: new Uint16ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
310
- [Uint32Array, { serializer: new Uint32ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
311
- [Unknown, { serializer: new UnknownSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }]
312
- ]);
313
- TypeManager.staticTypeManager = new TypeManager();
1
+ import { assign, isArray, isNil, isUndefined } from 'lodash';
2
+ import { Any } from './any';
3
+ import { CustomContext } from './custom-context';
4
+ import { TypeFactory } from './factories/type-factory';
5
+ import { jsonParse } from './functions/json-parse';
6
+ import { jsonStringify } from './functions/json-stringify';
7
+ import { SingletonInjector } from './injectors/singleton-injector';
8
+ import { Log } from './log';
9
+ import { LogLevel } from './log-level';
10
+ import { CircularReferenceHandler } from './reference-handlers/circular-reference-handler';
11
+ import { SerializerContext } from './serializer-context';
12
+ import { AnySerializer } from './serializers/any-serializer';
13
+ import { ArrayBufferSerializer } from './serializers/array-buffer-serializer';
14
+ import { ArraySerializer } from './serializers/array-serializer';
15
+ import { BooleanSerializer } from './serializers/boolean-serializer';
16
+ import { DataViewSerializer } from './serializers/data-view-serializer';
17
+ import { DateSerializer } from './serializers/date-serializer';
18
+ import { Float32ArraySerializer } from './serializers/float-32-array-serializer';
19
+ import { Float64ArraySerializer } from './serializers/float-64-array-serializer';
20
+ import { Int16ArraySerializer } from './serializers/int-16-array-serializer';
21
+ import { Int32ArraySerializer } from './serializers/int-32-array-serializer';
22
+ import { Int8ArraySerializer } from './serializers/int-8-array-serializer';
23
+ import { MapSerializer } from './serializers/map-serializer';
24
+ import { NumberSerializer } from './serializers/number-serializer';
25
+ import { SetSerializer } from './serializers/set-serializer';
26
+ import { StringSerializer } from './serializers/string-serializer';
27
+ import { TypeSerializer } from './serializers/type-serializer';
28
+ import { Uint16ArraySerializer } from './serializers/uint-16-array-serializer';
29
+ import { Uint32ArraySerializer } from './serializers/uint-32-array-serializer';
30
+ import { Uint8ArraySerializer } from './serializers/uint-8-array-serializer';
31
+ import { Uint8ClampedArraySerializer } from './serializers/uint-8-clamped-array-serializer';
32
+ import { UnknownSerializer } from './serializers/unknown-serializer';
33
+ import { TypeMetadata } from './type-metadata';
34
+ import { typeMetadataSymbol } from './type-metadata-symbol';
35
+ import { Unknown } from './unknown';
36
+ export class TypeManager {
37
+ constructor(typeManagerOptions = {}) {
38
+ this.typeFnMap = new Map();
39
+ this.symbol = Symbol(typeMetadataSymbol.description);
40
+ this.typeManagerOptions = this.constructTypeManagerOptions(typeManagerOptions);
41
+ this.customContext = this.constructCustomContext();
42
+ this.configure(typeManagerOptions);
43
+ return;
44
+ }
45
+ static get typeFnMap() {
46
+ return this.staticTypeManager.typeFnMap;
47
+ }
48
+ static get symbol() {
49
+ return this.staticTypeManager.symbol;
50
+ }
51
+ static get typeManagerOptions() {
52
+ return this.staticTypeManager.typeManagerOptions;
53
+ }
54
+ static get typeOptionsBase() {
55
+ return this.staticTypeManager.typeOptionsBase;
56
+ }
57
+ get typeOptionsBase() {
58
+ let typeOptionsBase = this.typeManagerOptions.typeOptionsBase;
59
+ if (isNil(typeOptionsBase)) {
60
+ typeOptionsBase = {};
61
+ this.typeManagerOptions.typeOptionsBase = this.constructTypeOptionsBase(typeOptionsBase);
62
+ }
63
+ return typeOptionsBase;
64
+ }
65
+ static get typeOptionsMap() {
66
+ return this.staticTypeManager.typeOptionsMap;
67
+ }
68
+ get typeOptionsMap() {
69
+ let typeOptionsMap = this.typeManagerOptions.typeOptionsMap;
70
+ if (isNil(typeOptionsMap)) {
71
+ typeOptionsMap = new Map();
72
+ this.typeManagerOptions.typeOptionsMap = this.constructTypeOptionsMap(typeOptionsMap);
73
+ }
74
+ return typeOptionsMap;
75
+ }
76
+ static get typeConfigurationMap() {
77
+ return this.staticTypeManager.typeConfigurationMap;
78
+ }
79
+ get typeConfigurationMap() {
80
+ let typeConfigurationMap = this.typeManagerOptions.typeConfigurationMap;
81
+ if (isNil(typeConfigurationMap)) {
82
+ typeConfigurationMap = new Map();
83
+ this.typeManagerOptions.typeConfigurationMap = typeConfigurationMap;
84
+ }
85
+ return typeConfigurationMap;
86
+ }
87
+ constructTypeManagerOptions(typeManagerOptions) {
88
+ let typeOptionsBase = typeManagerOptions.typeOptionsBase;
89
+ if (isNil(typeOptionsBase)) {
90
+ typeOptionsBase = {};
91
+ typeManagerOptions.typeOptionsBase = this.constructTypeOptionsBase(typeOptionsBase);
92
+ }
93
+ let typeOptionsMap = typeManagerOptions.typeOptionsMap;
94
+ if (isNil(typeOptionsMap)) {
95
+ typeOptionsMap = new Map();
96
+ typeManagerOptions.typeOptionsMap = this.constructTypeOptionsMap(typeOptionsMap);
97
+ }
98
+ return typeManagerOptions;
99
+ }
100
+ constructTypeOptionsBase(typeOptionsBase) {
101
+ const initialTypeOptionsBase = assign({}, TypeManager.defaultTypeOptionsBase, typeOptionsBase);
102
+ assign(typeOptionsBase, initialTypeOptionsBase);
103
+ return typeOptionsBase;
104
+ }
105
+ constructTypeOptionsMap(typeOptionsMap) {
106
+ const initialTypeOptionsMap = new Map();
107
+ for (const [typeFn, typeOptions] of TypeManager.defaultTypeOptionsMap) {
108
+ let mapTypeOptions = initialTypeOptionsMap.get(typeFn);
109
+ if (isNil(mapTypeOptions)) {
110
+ mapTypeOptions = {};
111
+ }
112
+ initialTypeOptionsMap.set(typeFn, assign(mapTypeOptions, typeOptions));
113
+ }
114
+ for (const [typeFn, typeOptions] of typeOptionsMap) {
115
+ let mapTypeOptions = initialTypeOptionsMap.get(typeFn);
116
+ if (isNil(mapTypeOptions)) {
117
+ mapTypeOptions = {};
118
+ }
119
+ initialTypeOptionsMap.set(typeFn, assign(typeOptions, assign(mapTypeOptions, typeOptions)));
120
+ }
121
+ typeOptionsMap.clear();
122
+ for (const [typeFn, typeOptions] of initialTypeOptionsMap) {
123
+ typeOptionsMap.set(typeFn, typeOptions);
124
+ }
125
+ return typeOptionsMap;
126
+ }
127
+ constructCustomContext() {
128
+ var _a;
129
+ const customOptions = (_a = this.typeOptionsBase.customOptions) !== null && _a !== void 0 ? _a : new Array();
130
+ const customContext = new CustomContext(customOptions);
131
+ this.typeOptionsBase.customOptions = customOptions;
132
+ return customContext;
133
+ }
134
+ static configureTypeMetadata(typeFn, typeOptions) {
135
+ return this.staticTypeManager.configureTypeMetadata(typeFn, typeOptions);
136
+ }
137
+ configureTypeMetadata(typeFn, typeOptions) {
138
+ const symbol = this.symbol;
139
+ const prototype = typeFn.prototype;
140
+ const typeMetadataDefined = prototype.hasOwnProperty(symbol);
141
+ const typeMetadata = typeMetadataDefined ? prototype[symbol] : this.declareTypeMetadata(typeFn, typeOptions);
142
+ if (!typeMetadataDefined) {
143
+ Object.defineProperty(prototype, symbol, {
144
+ enumerable: false,
145
+ configurable: false,
146
+ writable: false,
147
+ value: typeMetadata
148
+ });
149
+ }
150
+ if (typeMetadataDefined && !isNil(typeOptions)) {
151
+ typeMetadata.configure(typeOptions);
152
+ }
153
+ return typeMetadata;
154
+ }
155
+ declareTypeMetadata(typeFn, typeOptions) {
156
+ var _a;
157
+ let mapTypeOptions = this.typeOptionsMap.get(typeFn);
158
+ if (isNil(mapTypeOptions)) {
159
+ mapTypeOptions = typeOptions !== null && typeOptions !== void 0 ? typeOptions : {};
160
+ this.typeOptionsMap.set(typeFn, mapTypeOptions);
161
+ }
162
+ const symbol = this.symbol;
163
+ const parentPrototype = (_a = Object.getPrototypeOf(typeFn.prototype)) !== null && _a !== void 0 ? _a : {};
164
+ const parentTypeMetadata = parentPrototype[symbol];
165
+ const typeMetadata = new TypeMetadata(this, typeFn, mapTypeOptions, parentTypeMetadata);
166
+ return typeMetadata;
167
+ }
168
+ static extractTypeMetadata(typeFn) {
169
+ return this.staticTypeManager.extractTypeMetadata(typeFn);
170
+ }
171
+ extractTypeMetadata(typeFn) {
172
+ const symbol = this.symbol;
173
+ const prototype = typeFn.prototype;
174
+ const typeMetadataDefined = prototype.hasOwnProperty(symbol);
175
+ const typeMetadata = typeMetadataDefined ? prototype[symbol] : this.configureTypeMetadata(typeFn);
176
+ return typeMetadata;
177
+ }
178
+ static applyTypeOptionsBase(typeOptionsBase) {
179
+ return this.staticTypeManager.applyTypeOptionsBase(typeOptionsBase);
180
+ }
181
+ applyTypeOptionsBase(typeOptionsBase) {
182
+ const customOptions = this.typeOptionsBase.customOptions;
183
+ assign(this.typeOptionsBase, typeOptionsBase, { customOptions: customOptions });
184
+ if (!isNil(typeOptionsBase.customOptions)) {
185
+ this.customContext.configure(typeOptionsBase.customOptions);
186
+ }
187
+ return this;
188
+ }
189
+ static applyTypeOptionsMap(typeOptionsMap) {
190
+ return this.staticTypeManager.applyTypeOptionsMap(typeOptionsMap);
191
+ }
192
+ applyTypeOptionsMap(typeOptionsMap) {
193
+ for (const [typeFn, typeOptions] of typeOptionsMap) {
194
+ this.applyTypeOptions(typeFn, typeOptions);
195
+ }
196
+ return this;
197
+ }
198
+ static applyTypeOptions(typeFn, typeOptions) {
199
+ return this.staticTypeManager.applyTypeOptions(typeFn, typeOptions);
200
+ }
201
+ applyTypeOptions(typeFn, typeOptions) {
202
+ const typeMetadata = this.extractTypeMetadata(typeFn);
203
+ typeMetadata.configure(typeOptions);
204
+ return this;
205
+ }
206
+ static applyTypeConfigurationMap(typeConfigurationMap) {
207
+ return this.staticTypeManager.applyTypeConfigurationMap(typeConfigurationMap);
208
+ }
209
+ applyTypeConfigurationMap(typeConfigurationMap) {
210
+ for (const [typeFn, typeConfiguration] of typeConfigurationMap) {
211
+ this.applyTypeConfiguration(typeFn, typeConfiguration);
212
+ }
213
+ return this;
214
+ }
215
+ static applyTypeConfiguration(typeFn, typeConfiguration) {
216
+ return this.staticTypeManager.applyTypeConfiguration(typeFn, typeConfiguration);
217
+ }
218
+ applyTypeConfiguration(typeFn, typeConfiguration) {
219
+ const typeMetadata = this.extractTypeMetadata(typeFn);
220
+ typeConfiguration.configure(typeMetadata);
221
+ return this;
222
+ }
223
+ static configure(typeManagerOptions) {
224
+ return this.staticTypeManager.configure(typeManagerOptions);
225
+ }
226
+ configure(typeManagerOptions) {
227
+ if (!isUndefined(typeManagerOptions.typeOptionsBase)) {
228
+ this.applyTypeOptionsBase(typeManagerOptions.typeOptionsBase);
229
+ }
230
+ if (!isUndefined(typeManagerOptions.typeOptionsMap)) {
231
+ this.applyTypeOptionsMap(typeManagerOptions.typeOptionsMap);
232
+ }
233
+ if (!isUndefined(typeManagerOptions.typeConfigurationMap)) {
234
+ this.applyTypeConfigurationMap(typeManagerOptions.typeConfigurationMap);
235
+ }
236
+ return this;
237
+ }
238
+ static defineSerializerContext(typeFn, x, genericArguments) {
239
+ return this.staticTypeManager.defineSerializerContext(typeFn, x, genericArguments);
240
+ }
241
+ defineSerializerContext(typeFn, x, genericArguments) {
242
+ const typeMetadata = this.extractTypeMetadata(typeFn);
243
+ const genericStructures = isNil(genericArguments) ? undefined : typeMetadata.defineGenericStructures(genericArguments);
244
+ const genericMetadataResolvers = isNil(genericStructures) ? undefined : typeMetadata.defineGenericMetadataResolvers(genericStructures);
245
+ return new SerializerContext(x, new Map(), new Map(), {
246
+ jsonPathKey: '$',
247
+ typeMetadata: typeMetadata,
248
+ genericStructures: genericStructures,
249
+ genericMetadataResolvers: genericMetadataResolvers
250
+ });
251
+ }
252
+ static serialize(typeFn, x) {
253
+ return this.staticTypeManager.serialize(typeFn, x);
254
+ }
255
+ serialize(typeFn, x) {
256
+ const arrayFn = Array;
257
+ if (isArray(x) && typeFn !== arrayFn) {
258
+ return this.defineSerializerContext(arrayFn, x, [typeFn]).serialize(x);
259
+ }
260
+ return this.defineSerializerContext(typeFn, x).serialize(x);
261
+ }
262
+ static deserialize(typeFn, x) {
263
+ return this.staticTypeManager.deserialize(typeFn, x);
264
+ }
265
+ deserialize(typeFn, x) {
266
+ const arrayFn = Array;
267
+ if (isArray(x) && typeFn !== arrayFn) {
268
+ return this.defineSerializerContext(arrayFn, x, [typeFn]).deserialize(x);
269
+ }
270
+ return this.defineSerializerContext(typeFn, x).deserialize(x);
271
+ }
272
+ static stringify(typeFn, x, replacer, space) {
273
+ return this.staticTypeManager.stringify(typeFn, x, replacer, space);
274
+ }
275
+ stringify(typeFn, x, replacer, space) {
276
+ return jsonStringify(this.serialize(typeFn, x), replacer, space);
277
+ }
278
+ static parse(typeFn, x, reviver) {
279
+ return this.staticTypeManager.parse(typeFn, x, reviver);
280
+ }
281
+ parse(typeFn, x, reviver) {
282
+ return this.deserialize(typeFn, jsonParse(x, reviver));
283
+ }
284
+ }
285
+ TypeManager.defaultTypeOptionsBase = {
286
+ discriminator: '$type',
287
+ factory: new TypeFactory(),
288
+ injector: new SingletonInjector(),
289
+ log: new Log(LogLevel.Error),
290
+ preserveDiscriminator: false,
291
+ referenceHandler: new CircularReferenceHandler(),
292
+ serializer: new TypeSerializer(),
293
+ preserveNull: true,
294
+ useDefaultValue: false,
295
+ useImplicitConversion: false
296
+ };
297
+ TypeManager.defaultTypeOptionsMap = new Map([
298
+ [Any, { serializer: new AnySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
299
+ [ArrayBuffer, { serializer: new ArrayBufferSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
300
+ [Array, { serializer: new ArraySerializer(), serializedDefaultValue: () => [], deserializedDefaultValue: () => [] }],
301
+ [Boolean, { serializer: new BooleanSerializer(), serializedDefaultValue: false, deserializedDefaultValue: false }],
302
+ [DataView, { serializer: new DataViewSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
303
+ [Date, { serializer: new DateSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
304
+ [Float32Array, { serializer: new Float32ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
305
+ [Float64Array, { serializer: new Float64ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
306
+ [Int8Array, { serializer: new Int8ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
307
+ [Int16Array, { serializer: new Int16ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
308
+ [Int32Array, { serializer: new Int32ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
309
+ [Map, { serializer: new MapSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
310
+ [Number, { serializer: new NumberSerializer(), serializedDefaultValue: 0, deserializedDefaultValue: 0 }],
311
+ [Set, { serializer: new SetSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
312
+ [String, { serializer: new StringSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
313
+ [Uint8Array, { serializer: new Uint8ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
314
+ [Uint8ClampedArray, { serializer: new Uint8ClampedArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
315
+ [Uint16Array, { serializer: new Uint16ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
316
+ [Uint32Array, { serializer: new Uint32ArraySerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }],
317
+ [Unknown, { serializer: new UnknownSerializer(), serializedDefaultValue: undefined, deserializedDefaultValue: undefined }]
318
+ ]);
319
+ TypeManager.staticTypeManager = new TypeManager();
314
320
  //# sourceMappingURL=type-manager.js.map