@opra/common 0.13.0 → 0.15.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 (476) hide show
  1. package/cjs/document/api-document.js +211 -0
  2. package/cjs/document/constants.js +6 -0
  3. package/cjs/document/data-type/api-field.js +82 -0
  4. package/cjs/document/data-type/builtin/any.type.js +14 -0
  5. package/cjs/document/data-type/builtin/base64.type.js +38 -0
  6. package/cjs/document/data-type/builtin/bigint.type.js +33 -0
  7. package/cjs/document/data-type/builtin/boolean.type.js +28 -0
  8. package/cjs/document/data-type/builtin/date.type.js +18 -0
  9. package/cjs/document/data-type/builtin/guid.type.js +35 -0
  10. package/cjs/document/data-type/builtin/index.js +13 -0
  11. package/cjs/document/data-type/builtin/integer.type.js +28 -0
  12. package/cjs/document/data-type/builtin/number.type.js +33 -0
  13. package/cjs/document/data-type/builtin/object.type.js +20 -0
  14. package/cjs/document/data-type/builtin/string.type.js +24 -0
  15. package/cjs/document/data-type/builtin/time.type.js +32 -0
  16. package/cjs/document/data-type/builtin/timestamp.type.js +29 -0
  17. package/cjs/document/data-type/complex-type.js +154 -0
  18. package/cjs/document/data-type/data-type.js +46 -0
  19. package/cjs/document/data-type/enum-type.js +62 -0
  20. package/cjs/document/data-type/mapped-type.js +96 -0
  21. package/cjs/document/data-type/simple-type.js +61 -0
  22. package/cjs/document/data-type/union-type.js +81 -0
  23. package/cjs/document/factory/add-references.js +20 -0
  24. package/cjs/document/factory/create-document.js +81 -0
  25. package/cjs/document/factory/factory.js +62 -0
  26. package/cjs/document/factory/import-resource-class.js +53 -0
  27. package/cjs/document/factory/import-type-class.js +130 -0
  28. package/cjs/document/factory/index.js +4 -0
  29. package/cjs/document/factory/process-resources.js +55 -0
  30. package/cjs/document/factory/process-types.js +191 -0
  31. package/cjs/document/index.js +17 -0
  32. package/cjs/document/resource/collection.js +185 -0
  33. package/cjs/document/resource/resource.js +38 -0
  34. package/cjs/document/resource/singleton.js +91 -0
  35. package/cjs/exception/opra-exception.js +2 -0
  36. package/cjs/exception/resource-errors/resource-not-found.error.js +4 -0
  37. package/cjs/filter/parse.js +3 -1
  38. package/cjs/helpers/function-utils.js +25 -0
  39. package/cjs/helpers/get-stack-filename.js +24 -0
  40. package/cjs/helpers/index.js +7 -0
  41. package/cjs/{utils → helpers}/is-url.js +2 -2
  42. package/cjs/{schema/utils/clone-object.util.js → helpers/object-utils.js} +13 -1
  43. package/cjs/{utils/path-to-tree.js → helpers/path-to-object-tree.js} +9 -9
  44. package/cjs/helpers/responsive-map.js +62 -14
  45. package/cjs/{utils → helpers}/type-guards.js +12 -5
  46. package/cjs/http/{param-codec → codecs}/boolean-codec.js +1 -2
  47. package/cjs/http/{param-codec → codecs}/date-codec.js +1 -4
  48. package/cjs/http/{param-codec → codecs}/filter-codec.js +1 -2
  49. package/cjs/http/{param-codec → codecs}/number-codec.js +1 -3
  50. package/cjs/http/{param-codec → codecs}/string-codec.js +1 -3
  51. package/cjs/http/enums/http-headers-codes.enum.js +13 -4
  52. package/cjs/http/enums/http-status-messages.js +68 -0
  53. package/cjs/http/http-headers.js +138 -124
  54. package/cjs/http/http-message.host.js +251 -0
  55. package/cjs/http/http-params.js +78 -45
  56. package/cjs/http/http-request-message.js +152 -0
  57. package/cjs/http/http-response-message.js +238 -0
  58. package/cjs/http/index.js +8 -11
  59. package/cjs/http/multipart/batch-multipart.js +169 -153
  60. package/cjs/http/multipart/http-request-content.js +16 -11
  61. package/cjs/http/multipart/http-response-content.js +13 -10
  62. package/cjs/http/multipart/index.js +1 -3
  63. package/cjs/i18n/i18n.js +1 -1
  64. package/cjs/index.js +6 -5
  65. package/cjs/schema/constants.js +2 -9
  66. package/cjs/schema/data-type/complex-type.interface.js +7 -0
  67. package/cjs/schema/data-type/enum-type.interface.js +7 -0
  68. package/cjs/schema/data-type/mapped-type.interface.js +7 -0
  69. package/cjs/schema/data-type/simple-type.interface.js +7 -0
  70. package/cjs/schema/data-type/union-type.interface.js +7 -0
  71. package/cjs/schema/index.js +42 -26
  72. package/cjs/schema/resource/collection.interface.js +7 -0
  73. package/cjs/schema/resource/container.interface.js +7 -0
  74. package/cjs/schema/resource/resource.interface.js +2 -0
  75. package/cjs/schema/resource/singleton.interface.js +7 -0
  76. package/cjs/schema/type-guards.js +59 -0
  77. package/cjs/types.js +2 -0
  78. package/cjs/url/index.js +2 -2
  79. package/cjs/url/opra-url-path-component.js +2 -2
  80. package/cjs/url/opra-url-path.js +7 -4
  81. package/cjs/url/opra-url.js +84 -115
  82. package/cjs/url/utils/{path-utils.js → decode-path-component.js} +1 -46
  83. package/cjs/url/utils/encode-path-component.js +27 -0
  84. package/cjs/utils/path-utils.js +24 -0
  85. package/esm/document/api-document.d.ts +102 -0
  86. package/esm/document/api-document.js +207 -0
  87. package/esm/document/constants.d.ts +3 -0
  88. package/esm/document/constants.js +3 -0
  89. package/esm/document/data-type/api-field.d.ts +41 -0
  90. package/esm/document/data-type/api-field.js +79 -0
  91. package/esm/document/data-type/builtin/any.type.d.ts +2 -0
  92. package/esm/document/data-type/builtin/any.type.js +11 -0
  93. package/esm/document/data-type/builtin/base64.type.d.ts +6 -0
  94. package/esm/document/data-type/builtin/base64.type.js +35 -0
  95. package/esm/document/data-type/builtin/bigint.type.d.ts +6 -0
  96. package/esm/document/data-type/builtin/bigint.type.js +30 -0
  97. package/esm/document/data-type/builtin/boolean.type.d.ts +5 -0
  98. package/esm/document/data-type/builtin/boolean.type.js +25 -0
  99. package/esm/document/data-type/builtin/date.type.d.ts +4 -0
  100. package/esm/document/data-type/builtin/date.type.js +15 -0
  101. package/esm/document/data-type/builtin/guid.type.d.ts +7 -0
  102. package/esm/document/data-type/builtin/guid.type.js +32 -0
  103. package/esm/document/data-type/builtin/index.d.ts +10 -0
  104. package/esm/document/data-type/builtin/index.js +10 -0
  105. package/esm/document/data-type/builtin/integer.type.d.ts +6 -0
  106. package/esm/document/data-type/builtin/integer.type.js +25 -0
  107. package/esm/document/data-type/builtin/number.type.d.ts +6 -0
  108. package/esm/document/data-type/builtin/number.type.js +30 -0
  109. package/esm/document/data-type/builtin/object.type.d.ts +3 -0
  110. package/esm/document/data-type/builtin/object.type.js +17 -0
  111. package/esm/document/data-type/builtin/string.type.d.ts +5 -0
  112. package/esm/document/data-type/builtin/string.type.js +21 -0
  113. package/esm/document/data-type/builtin/time.type.d.ts +7 -0
  114. package/esm/document/data-type/builtin/time.type.js +29 -0
  115. package/esm/document/data-type/builtin/timestamp.type.d.ts +5 -0
  116. package/esm/document/data-type/builtin/timestamp.type.js +26 -0
  117. package/esm/document/data-type/complex-type.d.ts +50 -0
  118. package/esm/document/data-type/complex-type.js +150 -0
  119. package/esm/document/data-type/data-type.d.ts +33 -0
  120. package/esm/document/data-type/data-type.js +43 -0
  121. package/esm/document/data-type/enum-type.d.ts +32 -0
  122. package/esm/document/data-type/enum-type.js +58 -0
  123. package/esm/document/data-type/mapped-type.d.ts +53 -0
  124. package/esm/document/data-type/mapped-type.js +91 -0
  125. package/esm/document/data-type/simple-type.d.ts +33 -0
  126. package/esm/document/data-type/simple-type.js +57 -0
  127. package/esm/document/data-type/union-type.d.ts +42 -0
  128. package/esm/document/data-type/union-type.js +78 -0
  129. package/esm/document/factory/add-references.d.ts +4 -0
  130. package/esm/document/factory/add-references.js +16 -0
  131. package/esm/document/factory/create-document.d.ts +12 -0
  132. package/esm/document/factory/create-document.js +75 -0
  133. package/esm/document/factory/factory.d.ts +61 -0
  134. package/esm/document/factory/factory.js +58 -0
  135. package/esm/document/factory/import-resource-class.d.ts +9 -0
  136. package/esm/document/factory/import-resource-class.js +47 -0
  137. package/esm/document/factory/import-type-class.d.ts +17 -0
  138. package/esm/document/factory/import-type-class.js +120 -0
  139. package/esm/document/factory/index.d.ts +1 -0
  140. package/esm/document/factory/index.js +1 -0
  141. package/esm/document/factory/process-resources.d.ts +7 -0
  142. package/esm/document/factory/process-resources.js +49 -0
  143. package/esm/document/factory/process-types.d.ts +6 -0
  144. package/esm/document/factory/process-types.js +185 -0
  145. package/esm/document/index.d.ts +14 -0
  146. package/esm/document/index.js +14 -0
  147. package/esm/document/resource/collection.d.ts +67 -0
  148. package/esm/document/resource/collection.js +181 -0
  149. package/esm/document/resource/resource.d.ts +29 -0
  150. package/esm/document/resource/resource.js +35 -0
  151. package/esm/document/resource/singleton.d.ts +49 -0
  152. package/esm/document/resource/singleton.js +87 -0
  153. package/esm/exception/opra-exception.js +2 -0
  154. package/esm/exception/resource-errors/resource-not-found.error.d.ts +4 -0
  155. package/esm/exception/resource-errors/resource-not-found.error.js +4 -0
  156. package/esm/filter/parse.js +3 -1
  157. package/esm/helpers/function-utils.d.ts +4 -0
  158. package/esm/helpers/function-utils.js +19 -0
  159. package/esm/helpers/get-stack-filename.d.ts +1 -0
  160. package/esm/helpers/get-stack-filename.js +20 -0
  161. package/esm/helpers/index.d.ts +7 -0
  162. package/esm/helpers/index.js +7 -0
  163. package/esm/helpers/is-url.d.ts +1 -0
  164. package/esm/helpers/is-url.js +4 -0
  165. package/esm/{schema/utils/clone-object.util.d.ts → helpers/object-utils.d.ts} +1 -0
  166. package/esm/{schema/utils/clone-object.util.js → helpers/object-utils.js} +11 -0
  167. package/esm/helpers/path-to-object-tree.d.ts +4 -0
  168. package/esm/{utils/path-to-tree.js → helpers/path-to-object-tree.js} +7 -7
  169. package/esm/helpers/responsive-map.d.ts +15 -13
  170. package/esm/helpers/responsive-map.js +62 -14
  171. package/esm/{utils → helpers}/type-guards.d.ts +3 -1
  172. package/esm/{utils → helpers}/type-guards.js +9 -3
  173. package/esm/http/codecs/boolean-codec.d.ts +5 -0
  174. package/esm/http/{param-codec → codecs}/boolean-codec.js +1 -2
  175. package/esm/http/{param-codec → codecs}/date-codec.d.ts +2 -2
  176. package/esm/http/{param-codec → codecs}/date-codec.js +1 -4
  177. package/esm/http/{param-codec → codecs}/filter-codec.d.ts +2 -2
  178. package/esm/http/{param-codec → codecs}/filter-codec.js +1 -2
  179. package/esm/http/codecs/integer-codec.d.ts +11 -0
  180. package/esm/http/codecs/number-codec.d.ts +14 -0
  181. package/esm/http/{param-codec → codecs}/number-codec.js +1 -3
  182. package/esm/http/codecs/string-codec.d.ts +16 -0
  183. package/esm/http/{param-codec → codecs}/string-codec.js +1 -3
  184. package/esm/http/enums/http-headers-codes.enum.d.ts +13 -4
  185. package/esm/http/enums/http-headers-codes.enum.js +13 -4
  186. package/esm/http/enums/http-status-messages.d.ts +65 -0
  187. package/esm/http/enums/http-status-messages.js +65 -0
  188. package/esm/http/http-headers.d.ts +50 -34
  189. package/esm/http/http-headers.js +137 -123
  190. package/esm/http/http-message.host.d.ts +122 -0
  191. package/esm/http/http-message.host.js +246 -0
  192. package/esm/http/http-params.d.ts +43 -29
  193. package/esm/http/http-params.js +75 -43
  194. package/esm/http/http-request-message.d.ts +213 -0
  195. package/esm/http/http-request-message.js +148 -0
  196. package/esm/http/http-response-message.d.ts +318 -0
  197. package/esm/http/http-response-message.js +233 -0
  198. package/esm/http/index.d.ts +8 -11
  199. package/esm/http/index.js +8 -11
  200. package/esm/http/interfaces/cookie-options.interface.d.ts +4 -0
  201. package/esm/http/multipart/batch-multipart.d.ts +0 -31
  202. package/esm/http/multipart/batch-multipart.js +170 -149
  203. package/esm/http/multipart/http-request-content.d.ts +0 -8
  204. package/esm/http/multipart/http-request-content.js +17 -8
  205. package/esm/http/multipart/http-response-content.d.ts +0 -7
  206. package/esm/http/multipart/http-response-content.js +14 -7
  207. package/esm/http/multipart/index.d.ts +0 -1
  208. package/esm/http/multipart/index.js +2 -1
  209. package/esm/i18n/i18n.js +1 -1
  210. package/esm/index.d.ts +6 -5
  211. package/esm/index.js +6 -5
  212. package/esm/schema/constants.d.ts +2 -8
  213. package/esm/schema/constants.js +1 -8
  214. package/esm/schema/data-type/complex-type.interface.d.ts +16 -0
  215. package/esm/schema/data-type/complex-type.interface.js +4 -0
  216. package/esm/schema/data-type/data-type.interface.d.ts +14 -0
  217. package/esm/schema/data-type/enum-type.interface.d.ts +15 -0
  218. package/esm/schema/data-type/enum-type.interface.js +4 -0
  219. package/esm/schema/data-type/field.interface.d.ts +21 -0
  220. package/esm/schema/data-type/mapped-type.interface.d.ts +11 -0
  221. package/esm/schema/data-type/mapped-type.interface.js +4 -0
  222. package/esm/schema/data-type/simple-type.interface.d.ts +18 -0
  223. package/esm/schema/data-type/simple-type.interface.js +4 -0
  224. package/esm/schema/data-type/union-type.interface.d.ts +10 -0
  225. package/esm/schema/data-type/union-type.interface.js +4 -0
  226. package/esm/schema/document.interface.d.ts +34 -0
  227. package/esm/schema/index.d.ts +51 -25
  228. package/esm/schema/index.js +41 -25
  229. package/esm/schema/resource/collection.interface.d.ts +33 -0
  230. package/esm/schema/resource/collection.interface.js +4 -0
  231. package/esm/schema/resource/container.interface.d.ts +9 -0
  232. package/esm/schema/resource/container.interface.js +4 -0
  233. package/esm/schema/resource/endpoint.interface.d.ts +29 -0
  234. package/esm/schema/resource/resource.interface.d.ts +12 -0
  235. package/esm/schema/resource/resource.interface.js +1 -0
  236. package/esm/schema/resource/singleton.interface.d.ts +22 -0
  237. package/esm/schema/resource/singleton.interface.js +4 -0
  238. package/esm/schema/type-guards.d.ts +20 -0
  239. package/esm/schema/type-guards.js +46 -0
  240. package/esm/{schema/types.d.ts → types.d.ts} +0 -3
  241. package/esm/types.js +1 -0
  242. package/esm/url/index.d.ts +2 -2
  243. package/esm/url/index.js +2 -2
  244. package/esm/url/opra-url-path-component.js +1 -1
  245. package/esm/url/opra-url-path.js +6 -3
  246. package/esm/url/opra-url.d.ts +8 -27
  247. package/esm/url/opra-url.js +83 -114
  248. package/esm/url/utils/decode-path-component.d.ts +5 -0
  249. package/esm/url/utils/{path-utils.js → decode-path-component.js} +0 -41
  250. package/esm/url/utils/encode-path-component.d.ts +1 -0
  251. package/esm/url/utils/encode-path-component.js +22 -0
  252. package/esm/utils/path-utils.d.ts +2 -0
  253. package/esm/utils/path-utils.js +19 -0
  254. package/package.json +21 -6
  255. package/cjs/constants.js +0 -1
  256. package/cjs/http/http-param-codec.js +0 -6
  257. package/cjs/http/http-request-node.js +0 -105
  258. package/cjs/http/http-request.js +0 -89
  259. package/cjs/http/http-response.js +0 -23
  260. package/cjs/http/utils/encodeURIParam.js +0 -21
  261. package/cjs/http/utils/normalize-headers.js +0 -28
  262. package/cjs/schema/decorators/opr-collection-resource.decorator.js +0 -24
  263. package/cjs/schema/decorators/opr-complex-type.decorator.js +0 -28
  264. package/cjs/schema/decorators/opr-field.decorator.js +0 -29
  265. package/cjs/schema/decorators/opr-resolver.decorator.js +0 -81
  266. package/cjs/schema/decorators/opr-simple-type.decorator.js +0 -19
  267. package/cjs/schema/decorators/opr-singleton-resource.decorator.js +0 -24
  268. package/cjs/schema/implementation/data-type/builtin/any.type.js +0 -9
  269. package/cjs/schema/implementation/data-type/builtin/base64-binary.type.js +0 -15
  270. package/cjs/schema/implementation/data-type/builtin/bigint.type.js +0 -15
  271. package/cjs/schema/implementation/data-type/builtin/boolean.type.js +0 -15
  272. package/cjs/schema/implementation/data-type/builtin/date-string.type.js +0 -15
  273. package/cjs/schema/implementation/data-type/builtin/date.type.js +0 -15
  274. package/cjs/schema/implementation/data-type/builtin/guid.type.js +0 -15
  275. package/cjs/schema/implementation/data-type/builtin/integer.type.js +0 -15
  276. package/cjs/schema/implementation/data-type/builtin/number.type.js +0 -15
  277. package/cjs/schema/implementation/data-type/builtin/object.type.js +0 -15
  278. package/cjs/schema/implementation/data-type/builtin/string.type.js +0 -15
  279. package/cjs/schema/implementation/data-type/builtin-data-types.js +0 -37
  280. package/cjs/schema/implementation/data-type/complex-type.js +0 -110
  281. package/cjs/schema/implementation/data-type/data-type.js +0 -37
  282. package/cjs/schema/implementation/data-type/simple-type.js +0 -21
  283. package/cjs/schema/implementation/data-type/union-type.js +0 -24
  284. package/cjs/schema/implementation/document-builder.js +0 -140
  285. package/cjs/schema/implementation/opra-document.js +0 -183
  286. package/cjs/schema/implementation/query/collection-count-query.js +0 -17
  287. package/cjs/schema/implementation/query/collection-create-query.js +0 -23
  288. package/cjs/schema/implementation/query/collection-delete-many-query.js +0 -17
  289. package/cjs/schema/implementation/query/collection-delete-query.js +0 -25
  290. package/cjs/schema/implementation/query/collection-get-query.js +0 -32
  291. package/cjs/schema/implementation/query/collection-search-query.js +0 -45
  292. package/cjs/schema/implementation/query/collection-update-many-query.js +0 -18
  293. package/cjs/schema/implementation/query/collection-update-query.js +0 -33
  294. package/cjs/schema/implementation/query/field-get-query.js +0 -34
  295. package/cjs/schema/implementation/query/index.js +0 -22
  296. package/cjs/schema/implementation/query/singleton-get-query.js +0 -22
  297. package/cjs/schema/implementation/resource/collection-resource-info.js +0 -72
  298. package/cjs/schema/implementation/resource/container-resource-info.js +0 -30
  299. package/cjs/schema/implementation/resource/resource-info.js +0 -35
  300. package/cjs/schema/implementation/resource/singleton-resource-info.js +0 -44
  301. package/cjs/schema/implementation/schema-builder/extract-resource-metadata.util.js +0 -84
  302. package/cjs/schema/implementation/schema-builder/extract-type-metadata.util.js +0 -94
  303. package/cjs/schema/opra-schema.definition.js +0 -49
  304. package/cjs/schema/type-helpers/extend-type.helper.js +0 -65
  305. package/cjs/schema/type-helpers/mixin-type.helper.js +0 -46
  306. package/cjs/schema/utils/class.utils.js +0 -8
  307. package/cjs/schema/utils/normalize-field-array.util.js +0 -44
  308. package/cjs/schema/utils/path-to-tree.util.js +0 -26
  309. package/cjs/url/formats/boolean-format.js +0 -25
  310. package/cjs/url/formats/date-format.js +0 -44
  311. package/cjs/url/formats/filter-format.js +0 -18
  312. package/cjs/url/formats/format.js +0 -6
  313. package/cjs/url/formats/integer-format.js +0 -19
  314. package/cjs/url/formats/number-format.js +0 -26
  315. package/cjs/url/formats/string-format.js +0 -25
  316. package/cjs/url/opra-url-search-params.js +0 -28
  317. package/cjs/utils/index.js +0 -6
  318. package/esm/constants.d.ts +0 -0
  319. package/esm/constants.js +0 -1
  320. package/esm/http/http-param-codec.d.ts +0 -4
  321. package/esm/http/http-param-codec.js +0 -2
  322. package/esm/http/http-request-node.d.ts +0 -34
  323. package/esm/http/http-request-node.js +0 -101
  324. package/esm/http/http-request.d.ts +0 -76
  325. package/esm/http/http-request.js +0 -85
  326. package/esm/http/http-response.d.ts +0 -41
  327. package/esm/http/http-response.js +0 -19
  328. package/esm/http/param-codec/boolean-codec.d.ts +0 -5
  329. package/esm/http/param-codec/integer-codec.d.ts +0 -9
  330. package/esm/http/param-codec/number-codec.d.ts +0 -12
  331. package/esm/http/param-codec/string-codec.d.ts +0 -14
  332. package/esm/http/utils/encodeURIParam.d.ts +0 -1
  333. package/esm/http/utils/encodeURIParam.js +0 -17
  334. package/esm/http/utils/normalize-headers.d.ts +0 -1
  335. package/esm/http/utils/normalize-headers.js +0 -24
  336. package/esm/schema/decorators/opr-collection-resource.decorator.d.ts +0 -8
  337. package/esm/schema/decorators/opr-collection-resource.decorator.js +0 -19
  338. package/esm/schema/decorators/opr-complex-type.decorator.d.ts +0 -6
  339. package/esm/schema/decorators/opr-complex-type.decorator.js +0 -23
  340. package/esm/schema/decorators/opr-field.decorator.d.ts +0 -3
  341. package/esm/schema/decorators/opr-field.decorator.js +0 -24
  342. package/esm/schema/decorators/opr-resolver.decorator.d.ts +0 -8
  343. package/esm/schema/decorators/opr-resolver.decorator.js +0 -71
  344. package/esm/schema/decorators/opr-simple-type.decorator.d.ts +0 -6
  345. package/esm/schema/decorators/opr-simple-type.decorator.js +0 -14
  346. package/esm/schema/decorators/opr-singleton-resource.decorator.d.ts +0 -8
  347. package/esm/schema/decorators/opr-singleton-resource.decorator.js +0 -19
  348. package/esm/schema/implementation/data-type/builtin/any.type.d.ts +0 -2
  349. package/esm/schema/implementation/data-type/builtin/any.type.js +0 -6
  350. package/esm/schema/implementation/data-type/builtin/base64-binary.type.d.ts +0 -2
  351. package/esm/schema/implementation/data-type/builtin/base64-binary.type.js +0 -12
  352. package/esm/schema/implementation/data-type/builtin/bigint.type.d.ts +0 -2
  353. package/esm/schema/implementation/data-type/builtin/bigint.type.js +0 -12
  354. package/esm/schema/implementation/data-type/builtin/boolean.type.d.ts +0 -2
  355. package/esm/schema/implementation/data-type/builtin/boolean.type.js +0 -12
  356. package/esm/schema/implementation/data-type/builtin/date-string.type.d.ts +0 -2
  357. package/esm/schema/implementation/data-type/builtin/date-string.type.js +0 -12
  358. package/esm/schema/implementation/data-type/builtin/date.type.d.ts +0 -2
  359. package/esm/schema/implementation/data-type/builtin/date.type.js +0 -12
  360. package/esm/schema/implementation/data-type/builtin/guid.type.d.ts +0 -2
  361. package/esm/schema/implementation/data-type/builtin/guid.type.js +0 -12
  362. package/esm/schema/implementation/data-type/builtin/integer.type.d.ts +0 -2
  363. package/esm/schema/implementation/data-type/builtin/integer.type.js +0 -12
  364. package/esm/schema/implementation/data-type/builtin/number.type.d.ts +0 -2
  365. package/esm/schema/implementation/data-type/builtin/number.type.js +0 -12
  366. package/esm/schema/implementation/data-type/builtin/object.type.d.ts +0 -2
  367. package/esm/schema/implementation/data-type/builtin/object.type.js +0 -12
  368. package/esm/schema/implementation/data-type/builtin/string.type.d.ts +0 -2
  369. package/esm/schema/implementation/data-type/builtin/string.type.js +0 -12
  370. package/esm/schema/implementation/data-type/builtin-data-types.d.ts +0 -4
  371. package/esm/schema/implementation/data-type/builtin-data-types.js +0 -34
  372. package/esm/schema/implementation/data-type/complex-type.d.ts +0 -29
  373. package/esm/schema/implementation/data-type/complex-type.js +0 -106
  374. package/esm/schema/implementation/data-type/data-type.d.ts +0 -17
  375. package/esm/schema/implementation/data-type/data-type.js +0 -33
  376. package/esm/schema/implementation/data-type/simple-type.d.ts +0 -12
  377. package/esm/schema/implementation/data-type/simple-type.js +0 -17
  378. package/esm/schema/implementation/data-type/union-type.d.ts +0 -16
  379. package/esm/schema/implementation/data-type/union-type.js +0 -19
  380. package/esm/schema/implementation/document-builder.d.ts +0 -16
  381. package/esm/schema/implementation/document-builder.js +0 -135
  382. package/esm/schema/implementation/opra-document.d.ts +0 -44
  383. package/esm/schema/implementation/opra-document.js +0 -178
  384. package/esm/schema/implementation/query/collection-count-query.d.ts +0 -14
  385. package/esm/schema/implementation/query/collection-count-query.js +0 -13
  386. package/esm/schema/implementation/query/collection-create-query.d.ts +0 -18
  387. package/esm/schema/implementation/query/collection-create-query.js +0 -19
  388. package/esm/schema/implementation/query/collection-delete-many-query.d.ts +0 -14
  389. package/esm/schema/implementation/query/collection-delete-many-query.js +0 -13
  390. package/esm/schema/implementation/query/collection-delete-query.d.ts +0 -10
  391. package/esm/schema/implementation/query/collection-delete-query.js +0 -21
  392. package/esm/schema/implementation/query/collection-get-query.d.ts +0 -21
  393. package/esm/schema/implementation/query/collection-get-query.js +0 -28
  394. package/esm/schema/implementation/query/collection-search-query.d.ts +0 -30
  395. package/esm/schema/implementation/query/collection-search-query.js +0 -41
  396. package/esm/schema/implementation/query/collection-update-many-query.d.ts +0 -15
  397. package/esm/schema/implementation/query/collection-update-many-query.js +0 -14
  398. package/esm/schema/implementation/query/collection-update-query.d.ts +0 -19
  399. package/esm/schema/implementation/query/collection-update-query.js +0 -29
  400. package/esm/schema/implementation/query/field-get-query.d.ts +0 -30
  401. package/esm/schema/implementation/query/field-get-query.js +0 -30
  402. package/esm/schema/implementation/query/index.d.ts +0 -27
  403. package/esm/schema/implementation/query/index.js +0 -17
  404. package/esm/schema/implementation/query/singleton-get-query.d.ts +0 -20
  405. package/esm/schema/implementation/query/singleton-get-query.js +0 -18
  406. package/esm/schema/implementation/resource/collection-resource-info.d.ts +0 -22
  407. package/esm/schema/implementation/resource/collection-resource-info.js +0 -68
  408. package/esm/schema/implementation/resource/container-resource-info.d.ts +0 -13
  409. package/esm/schema/implementation/resource/container-resource-info.js +0 -26
  410. package/esm/schema/implementation/resource/resource-info.d.ts +0 -17
  411. package/esm/schema/implementation/resource/resource-info.js +0 -31
  412. package/esm/schema/implementation/resource/singleton-resource-info.d.ts +0 -15
  413. package/esm/schema/implementation/resource/singleton-resource-info.js +0 -40
  414. package/esm/schema/implementation/schema-builder/extract-resource-metadata.util.d.ts +0 -3
  415. package/esm/schema/implementation/schema-builder/extract-resource-metadata.util.js +0 -80
  416. package/esm/schema/implementation/schema-builder/extract-type-metadata.util.d.ts +0 -4
  417. package/esm/schema/implementation/schema-builder/extract-type-metadata.util.js +0 -90
  418. package/esm/schema/interfaces/child-field-query.interface.d.ts +0 -4
  419. package/esm/schema/interfaces/data-type.metadata.d.ts +0 -18
  420. package/esm/schema/interfaces/resource-container.interface.d.ts +0 -8
  421. package/esm/schema/interfaces/resource.metadata.d.ts +0 -18
  422. package/esm/schema/opra-schema.definition.d.ts +0 -178
  423. package/esm/schema/opra-schema.definition.js +0 -46
  424. package/esm/schema/type-helpers/extend-type.helper.d.ts +0 -3
  425. package/esm/schema/type-helpers/extend-type.helper.js +0 -60
  426. package/esm/schema/type-helpers/mixin-type.helper.d.ts +0 -2
  427. package/esm/schema/type-helpers/mixin-type.helper.js +0 -42
  428. package/esm/schema/utils/class.utils.d.ts +0 -2
  429. package/esm/schema/utils/class.utils.js +0 -4
  430. package/esm/schema/utils/normalize-field-array.util.d.ts +0 -3
  431. package/esm/schema/utils/normalize-field-array.util.js +0 -40
  432. package/esm/schema/utils/path-to-tree.util.d.ts +0 -4
  433. package/esm/schema/utils/path-to-tree.util.js +0 -22
  434. package/esm/url/formats/boolean-format.d.ts +0 -5
  435. package/esm/url/formats/boolean-format.js +0 -21
  436. package/esm/url/formats/date-format.d.ts +0 -16
  437. package/esm/url/formats/date-format.js +0 -40
  438. package/esm/url/formats/filter-format.d.ts +0 -6
  439. package/esm/url/formats/filter-format.js +0 -14
  440. package/esm/url/formats/format.d.ts +0 -4
  441. package/esm/url/formats/format.js +0 -2
  442. package/esm/url/formats/integer-format.d.ts +0 -9
  443. package/esm/url/formats/integer-format.js +0 -15
  444. package/esm/url/formats/number-format.d.ts +0 -12
  445. package/esm/url/formats/number-format.js +0 -22
  446. package/esm/url/formats/string-format.d.ts +0 -14
  447. package/esm/url/formats/string-format.js +0 -21
  448. package/esm/url/opra-url-search-params.d.ts +0 -5
  449. package/esm/url/opra-url-search-params.js +0 -24
  450. package/esm/url/utils/path-utils.d.ts +0 -8
  451. package/esm/utils/index.d.ts +0 -3
  452. package/esm/utils/index.js +0 -3
  453. package/esm/utils/is-url.d.ts +0 -1
  454. package/esm/utils/is-url.js +0 -4
  455. package/esm/utils/path-to-tree.d.ts +0 -4
  456. /package/cjs/{schema → document}/utils/inspect.util.js +0 -0
  457. /package/cjs/{schema → document}/utils/string-compare.util.js +0 -0
  458. /package/cjs/{schema/type-helpers/mixin.utils.js → helpers/mixin-utils.js} +0 -0
  459. /package/cjs/http/{param-codec → codecs}/integer-codec.js +0 -0
  460. /package/cjs/{schema/interfaces/child-field-query.interface.js → http/interfaces/cookie-options.interface.js} +0 -0
  461. /package/cjs/schema/{interfaces/data-type.metadata.js → data-type/data-type.interface.js} +0 -0
  462. /package/cjs/schema/{interfaces/resource-container.interface.js → data-type/field.interface.js} +0 -0
  463. /package/cjs/schema/{interfaces/resource.metadata.js → document.interface.js} +0 -0
  464. /package/cjs/schema/{types.js → resource/endpoint.interface.js} +0 -0
  465. /package/esm/{schema → document}/utils/inspect.util.d.ts +0 -0
  466. /package/esm/{schema → document}/utils/inspect.util.js +0 -0
  467. /package/esm/{schema → document}/utils/string-compare.util.d.ts +0 -0
  468. /package/esm/{schema → document}/utils/string-compare.util.js +0 -0
  469. /package/esm/{schema/type-helpers/mixin.utils.d.ts → helpers/mixin-utils.d.ts} +0 -0
  470. /package/esm/{schema/type-helpers/mixin.utils.js → helpers/mixin-utils.js} +0 -0
  471. /package/esm/http/{param-codec → codecs}/integer-codec.js +0 -0
  472. /package/esm/{schema/interfaces/child-field-query.interface.js → http/interfaces/cookie-options.interface.js} +0 -0
  473. /package/esm/schema/{interfaces/data-type.metadata.js → data-type/data-type.interface.js} +0 -0
  474. /package/esm/schema/{interfaces/resource-container.interface.js → data-type/field.interface.js} +0 -0
  475. /package/esm/schema/{interfaces/resource.metadata.js → document.interface.js} +0 -0
  476. /package/esm/schema/{types.js → resource/endpoint.interface.js} +0 -0
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractCollectionSchema = exports.extractSingletonSchema = exports.importResourceClass = void 0;
4
+ const index_js_1 = require("../../helpers/index.js");
5
+ const index_js_2 = require("../../schema/index.js");
6
+ const constants_js_1 = require("../constants.js");
7
+ async function importResourceClass(thunk) {
8
+ const { document, resourceQueue, cache } = this;
9
+ const controller = await (0, index_js_1.resolveThunk)(thunk);
10
+ const cached = cache.get(controller);
11
+ if (cached)
12
+ return cached;
13
+ const ctor = typeof thunk === 'function' ? thunk : Object.getPrototypeOf(thunk).constructor;
14
+ let metadata = Reflect.getMetadata(constants_js_1.METADATA_KEY, ctor);
15
+ if (!metadata && index_js_2.OpraSchema.isResource(metadata))
16
+ throw new TypeError(`Class "${ctor.name}" doesn't have a valid Resource metadata`);
17
+ // const controller = typeof thunk === 'function' ? new ctor() : thunk;
18
+ // Clone metadata to prevent changing its contents
19
+ metadata = (0, index_js_1.cloneObject)(metadata);
20
+ const schema = (0, index_js_1.cloneObject)(metadata);
21
+ schema.controller = controller;
22
+ cache.set(thunk, schema);
23
+ if (index_js_2.OpraSchema.isSingleton(schema) || index_js_2.OpraSchema.isCollection(schema)) {
24
+ if (!document.getDataType(metadata.type, true) && (typeof metadata.type === 'function')) {
25
+ await this.importTypeClass(metadata.type);
26
+ await this.processTypes();
27
+ const dataTypeCtor = await (0, index_js_1.resolveClass)(metadata.type);
28
+ const dataType = document.getComplexType(dataTypeCtor);
29
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
30
+ schema.type = dataType.name;
31
+ }
32
+ // Check if data type exists
33
+ document.getComplexType(schema.type);
34
+ }
35
+ if (index_js_2.OpraSchema.isSingleton(schema))
36
+ await this.extractSingletonSchema(schema, ctor, metadata, controller);
37
+ if (index_js_2.OpraSchema.isCollection(schema))
38
+ await this.extractCollectionSchema(schema, ctor, metadata, controller);
39
+ resourceQueue.set(metadata.name, schema);
40
+ }
41
+ exports.importResourceClass = importResourceClass;
42
+ async function extractSingletonSchema(
43
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
44
+ target, ctor, metadata, controller) {
45
+ // Do nothing. This method is used by external modules for extending the factory
46
+ }
47
+ exports.extractSingletonSchema = extractSingletonSchema;
48
+ async function extractCollectionSchema(
49
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
50
+ target, ctor, metadata, controller) {
51
+ // Do nothing. This method is used by external modules for extending the factory
52
+ }
53
+ exports.extractCollectionSchema = extractCollectionSchema;
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractFieldSchema = exports.extractEnumTypeSchema = exports.extractUnionTypeSchema = exports.extractMappedTypeSchema = exports.extractComplexTypeSchema = exports.extractSimpleTypeSchema = exports.importTypeClass = void 0;
4
+ const index_js_1 = require("../../helpers/index.js");
5
+ const index_js_2 = require("../../schema/index.js");
6
+ const constants_js_1 = require("../constants.js");
7
+ async function importTypeClass(typeThunk) {
8
+ const { document, typeQueue, cache } = this;
9
+ const thunk = await (0, index_js_1.resolveThunk)(typeThunk);
10
+ const cached = cache.get(thunk);
11
+ if (cached)
12
+ return cached;
13
+ const dt = document.getDataType(thunk, true);
14
+ if (dt && dt.name)
15
+ return dt.name;
16
+ const metadata = Reflect.getMetadata(constants_js_1.METADATA_KEY, thunk);
17
+ if (!(metadata && index_js_2.OpraSchema.isDataType(metadata))) {
18
+ // If thunk is a Type class
19
+ if ((0, index_js_1.isConstructor)(thunk))
20
+ throw new TypeError(`Class "${thunk.name}" doesn't have a valid DataType metadata`);
21
+ // If thunk is an Enum object
22
+ throw new TypeError(`No EnumType metadata found for object ${JSON.stringify(thunk).substring(0, 20)}...`);
23
+ }
24
+ // Clone metadata to prevent changing its contents
25
+ const name = metadata.name;
26
+ const schema = (0, index_js_1.cloneObject)(metadata);
27
+ const result = name || schema;
28
+ if (name) {
29
+ cache.set(thunk, result);
30
+ typeQueue.set(name, schema);
31
+ }
32
+ // If thunk is a DataType class
33
+ if ((0, index_js_1.isConstructor)(thunk)) {
34
+ const ctor = thunk;
35
+ if (index_js_2.OpraSchema.isSimpleType(schema))
36
+ await this.extractSimpleTypeSchema(schema, ctor, metadata);
37
+ else if (index_js_2.OpraSchema.isComplexType(schema))
38
+ await this.extractComplexTypeSchema(schema, ctor, metadata);
39
+ else if (index_js_2.OpraSchema.isMappedType(schema))
40
+ await this.extractMappedTypeSchema(schema, ctor, metadata);
41
+ else if (index_js_2.OpraSchema.isUnionType(schema))
42
+ await this.extractUnionTypeSchema(schema, ctor, metadata);
43
+ else
44
+ throw new TypeError(`Class "${ctor.name}" doesn't have a valid DataType metadata`);
45
+ return result;
46
+ }
47
+ // If thunk is a EnumType object
48
+ const enumObject = thunk;
49
+ if (index_js_2.OpraSchema.isEnumType(schema)) {
50
+ let baseType;
51
+ if (metadata.base && Reflect.hasMetadata(constants_js_1.METADATA_KEY, metadata.base)) {
52
+ baseType = await this.importTypeClass(metadata.base);
53
+ }
54
+ schema.base = baseType;
55
+ await this.extractEnumTypeSchema(schema, enumObject, metadata);
56
+ return result;
57
+ }
58
+ throw new TypeError(`No EnumType metadata found for object ${JSON.stringify(enumObject).substring(0, 20)}...`);
59
+ }
60
+ exports.importTypeClass = importTypeClass;
61
+ async function extractSimpleTypeSchema(target, ctor,
62
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
63
+ metadata) {
64
+ const baseClass = Object.getPrototypeOf(ctor.prototype).constructor;
65
+ if (Reflect.hasMetadata(constants_js_1.METADATA_KEY, baseClass))
66
+ target.base = await this.importTypeClass(baseClass);
67
+ target.codec = Object.create(ctor.prototype);
68
+ }
69
+ exports.extractSimpleTypeSchema = extractSimpleTypeSchema;
70
+ async function extractComplexTypeSchema(target, ctor, metadata) {
71
+ const baseClass = Object.getPrototypeOf(ctor.prototype).constructor;
72
+ if (Reflect.hasMetadata(constants_js_1.METADATA_KEY, baseClass))
73
+ target.base = await this.importTypeClass(baseClass);
74
+ target.ctor = ctor;
75
+ // Fields
76
+ if (metadata.fields) {
77
+ const fields = target.fields = {};
78
+ for (const [elemName, elemMeta] of Object.entries(metadata.fields)) {
79
+ try {
80
+ const t = await elemMeta.type;
81
+ const type = typeof t === 'function'
82
+ ? await this.importTypeClass(t)
83
+ : (t || '');
84
+ const elemSchema = fields[elemName] = {
85
+ ...elemMeta,
86
+ type
87
+ };
88
+ if (elemMeta.enum) {
89
+ elemSchema.type = await this.importTypeClass(elemMeta.enum);
90
+ }
91
+ if (!elemSchema.type && elemMeta.designType)
92
+ elemSchema.type = await this.importTypeClass(elemMeta.designType);
93
+ await this.extractFieldSchema(elemSchema, ctor, elemMeta, elemName);
94
+ if (typeof elemSchema.type === 'function')
95
+ elemSchema.type = await this.importTypeClass(elemSchema.type);
96
+ if (elemSchema.isArray && !elemSchema.type)
97
+ throw new TypeError(`"type" must be defined explicitly for array properties`);
98
+ elemSchema.type = elemSchema.type || 'any';
99
+ }
100
+ catch (e) {
101
+ e.message = `Error in class "${ctor.name}.${elemName}". ` + e.message;
102
+ throw e;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ exports.extractComplexTypeSchema = extractComplexTypeSchema;
108
+ async function extractMappedTypeSchema(target, ctor, metadata) {
109
+ target.type = await this.importTypeClass(metadata.type);
110
+ }
111
+ exports.extractMappedTypeSchema = extractMappedTypeSchema;
112
+ async function extractUnionTypeSchema(target, ctor, metadata) {
113
+ const oldTypes = metadata.types;
114
+ target.types = [];
115
+ for (const type of oldTypes)
116
+ target.types.push(await this.importTypeClass(type));
117
+ }
118
+ exports.extractUnionTypeSchema = extractUnionTypeSchema;
119
+ async function extractEnumTypeSchema(
120
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
121
+ target, enumObject, metadata) {
122
+ // Do nothing. This method is used by external modules for extending the factory
123
+ }
124
+ exports.extractEnumTypeSchema = extractEnumTypeSchema;
125
+ async function extractFieldSchema(
126
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
127
+ target, ctor, metadata, name) {
128
+ // Do nothing. This method is used by external modules for extending the factory
129
+ }
130
+ exports.extractFieldSchema = extractFieldSchema;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./factory.js"), exports);
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSingleton = exports.createCollection = exports.processResourceQueue = void 0;
4
+ const index_js_1 = require("../../schema/index.js");
5
+ const collection_js_1 = require("../resource/collection.js");
6
+ const singleton_js_1 = require("../resource/singleton.js");
7
+ async function processResourceQueue() {
8
+ const { document, resourceQueue } = this;
9
+ const resourceNames = Array.from(resourceQueue.keys());
10
+ for (const name of resourceNames) {
11
+ const schema = resourceQueue.get(name);
12
+ if (!schema)
13
+ continue;
14
+ try {
15
+ if (index_js_1.OpraSchema.isCollection(schema)) {
16
+ const resource = await this.createCollection(name, schema);
17
+ document.resources.set(name, resource);
18
+ continue;
19
+ }
20
+ if (index_js_1.OpraSchema.isSingleton(schema)) {
21
+ const resource = await this.createSingleton(name, schema);
22
+ document.resources.set(name, resource);
23
+ continue;
24
+ }
25
+ }
26
+ catch (e) {
27
+ e.message = `Error in Resource schema (${name}): ` + e.message;
28
+ throw e;
29
+ }
30
+ throw new TypeError(`Invalid Resource schema: ${JSON.stringify(schema).substring(0, 20)}...`);
31
+ }
32
+ }
33
+ exports.processResourceQueue = processResourceQueue;
34
+ async function createCollection(name, schema) {
35
+ const { document } = this;
36
+ const dataType = document.getComplexType(schema.type);
37
+ const initArgs = {
38
+ ...schema,
39
+ name,
40
+ type: dataType
41
+ };
42
+ return new collection_js_1.Collection(document, initArgs);
43
+ }
44
+ exports.createCollection = createCollection;
45
+ async function createSingleton(name, schema) {
46
+ const { document } = this;
47
+ const dataType = document.getComplexType(schema.type);
48
+ const initArgs = {
49
+ ...schema,
50
+ name,
51
+ type: dataType
52
+ };
53
+ return new singleton_js_1.Singleton(document, initArgs);
54
+ }
55
+ exports.createSingleton = createSingleton;
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addDataType = exports.createDataTypeInstance = exports.processTypes = void 0;
4
+ const index_js_1 = require("../../schema/index.js");
5
+ const complex_type_js_1 = require("../data-type/complex-type.js");
6
+ const enum_type_js_1 = require("../data-type/enum-type.js");
7
+ const mapped_type_js_1 = require("../data-type/mapped-type.js");
8
+ const simple_type_js_1 = require("../data-type/simple-type.js");
9
+ const union_type_js_1 = require("../data-type/union-type.js");
10
+ async function processTypes() {
11
+ const { document, typeQueue } = this;
12
+ // Create DataType instances
13
+ for (const [name, schema] of typeQueue.entries()) {
14
+ const dataType = this.createDataTypeInstance(schema.kind, name);
15
+ document.types.set(name, dataType);
16
+ }
17
+ // Process schemas
18
+ const typeNames = Array.from(typeQueue.keys());
19
+ for (const name of typeNames) {
20
+ if (!typeQueue.has(name))
21
+ continue;
22
+ this.addDataType(name);
23
+ }
24
+ document.invalidate();
25
+ }
26
+ exports.processTypes = processTypes;
27
+ function createDataTypeInstance(kind, name) {
28
+ const dataType = {
29
+ document: this.document,
30
+ kind,
31
+ name
32
+ };
33
+ switch (kind) {
34
+ case index_js_1.OpraSchema.ComplexType.Kind:
35
+ Object.setPrototypeOf(dataType, complex_type_js_1.ComplexType.prototype);
36
+ break;
37
+ case index_js_1.OpraSchema.EnumType.Kind:
38
+ Object.setPrototypeOf(dataType, enum_type_js_1.EnumType.prototype);
39
+ break;
40
+ case index_js_1.OpraSchema.MappedType.Kind:
41
+ Object.setPrototypeOf(dataType, mapped_type_js_1.MappedType.prototype);
42
+ break;
43
+ case index_js_1.OpraSchema.SimpleType.Kind:
44
+ Object.setPrototypeOf(dataType, simple_type_js_1.SimpleType.prototype);
45
+ break;
46
+ case index_js_1.OpraSchema.UnionType.Kind:
47
+ Object.setPrototypeOf(dataType, union_type_js_1.UnionType.prototype);
48
+ break;
49
+ default:
50
+ throw new TypeError(`Unknown DataType kind (${kind})`);
51
+ }
52
+ return dataType;
53
+ }
54
+ exports.createDataTypeInstance = createDataTypeInstance;
55
+ function addDataType(schemaOrName) {
56
+ const { document, typeQueue, circularRefs, curPath } = this;
57
+ const name = typeof schemaOrName === 'string' ? schemaOrName : undefined;
58
+ let schema;
59
+ let dataType;
60
+ if (name) {
61
+ // Check if data type exists in document
62
+ dataType = document.getDataType(name);
63
+ // Get schema from stack, it is already done if not exist
64
+ schema = typeQueue.get(name);
65
+ if (!schema)
66
+ return dataType;
67
+ // Detect circular refs
68
+ if (circularRefs.has(name))
69
+ throw new TypeError(`Circular reference detected. ${[...Array.from(circularRefs.keys()), name].join('>')}`);
70
+ circularRefs.set(name, 1);
71
+ }
72
+ else
73
+ schema = schemaOrName;
74
+ try {
75
+ // Init base
76
+ let base;
77
+ if ((index_js_1.OpraSchema.isSimpleType(schema) || index_js_1.OpraSchema.isComplexType(schema) || index_js_1.OpraSchema.isEnumType(schema)) && schema.base) {
78
+ curPath.push(typeof schema.base === 'string' ? schema.base : '[base]');
79
+ base = this.addDataType(schema.base);
80
+ curPath.pop();
81
+ }
82
+ // **** Init SimpleType ****
83
+ if (index_js_1.OpraSchema.isSimpleType(schema)) {
84
+ const initArgs = {
85
+ ...schema,
86
+ name,
87
+ base
88
+ };
89
+ dataType = dataType || this.createDataTypeInstance(schema.kind, name);
90
+ if (name)
91
+ curPath.push(name);
92
+ simple_type_js_1.SimpleType.apply(dataType, [document, initArgs]);
93
+ if (name)
94
+ curPath.pop();
95
+ return dataType;
96
+ }
97
+ // **** Init ComplexType ****
98
+ if (index_js_1.OpraSchema.isComplexType(schema)) {
99
+ const initArgs = {
100
+ ...schema,
101
+ name,
102
+ base
103
+ };
104
+ dataType = dataType || this.createDataTypeInstance(schema.kind, name);
105
+ if (name)
106
+ curPath.push(name);
107
+ complex_type_js_1.ComplexType.apply(dataType, [document, initArgs]);
108
+ if (name)
109
+ typeQueue.delete(name);
110
+ // process fields
111
+ if (schema.fields) {
112
+ for (const [elemName, v] of Object.entries(schema.fields)) {
113
+ const elemSchema = typeof v === 'object' ? v : { type: v };
114
+ curPath.push(`${name}.${elemName}[type]`);
115
+ const elemType = this.addDataType(elemSchema.type);
116
+ dataType.addField({
117
+ ...elemSchema,
118
+ name: elemName,
119
+ type: elemType
120
+ });
121
+ curPath.pop();
122
+ }
123
+ }
124
+ if (name)
125
+ curPath.pop();
126
+ return dataType;
127
+ }
128
+ // **** Init EnumType ****
129
+ if (index_js_1.OpraSchema.isEnumType(schema)) {
130
+ const initArgs = {
131
+ ...schema,
132
+ name,
133
+ base
134
+ };
135
+ dataType = dataType || this.createDataTypeInstance(schema.kind, name);
136
+ if (name)
137
+ curPath.push(name);
138
+ enum_type_js_1.EnumType.apply(dataType, [document, initArgs]);
139
+ if (name)
140
+ curPath.pop();
141
+ return dataType;
142
+ }
143
+ // **** Init UnionType ****
144
+ if (index_js_1.OpraSchema.isUnionType(schema)) {
145
+ const unionTypes = schema.types.map(t => this.addDataType(t));
146
+ const initArgs = {
147
+ ...schema,
148
+ name,
149
+ types: unionTypes
150
+ };
151
+ dataType = dataType || this.createDataTypeInstance(schema.kind, name);
152
+ if (name)
153
+ curPath.push(name);
154
+ union_type_js_1.UnionType.apply(dataType, [document, initArgs]);
155
+ if (name)
156
+ curPath.pop();
157
+ return dataType;
158
+ }
159
+ // **** Init MappedType ****
160
+ if (index_js_1.OpraSchema.isMappedType(schema)) {
161
+ const dt = this.addDataType(schema.type);
162
+ if (!(dt instanceof complex_type_js_1.ComplexType))
163
+ throw new TypeError(`MappedType requires a ComplexType`);
164
+ const initArgs = {
165
+ ...schema,
166
+ name,
167
+ type: dt
168
+ };
169
+ dataType = dataType || this.createDataTypeInstance(schema.kind, name);
170
+ if (name)
171
+ curPath.push(name);
172
+ mapped_type_js_1.MappedType.apply(dataType, [document, initArgs]);
173
+ if (name)
174
+ curPath.pop();
175
+ return dataType;
176
+ }
177
+ }
178
+ catch (e) {
179
+ if (curPath.length)
180
+ e.message = `Error at ${curPath.join('/')}: ` + e.message;
181
+ throw e;
182
+ }
183
+ finally {
184
+ if (name) {
185
+ circularRefs.delete(name);
186
+ typeQueue.delete(name);
187
+ }
188
+ }
189
+ throw new TypeError(`Invalid DataType schema: ${JSON.stringify(schema).substring(0, 20)}...`);
190
+ }
191
+ exports.addDataType = addDataType;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ require("reflect-metadata");
5
+ tslib_1.__exportStar(require("./constants.js"), exports);
6
+ tslib_1.__exportStar(require("./api-document.js"), exports);
7
+ tslib_1.__exportStar(require("./factory/index.js"), exports);
8
+ tslib_1.__exportStar(require("./data-type/data-type.js"), exports);
9
+ tslib_1.__exportStar(require("./data-type/complex-type.js"), exports);
10
+ tslib_1.__exportStar(require("./data-type/api-field.js"), exports);
11
+ tslib_1.__exportStar(require("./data-type/enum-type.js"), exports);
12
+ tslib_1.__exportStar(require("./data-type/mapped-type.js"), exports);
13
+ tslib_1.__exportStar(require("./data-type/simple-type.js"), exports);
14
+ tslib_1.__exportStar(require("./data-type/union-type.js"), exports);
15
+ tslib_1.__exportStar(require("./resource/resource.js"), exports);
16
+ tslib_1.__exportStar(require("./resource/collection.js"), exports);
17
+ tslib_1.__exportStar(require("./resource/singleton.js"), exports);
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Collection = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const lodash_omit_1 = tslib_1.__importDefault(require("lodash.omit"));
6
+ const putil_merge_1 = tslib_1.__importDefault(require("putil-merge"));
7
+ const index_js_1 = require("../../exception/index.js");
8
+ const index_js_2 = require("../../filter/index.js");
9
+ const index_js_3 = require("../../helpers/index.js");
10
+ const index_js_4 = require("../../i18n/index.js");
11
+ const index_js_5 = require("../../schema/index.js");
12
+ const constants_js_1 = require("../constants.js");
13
+ const simple_type_js_1 = require("../data-type/simple-type.js");
14
+ const resource_js_1 = require("./resource.js");
15
+ const NESTJS_INJECTABLE_WATERMARK = '__injectable__';
16
+ const NAME_PATTERN = /^(.*)(Resource|Collection)$/;
17
+ /**
18
+ *
19
+ */
20
+ exports.Collection = function (...args) {
21
+ // ClassDecorator
22
+ if (!this) {
23
+ const [type, options] = args;
24
+ return function (target) {
25
+ const name = options?.name || target.name.match(NAME_PATTERN)?.[1] || target.name;
26
+ const metadata = Reflect.getOwnMetadata(constants_js_1.METADATA_KEY, target) || {};
27
+ const baseMetadata = Reflect.getOwnMetadata(constants_js_1.METADATA_KEY, Object.getPrototypeOf(target));
28
+ if (baseMetadata) {
29
+ (0, putil_merge_1.default)(metadata, baseMetadata, { deep: true });
30
+ }
31
+ metadata.kind = index_js_5.OpraSchema.Collection.Kind;
32
+ metadata.name = name;
33
+ metadata.type = type;
34
+ // Merge with previous metadata object
35
+ const m = Reflect.getMetadata(constants_js_1.METADATA_KEY, target);
36
+ if (m && metadata !== m)
37
+ Object.assign(metadata, (0, lodash_omit_1.default)(m), Object.keys(metadata));
38
+ // Merge options
39
+ if (options)
40
+ Object.assign(metadata, (0, lodash_omit_1.default)(options, ['kind', 'name', 'type', 'controller']));
41
+ Reflect.defineMetadata(constants_js_1.METADATA_KEY, metadata, target);
42
+ /* Define Injectable metadata for NestJS support*/
43
+ Reflect.defineMetadata(NESTJS_INJECTABLE_WATERMARK, true, target);
44
+ };
45
+ }
46
+ // Constructor
47
+ const [document, init] = args;
48
+ // call super()
49
+ resource_js_1.Resource.apply(this, [document, init]);
50
+ };
51
+ const proto = {
52
+ _construct(init) {
53
+ // call super()
54
+ resource_js_1.Resource.prototype._construct.call(this, init);
55
+ const _this = this;
56
+ _this.kind = index_js_5.OpraSchema.Collection.Kind;
57
+ _this.controller = init.controller;
58
+ const operations = _this.operations = init.operations || {};
59
+ const dataType = _this.type = init.type;
60
+ // Validate key fields
61
+ _this.primaryKey = init.primaryKey
62
+ ? (Array.isArray(init.primaryKey) ? init.primaryKey : [init.primaryKey])
63
+ : [];
64
+ if (!_this.primaryKey.length)
65
+ throw new TypeError(`You must provide primaryKey for Collection resource ("${_this.name}")`);
66
+ _this.primaryKey.forEach(f => {
67
+ const el = dataType.getField(f);
68
+ if (!(el.type instanceof simple_type_js_1.SimpleType))
69
+ throw new TypeError(`Only Simple type allowed for primary keys but "${f}" is a ${el.type.kind}`);
70
+ });
71
+ if (_this.controller) {
72
+ const instance = typeof _this.controller == 'function'
73
+ ? new _this.controller()
74
+ : _this.controller;
75
+ for (const operation of Object.values(operations)) {
76
+ if (!operation.handler && operation.handlerName) {
77
+ const fn = instance[operation.handlerName];
78
+ if (!fn)
79
+ throw new TypeError(`No such operation handler (${operation.handlerName}) found`);
80
+ operation.handler = fn.bind(instance);
81
+ }
82
+ }
83
+ }
84
+ },
85
+ exportSchema() {
86
+ const out = resource_js_1.Resource.prototype.exportSchema.call(this);
87
+ Object.assign(out, (0, index_js_3.omitUndefined)({
88
+ type: this.type.name,
89
+ operations: this.operations,
90
+ primaryKey: this.primaryKey
91
+ }));
92
+ return out;
93
+ },
94
+ parseKeyValue(value) {
95
+ if (!this.primaryKey?.length)
96
+ return;
97
+ const dataType = this.type;
98
+ if (this.primaryKey.length > 1) {
99
+ // Build primary key/value mapped object
100
+ const obj = Array.isArray(value)
101
+ ? this.primaryKey.reduce((o, k, i) => {
102
+ o[k] = value[i];
103
+ return obj;
104
+ }, {})
105
+ : value;
106
+ // decode values
107
+ for (const [k, v] of Object.entries(obj)) {
108
+ const el = dataType.getField(k);
109
+ obj[k] = el.type.decode(v);
110
+ if (obj[k] == null)
111
+ throw new TypeError(`You must provide value of primary field(s) (${k})`);
112
+ }
113
+ }
114
+ else {
115
+ const primaryKey = this.primaryKey[0];
116
+ if (typeof value === 'object')
117
+ value = value[primaryKey];
118
+ const el = dataType.getField(primaryKey);
119
+ const result = el.type.decode(value);
120
+ if (result == null)
121
+ throw new TypeError(`You must provide value of primary field(s) (${primaryKey})`);
122
+ return result;
123
+ }
124
+ },
125
+ normalizeFieldNames(fields) {
126
+ return this.type.normalizeFieldNames(fields);
127
+ },
128
+ normalizeSortFields(fields) {
129
+ const normalized = this.normalizeFieldNames(fields);
130
+ if (!normalized)
131
+ return;
132
+ const searchEndpoint = this.operations.search;
133
+ const sortFields = searchEndpoint && searchEndpoint.sortFields;
134
+ normalized.forEach(field => {
135
+ if (!sortFields?.find(x => x === field))
136
+ throw new index_js_1.BadRequestError({
137
+ message: (0, index_js_4.translate)('error:UNACCEPTED_SORT_FIELD', { field }, `Field '${field}' is not available for sort operation`),
138
+ });
139
+ });
140
+ return normalized;
141
+ },
142
+ normalizeFilterFields(ast) {
143
+ if (ast instanceof index_js_2.ComparisonExpression) {
144
+ this.normalizeFilterFields(ast.left);
145
+ }
146
+ else if (ast instanceof index_js_2.LogicalExpression) {
147
+ ast.items.forEach(item => this.normalizeFilterFields(item));
148
+ }
149
+ else if (ast instanceof index_js_2.ArithmeticExpression) {
150
+ ast.items.forEach(item => this.normalizeFilterFields(item.expression));
151
+ }
152
+ else if (ast instanceof index_js_2.ArrayExpression) {
153
+ ast.items.forEach(item => this.normalizeFilterFields(item));
154
+ }
155
+ else if (ast instanceof index_js_2.ParenthesesExpression) {
156
+ this.normalizeFilterFields(ast.expression);
157
+ }
158
+ else if (ast instanceof index_js_2.QualifiedIdentifier) {
159
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
160
+ ast.value = this.normalizeFieldNames([ast.value])[0];
161
+ }
162
+ return ast;
163
+ }
164
+ };
165
+ Object.assign(exports.Collection.prototype, proto);
166
+ Object.setPrototypeOf(exports.Collection.prototype, resource_js_1.Resource.prototype);
167
+ function createOperationDecorator(operation) {
168
+ return (options) => ((target, propertyKey) => {
169
+ const metadata = {
170
+ ...options,
171
+ handlerName: propertyKey
172
+ };
173
+ const resourceMetadata = (Reflect.getOwnMetadata(constants_js_1.METADATA_KEY, target.constructor) || {});
174
+ resourceMetadata.operations = resourceMetadata.operations || {};
175
+ resourceMetadata.operations[operation] = metadata;
176
+ Reflect.defineMetadata(constants_js_1.METADATA_KEY, resourceMetadata, target.constructor);
177
+ });
178
+ }
179
+ exports.Collection.CreateOperation = createOperationDecorator('create');
180
+ exports.Collection.GetOperation = createOperationDecorator('get');
181
+ exports.Collection.DeleteOperation = createOperationDecorator('delete');
182
+ exports.Collection.UpdateOperation = createOperationDecorator('update');
183
+ exports.Collection.SearchOperation = createOperationDecorator('search');
184
+ exports.Collection.UpdateManyOperation = createOperationDecorator('updateMany');
185
+ exports.Collection.DeleteManyOperation = createOperationDecorator('deleteMany');
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Resource = void 0;
4
+ const object_utils_js_1 = require("../../helpers/object-utils.js");
5
+ const inspect_util_js_1 = require("../utils/inspect.util.js");
6
+ exports.Resource = function (document, init) {
7
+ if (!(this instanceof exports.Resource)) {
8
+ throw new TypeError(`Class constructor must be called with "new" keyword`);
9
+ // noinspection UnreachableCodeJS
10
+ return;
11
+ }
12
+ const _this = this;
13
+ _this.document = document;
14
+ _this.name = init.name;
15
+ _this.description = init.description;
16
+ _this.controller = init.controller;
17
+ _this._construct(init);
18
+ };
19
+ const proto = {
20
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
+ _construct(init) {
22
+ // Do nothing
23
+ },
24
+ exportSchema() {
25
+ return (0, object_utils_js_1.omitUndefined)({
26
+ kind: this.kind,
27
+ description: this.description
28
+ });
29
+ },
30
+ toString() {
31
+ return `[${Object.getPrototypeOf(this).constructor.name} ${this.name || '#anonymous'}]`;
32
+ },
33
+ [inspect_util_js_1.nodeInspectCustom]() {
34
+ return `[${inspect_util_js_1.colorFgYellow + Object.getPrototypeOf(this).constructor.name + inspect_util_js_1.colorReset}` +
35
+ ` ${inspect_util_js_1.colorFgMagenta + this.name + inspect_util_js_1.colorReset}]`;
36
+ }
37
+ };
38
+ Object.assign(exports.Resource.prototype, proto);