@dipscope/type-manager 7.2.0 → 8.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 (642) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +160 -167
  3. package/dist/es2015/constants/default-value-resolver.js +2 -0
  4. package/dist/es2015/constants/default-value-resolver.js.map +1 -0
  5. package/dist/es2015/constants/empty-array.js +2 -0
  6. package/dist/es2015/constants/empty-array.js.map +1 -0
  7. package/dist/es2015/constants/empty-map.js +2 -0
  8. package/dist/es2015/constants/empty-map.js.map +1 -0
  9. package/dist/es2015/constants/index.js +5 -0
  10. package/dist/es2015/constants/index.js.map +1 -0
  11. package/dist/es2015/constants/null-value-resolver.js +2 -0
  12. package/dist/es2015/constants/null-value-resolver.js.map +1 -0
  13. package/dist/es2015/custom-key.js.map +1 -1
  14. package/dist/es2015/factories/type-factory.js +22 -23
  15. package/dist/es2015/factories/type-factory.js.map +1 -1
  16. package/dist/es2015/functions/get-own-reflect-metadata.js +1 -2
  17. package/dist/es2015/functions/get-own-reflect-metadata.js.map +1 -1
  18. package/dist/es2015/functions/get-reflect-metadata.js +1 -2
  19. package/dist/es2015/functions/get-reflect-metadata.js.map +1 -1
  20. package/dist/es2015/functions/get-words.js +61 -2
  21. package/dist/es2015/functions/get-words.js.map +1 -1
  22. package/dist/es2015/functions/index.js +0 -12
  23. package/dist/es2015/functions/index.js.map +1 -1
  24. package/dist/es2015/functions/json-parse.js.map +1 -1
  25. package/dist/es2015/functions/json-stringify.js +6 -5
  26. package/dist/es2015/functions/json-stringify.js.map +1 -1
  27. package/dist/es2015/functions/name-of.js +1 -5
  28. package/dist/es2015/functions/name-of.js.map +1 -1
  29. package/dist/es2015/index.js +17 -12
  30. package/dist/es2015/index.js.map +1 -1
  31. package/dist/es2015/inject-decorator.js +2 -0
  32. package/dist/es2015/inject-decorator.js.map +1 -0
  33. package/dist/es2015/inject-metadata.js +34 -33
  34. package/dist/es2015/inject-metadata.js.map +1 -1
  35. package/dist/es2015/inject-sorters/asc-inject-sorter.js +1 -9
  36. package/dist/es2015/inject-sorters/asc-inject-sorter.js.map +1 -1
  37. package/dist/es2015/inject-sorters/desc-inject-sorter.js +1 -9
  38. package/dist/es2015/inject-sorters/desc-inject-sorter.js.map +1 -1
  39. package/dist/es2015/inject-state.js +2 -0
  40. package/dist/es2015/inject-state.js.map +1 -0
  41. package/dist/es2015/inject-states/index.js +3 -0
  42. package/dist/es2015/inject-states/index.js.map +1 -0
  43. package/dist/es2015/inject-states/resolved-inject-state.js +10 -0
  44. package/dist/es2015/inject-states/resolved-inject-state.js.map +1 -0
  45. package/dist/es2015/inject-states/unresolved-inject-state.js +31 -0
  46. package/dist/es2015/inject-states/unresolved-inject-state.js.map +1 -0
  47. package/dist/es2015/inject.js +6 -8
  48. package/dist/es2015/inject.js.map +1 -1
  49. package/dist/es2015/injectors/singleton-injector.js +6 -10
  50. package/dist/es2015/injectors/singleton-injector.js.map +1 -1
  51. package/dist/es2015/logger-level.js +9 -0
  52. package/dist/es2015/logger-level.js.map +1 -0
  53. package/dist/es2015/logger.js +79 -0
  54. package/dist/es2015/logger.js.map +1 -0
  55. package/dist/es2015/metadata.js +45 -57
  56. package/dist/es2015/metadata.js.map +1 -1
  57. package/dist/es2015/null-value-resolver.js +2 -0
  58. package/dist/es2015/null-value-resolver.js.map +1 -0
  59. package/dist/es2015/nullable.js +2 -0
  60. package/dist/es2015/nullable.js.map +1 -0
  61. package/dist/es2015/optional.js +2 -0
  62. package/dist/es2015/optional.js.map +1 -0
  63. package/dist/es2015/property-decorator.js +2 -0
  64. package/dist/es2015/property-decorator.js.map +1 -0
  65. package/dist/es2015/property-extension-metadata-ctor-set-key.js +1 -1
  66. package/dist/es2015/property-extension-metadata-ctor-set-key.js.map +1 -1
  67. package/dist/es2015/property-extension-metadata.js.map +1 -1
  68. package/dist/es2015/property-metadata.js +224 -145
  69. package/dist/es2015/property-metadata.js.map +1 -1
  70. package/dist/es2015/property-sorters/asc-property-sorter.js +1 -9
  71. package/dist/es2015/property-sorters/asc-property-sorter.js.map +1 -1
  72. package/dist/es2015/property-sorters/desc-property-sorter.js +1 -9
  73. package/dist/es2015/property-sorters/desc-property-sorter.js.map +1 -1
  74. package/dist/es2015/property-state.js +2 -0
  75. package/dist/es2015/property-state.js.map +1 -0
  76. package/dist/es2015/property-states/index.js +3 -0
  77. package/dist/es2015/property-states/index.js.map +1 -0
  78. package/dist/es2015/property-states/resolved-property-state.js +27 -0
  79. package/dist/es2015/property-states/resolved-property-state.js.map +1 -0
  80. package/dist/es2015/property-states/unresolved-property-state.js +167 -0
  81. package/dist/es2015/property-states/unresolved-property-state.js.map +1 -0
  82. package/dist/es2015/property.js +44 -22
  83. package/dist/es2015/property.js.map +1 -1
  84. package/dist/es2015/reference-handlers/circular-reference-handler.js +2 -3
  85. package/dist/es2015/reference-handlers/circular-reference-handler.js.map +1 -1
  86. package/dist/es2015/reference-handlers/json-path-reference-handler.js +7 -6
  87. package/dist/es2015/reference-handlers/json-path-reference-handler.js.map +1 -1
  88. package/dist/es2015/reference-handlers/plain-reference-handler.js +2 -3
  89. package/dist/es2015/reference-handlers/plain-reference-handler.js.map +1 -1
  90. package/dist/es2015/serializer-context.js +65 -171
  91. package/dist/es2015/serializer-context.js.map +1 -1
  92. package/dist/es2015/serializers/any-serializer.js +4 -5
  93. package/dist/es2015/serializers/any-serializer.js.map +1 -1
  94. package/dist/es2015/serializers/array-buffer-serializer.js +8 -13
  95. package/dist/es2015/serializers/array-buffer-serializer.js.map +1 -1
  96. package/dist/es2015/serializers/array-serializer.js +18 -25
  97. package/dist/es2015/serializers/array-serializer.js.map +1 -1
  98. package/dist/es2015/serializers/boolean-serializer.js +12 -19
  99. package/dist/es2015/serializers/boolean-serializer.js.map +1 -1
  100. package/dist/es2015/serializers/data-view-serializer.js +8 -14
  101. package/dist/es2015/serializers/data-view-serializer.js.map +1 -1
  102. package/dist/es2015/serializers/date-serializer.js +8 -13
  103. package/dist/es2015/serializers/date-serializer.js.map +1 -1
  104. package/dist/es2015/serializers/float-32-array-serializer.js +8 -14
  105. package/dist/es2015/serializers/float-32-array-serializer.js.map +1 -1
  106. package/dist/es2015/serializers/float-64-array-serializer.js +8 -14
  107. package/dist/es2015/serializers/float-64-array-serializer.js.map +1 -1
  108. package/dist/es2015/serializers/int-16-array-serializer.js +8 -14
  109. package/dist/es2015/serializers/int-16-array-serializer.js.map +1 -1
  110. package/dist/es2015/serializers/int-32-array-serializer.js +8 -14
  111. package/dist/es2015/serializers/int-32-array-serializer.js.map +1 -1
  112. package/dist/es2015/serializers/int-8-array-serializer.js +8 -14
  113. package/dist/es2015/serializers/int-8-array-serializer.js.map +1 -1
  114. package/dist/es2015/serializers/map-serializer.js +42 -54
  115. package/dist/es2015/serializers/map-serializer.js.map +1 -1
  116. package/dist/es2015/serializers/number-serializer.js +10 -17
  117. package/dist/es2015/serializers/number-serializer.js.map +1 -1
  118. package/dist/es2015/serializers/set-serializer.js +19 -26
  119. package/dist/es2015/serializers/set-serializer.js.map +1 -1
  120. package/dist/es2015/serializers/string-serializer.js +12 -19
  121. package/dist/es2015/serializers/string-serializer.js.map +1 -1
  122. package/dist/es2015/serializers/type-serializer.js +64 -71
  123. package/dist/es2015/serializers/type-serializer.js.map +1 -1
  124. package/dist/es2015/serializers/uint-16-array-serializer.js +8 -14
  125. package/dist/es2015/serializers/uint-16-array-serializer.js.map +1 -1
  126. package/dist/es2015/serializers/uint-32-array-serializer.js +8 -14
  127. package/dist/es2015/serializers/uint-32-array-serializer.js.map +1 -1
  128. package/dist/es2015/serializers/uint-8-array-serializer.js +8 -14
  129. package/dist/es2015/serializers/uint-8-array-serializer.js.map +1 -1
  130. package/dist/es2015/serializers/uint-8-clamped-array-serializer.js +8 -14
  131. package/dist/es2015/serializers/uint-8-clamped-array-serializer.js.map +1 -1
  132. package/dist/es2015/serializers/unknown-serializer.js +4 -5
  133. package/dist/es2015/serializers/unknown-serializer.js.map +1 -1
  134. package/dist/es2015/type-decorator.js +2 -0
  135. package/dist/es2015/type-decorator.js.map +1 -0
  136. package/dist/es2015/type-entry.js +2 -0
  137. package/dist/es2015/type-entry.js.map +1 -0
  138. package/dist/es2015/type-extension-metadata-ctor-set-key.js +1 -1
  139. package/dist/es2015/type-extension-metadata-ctor-set-key.js.map +1 -1
  140. package/dist/es2015/type-extension-metadata.js.map +1 -1
  141. package/dist/es2015/type-manager.js +57 -55
  142. package/dist/es2015/type-manager.js.map +1 -1
  143. package/dist/es2015/type-metadata-symbol.js +1 -1
  144. package/dist/es2015/type-metadata-symbol.js.map +1 -1
  145. package/dist/es2015/type-metadata.js +465 -222
  146. package/dist/es2015/type-metadata.js.map +1 -1
  147. package/dist/es2015/type-scope.js +58 -0
  148. package/dist/es2015/type-scope.js.map +1 -0
  149. package/dist/es2015/type-state.js +2 -0
  150. package/dist/es2015/type-state.js.map +1 -0
  151. package/dist/es2015/type-states/index.js +3 -0
  152. package/dist/es2015/type-states/index.js.map +1 -0
  153. package/dist/es2015/type-states/resolved-type-state.js +44 -0
  154. package/dist/es2015/type-states/resolved-type-state.js.map +1 -0
  155. package/dist/es2015/type-states/unresolved-type-state.js +303 -0
  156. package/dist/es2015/type-states/unresolved-type-state.js.map +1 -0
  157. package/dist/es2015/type.js +3 -1
  158. package/dist/es2015/type.js.map +1 -1
  159. package/dist/es5/constants/default-value-resolver.js +2 -0
  160. package/dist/es5/constants/default-value-resolver.js.map +1 -0
  161. package/dist/es5/constants/empty-array.js +2 -0
  162. package/dist/es5/constants/empty-array.js.map +1 -0
  163. package/dist/es5/constants/empty-map.js +2 -0
  164. package/dist/es5/constants/empty-map.js.map +1 -0
  165. package/dist/es5/constants/index.js +5 -0
  166. package/dist/es5/constants/index.js.map +1 -0
  167. package/dist/es5/constants/null-value-resolver.js +2 -0
  168. package/dist/es5/constants/null-value-resolver.js.map +1 -0
  169. package/dist/es5/custom-key.js.map +1 -1
  170. package/dist/es5/factories/type-factory.js +63 -39
  171. package/dist/es5/factories/type-factory.js.map +1 -1
  172. package/dist/es5/functions/get-own-reflect-metadata.js +1 -2
  173. package/dist/es5/functions/get-own-reflect-metadata.js.map +1 -1
  174. package/dist/es5/functions/get-reflect-metadata.js +1 -2
  175. package/dist/es5/functions/get-reflect-metadata.js.map +1 -1
  176. package/dist/es5/functions/get-words.js +61 -2
  177. package/dist/es5/functions/get-words.js.map +1 -1
  178. package/dist/es5/functions/index.js +0 -12
  179. package/dist/es5/functions/index.js.map +1 -1
  180. package/dist/es5/functions/json-parse.js.map +1 -1
  181. package/dist/es5/functions/json-stringify.js +6 -5
  182. package/dist/es5/functions/json-stringify.js.map +1 -1
  183. package/dist/es5/functions/name-of.js +1 -5
  184. package/dist/es5/functions/name-of.js.map +1 -1
  185. package/dist/es5/index.js +17 -12
  186. package/dist/es5/index.js.map +1 -1
  187. package/dist/es5/inject-decorator.js +2 -0
  188. package/dist/es5/inject-decorator.js.map +1 -0
  189. package/dist/es5/inject-metadata.js +49 -34
  190. package/dist/es5/inject-metadata.js.map +1 -1
  191. package/dist/es5/inject-sorters/asc-inject-sorter.js +1 -9
  192. package/dist/es5/inject-sorters/asc-inject-sorter.js.map +1 -1
  193. package/dist/es5/inject-sorters/desc-inject-sorter.js +1 -9
  194. package/dist/es5/inject-sorters/desc-inject-sorter.js.map +1 -1
  195. package/dist/es5/inject-state.js +2 -0
  196. package/dist/es5/inject-state.js.map +1 -0
  197. package/dist/es5/inject-states/index.js +3 -0
  198. package/dist/es5/inject-states/index.js.map +1 -0
  199. package/dist/es5/inject-states/resolved-inject-state.js +12 -0
  200. package/dist/es5/inject-states/resolved-inject-state.js.map +1 -0
  201. package/dist/es5/inject-states/unresolved-inject-state.js +45 -0
  202. package/dist/es5/inject-states/unresolved-inject-state.js.map +1 -0
  203. package/dist/es5/inject.js +6 -8
  204. package/dist/es5/inject.js.map +1 -1
  205. package/dist/es5/injectors/singleton-injector.js +31 -22
  206. package/dist/es5/injectors/singleton-injector.js.map +1 -1
  207. package/dist/es5/logger-level.js +9 -0
  208. package/dist/es5/logger-level.js.map +1 -0
  209. package/dist/es5/logger.js +122 -0
  210. package/dist/es5/logger.js.map +1 -0
  211. package/dist/es5/metadata.js +44 -79
  212. package/dist/es5/metadata.js.map +1 -1
  213. package/dist/es5/null-value-resolver.js +2 -0
  214. package/dist/es5/null-value-resolver.js.map +1 -0
  215. package/dist/es5/nullable.js +2 -0
  216. package/dist/es5/nullable.js.map +1 -0
  217. package/dist/es5/optional.js +2 -0
  218. package/dist/es5/optional.js.map +1 -0
  219. package/dist/es5/property-decorator.js +2 -0
  220. package/dist/es5/property-decorator.js.map +1 -0
  221. package/dist/es5/property-extension-metadata-ctor-set-key.js +1 -1
  222. package/dist/es5/property-extension-metadata-ctor-set-key.js.map +1 -1
  223. package/dist/es5/property-extension-metadata.js.map +1 -1
  224. package/dist/es5/property-metadata.js +288 -162
  225. package/dist/es5/property-metadata.js.map +1 -1
  226. package/dist/es5/property-sorters/asc-property-sorter.js +1 -9
  227. package/dist/es5/property-sorters/asc-property-sorter.js.map +1 -1
  228. package/dist/es5/property-sorters/desc-property-sorter.js +1 -9
  229. package/dist/es5/property-sorters/desc-property-sorter.js.map +1 -1
  230. package/dist/es5/property-state.js +2 -0
  231. package/dist/es5/property-state.js.map +1 -0
  232. package/dist/es5/property-states/index.js +3 -0
  233. package/dist/es5/property-states/index.js.map +1 -0
  234. package/dist/es5/property-states/resolved-property-state.js +29 -0
  235. package/dist/es5/property-states/resolved-property-state.js.map +1 -0
  236. package/dist/es5/property-states/unresolved-property-state.js +249 -0
  237. package/dist/es5/property-states/unresolved-property-state.js.map +1 -0
  238. package/dist/es5/property.js +44 -22
  239. package/dist/es5/property.js.map +1 -1
  240. package/dist/es5/reference-handlers/circular-reference-handler.js +2 -3
  241. package/dist/es5/reference-handlers/circular-reference-handler.js.map +1 -1
  242. package/dist/es5/reference-handlers/json-path-reference-handler.js +10 -31
  243. package/dist/es5/reference-handlers/json-path-reference-handler.js.map +1 -1
  244. package/dist/es5/reference-handlers/plain-reference-handler.js +2 -3
  245. package/dist/es5/reference-handlers/plain-reference-handler.js.map +1 -1
  246. package/dist/es5/serializer-context.js +71 -237
  247. package/dist/es5/serializer-context.js.map +1 -1
  248. package/dist/es5/serializers/any-serializer.js +4 -5
  249. package/dist/es5/serializers/any-serializer.js.map +1 -1
  250. package/dist/es5/serializers/array-buffer-serializer.js +8 -13
  251. package/dist/es5/serializers/array-buffer-serializer.js.map +1 -1
  252. package/dist/es5/serializers/array-serializer.js +18 -31
  253. package/dist/es5/serializers/array-serializer.js.map +1 -1
  254. package/dist/es5/serializers/boolean-serializer.js +12 -19
  255. package/dist/es5/serializers/boolean-serializer.js.map +1 -1
  256. package/dist/es5/serializers/data-view-serializer.js +8 -14
  257. package/dist/es5/serializers/data-view-serializer.js.map +1 -1
  258. package/dist/es5/serializers/date-serializer.js +8 -13
  259. package/dist/es5/serializers/date-serializer.js.map +1 -1
  260. package/dist/es5/serializers/float-32-array-serializer.js +8 -14
  261. package/dist/es5/serializers/float-32-array-serializer.js.map +1 -1
  262. package/dist/es5/serializers/float-64-array-serializer.js +8 -14
  263. package/dist/es5/serializers/float-64-array-serializer.js.map +1 -1
  264. package/dist/es5/serializers/int-16-array-serializer.js +8 -14
  265. package/dist/es5/serializers/int-16-array-serializer.js.map +1 -1
  266. package/dist/es5/serializers/int-32-array-serializer.js +8 -14
  267. package/dist/es5/serializers/int-32-array-serializer.js.map +1 -1
  268. package/dist/es5/serializers/int-8-array-serializer.js +8 -14
  269. package/dist/es5/serializers/int-8-array-serializer.js.map +1 -1
  270. package/dist/es5/serializers/map-serializer.js +69 -55
  271. package/dist/es5/serializers/map-serializer.js.map +1 -1
  272. package/dist/es5/serializers/number-serializer.js +10 -17
  273. package/dist/es5/serializers/number-serializer.js.map +1 -1
  274. package/dist/es5/serializers/set-serializer.js +30 -27
  275. package/dist/es5/serializers/set-serializer.js.map +1 -1
  276. package/dist/es5/serializers/string-serializer.js +12 -19
  277. package/dist/es5/serializers/string-serializer.js.map +1 -1
  278. package/dist/es5/serializers/type-serializer.js +65 -101
  279. package/dist/es5/serializers/type-serializer.js.map +1 -1
  280. package/dist/es5/serializers/uint-16-array-serializer.js +8 -14
  281. package/dist/es5/serializers/uint-16-array-serializer.js.map +1 -1
  282. package/dist/es5/serializers/uint-32-array-serializer.js +8 -14
  283. package/dist/es5/serializers/uint-32-array-serializer.js.map +1 -1
  284. package/dist/es5/serializers/uint-8-array-serializer.js +8 -14
  285. package/dist/es5/serializers/uint-8-array-serializer.js.map +1 -1
  286. package/dist/es5/serializers/uint-8-clamped-array-serializer.js +8 -14
  287. package/dist/es5/serializers/uint-8-clamped-array-serializer.js.map +1 -1
  288. package/dist/es5/serializers/unknown-serializer.js +4 -5
  289. package/dist/es5/serializers/unknown-serializer.js.map +1 -1
  290. package/dist/es5/type-decorator.js +2 -0
  291. package/dist/es5/type-decorator.js.map +1 -0
  292. package/dist/es5/type-entry.js +2 -0
  293. package/dist/es5/type-entry.js.map +1 -0
  294. package/dist/es5/type-extension-metadata-ctor-set-key.js +1 -1
  295. package/dist/es5/type-extension-metadata-ctor-set-key.js.map +1 -1
  296. package/dist/es5/type-extension-metadata.js.map +1 -1
  297. package/dist/es5/type-manager.js +112 -63
  298. package/dist/es5/type-manager.js.map +1 -1
  299. package/dist/es5/type-metadata-symbol.js +1 -1
  300. package/dist/es5/type-metadata-symbol.js.map +1 -1
  301. package/dist/es5/type-metadata.js +597 -265
  302. package/dist/es5/type-metadata.js.map +1 -1
  303. package/dist/es5/type-scope.js +108 -0
  304. package/dist/es5/type-scope.js.map +1 -0
  305. package/dist/es5/type-state.js +2 -0
  306. package/dist/es5/type-state.js.map +1 -0
  307. package/dist/es5/type-states/index.js +3 -0
  308. package/dist/es5/type-states/index.js.map +1 -0
  309. package/dist/es5/type-states/resolved-type-state.js +46 -0
  310. package/dist/es5/type-states/resolved-type-state.js.map +1 -0
  311. package/dist/es5/type-states/unresolved-type-state.js +453 -0
  312. package/dist/es5/type-states/unresolved-type-state.js.map +1 -0
  313. package/dist/es5/type.js +3 -1
  314. package/dist/es5/type.js.map +1 -1
  315. package/dist/types/constants/default-value-resolver.d.ts +8 -0
  316. package/dist/types/constants/default-value-resolver.d.ts.map +1 -0
  317. package/dist/types/constants/empty-array.d.ts +7 -0
  318. package/dist/types/constants/empty-array.d.ts.map +1 -0
  319. package/dist/types/constants/empty-map.d.ts +7 -0
  320. package/dist/types/constants/empty-map.d.ts.map +1 -0
  321. package/dist/types/constants/index.d.ts +5 -0
  322. package/dist/types/constants/index.d.ts.map +1 -0
  323. package/dist/types/constants/null-value-resolver.d.ts +8 -0
  324. package/dist/types/constants/null-value-resolver.d.ts.map +1 -0
  325. package/dist/types/custom-key.d.ts +4 -3
  326. package/dist/types/custom-key.d.ts.map +1 -1
  327. package/dist/types/custom-option.d.ts +2 -2
  328. package/dist/types/custom-value.d.ts +2 -1
  329. package/dist/types/custom-value.d.ts.map +1 -1
  330. package/dist/types/factories/type-factory.d.ts +8 -5
  331. package/dist/types/factories/type-factory.d.ts.map +1 -1
  332. package/dist/types/factory.d.ts +7 -4
  333. package/dist/types/factory.d.ts.map +1 -1
  334. package/dist/types/functions/get-own-reflect-metadata.d.ts.map +1 -1
  335. package/dist/types/functions/get-reflect-metadata.d.ts.map +1 -1
  336. package/dist/types/functions/get-words.d.ts +3 -3
  337. package/dist/types/functions/get-words.d.ts.map +1 -1
  338. package/dist/types/functions/index.d.ts +0 -12
  339. package/dist/types/functions/index.d.ts.map +1 -1
  340. package/dist/types/functions/json-parse.d.ts +1 -1
  341. package/dist/types/functions/json-parse.d.ts.map +1 -1
  342. package/dist/types/functions/json-stringify.d.ts.map +1 -1
  343. package/dist/types/functions/name-of.d.ts.map +1 -1
  344. package/dist/types/generic-argument.d.ts +2 -2
  345. package/dist/types/generic-argument.d.ts.map +1 -1
  346. package/dist/types/generic-metadata.d.ts +2 -2
  347. package/dist/types/generic-metadata.d.ts.map +1 -1
  348. package/dist/types/index.d.ts +17 -12
  349. package/dist/types/index.d.ts.map +1 -1
  350. package/dist/types/inject-decorator.d.ts +7 -0
  351. package/dist/types/inject-decorator.d.ts.map +1 -0
  352. package/dist/types/inject-metadata.d.ts +52 -45
  353. package/dist/types/inject-metadata.d.ts.map +1 -1
  354. package/dist/types/inject-options.d.ts +8 -8
  355. package/dist/types/inject-options.d.ts.map +1 -1
  356. package/dist/types/inject-sorter.d.ts +3 -3
  357. package/dist/types/inject-sorter.d.ts.map +1 -1
  358. package/dist/types/inject-sorters/asc-inject-sorter.d.ts +3 -3
  359. package/dist/types/inject-sorters/asc-inject-sorter.d.ts.map +1 -1
  360. package/dist/types/inject-sorters/desc-inject-sorter.d.ts +3 -3
  361. package/dist/types/inject-sorters/desc-inject-sorter.d.ts.map +1 -1
  362. package/dist/types/inject-state.d.ts +36 -0
  363. package/dist/types/inject-state.d.ts.map +1 -0
  364. package/dist/types/inject-states/index.d.ts +3 -0
  365. package/dist/types/inject-states/index.d.ts.map +1 -0
  366. package/dist/types/inject-states/resolved-inject-state.d.ts +46 -0
  367. package/dist/types/inject-states/resolved-inject-state.d.ts.map +1 -0
  368. package/dist/types/inject-states/unresolved-inject-state.d.ts +49 -0
  369. package/dist/types/inject-states/unresolved-inject-state.d.ts.map +1 -0
  370. package/dist/types/inject.d.ts +5 -4
  371. package/dist/types/inject.d.ts.map +1 -1
  372. package/dist/types/injector.d.ts +4 -3
  373. package/dist/types/injector.d.ts.map +1 -1
  374. package/dist/types/injectors/singleton-injector.d.ts +5 -5
  375. package/dist/types/injectors/singleton-injector.d.ts.map +1 -1
  376. package/dist/types/logger-level.d.ts +31 -0
  377. package/dist/types/logger-level.d.ts.map +1 -0
  378. package/dist/types/logger.d.ts +125 -0
  379. package/dist/types/logger.d.ts.map +1 -0
  380. package/dist/types/metadata.d.ts +29 -39
  381. package/dist/types/metadata.d.ts.map +1 -1
  382. package/dist/types/null-value-resolver.d.ts +9 -0
  383. package/dist/types/null-value-resolver.d.ts.map +1 -0
  384. package/dist/types/nullable.d.ts +7 -0
  385. package/dist/types/nullable.d.ts.map +1 -0
  386. package/dist/types/optional.d.ts +7 -0
  387. package/dist/types/optional.d.ts.map +1 -0
  388. package/dist/types/property-decorator.d.ts +7 -0
  389. package/dist/types/property-decorator.d.ts.map +1 -0
  390. package/dist/types/property-extension-metadata-ctor-set-key.d.ts +1 -1
  391. package/dist/types/property-extension-metadata-ctor-set-key.d.ts.map +1 -1
  392. package/dist/types/property-extension-metadata-ctor.d.ts +2 -2
  393. package/dist/types/property-extension-metadata-ctor.d.ts.map +1 -1
  394. package/dist/types/property-extension-metadata.d.ts +7 -7
  395. package/dist/types/property-extension-metadata.d.ts.map +1 -1
  396. package/dist/types/property-metadata.d.ts +134 -119
  397. package/dist/types/property-metadata.d.ts.map +1 -1
  398. package/dist/types/property-options.d.ts +11 -10
  399. package/dist/types/property-options.d.ts.map +1 -1
  400. package/dist/types/property-sorter.d.ts +3 -3
  401. package/dist/types/property-sorter.d.ts.map +1 -1
  402. package/dist/types/property-sorters/asc-property-sorter.d.ts +3 -3
  403. package/dist/types/property-sorters/asc-property-sorter.d.ts.map +1 -1
  404. package/dist/types/property-sorters/desc-property-sorter.d.ts +3 -3
  405. package/dist/types/property-sorters/desc-property-sorter.d.ts.map +1 -1
  406. package/dist/types/property-state.d.ts +149 -0
  407. package/dist/types/property-state.d.ts.map +1 -0
  408. package/dist/types/property-states/index.d.ts +3 -0
  409. package/dist/types/property-states/index.d.ts.map +1 -0
  410. package/dist/types/property-states/resolved-property-state.d.ts +176 -0
  411. package/dist/types/property-states/resolved-property-state.d.ts.map +1 -0
  412. package/dist/types/property-states/unresolved-property-state.d.ts +162 -0
  413. package/dist/types/property-states/unresolved-property-state.d.ts.map +1 -0
  414. package/dist/types/property.d.ts +5 -4
  415. package/dist/types/property.d.ts.map +1 -1
  416. package/dist/types/reference-handlers/circular-reference-handler.d.ts.map +1 -1
  417. package/dist/types/reference-handlers/json-path-reference-handler.d.ts.map +1 -1
  418. package/dist/types/reference-handlers/plain-reference-handler.d.ts.map +1 -1
  419. package/dist/types/reference-value-setter.d.ts +1 -1
  420. package/dist/types/reference-value-setter.d.ts.map +1 -1
  421. package/dist/types/serializer-context.d.ts +70 -164
  422. package/dist/types/serializer-context.d.ts.map +1 -1
  423. package/dist/types/serializer.d.ts +8 -8
  424. package/dist/types/serializer.d.ts.map +1 -1
  425. package/dist/types/serializers/any-serializer.d.ts.map +1 -1
  426. package/dist/types/serializers/array-buffer-serializer.d.ts.map +1 -1
  427. package/dist/types/serializers/array-serializer.d.ts.map +1 -1
  428. package/dist/types/serializers/boolean-serializer.d.ts +1 -1
  429. package/dist/types/serializers/boolean-serializer.d.ts.map +1 -1
  430. package/dist/types/serializers/data-view-serializer.d.ts.map +1 -1
  431. package/dist/types/serializers/date-serializer.d.ts.map +1 -1
  432. package/dist/types/serializers/float-32-array-serializer.d.ts.map +1 -1
  433. package/dist/types/serializers/float-64-array-serializer.d.ts.map +1 -1
  434. package/dist/types/serializers/int-16-array-serializer.d.ts.map +1 -1
  435. package/dist/types/serializers/int-32-array-serializer.d.ts.map +1 -1
  436. package/dist/types/serializers/int-8-array-serializer.d.ts.map +1 -1
  437. package/dist/types/serializers/map-serializer.d.ts.map +1 -1
  438. package/dist/types/serializers/number-serializer.d.ts +1 -1
  439. package/dist/types/serializers/number-serializer.d.ts.map +1 -1
  440. package/dist/types/serializers/set-serializer.d.ts.map +1 -1
  441. package/dist/types/serializers/string-serializer.d.ts +1 -1
  442. package/dist/types/serializers/string-serializer.d.ts.map +1 -1
  443. package/dist/types/serializers/type-serializer.d.ts.map +1 -1
  444. package/dist/types/serializers/uint-16-array-serializer.d.ts.map +1 -1
  445. package/dist/types/serializers/uint-32-array-serializer.d.ts.map +1 -1
  446. package/dist/types/serializers/uint-8-array-serializer.d.ts.map +1 -1
  447. package/dist/types/serializers/uint-8-clamped-array-serializer.d.ts.map +1 -1
  448. package/dist/types/serializers/unknown-serializer.d.ts.map +1 -1
  449. package/dist/types/type-abstraction.d.ts +2 -2
  450. package/dist/types/type-abstraction.d.ts.map +1 -1
  451. package/dist/types/type-argument.d.ts +3 -3
  452. package/dist/types/type-argument.d.ts.map +1 -1
  453. package/dist/types/type-configuration.d.ts +4 -4
  454. package/dist/types/type-configuration.d.ts.map +1 -1
  455. package/dist/types/type-ctor.d.ts +2 -2
  456. package/dist/types/type-ctor.d.ts.map +1 -1
  457. package/dist/types/type-decorator.d.ts +7 -0
  458. package/dist/types/type-decorator.d.ts.map +1 -0
  459. package/dist/types/type-entry.d.ts +29 -0
  460. package/dist/types/type-entry.d.ts.map +1 -0
  461. package/dist/types/type-extension-metadata-ctor-set-key.d.ts +1 -1
  462. package/dist/types/type-extension-metadata-ctor-set-key.d.ts.map +1 -1
  463. package/dist/types/type-extension-metadata-ctor.d.ts +2 -2
  464. package/dist/types/type-extension-metadata-ctor.d.ts.map +1 -1
  465. package/dist/types/type-extension-metadata.d.ts +6 -6
  466. package/dist/types/type-extension-metadata.d.ts.map +1 -1
  467. package/dist/types/type-fn.d.ts +2 -2
  468. package/dist/types/type-fn.d.ts.map +1 -1
  469. package/dist/types/type-like.d.ts +2 -2
  470. package/dist/types/type-like.d.ts.map +1 -1
  471. package/dist/types/type-manager-options.d.ts.map +1 -1
  472. package/dist/types/type-manager.d.ts +120 -120
  473. package/dist/types/type-manager.d.ts.map +1 -1
  474. package/dist/types/type-metadata-symbol.d.ts +1 -1
  475. package/dist/types/type-metadata-symbol.d.ts.map +1 -1
  476. package/dist/types/type-metadata.d.ts +253 -152
  477. package/dist/types/type-metadata.d.ts.map +1 -1
  478. package/dist/types/type-options-base.d.ts +13 -12
  479. package/dist/types/type-options-base.d.ts.map +1 -1
  480. package/dist/types/type-options.d.ts +10 -10
  481. package/dist/types/type-options.d.ts.map +1 -1
  482. package/dist/types/type-resolver.d.ts +2 -2
  483. package/dist/types/type-resolver.d.ts.map +1 -1
  484. package/dist/types/type-scope.d.ts +68 -0
  485. package/dist/types/type-scope.d.ts.map +1 -0
  486. package/dist/types/type-state.d.ts +262 -0
  487. package/dist/types/type-state.d.ts.map +1 -0
  488. package/dist/types/type-states/index.d.ts +3 -0
  489. package/dist/types/type-states/index.d.ts.map +1 -0
  490. package/dist/types/type-states/resolved-type-state.d.ts +306 -0
  491. package/dist/types/type-states/resolved-type-state.d.ts.map +1 -0
  492. package/dist/types/type-states/unresolved-type-state.d.ts +275 -0
  493. package/dist/types/type-states/unresolved-type-state.d.ts.map +1 -0
  494. package/dist/types/type.d.ts +4 -3
  495. package/dist/types/type.d.ts.map +1 -1
  496. package/dist/umd/index.js +1 -1
  497. package/dist/umd/index.js.map +1 -1
  498. package/package.json +1 -7
  499. package/dist/es2015/custom-context.js +0 -59
  500. package/dist/es2015/custom-context.js.map +0 -1
  501. package/dist/es2015/functions/is-arrow-function.js +0 -5
  502. package/dist/es2015/functions/is-arrow-function.js.map +0 -1
  503. package/dist/es2015/functions/is-ctor-function.js +0 -5
  504. package/dist/es2015/functions/is-ctor-function.js.map +0 -1
  505. package/dist/es2015/functions/is-data-view.js +0 -4
  506. package/dist/es2015/functions/is-data-view.js.map +0 -1
  507. package/dist/es2015/functions/is-float-32-array.js +0 -4
  508. package/dist/es2015/functions/is-float-32-array.js.map +0 -1
  509. package/dist/es2015/functions/is-float-64-array.js +0 -4
  510. package/dist/es2015/functions/is-float-64-array.js.map +0 -1
  511. package/dist/es2015/functions/is-int-16-array.js +0 -4
  512. package/dist/es2015/functions/is-int-16-array.js.map +0 -1
  513. package/dist/es2015/functions/is-int-32-array.js +0 -4
  514. package/dist/es2015/functions/is-int-32-array.js.map +0 -1
  515. package/dist/es2015/functions/is-int-8-array.js +0 -4
  516. package/dist/es2015/functions/is-int-8-array.js.map +0 -1
  517. package/dist/es2015/functions/is-uint-16-array.js +0 -4
  518. package/dist/es2015/functions/is-uint-16-array.js.map +0 -1
  519. package/dist/es2015/functions/is-uint-32-array.js +0 -4
  520. package/dist/es2015/functions/is-uint-32-array.js.map +0 -1
  521. package/dist/es2015/functions/is-uint-8-array.js +0 -4
  522. package/dist/es2015/functions/is-uint-8-array.js.map +0 -1
  523. package/dist/es2015/functions/is-uint-8-clamped-array.js +0 -4
  524. package/dist/es2015/functions/is-uint-8-clamped-array.js.map +0 -1
  525. package/dist/es2015/generic-metadata-resolver.js +0 -2
  526. package/dist/es2015/generic-metadata-resolver.js.map +0 -1
  527. package/dist/es2015/generic-structure.js +0 -2
  528. package/dist/es2015/generic-structure.js.map +0 -1
  529. package/dist/es2015/inject-internals.js +0 -2
  530. package/dist/es2015/inject-internals.js.map +0 -1
  531. package/dist/es2015/log-level.js +0 -8
  532. package/dist/es2015/log-level.js.map +0 -1
  533. package/dist/es2015/log.js +0 -50
  534. package/dist/es2015/log.js.map +0 -1
  535. package/dist/es2015/property-internals.js +0 -2
  536. package/dist/es2015/property-internals.js.map +0 -1
  537. package/dist/es2015/serializer-context-options.js +0 -2
  538. package/dist/es2015/serializer-context-options.js.map +0 -1
  539. package/dist/es2015/type-context-entry.js +0 -9
  540. package/dist/es2015/type-context-entry.js.map +0 -1
  541. package/dist/es2015/type-context.js +0 -31
  542. package/dist/es2015/type-context.js.map +0 -1
  543. package/dist/es2015/type-internals.js +0 -2
  544. package/dist/es2015/type-internals.js.map +0 -1
  545. package/dist/es2015/type-metadata-resolver.js +0 -2
  546. package/dist/es2015/type-metadata-resolver.js.map +0 -1
  547. package/dist/es5/custom-context.js +0 -95
  548. package/dist/es5/custom-context.js.map +0 -1
  549. package/dist/es5/functions/is-arrow-function.js +0 -5
  550. package/dist/es5/functions/is-arrow-function.js.map +0 -1
  551. package/dist/es5/functions/is-ctor-function.js +0 -5
  552. package/dist/es5/functions/is-ctor-function.js.map +0 -1
  553. package/dist/es5/functions/is-data-view.js +0 -4
  554. package/dist/es5/functions/is-data-view.js.map +0 -1
  555. package/dist/es5/functions/is-float-32-array.js +0 -4
  556. package/dist/es5/functions/is-float-32-array.js.map +0 -1
  557. package/dist/es5/functions/is-float-64-array.js +0 -4
  558. package/dist/es5/functions/is-float-64-array.js.map +0 -1
  559. package/dist/es5/functions/is-int-16-array.js +0 -4
  560. package/dist/es5/functions/is-int-16-array.js.map +0 -1
  561. package/dist/es5/functions/is-int-32-array.js +0 -4
  562. package/dist/es5/functions/is-int-32-array.js.map +0 -1
  563. package/dist/es5/functions/is-int-8-array.js +0 -4
  564. package/dist/es5/functions/is-int-8-array.js.map +0 -1
  565. package/dist/es5/functions/is-uint-16-array.js +0 -4
  566. package/dist/es5/functions/is-uint-16-array.js.map +0 -1
  567. package/dist/es5/functions/is-uint-32-array.js +0 -4
  568. package/dist/es5/functions/is-uint-32-array.js.map +0 -1
  569. package/dist/es5/functions/is-uint-8-array.js +0 -4
  570. package/dist/es5/functions/is-uint-8-array.js.map +0 -1
  571. package/dist/es5/functions/is-uint-8-clamped-array.js +0 -4
  572. package/dist/es5/functions/is-uint-8-clamped-array.js.map +0 -1
  573. package/dist/es5/generic-metadata-resolver.js +0 -2
  574. package/dist/es5/generic-metadata-resolver.js.map +0 -1
  575. package/dist/es5/generic-structure.js +0 -2
  576. package/dist/es5/generic-structure.js.map +0 -1
  577. package/dist/es5/inject-internals.js +0 -2
  578. package/dist/es5/inject-internals.js.map +0 -1
  579. package/dist/es5/log-level.js +0 -8
  580. package/dist/es5/log-level.js.map +0 -1
  581. package/dist/es5/log.js +0 -65
  582. package/dist/es5/log.js.map +0 -1
  583. package/dist/es5/property-internals.js +0 -2
  584. package/dist/es5/property-internals.js.map +0 -1
  585. package/dist/es5/serializer-context-options.js +0 -2
  586. package/dist/es5/serializer-context-options.js.map +0 -1
  587. package/dist/es5/type-context-entry.js +0 -11
  588. package/dist/es5/type-context-entry.js.map +0 -1
  589. package/dist/es5/type-context.js +0 -33
  590. package/dist/es5/type-context.js.map +0 -1
  591. package/dist/es5/type-internals.js +0 -2
  592. package/dist/es5/type-internals.js.map +0 -1
  593. package/dist/es5/type-metadata-resolver.js +0 -2
  594. package/dist/es5/type-metadata-resolver.js.map +0 -1
  595. package/dist/types/custom-context.d.ts +0 -89
  596. package/dist/types/custom-context.d.ts.map +0 -1
  597. package/dist/types/functions/is-arrow-function.d.ts +0 -9
  598. package/dist/types/functions/is-arrow-function.d.ts.map +0 -1
  599. package/dist/types/functions/is-ctor-function.d.ts +0 -9
  600. package/dist/types/functions/is-ctor-function.d.ts.map +0 -1
  601. package/dist/types/functions/is-data-view.d.ts +0 -9
  602. package/dist/types/functions/is-data-view.d.ts.map +0 -1
  603. package/dist/types/functions/is-float-32-array.d.ts +0 -9
  604. package/dist/types/functions/is-float-32-array.d.ts.map +0 -1
  605. package/dist/types/functions/is-float-64-array.d.ts +0 -9
  606. package/dist/types/functions/is-float-64-array.d.ts.map +0 -1
  607. package/dist/types/functions/is-int-16-array.d.ts +0 -9
  608. package/dist/types/functions/is-int-16-array.d.ts.map +0 -1
  609. package/dist/types/functions/is-int-32-array.d.ts +0 -9
  610. package/dist/types/functions/is-int-32-array.d.ts.map +0 -1
  611. package/dist/types/functions/is-int-8-array.d.ts +0 -9
  612. package/dist/types/functions/is-int-8-array.d.ts.map +0 -1
  613. package/dist/types/functions/is-uint-16-array.d.ts +0 -9
  614. package/dist/types/functions/is-uint-16-array.d.ts.map +0 -1
  615. package/dist/types/functions/is-uint-32-array.d.ts +0 -9
  616. package/dist/types/functions/is-uint-32-array.d.ts.map +0 -1
  617. package/dist/types/functions/is-uint-8-array.d.ts +0 -9
  618. package/dist/types/functions/is-uint-8-array.d.ts.map +0 -1
  619. package/dist/types/functions/is-uint-8-clamped-array.d.ts +0 -9
  620. package/dist/types/functions/is-uint-8-clamped-array.d.ts.map +0 -1
  621. package/dist/types/generic-metadata-resolver.d.ts +0 -8
  622. package/dist/types/generic-metadata-resolver.d.ts.map +0 -1
  623. package/dist/types/generic-structure.d.ts +0 -8
  624. package/dist/types/generic-structure.d.ts.map +0 -1
  625. package/dist/types/inject-internals.d.ts +0 -15
  626. package/dist/types/inject-internals.d.ts.map +0 -1
  627. package/dist/types/log-level.d.ts +0 -12
  628. package/dist/types/log-level.d.ts.map +0 -1
  629. package/dist/types/log.d.ts +0 -96
  630. package/dist/types/log.d.ts.map +0 -1
  631. package/dist/types/property-internals.d.ts +0 -36
  632. package/dist/types/property-internals.d.ts.map +0 -1
  633. package/dist/types/serializer-context-options.d.ts +0 -51
  634. package/dist/types/serializer-context-options.d.ts.map +0 -1
  635. package/dist/types/type-context-entry.d.ts +0 -37
  636. package/dist/types/type-context-entry.d.ts.map +0 -1
  637. package/dist/types/type-context.d.ts +0 -71
  638. package/dist/types/type-context.d.ts.map +0 -1
  639. package/dist/types/type-internals.d.ts +0 -15
  640. package/dist/types/type-internals.d.ts.map +0 -1
  641. package/dist/types/type-metadata-resolver.d.ts +0 -9
  642. package/dist/types/type-metadata-resolver.d.ts.map +0 -1
@@ -1,399 +1,525 @@
1
- import { __extends } from "tslib";
2
- import { isFunction, isNil, isUndefined } from 'lodash';
3
- import { CustomContext } from './custom-context';
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __values = (this && this.__values) || function(o) {
17
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
18
+ if (m) return m.call(o);
19
+ if (o && typeof o.length === "number") return {
20
+ next: function () {
21
+ if (o && i >= o.length) o = void 0;
22
+ return { value: o && o[i++], done: !o };
23
+ }
24
+ };
25
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
26
+ };
27
+ var __read = (this && this.__read) || function (o, n) {
28
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
29
+ if (!m) return o;
30
+ var i = m.call(o), r, ar = [], e;
31
+ try {
32
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
33
+ }
34
+ catch (error) { e = { error: error }; }
35
+ finally {
36
+ try {
37
+ if (r && !r.done && (m = i["return"])) m.call(i);
38
+ }
39
+ finally { if (e) throw e.error; }
40
+ }
41
+ return ar;
42
+ };
43
+ import { DEFAULT_VALUE_RESOLVER } from './constants/default-value-resolver';
44
+ import { EMPTY_ARRAY } from './constants/empty-array';
45
+ import { EMPTY_MAP } from './constants/empty-map';
46
+ import { NULL_VALUE_RESOLVER } from './constants/null-value-resolver';
4
47
  import { getReflectMetadata } from './functions/get-reflect-metadata';
5
48
  import { Metadata } from './metadata';
6
- import { propertyExtensionMetadataCtorSetKey } from './property-extension-metadata-ctor-set-key';
49
+ import { PROPERTY_EXTENSION_METADATA_CTOR_SET_KEY } from './property-extension-metadata-ctor-set-key';
50
+ import { ResolvedPropertyState } from './property-states/resolved-property-state';
51
+ import { UnresolvedPropertyState } from './property-states/unresolved-property-state';
7
52
  var PropertyMetadata = (function (_super) {
8
53
  __extends(PropertyMetadata, _super);
9
- function PropertyMetadata(declaringTypeMetadata, propertyName, propertyOptions) {
10
- var _this = _super.call(this, declaringTypeMetadata.typeManager) || this;
54
+ function PropertyMetadata(typeManager, typeFnMap, declaringTypeMetadata, propertyName, propertyOptions) {
55
+ var _this = _super.call(this, typeManager, typeFnMap) || this;
11
56
  _this.declaringTypeMetadata = declaringTypeMetadata;
12
57
  _this.propertyName = propertyName;
58
+ _this.normalizedPropertyName = propertyName.toLocaleLowerCase();
13
59
  _this.reflectTypeFn = getReflectMetadata('design:type', declaringTypeMetadata.typeFn.prototype, propertyName);
14
60
  _this.propertyOptions = _this.constructPropertyOptions(propertyOptions);
15
- _this.propertyInternals = _this.constructPropertyInternals();
61
+ _this.currentPropertyState = new UnresolvedPropertyState(_this);
16
62
  _this.configure(propertyOptions);
17
63
  return _this;
18
64
  }
19
- Object.defineProperty(PropertyMetadata.prototype, "alias", {
65
+ Object.defineProperty(PropertyMetadata.prototype, "propertyState", {
20
66
  get: function () {
21
- return this.propertyOptions.alias;
67
+ return this.currentPropertyState;
22
68
  },
23
69
  enumerable: false,
24
70
  configurable: true
25
71
  });
26
- Object.defineProperty(PropertyMetadata.prototype, "customOptions", {
72
+ Object.defineProperty(PropertyMetadata.prototype, "alias", {
27
73
  get: function () {
28
- return this.propertyOptions.customOptions;
74
+ return this.currentPropertyState.alias;
29
75
  },
30
76
  enumerable: false,
31
77
  configurable: true
32
78
  });
33
- Object.defineProperty(PropertyMetadata.prototype, "customContext", {
79
+ Object.defineProperty(PropertyMetadata.prototype, "customValueMap", {
34
80
  get: function () {
35
- var customContext = this.propertyInternals.customContext;
36
- if (isNil(customContext)) {
37
- this.propertyOptions.customOptions = new Array();
38
- this.propertyInternals.customContext = new CustomContext(this.propertyOptions.customOptions);
39
- customContext = this.propertyInternals.customContext;
40
- }
41
- return customContext;
81
+ return this.currentPropertyState.customValueMap;
42
82
  },
43
83
  enumerable: false,
44
84
  configurable: true
45
85
  });
46
86
  Object.defineProperty(PropertyMetadata.prototype, "serializedNullValue", {
47
87
  get: function () {
48
- if (this.preserveNull) {
49
- return null;
50
- }
51
- return this.serializedDefaultValue;
88
+ return this.currentPropertyState.serializedNullValueResolver();
52
89
  },
53
90
  enumerable: false,
54
91
  configurable: true
55
92
  });
56
93
  Object.defineProperty(PropertyMetadata.prototype, "serializedDefaultValue", {
57
94
  get: function () {
58
- var _a, _b;
59
- if (this.useDefaultValue) {
60
- var serializedDefaultValue = (_b = (_a = this.propertyOptions.defaultValue) !== null && _a !== void 0 ? _a : this.propertyOptions.serializedDefaultValue) !== null && _b !== void 0 ? _b : this.typeMetadata.serializedDefaultValue;
61
- var defaultValue = isFunction(serializedDefaultValue)
62
- ? serializedDefaultValue()
63
- : serializedDefaultValue;
64
- return defaultValue;
65
- }
66
- return undefined;
95
+ return this.currentPropertyState.serializedDefaultValueResolver();
67
96
  },
68
97
  enumerable: false,
69
98
  configurable: true
70
99
  });
71
100
  Object.defineProperty(PropertyMetadata.prototype, "deserializedNullValue", {
72
101
  get: function () {
73
- if (this.preserveNull) {
74
- return null;
75
- }
76
- return this.deserializedDefaultValue;
102
+ return this.currentPropertyState.deserializedNullValueResolver();
77
103
  },
78
104
  enumerable: false,
79
105
  configurable: true
80
106
  });
81
107
  Object.defineProperty(PropertyMetadata.prototype, "deserializedDefaultValue", {
82
108
  get: function () {
83
- var _a, _b;
84
- if (this.useDefaultValue) {
85
- var deserializedDefaultValue = (_b = (_a = this.propertyOptions.defaultValue) !== null && _a !== void 0 ? _a : this.propertyOptions.deserializedDefaultValue) !== null && _b !== void 0 ? _b : this.typeMetadata.deserializedDefaultValue;
86
- var defaultValue = isFunction(deserializedDefaultValue)
87
- ? deserializedDefaultValue()
88
- : deserializedDefaultValue;
89
- return defaultValue;
90
- }
91
- return undefined;
109
+ return this.currentPropertyState.deserializedDefaultValueResolver();
92
110
  },
93
111
  enumerable: false,
94
112
  configurable: true
95
113
  });
96
114
  Object.defineProperty(PropertyMetadata.prototype, "serializedPropertyName", {
97
115
  get: function () {
98
- var _a;
99
- var alias = this.alias;
100
- if (isNil(alias)) {
101
- var namingConvention = (_a = this.namingConvention) !== null && _a !== void 0 ? _a : this.declaringTypeMetadata.namingConvention;
102
- var propertyName = namingConvention ? namingConvention.convert(this.propertyName) : this.propertyName;
103
- return propertyName;
104
- }
105
- return alias;
116
+ return this.currentPropertyState.serializedPropertyName;
106
117
  },
107
118
  enumerable: false,
108
119
  configurable: true
109
120
  });
110
121
  Object.defineProperty(PropertyMetadata.prototype, "deserializedPropertyName", {
111
122
  get: function () {
112
- return this.propertyName;
123
+ return this.currentPropertyState.deserializedPropertyName;
113
124
  },
114
125
  enumerable: false,
115
126
  configurable: true
116
127
  });
117
128
  Object.defineProperty(PropertyMetadata.prototype, "deserializable", {
118
129
  get: function () {
119
- return this.propertyOptions.deserializable;
130
+ return this.currentPropertyState.deserializable;
120
131
  },
121
132
  enumerable: false,
122
133
  configurable: true
123
134
  });
124
135
  Object.defineProperty(PropertyMetadata.prototype, "genericArguments", {
125
136
  get: function () {
126
- return this.propertyOptions.genericArguments;
127
- },
128
- enumerable: false,
129
- configurable: true
130
- });
131
- Object.defineProperty(PropertyMetadata.prototype, "genericStructures", {
132
- get: function () {
133
- return this.propertyInternals.genericStructures;
134
- },
135
- enumerable: false,
136
- configurable: true
137
- });
138
- Object.defineProperty(PropertyMetadata.prototype, "genericMetadataResolvers", {
139
- get: function () {
140
- return this.propertyInternals.genericMetadataResolvers;
137
+ return this.currentPropertyState.genericArguments;
141
138
  },
142
139
  enumerable: false,
143
140
  configurable: true
144
141
  });
145
142
  Object.defineProperty(PropertyMetadata.prototype, "genericMetadatas", {
146
143
  get: function () {
147
- var genericStructures = this.genericStructures;
148
- var genericMetadataResolvers = this.genericMetadataResolvers;
149
- if (isNil(genericStructures) || isNil(genericMetadataResolvers)) {
150
- return undefined;
151
- }
152
- return this.defineGenericMetadatas(genericStructures, genericMetadataResolvers);
144
+ return this.currentPropertyState.genericMetadatas;
153
145
  },
154
146
  enumerable: false,
155
147
  configurable: true
156
148
  });
157
149
  Object.defineProperty(PropertyMetadata.prototype, "namingConvention", {
158
150
  get: function () {
159
- var _a;
160
- return (_a = this.propertyOptions.namingConvention) !== null && _a !== void 0 ? _a : this.typeMetadata.namingConvention;
151
+ return this.currentPropertyState.namingConvention;
161
152
  },
162
153
  enumerable: false,
163
154
  configurable: true
164
155
  });
165
156
  Object.defineProperty(PropertyMetadata.prototype, "referenceHandler", {
166
157
  get: function () {
167
- var _a;
168
- return (_a = this.propertyOptions.referenceHandler) !== null && _a !== void 0 ? _a : this.typeMetadata.referenceHandler;
158
+ return this.currentPropertyState.referenceHandler;
169
159
  },
170
160
  enumerable: false,
171
161
  configurable: true
172
162
  });
173
163
  Object.defineProperty(PropertyMetadata.prototype, "serializable", {
174
164
  get: function () {
175
- return this.propertyOptions.serializable;
176
- },
177
- enumerable: false,
178
- configurable: true
179
- });
180
- Object.defineProperty(PropertyMetadata.prototype, "serializationConfigured", {
181
- get: function () {
182
- return !isNil(this.serializable) || !isNil(this.deserializable);
165
+ return this.currentPropertyState.serializable;
183
166
  },
184
167
  enumerable: false,
185
168
  configurable: true
186
169
  });
187
170
  Object.defineProperty(PropertyMetadata.prototype, "serializer", {
188
171
  get: function () {
189
- var _a;
190
- return (_a = this.propertyOptions.serializer) !== null && _a !== void 0 ? _a : this.typeMetadata.serializer;
172
+ return this.currentPropertyState.serializer;
191
173
  },
192
174
  enumerable: false,
193
175
  configurable: true
194
176
  });
195
177
  Object.defineProperty(PropertyMetadata.prototype, "typeArgument", {
196
178
  get: function () {
197
- return this.propertyOptions.typeArgument;
198
- },
199
- enumerable: false,
200
- configurable: true
201
- });
202
- Object.defineProperty(PropertyMetadata.prototype, "typeMetadataResolver", {
203
- get: function () {
204
- return this.propertyInternals.typeMetadataResolver;
179
+ return this.currentPropertyState.typeArgument;
205
180
  },
206
181
  enumerable: false,
207
182
  configurable: true
208
183
  });
209
184
  Object.defineProperty(PropertyMetadata.prototype, "typeMetadata", {
210
185
  get: function () {
211
- return this.typeMetadataResolver(this.typeArgument);
186
+ return this.currentPropertyState.typeMetadata;
212
187
  },
213
188
  enumerable: false,
214
189
  configurable: true
215
190
  });
216
191
  Object.defineProperty(PropertyMetadata.prototype, "preserveNull", {
217
192
  get: function () {
218
- var _a;
219
- return (_a = this.propertyOptions.preserveNull) !== null && _a !== void 0 ? _a : this.typeMetadata.preserveNull;
193
+ return this.currentPropertyState.preserveNull;
220
194
  },
221
195
  enumerable: false,
222
196
  configurable: true
223
197
  });
224
198
  Object.defineProperty(PropertyMetadata.prototype, "useDefaultValue", {
225
199
  get: function () {
226
- var _a;
227
- return (_a = this.propertyOptions.useDefaultValue) !== null && _a !== void 0 ? _a : this.typeMetadata.useDefaultValue;
200
+ return this.currentPropertyState.useDefaultValue;
228
201
  },
229
202
  enumerable: false,
230
203
  configurable: true
231
204
  });
232
205
  Object.defineProperty(PropertyMetadata.prototype, "useImplicitConversion", {
233
206
  get: function () {
234
- var _a;
235
- return (_a = this.propertyOptions.useImplicitConversion) !== null && _a !== void 0 ? _a : this.typeMetadata.useImplicitConversion;
207
+ return this.currentPropertyState.useImplicitConversion;
236
208
  },
237
209
  enumerable: false,
238
210
  configurable: true
239
211
  });
240
212
  PropertyMetadata.prototype.constructPropertyOptions = function (propertyOptions) {
241
- var _a;
242
- propertyOptions.typeArgument = (_a = propertyOptions.typeArgument) !== null && _a !== void 0 ? _a : this.reflectTypeFn;
213
+ if (propertyOptions.customValueMap === undefined) {
214
+ propertyOptions.customValueMap = new Map();
215
+ }
243
216
  return propertyOptions;
244
217
  };
245
- PropertyMetadata.prototype.constructPropertyInternals = function () {
246
- var typeMetadataResolver = this.defineTypeMetadataResolver(this.propertyOptions.typeArgument);
247
- var customOptions = this.propertyOptions.customOptions;
248
- var customContext = isNil(customOptions) ? undefined : new CustomContext(customOptions);
249
- var propertyInternals = { typeMetadataResolver: typeMetadataResolver, customContext: customContext };
250
- return propertyInternals;
218
+ PropertyMetadata.prototype.configurePropertyExtensionMetadata = function (propertyExtensionMetadataCtor, propertyExtensionOptions) {
219
+ var propertyExtensionMetadataCtorSet = this.extractPropertyExtensionMetadataCtorSet();
220
+ if (!propertyExtensionMetadataCtorSet.has(propertyExtensionMetadataCtor)) {
221
+ propertyExtensionMetadataCtorSet.add(propertyExtensionMetadataCtor);
222
+ }
223
+ var initialPropertyExtensionOptions = propertyExtensionOptions !== null && propertyExtensionOptions !== void 0 ? propertyExtensionOptions : {};
224
+ var propertyExtensionMetadata = new propertyExtensionMetadataCtor(this, initialPropertyExtensionOptions);
225
+ return propertyExtensionMetadata;
226
+ };
227
+ PropertyMetadata.prototype.extractPropertyExtensionMetadata = function (propertyExtensionMetadataCtor) {
228
+ var propertyExtensionMetadataCtorSet = this.extractPropertyExtensionMetadataCtorSet();
229
+ if (!propertyExtensionMetadataCtorSet.has(propertyExtensionMetadataCtor)) {
230
+ return undefined;
231
+ }
232
+ var initialPropertyExtensionOptions = {};
233
+ var propertyExtensionMetadata = new propertyExtensionMetadataCtor(this, initialPropertyExtensionOptions);
234
+ return propertyExtensionMetadata;
235
+ };
236
+ PropertyMetadata.prototype.extractPropertyExtensionMetadataCtorSet = function () {
237
+ var customValueMap = this.propertyOptions.customValueMap;
238
+ if (customValueMap === undefined) {
239
+ customValueMap = new Map();
240
+ this.propertyOptions.customValueMap = customValueMap;
241
+ }
242
+ var propertyExtensionMetadataCtorSet = customValueMap.get(PROPERTY_EXTENSION_METADATA_CTOR_SET_KEY);
243
+ if (propertyExtensionMetadataCtorSet === undefined) {
244
+ propertyExtensionMetadataCtorSet = new Set();
245
+ customValueMap.set(PROPERTY_EXTENSION_METADATA_CTOR_SET_KEY, propertyExtensionMetadataCtorSet);
246
+ }
247
+ return propertyExtensionMetadataCtorSet;
248
+ };
249
+ PropertyMetadata.prototype.resolvePropertyState = function () {
250
+ var propertyOptions = this.propertyOptions;
251
+ var propertyName = this.propertyName;
252
+ var alias = propertyOptions.alias;
253
+ var deserializedPropertyName = propertyName;
254
+ var typeArgument = propertyOptions.typeArgument === undefined
255
+ ? this.reflectTypeFn
256
+ : propertyOptions.typeArgument;
257
+ var typeMetadata = this.resolveTypeMetadata(typeArgument);
258
+ var typeState = typeMetadata.typeState;
259
+ var customValueMap = this.resolveCustomValueMap(typeState);
260
+ var preserveNull = propertyOptions.preserveNull === undefined
261
+ ? typeState.preserveNull
262
+ : propertyOptions.preserveNull;
263
+ var useDefaultValue = propertyOptions.useDefaultValue === undefined
264
+ ? typeState.useDefaultValue
265
+ : propertyOptions.useDefaultValue;
266
+ var useImplicitConversion = propertyOptions.useImplicitConversion === undefined
267
+ ? typeState.useImplicitConversion
268
+ : propertyOptions.useImplicitConversion;
269
+ var serializedDefaultValue = propertyOptions.defaultValue === undefined
270
+ ? (propertyOptions.serializedDefaultValue === undefined ? typeState.serializedDefaultValue : propertyOptions.serializedDefaultValue)
271
+ : propertyOptions.defaultValue;
272
+ var serializedDefaultValueResolver = useDefaultValue
273
+ ? (typeof serializedDefaultValue === 'function' ? serializedDefaultValue : function () { return serializedDefaultValue; })
274
+ : DEFAULT_VALUE_RESOLVER;
275
+ var serializedNullValueResolver = preserveNull
276
+ ? NULL_VALUE_RESOLVER
277
+ : serializedDefaultValueResolver;
278
+ var deserializedDefaultValue = propertyOptions.defaultValue === undefined
279
+ ? (propertyOptions.deserializedDefaultValue === undefined ? typeState.deserializedDefaultValue : propertyOptions.deserializedDefaultValue)
280
+ : propertyOptions.defaultValue;
281
+ var deserializedDefaultValueResolver = useDefaultValue
282
+ ? (typeof deserializedDefaultValue === 'function' ? deserializedDefaultValue : function () { return deserializedDefaultValue; })
283
+ : DEFAULT_VALUE_RESOLVER;
284
+ var deserializedNullValueResolver = preserveNull
285
+ ? NULL_VALUE_RESOLVER
286
+ : deserializedDefaultValueResolver;
287
+ var namingConvention = propertyOptions.namingConvention === undefined
288
+ ? this.declaringTypeMetadata.typeState.namingConvention
289
+ : propertyOptions.namingConvention;
290
+ var serializedPropertyName = alias === undefined
291
+ ? (namingConvention === undefined ? propertyName : namingConvention.convert(propertyName))
292
+ : alias;
293
+ var useDefaultSerialization = propertyOptions.serializable === undefined
294
+ && propertyOptions.deserializable === undefined;
295
+ var serializable = useDefaultSerialization
296
+ || propertyOptions.serializable === true;
297
+ var deserializable = useDefaultSerialization
298
+ || propertyOptions.deserializable === true;
299
+ var genericArguments = propertyOptions.genericArguments === undefined
300
+ ? EMPTY_ARRAY
301
+ : propertyOptions.genericArguments;
302
+ var genericMetadatas = this.resolveGenericMetadatas(genericArguments);
303
+ var referenceHandler = propertyOptions.referenceHandler === undefined
304
+ ? typeState.referenceHandler
305
+ : propertyOptions.referenceHandler;
306
+ var serializer = propertyOptions.serializer === undefined
307
+ ? typeState.serializer
308
+ : propertyOptions.serializer;
309
+ var resolvedPropertyState = new ResolvedPropertyState(this, alias, customValueMap, serializedNullValueResolver, serializedDefaultValueResolver, deserializedNullValueResolver, deserializedDefaultValueResolver, serializedPropertyName, deserializedPropertyName, serializable, deserializable, genericArguments, genericMetadatas, namingConvention, referenceHandler, serializer, typeArgument, typeMetadata, preserveNull, useDefaultValue, useImplicitConversion);
310
+ this.currentPropertyState = resolvedPropertyState;
311
+ return resolvedPropertyState;
312
+ };
313
+ PropertyMetadata.prototype.unresolvePropertyState = function () {
314
+ var unresolvedPropertyState = new UnresolvedPropertyState(this);
315
+ this.currentPropertyState = unresolvedPropertyState;
316
+ return unresolvedPropertyState;
317
+ };
318
+ PropertyMetadata.prototype.resolveCustomValueMap = function (typeState) {
319
+ var e_1, _a;
320
+ var propertyOptions = this.propertyOptions;
321
+ var customValueMap = new Map();
322
+ if (propertyOptions.customValueMap === undefined) {
323
+ return customValueMap;
324
+ }
325
+ var typeCustomValueMap = typeState.customValueMap === undefined
326
+ ? EMPTY_MAP
327
+ : typeState.customValueMap;
328
+ try {
329
+ for (var _b = __values(propertyOptions.customValueMap), _c = _b.next(); !_c.done; _c = _b.next()) {
330
+ var _d = __read(_c.value, 2), customKey = _d[0], customValue = _d[1];
331
+ if (customValue === undefined) {
332
+ customValueMap.set(customKey, typeCustomValueMap.get(customKey));
333
+ continue;
334
+ }
335
+ customValueMap.set(customKey, customValue);
336
+ }
337
+ }
338
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
339
+ finally {
340
+ try {
341
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
342
+ }
343
+ finally { if (e_1) throw e_1.error; }
344
+ }
345
+ return customValueMap;
251
346
  };
252
347
  PropertyMetadata.prototype.hasAlias = function (alias) {
253
348
  this.propertyOptions.alias = alias;
349
+ this.currentPropertyState = new UnresolvedPropertyState(this);
350
+ return this;
351
+ };
352
+ PropertyMetadata.prototype.hasCustomValueMap = function (customValueMap) {
353
+ var e_2, _a;
354
+ var currentCustomValueMap = this.propertyOptions.customValueMap;
355
+ if (currentCustomValueMap === undefined) {
356
+ currentCustomValueMap = new Map();
357
+ this.propertyOptions.customValueMap = currentCustomValueMap;
358
+ }
359
+ if (customValueMap !== undefined) {
360
+ if (currentCustomValueMap !== customValueMap) {
361
+ currentCustomValueMap.clear();
362
+ }
363
+ try {
364
+ for (var customValueMap_1 = __values(customValueMap), customValueMap_1_1 = customValueMap_1.next(); !customValueMap_1_1.done; customValueMap_1_1 = customValueMap_1.next()) {
365
+ var _b = __read(customValueMap_1_1.value, 2), customKey = _b[0], customValue = _b[1];
366
+ currentCustomValueMap.set(customKey, customValue);
367
+ }
368
+ }
369
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
370
+ finally {
371
+ try {
372
+ if (customValueMap_1_1 && !customValueMap_1_1.done && (_a = customValueMap_1.return)) _a.call(customValueMap_1);
373
+ }
374
+ finally { if (e_2) throw e_2.error; }
375
+ }
376
+ }
377
+ this.currentPropertyState = new UnresolvedPropertyState(this);
254
378
  return this;
255
379
  };
256
- PropertyMetadata.prototype.hasCustomOption = function (customKey, customValue) {
257
- this.customContext.set(customKey, customValue);
380
+ PropertyMetadata.prototype.hasCustomValue = function (customKey, customValue) {
381
+ var customValueMap = this.propertyOptions.customValueMap;
382
+ if (customValueMap === undefined) {
383
+ customValueMap = new Map();
384
+ this.propertyOptions.customValueMap = customValueMap;
385
+ }
386
+ customValueMap.set(customKey, customValue);
387
+ this.currentPropertyState = new UnresolvedPropertyState(this);
258
388
  return this;
259
389
  };
260
- PropertyMetadata.prototype.extractCustomOption = function (customKey) {
261
- return this.customContext.get(customKey);
390
+ PropertyMetadata.prototype.extractCustomValue = function (customKey) {
391
+ var customValue = this.propertyState.customValueMap.get(customKey);
392
+ if (customValue === undefined && customKey.customValueResolver !== undefined) {
393
+ customValue = customKey.customValueResolver();
394
+ }
395
+ return customValue;
262
396
  };
263
397
  PropertyMetadata.prototype.hasCustomOptions = function (customOptions) {
264
- if (!isNil(customOptions)) {
265
- this.customContext.configure(customOptions);
398
+ var customValueMap = this.propertyOptions.customValueMap;
399
+ if (customValueMap === undefined) {
400
+ customValueMap = new Map();
401
+ this.propertyOptions.customValueMap = customValueMap;
402
+ }
403
+ for (var i = 0; i < customOptions.length; i++) {
404
+ customValueMap.set(customOptions[i][0], customOptions[i][1]);
266
405
  }
406
+ this.currentPropertyState = new UnresolvedPropertyState(this);
267
407
  return this;
268
408
  };
269
409
  PropertyMetadata.prototype.hasDefaultValue = function (defaultValue) {
270
410
  this.propertyOptions.defaultValue = defaultValue;
411
+ this.currentPropertyState = new UnresolvedPropertyState(this);
271
412
  return this;
272
413
  };
273
414
  PropertyMetadata.prototype.hasSerializedDefaultValue = function (serializedDefaultValue) {
274
415
  this.propertyOptions.serializedDefaultValue = serializedDefaultValue;
416
+ this.currentPropertyState = new UnresolvedPropertyState(this);
275
417
  return this;
276
418
  };
277
419
  PropertyMetadata.prototype.hasDeserializedDefaultValue = function (deserializedDefaultValue) {
278
420
  this.propertyOptions.deserializedDefaultValue = deserializedDefaultValue;
421
+ this.currentPropertyState = new UnresolvedPropertyState(this);
279
422
  return this;
280
423
  };
281
424
  PropertyMetadata.prototype.isDeserializable = function (deserializable) {
282
425
  if (deserializable === void 0) { deserializable = true; }
283
426
  this.propertyOptions.deserializable = deserializable;
427
+ this.currentPropertyState = new UnresolvedPropertyState(this);
284
428
  return this;
285
429
  };
286
430
  PropertyMetadata.prototype.isSerializable = function (serializable) {
287
431
  if (serializable === void 0) { serializable = true; }
288
432
  this.propertyOptions.serializable = serializable;
433
+ this.currentPropertyState = new UnresolvedPropertyState(this);
289
434
  return this;
290
435
  };
291
436
  PropertyMetadata.prototype.hasGenericArguments = function (genericArguments) {
292
437
  this.propertyOptions.genericArguments = genericArguments;
293
- if (isNil(genericArguments)) {
294
- this.propertyInternals.genericStructures = undefined;
295
- this.propertyInternals.genericMetadataResolvers = undefined;
296
- return this;
297
- }
298
- var genericStructures = this.defineGenericStructures(genericArguments);
299
- this.propertyInternals.genericStructures = genericStructures;
300
- this.propertyInternals.genericMetadataResolvers = this.defineGenericMetadataResolvers(genericStructures);
438
+ this.currentPropertyState = new UnresolvedPropertyState(this);
301
439
  return this;
302
440
  };
303
441
  PropertyMetadata.prototype.hasNamingConvention = function (namingConvention) {
304
442
  this.propertyOptions.namingConvention = namingConvention;
443
+ this.currentPropertyState = new UnresolvedPropertyState(this);
305
444
  return this;
306
445
  };
307
446
  PropertyMetadata.prototype.hasReferenceHandler = function (referenceHandler) {
308
447
  this.propertyOptions.referenceHandler = referenceHandler;
448
+ this.currentPropertyState = new UnresolvedPropertyState(this);
309
449
  return this;
310
450
  };
311
451
  PropertyMetadata.prototype.hasSerializer = function (serializer) {
312
452
  this.propertyOptions.serializer = serializer;
453
+ this.currentPropertyState = new UnresolvedPropertyState(this);
313
454
  return this;
314
455
  };
315
456
  PropertyMetadata.prototype.hasTypeArgument = function (typeArgument) {
316
457
  this.propertyOptions.typeArgument = typeArgument !== null && typeArgument !== void 0 ? typeArgument : this.reflectTypeFn;
317
- this.propertyInternals.typeMetadataResolver = this.defineTypeMetadataResolver(this.propertyOptions.typeArgument);
458
+ this.currentPropertyState = new UnresolvedPropertyState(this);
318
459
  return this;
319
460
  };
320
461
  PropertyMetadata.prototype.shouldPreserveNull = function (preserveNull) {
321
462
  if (preserveNull === void 0) { preserveNull = true; }
322
463
  this.propertyOptions.preserveNull = preserveNull;
464
+ this.currentPropertyState = new UnresolvedPropertyState(this);
323
465
  return this;
324
466
  };
325
467
  PropertyMetadata.prototype.shouldUseDefaultValue = function (useDefaultValue) {
326
468
  if (useDefaultValue === void 0) { useDefaultValue = true; }
327
469
  this.propertyOptions.useDefaultValue = useDefaultValue;
470
+ this.currentPropertyState = new UnresolvedPropertyState(this);
328
471
  return this;
329
472
  };
330
473
  PropertyMetadata.prototype.shouldUseImplicitConversion = function (useImplicitConversion) {
331
474
  if (useImplicitConversion === void 0) { useImplicitConversion = true; }
332
475
  this.propertyOptions.useImplicitConversion = useImplicitConversion;
476
+ this.currentPropertyState = new UnresolvedPropertyState(this);
333
477
  return this;
334
478
  };
335
- PropertyMetadata.prototype.configurePropertyExtensionMetadata = function (propertyExtensionMetadataCtor, propertyExtensionOptions) {
336
- var propertyExtensionMetadataCtorSet = this.extractCustomOption(propertyExtensionMetadataCtorSetKey);
337
- if (!propertyExtensionMetadataCtorSet.has(propertyExtensionMetadataCtor)) {
338
- propertyExtensionMetadataCtorSet.add(propertyExtensionMetadataCtor);
339
- }
340
- var initialPropertyExtensionOptions = propertyExtensionOptions !== null && propertyExtensionOptions !== void 0 ? propertyExtensionOptions : {};
341
- var propertyExtensionMetadata = new propertyExtensionMetadataCtor(this, initialPropertyExtensionOptions);
342
- return propertyExtensionMetadata;
343
- };
344
- PropertyMetadata.prototype.extractPropertyExtensionMetadata = function (propertyExtensionMetadataCtor) {
345
- var propertyExtensionMetadataCtorSet = this.extractCustomOption(propertyExtensionMetadataCtorSetKey);
346
- if (!propertyExtensionMetadataCtorSet.has(propertyExtensionMetadataCtor)) {
347
- return undefined;
348
- }
349
- var initialPropertyExtensionOptions = {};
350
- var propertyExtensionMetadata = new propertyExtensionMetadataCtor(this, initialPropertyExtensionOptions);
351
- return propertyExtensionMetadata;
352
- };
353
479
  PropertyMetadata.prototype.configure = function (propertyOptions) {
354
- if (!isUndefined(propertyOptions.alias)) {
480
+ if (propertyOptions.alias !== undefined) {
355
481
  this.hasAlias(propertyOptions.alias);
356
482
  }
357
- if (!isUndefined(propertyOptions.customOptions)) {
358
- this.hasCustomOptions(propertyOptions.customOptions);
483
+ if (propertyOptions.customValueMap !== undefined) {
484
+ this.hasCustomValueMap(propertyOptions.customValueMap);
359
485
  }
360
- if (!isUndefined(propertyOptions.defaultValue)) {
486
+ if (propertyOptions.defaultValue !== undefined) {
361
487
  this.hasDefaultValue(propertyOptions.defaultValue);
362
488
  }
363
- if (!isUndefined(propertyOptions.serializedDefaultValue)) {
489
+ if (propertyOptions.serializedDefaultValue !== undefined) {
364
490
  this.hasSerializedDefaultValue(propertyOptions.serializedDefaultValue);
365
491
  }
366
- if (!isUndefined(propertyOptions.deserializedDefaultValue)) {
492
+ if (propertyOptions.deserializedDefaultValue !== undefined) {
367
493
  this.hasDeserializedDefaultValue(propertyOptions.deserializedDefaultValue);
368
494
  }
369
- if (!isUndefined(propertyOptions.deserializable)) {
495
+ if (propertyOptions.deserializable !== undefined) {
370
496
  this.isDeserializable(propertyOptions.deserializable);
371
497
  }
372
- if (!isUndefined(propertyOptions.genericArguments)) {
498
+ if (propertyOptions.genericArguments !== undefined) {
373
499
  this.hasGenericArguments(propertyOptions.genericArguments);
374
500
  }
375
- if (!isUndefined(propertyOptions.namingConvention)) {
501
+ if (propertyOptions.namingConvention !== undefined) {
376
502
  this.hasNamingConvention(propertyOptions.namingConvention);
377
503
  }
378
- if (!isUndefined(propertyOptions.referenceHandler)) {
504
+ if (propertyOptions.referenceHandler !== undefined) {
379
505
  this.hasReferenceHandler(propertyOptions.referenceHandler);
380
506
  }
381
- if (!isUndefined(propertyOptions.serializable)) {
507
+ if (propertyOptions.serializable !== undefined) {
382
508
  this.isSerializable(propertyOptions.serializable);
383
509
  }
384
- if (!isUndefined(propertyOptions.serializer)) {
510
+ if (propertyOptions.serializer !== undefined) {
385
511
  this.hasSerializer(propertyOptions.serializer);
386
512
  }
387
- if (!isUndefined(propertyOptions.typeArgument)) {
513
+ if (propertyOptions.typeArgument !== undefined) {
388
514
  this.hasTypeArgument(propertyOptions.typeArgument);
389
515
  }
390
- if (!isUndefined(propertyOptions.preserveNull)) {
516
+ if (propertyOptions.preserveNull !== undefined) {
391
517
  this.shouldPreserveNull(propertyOptions.preserveNull);
392
518
  }
393
- if (!isUndefined(propertyOptions.useDefaultValue)) {
519
+ if (propertyOptions.useDefaultValue !== undefined) {
394
520
  this.shouldUseDefaultValue(propertyOptions.useDefaultValue);
395
521
  }
396
- if (!isUndefined(propertyOptions.useImplicitConversion)) {
522
+ if (propertyOptions.useImplicitConversion !== undefined) {
397
523
  this.shouldUseImplicitConversion(propertyOptions.useImplicitConversion);
398
524
  }
399
525
  return this;