@opra/common 0.33.13 → 1.0.0-alpha.2

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 (567) hide show
  1. package/browser.js +4657 -3899
  2. package/cjs/document/api-document.js +112 -23
  3. package/cjs/document/common/api-base.js +27 -0
  4. package/cjs/document/common/data-type-map.js +66 -0
  5. package/cjs/document/common/document-element.js +31 -0
  6. package/cjs/document/common/document-init-context.js +69 -0
  7. package/cjs/document/common/document-node.js +124 -0
  8. package/cjs/document/common/opra-document-error.js +15 -0
  9. package/cjs/document/common/value.js +33 -0
  10. package/cjs/document/constants.js +13 -7
  11. package/cjs/document/data-type/api-field.js +64 -0
  12. package/cjs/document/data-type/complex-type-base.js +183 -0
  13. package/cjs/document/data-type/complex-type.js +89 -13
  14. package/cjs/document/data-type/data-type.js +32 -25
  15. package/cjs/document/data-type/enum-type.js +92 -36
  16. package/cjs/document/data-type/{builtin → extended-types}/base64.type.js +11 -2
  17. package/cjs/document/data-type/extended-types/date-string.type.js +44 -0
  18. package/cjs/document/data-type/extended-types/date-time-string.type.js +47 -0
  19. package/cjs/document/data-type/extended-types/date-time.type.js +58 -0
  20. package/cjs/document/data-type/extended-types/date.type.js +55 -0
  21. package/cjs/document/data-type/extended-types/email.type.js +80 -0
  22. package/cjs/document/data-type/extended-types/field-path.type.js +53 -0
  23. package/cjs/document/data-type/extended-types/filter.type.js +74 -0
  24. package/cjs/document/data-type/extended-types/index.js +16 -0
  25. package/cjs/document/data-type/{builtin → extended-types}/object-id.type.js +11 -2
  26. package/cjs/document/data-type/extended-types/operation-result.type.js +56 -0
  27. package/cjs/document/data-type/extended-types/time.type.js +47 -0
  28. package/cjs/document/data-type/{builtin → extended-types}/url.type.js +12 -3
  29. package/cjs/document/data-type/extended-types/uuid.type.js +30 -0
  30. package/cjs/document/data-type/mapped-type.js +77 -61
  31. package/cjs/document/data-type/mixin-type.js +78 -23
  32. package/cjs/document/data-type/omit-type.js +11 -0
  33. package/cjs/document/data-type/partial-type.js +13 -0
  34. package/cjs/document/data-type/pick-type.js +11 -0
  35. package/cjs/document/data-type/primitive-types/any.type.js +25 -0
  36. package/cjs/document/data-type/primitive-types/bigint.type.js +30 -0
  37. package/cjs/document/data-type/{builtin → primitive-types}/boolean.type.js +11 -2
  38. package/cjs/document/data-type/primitive-types/index.js +11 -0
  39. package/cjs/document/data-type/primitive-types/integer.type.js +30 -0
  40. package/cjs/document/data-type/{builtin → primitive-types}/null.type.js +11 -2
  41. package/cjs/document/data-type/primitive-types/number.type.js +40 -0
  42. package/cjs/document/data-type/{builtin → primitive-types}/object.type.js +7 -1
  43. package/cjs/document/data-type/primitive-types/string.type.js +58 -0
  44. package/cjs/document/data-type/required-type.js +13 -0
  45. package/cjs/document/data-type/simple-type.js +93 -14
  46. package/cjs/document/data-type/utils/create-mapped-class.js +54 -0
  47. package/cjs/document/data-type/utils/get-is-inherited-predicate-fn.js +15 -0
  48. package/cjs/document/{data-type/field-decorator.js → decorators/api-field-decorator.js} +7 -7
  49. package/cjs/document/{data-type → decorators}/complex-type.decorator.js +11 -1
  50. package/cjs/document/decorators/http-controller.decorator.js +117 -0
  51. package/cjs/document/decorators/http-operation-entity.decorator.js +462 -0
  52. package/cjs/document/decorators/http-operation.decorator.js +183 -0
  53. package/cjs/document/decorators/simple-type.decorator.js +67 -0
  54. package/cjs/document/factory/api-document.factory.js +178 -0
  55. package/cjs/document/factory/data-type.factory.js +498 -0
  56. package/cjs/document/factory/http-api.factory.js +315 -0
  57. package/cjs/document/http/http-api.js +40 -0
  58. package/cjs/document/http/http-controller.js +145 -0
  59. package/cjs/document/http/http-media-type.js +68 -0
  60. package/cjs/document/http/http-multipart-field.js +33 -0
  61. package/cjs/document/http/http-operation-response.js +42 -0
  62. package/cjs/document/http/http-operation.js +93 -0
  63. package/cjs/document/http/http-parameter.js +44 -0
  64. package/cjs/document/http/http-request-body.js +25 -0
  65. package/cjs/document/http/http-status-range.js +41 -0
  66. package/cjs/document/index.js +35 -22
  67. package/cjs/document/utils/inspect.util.js +3 -3
  68. package/cjs/document/utils/parse-regexp.util.js +22 -0
  69. package/cjs/exception/http-errors/bad-request.error.js +3 -3
  70. package/cjs/exception/http-errors/conflict.error.js +3 -3
  71. package/cjs/exception/http-errors/failed-dependency.error.js +3 -3
  72. package/cjs/exception/http-errors/forbidden.error.js +3 -3
  73. package/cjs/exception/http-errors/internal-server.error.js +3 -3
  74. package/cjs/exception/http-errors/method-not-allowed.error.js +3 -3
  75. package/cjs/exception/http-errors/not-acceptable.error.js +3 -3
  76. package/cjs/exception/http-errors/not-found.error.js +3 -3
  77. package/cjs/exception/{resource-errors → http-errors}/permission.error.js +2 -2
  78. package/cjs/exception/{resource-errors → http-errors}/resource-conflict.error.js +3 -3
  79. package/cjs/exception/{resource-errors → http-errors}/resource-not.available.error.js +5 -5
  80. package/cjs/exception/http-errors/unauthorized.error.js +3 -3
  81. package/cjs/exception/http-errors/unprocessable-entity.error.js +3 -3
  82. package/cjs/exception/index.js +4 -4
  83. package/cjs/exception/issue-severity.enum.js +1 -1
  84. package/cjs/exception/opra-exception.js +5 -16
  85. package/cjs/exception/opra-http-error.js +25 -0
  86. package/cjs/filter/antlr/OpraFilterLexer.js +259 -193
  87. package/cjs/filter/antlr/OpraFilterParser.js +137 -84
  88. package/cjs/filter/ast/expressions/arithmetic-expression.js +1 -1
  89. package/cjs/filter/ast/expressions/logical-expression.js +1 -3
  90. package/cjs/filter/ast/terms/number-literal.js +1 -3
  91. package/cjs/filter/ast/terms/time-literal.js +6 -4
  92. package/cjs/filter/build.js +1 -3
  93. package/cjs/filter/filter-rules.js +93 -0
  94. package/cjs/filter/filter-tree-visitor.js +4 -7
  95. package/cjs/filter/parse.js +2 -2
  96. package/cjs/filter/utils.js +1 -3
  97. package/cjs/helpers/function-utils.js +2 -11
  98. package/cjs/helpers/get-stack-filename.js +28 -4
  99. package/cjs/helpers/index.js +2 -2
  100. package/cjs/helpers/mixin-utils.js +5 -8
  101. package/cjs/helpers/monkey-patches.js +12 -0
  102. package/cjs/helpers/object-utils.js +4 -5
  103. package/cjs/helpers/parse-fields-projection.js +67 -0
  104. package/cjs/helpers/responsive-map.js +93 -117
  105. package/cjs/helpers/type-guards.js +22 -29
  106. package/cjs/http/enums/http-status-messages.js +63 -63
  107. package/cjs/http/enums/mime-types.enum.js +17 -0
  108. package/cjs/http/index.js +1 -2
  109. package/cjs/i18n/i18n.js +9 -5
  110. package/cjs/i18n/translate.js +2 -2
  111. package/cjs/index.js +1 -1
  112. package/cjs/schema/http/http-controller.interface.js +11 -0
  113. package/cjs/schema/http/http-operation.interface.js +7 -0
  114. package/cjs/schema/index.js +27 -2
  115. package/cjs/schema/type-guards.js +8 -30
  116. package/cjs/schema/value.interface.js +2 -0
  117. package/esm/document/api-document.js +112 -23
  118. package/esm/document/common/api-base.js +23 -0
  119. package/esm/document/common/data-type-map.js +62 -0
  120. package/esm/document/common/document-element.js +28 -0
  121. package/esm/document/common/document-init-context.js +65 -0
  122. package/esm/document/common/document-node.js +120 -0
  123. package/esm/document/common/opra-document-error.js +11 -0
  124. package/esm/document/common/value.js +30 -0
  125. package/esm/document/constants.js +12 -6
  126. package/esm/document/data-type/api-field.js +61 -0
  127. package/esm/document/data-type/complex-type-base.js +180 -0
  128. package/esm/document/data-type/complex-type.js +88 -11
  129. package/esm/document/data-type/data-type.js +32 -24
  130. package/esm/document/data-type/enum-type.js +93 -36
  131. package/esm/document/data-type/extended-types/base64.type.js +22 -0
  132. package/esm/document/data-type/extended-types/date-string.type.js +41 -0
  133. package/esm/document/data-type/extended-types/date-time-string.type.js +44 -0
  134. package/esm/document/data-type/extended-types/date-time.type.js +55 -0
  135. package/esm/document/data-type/extended-types/date.type.js +52 -0
  136. package/esm/document/data-type/extended-types/email.type.js +77 -0
  137. package/esm/document/data-type/extended-types/field-path.type.js +50 -0
  138. package/esm/document/data-type/extended-types/filter.type.js +71 -0
  139. package/esm/document/data-type/extended-types/index.js +13 -0
  140. package/esm/document/data-type/extended-types/object-id.type.js +22 -0
  141. package/esm/document/{resource/types → data-type/extended-types}/operation-result.type.js +25 -14
  142. package/esm/document/data-type/extended-types/time.type.js +44 -0
  143. package/esm/document/data-type/extended-types/url.type.js +22 -0
  144. package/esm/document/data-type/extended-types/uuid.type.js +27 -0
  145. package/esm/document/data-type/mapped-type.js +76 -56
  146. package/esm/document/data-type/mixin-type.js +80 -24
  147. package/esm/document/data-type/omit-type.js +7 -0
  148. package/esm/document/data-type/partial-type.js +9 -0
  149. package/esm/document/data-type/pick-type.js +7 -0
  150. package/esm/document/data-type/primitive-types/any.type.js +22 -0
  151. package/esm/document/data-type/primitive-types/bigint.type.js +27 -0
  152. package/esm/document/data-type/primitive-types/boolean.type.js +22 -0
  153. package/esm/document/data-type/primitive-types/index.js +8 -0
  154. package/esm/document/data-type/primitive-types/integer.type.js +27 -0
  155. package/esm/document/data-type/{builtin → primitive-types}/null.type.js +11 -2
  156. package/esm/document/data-type/primitive-types/number.type.js +37 -0
  157. package/esm/document/data-type/{builtin → primitive-types}/object.type.js +7 -1
  158. package/esm/document/data-type/primitive-types/string.type.js +55 -0
  159. package/esm/document/data-type/required-type.js +9 -0
  160. package/esm/document/data-type/simple-type.js +92 -12
  161. package/esm/document/data-type/utils/create-mapped-class.js +50 -0
  162. package/esm/document/data-type/utils/get-is-inherited-predicate-fn.js +11 -0
  163. package/esm/document/{data-type/field-decorator.js → decorators/api-field-decorator.js} +5 -5
  164. package/esm/document/{data-type → decorators}/complex-type.decorator.js +12 -2
  165. package/esm/document/decorators/http-controller.decorator.js +112 -0
  166. package/esm/document/decorators/http-operation-entity.decorator.js +460 -0
  167. package/esm/document/decorators/http-operation.decorator.js +178 -0
  168. package/esm/document/decorators/simple-type.decorator.js +61 -0
  169. package/esm/document/factory/api-document.factory.js +174 -0
  170. package/esm/document/factory/data-type.factory.js +494 -0
  171. package/esm/document/factory/http-api.factory.js +311 -0
  172. package/esm/document/http/http-api.js +36 -0
  173. package/esm/document/http/http-controller.js +142 -0
  174. package/esm/document/http/http-media-type.js +65 -0
  175. package/esm/document/http/http-multipart-field.js +29 -0
  176. package/esm/document/http/http-operation-response.js +38 -0
  177. package/esm/document/http/http-operation.js +90 -0
  178. package/esm/document/http/http-parameter.js +41 -0
  179. package/esm/document/http/http-request-body.js +21 -0
  180. package/esm/document/http/http-status-range.js +37 -0
  181. package/esm/document/index.js +34 -22
  182. package/esm/document/utils/inspect.util.js +3 -3
  183. package/esm/document/utils/parse-regexp.util.js +18 -0
  184. package/esm/exception/http-errors/bad-request.error.js +3 -3
  185. package/esm/exception/http-errors/conflict.error.js +3 -3
  186. package/esm/exception/http-errors/failed-dependency.error.js +3 -3
  187. package/esm/exception/http-errors/forbidden.error.js +3 -3
  188. package/esm/exception/http-errors/internal-server.error.js +3 -3
  189. package/esm/exception/http-errors/method-not-allowed.error.js +3 -3
  190. package/esm/exception/http-errors/not-acceptable.error.js +3 -3
  191. package/esm/exception/http-errors/not-found.error.js +3 -3
  192. package/esm/exception/{resource-errors → http-errors}/permission.error.js +2 -2
  193. package/esm/exception/{resource-errors → http-errors}/resource-conflict.error.js +3 -3
  194. package/esm/exception/{resource-errors → http-errors}/resource-not.available.error.js +5 -5
  195. package/esm/exception/http-errors/unauthorized.error.js +3 -3
  196. package/esm/exception/http-errors/unprocessable-entity.error.js +3 -3
  197. package/esm/exception/index.js +4 -4
  198. package/esm/exception/issue-severity.enum.js +1 -1
  199. package/esm/exception/opra-exception.js +5 -16
  200. package/esm/exception/opra-http-error.js +21 -0
  201. package/esm/filter/antlr/OpraFilterLexer.js +260 -194
  202. package/esm/filter/antlr/OpraFilterListener.js +1 -1
  203. package/esm/filter/antlr/OpraFilterParser.js +138 -85
  204. package/esm/filter/ast/expressions/arithmetic-expression.js +1 -1
  205. package/esm/filter/ast/expressions/logical-expression.js +1 -3
  206. package/esm/filter/ast/terms/number-literal.js +1 -3
  207. package/esm/filter/ast/terms/time-literal.js +6 -4
  208. package/esm/filter/build.js +2 -4
  209. package/esm/filter/filter-rules.js +89 -0
  210. package/esm/filter/filter-tree-visitor.js +4 -6
  211. package/esm/filter/parse.js +2 -2
  212. package/esm/filter/utils.js +1 -3
  213. package/esm/helpers/function-utils.js +1 -9
  214. package/esm/helpers/get-stack-filename.js +26 -3
  215. package/esm/helpers/index.js +2 -2
  216. package/esm/helpers/mixin-utils.js +5 -8
  217. package/esm/helpers/monkey-patches.js +12 -0
  218. package/esm/helpers/object-utils.js +4 -5
  219. package/esm/helpers/parse-fields-projection.js +61 -0
  220. package/esm/helpers/responsive-map.js +93 -117
  221. package/esm/helpers/type-guards.js +22 -29
  222. package/esm/http/enums/http-status-messages.js +63 -63
  223. package/esm/http/enums/mime-types.enum.js +14 -0
  224. package/esm/http/index.js +1 -2
  225. package/esm/i18n/i18n.js +9 -5
  226. package/esm/i18n/translate.js +2 -2
  227. package/esm/index.js +1 -1
  228. package/esm/schema/http/http-controller.interface.js +8 -0
  229. package/esm/schema/http/http-operation.interface.js +4 -0
  230. package/esm/schema/index.js +27 -2
  231. package/esm/schema/type-guards.js +6 -24
  232. package/esm/schema/value.interface.js +1 -0
  233. package/package.json +14 -13
  234. package/types/document/api-document.d.ts +31 -51
  235. package/types/document/common/api-base.d.ts +17 -0
  236. package/types/document/common/data-type-map.d.ts +23 -0
  237. package/types/document/common/document-element.d.ts +23 -0
  238. package/types/document/common/document-init-context.d.ts +17 -0
  239. package/types/document/common/document-node.d.ts +65 -0
  240. package/types/document/common/opra-document-error.d.ts +12 -0
  241. package/types/document/common/value.d.ts +48 -0
  242. package/types/document/constants.d.ts +9 -3
  243. package/types/document/data-type/api-field.d.ts +65 -0
  244. package/types/document/data-type/complex-type-base.d.ts +80 -0
  245. package/types/document/data-type/complex-type.d.ts +61 -35
  246. package/types/document/data-type/data-type.d.ts +49 -46
  247. package/types/document/data-type/enum-type.d.ts +59 -23
  248. package/types/document/data-type/extended-types/base64.type.d.ts +7 -0
  249. package/types/document/data-type/extended-types/date-string.type.d.ts +9 -0
  250. package/types/document/data-type/extended-types/date-time-string.type.d.ts +9 -0
  251. package/types/document/data-type/extended-types/date-time.type.d.ts +9 -0
  252. package/types/document/data-type/extended-types/date.type.d.ts +9 -0
  253. package/types/document/data-type/extended-types/email.type.d.ts +16 -0
  254. package/types/document/data-type/extended-types/field-path.type.d.ts +15 -0
  255. package/types/document/data-type/extended-types/filter.type.d.ts +16 -0
  256. package/types/document/data-type/extended-types/index.d.ts +13 -0
  257. package/types/document/data-type/extended-types/object-id.type.d.ts +7 -0
  258. package/types/document/{resource/types → data-type/extended-types}/operation-result.type.d.ts +7 -6
  259. package/types/document/data-type/extended-types/time.type.d.ts +9 -0
  260. package/types/document/data-type/extended-types/url.type.d.ts +7 -0
  261. package/types/document/data-type/extended-types/uuid.type.d.ts +8 -0
  262. package/types/document/data-type/mapped-type.d.ts +55 -44
  263. package/types/document/data-type/mixin-type.d.ts +65 -26
  264. package/types/document/data-type/omit-type.d.ts +15 -0
  265. package/types/document/data-type/partial-type.d.ts +28 -0
  266. package/types/document/data-type/pick-type.d.ts +16 -0
  267. package/types/document/data-type/primitive-types/any.type.d.ts +7 -0
  268. package/types/document/data-type/primitive-types/bigint.type.d.ts +8 -0
  269. package/types/document/data-type/primitive-types/boolean.type.d.ts +7 -0
  270. package/types/document/data-type/primitive-types/index.d.ts +8 -0
  271. package/types/document/data-type/primitive-types/integer.type.d.ts +8 -0
  272. package/types/document/data-type/primitive-types/null.type.d.ts +7 -0
  273. package/types/document/data-type/primitive-types/number.type.d.ts +9 -0
  274. package/types/document/data-type/primitive-types/object.type.d.ts +3 -0
  275. package/types/document/data-type/primitive-types/string.type.d.ts +11 -0
  276. package/types/document/data-type/required-type.d.ts +22 -0
  277. package/types/document/data-type/simple-type.d.ts +63 -24
  278. package/types/document/data-type/utils/create-mapped-class.d.ts +3 -0
  279. package/types/document/data-type/utils/get-is-inherited-predicate-fn.d.ts +1 -0
  280. package/types/document/decorators/api-field-decorator.d.ts +5 -0
  281. package/types/document/decorators/complex-type.decorator.d.ts +2 -0
  282. package/types/document/decorators/http-controller.decorator.d.ts +14 -0
  283. package/types/document/decorators/http-operation-entity.decorator.d.ts +100 -0
  284. package/types/document/decorators/http-operation.decorator.d.ts +30 -0
  285. package/types/document/decorators/simple-type.decorator.d.ts +20 -0
  286. package/types/document/factory/api-document.factory.d.ts +35 -0
  287. package/types/document/factory/data-type.factory.d.ts +103 -0
  288. package/types/document/factory/http-api.factory.d.ts +60 -0
  289. package/types/document/http/http-api.d.ts +23 -0
  290. package/types/document/http/http-controller.d.ts +92 -0
  291. package/types/document/http/http-media-type.d.ts +59 -0
  292. package/types/document/http/http-multipart-field.d.ts +26 -0
  293. package/types/document/http/http-operation-response.d.ts +36 -0
  294. package/types/document/http/http-operation.d.ts +84 -0
  295. package/types/document/http/http-parameter.d.ts +50 -0
  296. package/types/document/http/http-request-body.d.ts +31 -0
  297. package/types/document/http/http-status-range.d.ts +14 -0
  298. package/types/document/index.d.ts +33 -22
  299. package/types/document/utils/parse-regexp.util.d.ts +4 -0
  300. package/types/exception/http-errors/bad-request.error.d.ts +2 -2
  301. package/types/exception/http-errors/conflict.error.d.ts +2 -2
  302. package/types/exception/http-errors/failed-dependency.error.d.ts +2 -2
  303. package/types/exception/http-errors/forbidden.error.d.ts +2 -2
  304. package/types/exception/http-errors/internal-server.error.d.ts +2 -2
  305. package/types/exception/http-errors/method-not-allowed.error.d.ts +2 -2
  306. package/types/exception/http-errors/not-acceptable.error.d.ts +2 -2
  307. package/types/exception/http-errors/not-found.error.d.ts +2 -2
  308. package/types/exception/{resource-errors → http-errors}/permission.error.d.ts +1 -1
  309. package/types/exception/http-errors/resource-conflict.error.d.ts +5 -0
  310. package/types/exception/{resource-errors → http-errors}/resource-not.available.error.d.ts +2 -2
  311. package/types/exception/http-errors/unauthorized.error.d.ts +2 -2
  312. package/types/exception/http-errors/unprocessable-entity.error.d.ts +2 -2
  313. package/types/exception/index.d.ts +4 -4
  314. package/types/exception/opra-exception.d.ts +1 -5
  315. package/types/exception/opra-http-error.d.ts +13 -0
  316. package/types/filter/antlr/OpraFilterLexer.d.ts +1 -1
  317. package/types/filter/antlr/OpraFilterListener.d.ts +2 -2
  318. package/types/filter/antlr/OpraFilterParser.d.ts +2 -2
  319. package/types/filter/antlr/OpraFilterVisitor.d.ts +1 -1
  320. package/types/filter/ast/terms/qualified-identifier.d.ts +1 -1
  321. package/types/filter/filter-rules.d.ts +24 -0
  322. package/types/filter/filter-tree-visitor.d.ts +1 -3
  323. package/types/helpers/function-utils.d.ts +2 -4
  324. package/types/helpers/get-stack-filename.d.ts +1 -0
  325. package/types/helpers/index.d.ts +2 -2
  326. package/types/helpers/monkey-patches.d.ts +0 -0
  327. package/types/helpers/parse-fields-projection.d.ts +11 -0
  328. package/types/helpers/responsive-map.d.ts +8 -4
  329. package/types/helpers/type-guards.d.ts +2 -2
  330. package/types/http/enums/http-status-messages.d.ts +63 -63
  331. package/types/http/enums/mime-types.enum.d.ts +12 -0
  332. package/types/http/index.d.ts +1 -2
  333. package/types/i18n/i18n.d.ts +2 -1
  334. package/types/schema/data-type/complex-type.interface.d.ts +3 -3
  335. package/types/schema/data-type/data-type.interface.d.ts +6 -0
  336. package/types/schema/data-type/enum-type.interface.d.ts +3 -4
  337. package/types/schema/data-type/field.interface.d.ts +2 -10
  338. package/types/schema/data-type/mapped-type.interface.d.ts +7 -3
  339. package/types/schema/data-type/mixin-type.interface.d.ts +2 -2
  340. package/types/schema/data-type/simple-type.interface.d.ts +35 -7
  341. package/types/schema/data-type-container.interface.d.ts +7 -0
  342. package/types/schema/document.interface.d.ts +55 -0
  343. package/types/schema/http/http-controller.interface.d.ts +24 -0
  344. package/types/schema/http/http-media-type.interface.d.ts +65 -0
  345. package/types/schema/http/http-multipart-field.interface.d.ts +7 -0
  346. package/types/schema/http/http-operation-response.interface.d.ts +24 -0
  347. package/types/schema/http/http-operation.interface.d.ts +23 -0
  348. package/types/schema/http/http-parameter.interface.d.ts +28 -0
  349. package/types/schema/http/http-request-body.interface.d.ts +29 -0
  350. package/types/schema/http/http-status-range.interface.d.ts +4 -0
  351. package/types/schema/index.d.ts +61 -2
  352. package/types/schema/type-guards.d.ts +2 -10
  353. package/types/schema/types.d.ts +3 -0
  354. package/types/schema/value.interface.d.ts +23 -0
  355. package/types/types.d.ts +1 -14
  356. package/cjs/document/data-type/builtin/any.type.js +0 -13
  357. package/cjs/document/data-type/builtin/approx-date.type.js +0 -21
  358. package/cjs/document/data-type/builtin/approx-datetime.type.js +0 -24
  359. package/cjs/document/data-type/builtin/bigint.type.js +0 -16
  360. package/cjs/document/data-type/builtin/date.type.js +0 -17
  361. package/cjs/document/data-type/builtin/datetime.type.js +0 -21
  362. package/cjs/document/data-type/builtin/email.type.js +0 -16
  363. package/cjs/document/data-type/builtin/index.js +0 -21
  364. package/cjs/document/data-type/builtin/integer.type.js +0 -16
  365. package/cjs/document/data-type/builtin/number.type.js +0 -16
  366. package/cjs/document/data-type/builtin/string.type.js +0 -16
  367. package/cjs/document/data-type/builtin/time.type.js +0 -23
  368. package/cjs/document/data-type/builtin/uuid.type.js +0 -16
  369. package/cjs/document/data-type/complex-type-class.js +0 -274
  370. package/cjs/document/data-type/enum-type-class.js +0 -39
  371. package/cjs/document/data-type/field-class.js +0 -67
  372. package/cjs/document/data-type/field.js +0 -25
  373. package/cjs/document/data-type/mapped-type-class.js +0 -53
  374. package/cjs/document/data-type/mixin-type-class.js +0 -38
  375. package/cjs/document/data-type/simple-type-class.js +0 -37
  376. package/cjs/document/data-type/simple-type.decorator.js +0 -20
  377. package/cjs/document/document-base.js +0 -24
  378. package/cjs/document/factory/api-document-factory.js +0 -262
  379. package/cjs/document/factory/type-document-factory.js +0 -326
  380. package/cjs/document/resource/action-decorator.js +0 -33
  381. package/cjs/document/resource/action.js +0 -34
  382. package/cjs/document/resource/collection-class.js +0 -257
  383. package/cjs/document/resource/collection-decorator.js +0 -211
  384. package/cjs/document/resource/collection.js +0 -25
  385. package/cjs/document/resource/container-class.js +0 -84
  386. package/cjs/document/resource/container-decorator.js +0 -24
  387. package/cjs/document/resource/container.js +0 -29
  388. package/cjs/document/resource/crud-operation-decorator.js +0 -28
  389. package/cjs/document/resource/crud-operation.js +0 -49
  390. package/cjs/document/resource/crud-resource.js +0 -34
  391. package/cjs/document/resource/endpoint.js +0 -59
  392. package/cjs/document/resource/enums/metadata-mode.enum.js +0 -19
  393. package/cjs/document/resource/parameter.js +0 -50
  394. package/cjs/document/resource/resource-decorator.js +0 -33
  395. package/cjs/document/resource/resource.js +0 -60
  396. package/cjs/document/resource/singleton-class.js +0 -83
  397. package/cjs/document/resource/singleton-decorator.js +0 -57
  398. package/cjs/document/resource/singleton.js +0 -25
  399. package/cjs/document/resource/storage-class.js +0 -18
  400. package/cjs/document/resource/storage-decorator.js +0 -70
  401. package/cjs/document/resource/storage.js +0 -25
  402. package/cjs/document/resource/types/operation-result.type.js +0 -45
  403. package/cjs/document/type-document.js +0 -204
  404. package/cjs/exception/wrap-exception.js +0 -43
  405. package/cjs/helpers/is-url-string.js +0 -13
  406. package/cjs/helpers/path-to-object-tree.js +0 -28
  407. package/cjs/http/opra-url-path.js +0 -261
  408. package/cjs/http/opra-url.js +0 -250
  409. package/cjs/schema/opra-schema.ns.js +0 -22
  410. package/cjs/schema/resource/collection.interface.js +0 -7
  411. package/cjs/schema/resource/container.interface.js +0 -7
  412. package/cjs/schema/resource/singleton.interface.js +0 -7
  413. package/cjs/schema/resource/storage.interface.js +0 -7
  414. package/esm/document/data-type/builtin/any.type.js +0 -10
  415. package/esm/document/data-type/builtin/approx-date.type.js +0 -18
  416. package/esm/document/data-type/builtin/approx-datetime.type.js +0 -21
  417. package/esm/document/data-type/builtin/base64.type.js +0 -13
  418. package/esm/document/data-type/builtin/bigint.type.js +0 -13
  419. package/esm/document/data-type/builtin/boolean.type.js +0 -13
  420. package/esm/document/data-type/builtin/date.type.js +0 -14
  421. package/esm/document/data-type/builtin/datetime.type.js +0 -18
  422. package/esm/document/data-type/builtin/email.type.js +0 -13
  423. package/esm/document/data-type/builtin/index.js +0 -18
  424. package/esm/document/data-type/builtin/integer.type.js +0 -13
  425. package/esm/document/data-type/builtin/number.type.js +0 -13
  426. package/esm/document/data-type/builtin/object-id.type.js +0 -13
  427. package/esm/document/data-type/builtin/string.type.js +0 -13
  428. package/esm/document/data-type/builtin/time.type.js +0 -20
  429. package/esm/document/data-type/builtin/url.type.js +0 -13
  430. package/esm/document/data-type/builtin/uuid.type.js +0 -13
  431. package/esm/document/data-type/complex-type-class.js +0 -270
  432. package/esm/document/data-type/enum-type-class.js +0 -35
  433. package/esm/document/data-type/field-class.js +0 -63
  434. package/esm/document/data-type/field.js +0 -21
  435. package/esm/document/data-type/mapped-type-class.js +0 -48
  436. package/esm/document/data-type/mixin-type-class.js +0 -34
  437. package/esm/document/data-type/simple-type-class.js +0 -33
  438. package/esm/document/data-type/simple-type.decorator.js +0 -15
  439. package/esm/document/document-base.js +0 -20
  440. package/esm/document/factory/api-document-factory.js +0 -258
  441. package/esm/document/factory/type-document-factory.js +0 -322
  442. package/esm/document/resource/action-decorator.js +0 -29
  443. package/esm/document/resource/action.js +0 -30
  444. package/esm/document/resource/collection-class.js +0 -253
  445. package/esm/document/resource/collection-decorator.js +0 -207
  446. package/esm/document/resource/collection.js +0 -21
  447. package/esm/document/resource/container-class.js +0 -80
  448. package/esm/document/resource/container-decorator.js +0 -20
  449. package/esm/document/resource/container.js +0 -25
  450. package/esm/document/resource/crud-operation-decorator.js +0 -24
  451. package/esm/document/resource/crud-operation.js +0 -45
  452. package/esm/document/resource/crud-resource.js +0 -30
  453. package/esm/document/resource/endpoint.js +0 -55
  454. package/esm/document/resource/enums/metadata-mode.enum.js +0 -16
  455. package/esm/document/resource/parameter.js +0 -46
  456. package/esm/document/resource/resource-decorator.js +0 -28
  457. package/esm/document/resource/resource.js +0 -56
  458. package/esm/document/resource/singleton-class.js +0 -79
  459. package/esm/document/resource/singleton-decorator.js +0 -53
  460. package/esm/document/resource/singleton.js +0 -21
  461. package/esm/document/resource/storage-class.js +0 -14
  462. package/esm/document/resource/storage-decorator.js +0 -66
  463. package/esm/document/resource/storage.js +0 -21
  464. package/esm/document/type-document.js +0 -200
  465. package/esm/exception/wrap-exception.js +0 -39
  466. package/esm/helpers/is-url-string.js +0 -8
  467. package/esm/helpers/path-to-object-tree.js +0 -24
  468. package/esm/http/opra-url-path.js +0 -255
  469. package/esm/http/opra-url.js +0 -246
  470. package/esm/schema/opra-schema.ns.js +0 -19
  471. package/esm/schema/resource/collection.interface.js +0 -4
  472. package/esm/schema/resource/container.interface.js +0 -4
  473. package/esm/schema/resource/singleton.interface.js +0 -4
  474. package/esm/schema/resource/storage.interface.js +0 -4
  475. package/types/document/data-type/builtin/any.type.d.ts +0 -2
  476. package/types/document/data-type/builtin/approx-date.type.d.ts +0 -2
  477. package/types/document/data-type/builtin/approx-datetime.type.d.ts +0 -2
  478. package/types/document/data-type/builtin/base64.type.d.ts +0 -2
  479. package/types/document/data-type/builtin/bigint.type.d.ts +0 -2
  480. package/types/document/data-type/builtin/boolean.type.d.ts +0 -2
  481. package/types/document/data-type/builtin/date.type.d.ts +0 -2
  482. package/types/document/data-type/builtin/datetime.type.d.ts +0 -2
  483. package/types/document/data-type/builtin/email.type.d.ts +0 -2
  484. package/types/document/data-type/builtin/index.d.ts +0 -18
  485. package/types/document/data-type/builtin/integer.type.d.ts +0 -2
  486. package/types/document/data-type/builtin/null.type.d.ts +0 -2
  487. package/types/document/data-type/builtin/number.type.d.ts +0 -2
  488. package/types/document/data-type/builtin/object-id.type.d.ts +0 -2
  489. package/types/document/data-type/builtin/object.type.d.ts +0 -2
  490. package/types/document/data-type/builtin/string.type.d.ts +0 -2
  491. package/types/document/data-type/builtin/time.type.d.ts +0 -2
  492. package/types/document/data-type/builtin/url.type.d.ts +0 -2
  493. package/types/document/data-type/builtin/uuid.type.d.ts +0 -2
  494. package/types/document/data-type/complex-type-class.d.ts +0 -36
  495. package/types/document/data-type/complex-type.decorator.d.ts +0 -2
  496. package/types/document/data-type/enum-type-class.d.ts +0 -18
  497. package/types/document/data-type/field-class.d.ts +0 -31
  498. package/types/document/data-type/field-decorator.d.ts +0 -5
  499. package/types/document/data-type/field.d.ts +0 -46
  500. package/types/document/data-type/mapped-type-class.d.ts +0 -18
  501. package/types/document/data-type/mixin-type-class.d.ts +0 -12
  502. package/types/document/data-type/simple-type-class.d.ts +0 -19
  503. package/types/document/data-type/simple-type.decorator.d.ts +0 -2
  504. package/types/document/document-base.d.ts +0 -10
  505. package/types/document/factory/api-document-factory.d.ts +0 -49
  506. package/types/document/factory/type-document-factory.d.ts +0 -57
  507. package/types/document/interfaces/collection.interface.d.ts +0 -10
  508. package/types/document/interfaces/singleton.interface.d.ts +0 -7
  509. package/types/document/interfaces/storage.interface.d.ts +0 -8
  510. package/types/document/resource/action-decorator.d.ts +0 -8
  511. package/types/document/resource/action.d.ts +0 -30
  512. package/types/document/resource/collection-class.d.ts +0 -20
  513. package/types/document/resource/collection-decorator.d.ts +0 -204
  514. package/types/document/resource/collection.d.ts +0 -62
  515. package/types/document/resource/container-class.d.ts +0 -66
  516. package/types/document/resource/container-decorator.d.ts +0 -37
  517. package/types/document/resource/container.d.ts +0 -27
  518. package/types/document/resource/crud-operation-decorator.d.ts +0 -6
  519. package/types/document/resource/crud-operation.d.ts +0 -32
  520. package/types/document/resource/crud-resource.d.ts +0 -16
  521. package/types/document/resource/endpoint.d.ts +0 -32
  522. package/types/document/resource/enums/metadata-mode.enum.d.ts +0 -5
  523. package/types/document/resource/parameter.d.ts +0 -35
  524. package/types/document/resource/resource-decorator.d.ts +0 -40
  525. package/types/document/resource/resource.d.ts +0 -35
  526. package/types/document/resource/singleton-class.d.ts +0 -21
  527. package/types/document/resource/singleton-decorator.d.ts +0 -131
  528. package/types/document/resource/singleton.d.ts +0 -49
  529. package/types/document/resource/storage-class.d.ts +0 -17
  530. package/types/document/resource/storage-decorator.d.ts +0 -100
  531. package/types/document/resource/storage.d.ts +0 -39
  532. package/types/document/type-document.d.ts +0 -79
  533. package/types/exception/resource-errors/resource-conflict.error.d.ts +0 -5
  534. package/types/exception/wrap-exception.d.ts +0 -2
  535. package/types/helpers/is-url-string.d.ts +0 -2
  536. package/types/helpers/path-to-object-tree.d.ts +0 -4
  537. package/types/http/opra-url-path.d.ts +0 -55
  538. package/types/http/opra-url.d.ts +0 -66
  539. package/types/schema/document/api-document.interface.d.ts +0 -11
  540. package/types/schema/document/document-base.interface.d.ts +0 -24
  541. package/types/schema/document/type-document.interface.d.ts +0 -6
  542. package/types/schema/opra-schema.ns.d.ts +0 -19
  543. package/types/schema/resource/action.interface.d.ts +0 -6
  544. package/types/schema/resource/collection.interface.d.ts +0 -55
  545. package/types/schema/resource/container.interface.d.ts +0 -10
  546. package/types/schema/resource/endpoint.interface.d.ts +0 -13
  547. package/types/schema/resource/resource.interface.d.ts +0 -15
  548. package/types/schema/resource/singleton.interface.d.ts +0 -25
  549. package/types/schema/resource/storage.interface.d.ts +0 -61
  550. /package/cjs/{document/interfaces/collection.interface.js → schema/data-type-container.interface.js} +0 -0
  551. /package/cjs/{document/interfaces/singleton.interface.js → schema/document.interface.js} +0 -0
  552. /package/cjs/{document/interfaces/storage.interface.js → schema/http/http-media-type.interface.js} +0 -0
  553. /package/cjs/schema/{document/api-document.interface.js → http/http-multipart-field.interface.js} +0 -0
  554. /package/cjs/schema/{document/document-base.interface.js → http/http-operation-response.interface.js} +0 -0
  555. /package/cjs/schema/{document/type-document.interface.js → http/http-parameter.interface.js} +0 -0
  556. /package/cjs/schema/{resource/action.interface.js → http/http-request-body.interface.js} +0 -0
  557. /package/cjs/schema/{resource/endpoint.interface.js → http/http-status-range.interface.js} +0 -0
  558. /package/cjs/schema/{resource/resource.interface.js → types.js} +0 -0
  559. /package/esm/{document/interfaces/collection.interface.js → schema/data-type-container.interface.js} +0 -0
  560. /package/esm/{document/interfaces/singleton.interface.js → schema/document.interface.js} +0 -0
  561. /package/esm/{document/interfaces/storage.interface.js → schema/http/http-media-type.interface.js} +0 -0
  562. /package/esm/schema/{document/api-document.interface.js → http/http-multipart-field.interface.js} +0 -0
  563. /package/esm/schema/{document/document-base.interface.js → http/http-operation-response.interface.js} +0 -0
  564. /package/esm/schema/{document/type-document.interface.js → http/http-parameter.interface.js} +0 -0
  565. /package/esm/schema/{resource/action.interface.js → http/http-request-body.interface.js} +0 -0
  566. /package/esm/schema/{resource/endpoint.interface.js → http/http-status-range.interface.js} +0 -0
  567. /package/esm/schema/{resource/resource.interface.js → types.js} +0 -0
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DocumentBase = void 0;
4
- const index_js_1 = require("../helpers/index.js");
5
- const index_js_2 = require("../schema/index.js");
6
- class DocumentBase {
7
- constructor() {
8
- this.info = {
9
- version: '',
10
- title: ''
11
- };
12
- }
13
- /**
14
- * Export as OPRA schema definition object
15
- */
16
- exportSchema() {
17
- return (0, index_js_1.omitUndefined)({
18
- version: index_js_2.OpraSchema.SpecVersion,
19
- url: this.url,
20
- info: (0, index_js_1.cloneObject)(this.info, true)
21
- });
22
- }
23
- }
24
- exports.DocumentBase = DocumentBase;
@@ -1,262 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ApiDocumentFactory = void 0;
4
- const index_js_1 = require("../../helpers/index.js");
5
- const index_js_2 = require("../../schema/index.js");
6
- const api_document_js_1 = require("../api-document.js");
7
- const constants_js_1 = require("../constants.js");
8
- const complex_type_js_1 = require("../data-type/complex-type.js");
9
- const enum_type_js_1 = require("../data-type/enum-type.js");
10
- const collection_js_1 = require("../resource/collection.js");
11
- const container_js_1 = require("../resource/container.js");
12
- const singleton_js_1 = require("../resource/singleton.js");
13
- const storage_js_1 = require("../resource/storage.js");
14
- const type_document_factory_js_1 = require("./type-document-factory.js");
15
- /**
16
- * @class ApiDocumentFactory
17
- */
18
- class ApiDocumentFactory extends type_document_factory_js_1.TypeDocumentFactory {
19
- constructor() {
20
- super(...arguments);
21
- this.resourceQueue = new index_js_1.ResponsiveMap();
22
- }
23
- /**
24
- * Creates ApiDocument instance from given schema object
25
- * @param init
26
- */
27
- static async createDocument(init) {
28
- const factory = new ApiDocumentFactory();
29
- const document = factory.document = new api_document_js_1.ApiDocument();
30
- await factory.initDocument(init);
31
- return document;
32
- }
33
- /**
34
- * Downloads schema from the given URL and creates the document instance * @param url
35
- */
36
- static async createDocumentFromUrl(url) {
37
- const factory = new ApiDocumentFactory();
38
- const document = factory.document = new api_document_js_1.ApiDocument();
39
- await factory.initDocumentFromUrl(url);
40
- return document;
41
- }
42
- async initDocument(init) {
43
- await super.initDocument(init);
44
- const processContainer = async (container, containerInit) => {
45
- if (!containerInit.resources)
46
- return;
47
- if (Array.isArray(containerInit.resources)) {
48
- for (const thunk of containerInit.resources) {
49
- const initArguments = await this.importResourceInstance(thunk);
50
- container.resources.set(initArguments.name, await this.createResource(container, initArguments));
51
- }
52
- }
53
- else
54
- for (const [name, schema] of Object.entries(containerInit.resources)) {
55
- const initArguments = await this.importResourceSchema(name, schema);
56
- container.resources.set(initArguments.name, await this.createResource(container, initArguments));
57
- }
58
- container.resources.sort();
59
- };
60
- if (init.root) {
61
- this.curPath.push('/root');
62
- await processContainer(this.document.root, init.root);
63
- this.curPath.pop();
64
- this.document.invalidate();
65
- }
66
- return this.document;
67
- }
68
- async importResourceSchema(name, schema) {
69
- const convertEndpoints = async (source) => {
70
- if (!source)
71
- return;
72
- const output = {};
73
- for (const [endpointName, endpointSchema] of Object.entries(source)) {
74
- /* istanbul ignore next */
75
- if (!endpointSchema)
76
- continue;
77
- const outputEndpoint = output[endpointName] = { ...endpointSchema };
78
- let parameters;
79
- // Resolve lazy type
80
- if (endpointSchema.returnType) {
81
- outputEndpoint.returnType = await this.importDataType(endpointSchema.returnType);
82
- }
83
- if (endpointSchema.parameters) {
84
- parameters = outputEndpoint.parameters = {};
85
- for (const [kP, oP] of Object.entries(endpointSchema.parameters)) {
86
- if (oP.enum) {
87
- oP.type = (0, enum_type_js_1.EnumType)(oP.enum, { name: kP + 'Enum' });
88
- }
89
- parameters[kP] = {
90
- ...oP,
91
- type: await this.importDataType(oP.type || 'any')
92
- };
93
- }
94
- }
95
- }
96
- return output;
97
- };
98
- if (schema.kind === 'Collection') {
99
- return {
100
- ...schema,
101
- kind: schema.kind,
102
- name,
103
- type: await this.importDataType(schema.type),
104
- actions: await convertEndpoints(schema.actions),
105
- operations: await convertEndpoints(schema.operations),
106
- };
107
- }
108
- else if (schema.kind === 'Singleton') {
109
- return {
110
- ...schema,
111
- kind: schema.kind,
112
- name,
113
- type: await this.importDataType(schema.type),
114
- actions: await convertEndpoints(schema.actions),
115
- operations: await convertEndpoints(schema.operations),
116
- };
117
- }
118
- else if (schema.kind === 'Storage') {
119
- return {
120
- ...schema,
121
- name,
122
- actions: await convertEndpoints(schema.actions),
123
- operations: await convertEndpoints(schema.operations),
124
- };
125
- }
126
- else if (schema.kind === 'Container') {
127
- const resources = [];
128
- if (schema.resources) {
129
- for (const [k, o] of Object.entries(schema.resources)) {
130
- const rinit = await this.importResourceSchema(k, o);
131
- resources.push(rinit);
132
- }
133
- }
134
- return {
135
- ...schema,
136
- name,
137
- resources,
138
- actions: await convertEndpoints(schema.actions)
139
- };
140
- }
141
- throw new TypeError(`Can not import resource schema (${schema.kind})`);
142
- }
143
- async importResourceInstance(thunk) {
144
- thunk = await (0, index_js_1.resolveThunk)(thunk);
145
- let ctor;
146
- let metadata;
147
- let instance;
148
- if (typeof thunk === 'function') {
149
- ctor = thunk;
150
- }
151
- else {
152
- ctor = Object.getPrototypeOf(thunk).constructor;
153
- instance = thunk;
154
- if (!Reflect.hasMetadata(constants_js_1.RESOURCE_METADATA, ctor) &&
155
- index_js_2.OpraSchema.isResource(thunk) && typeof thunk.controller === 'object') {
156
- ctor = Object.getPrototypeOf(thunk.controller).constructor;
157
- metadata = thunk;
158
- instance = thunk.controller;
159
- }
160
- }
161
- metadata = metadata || Reflect.getMetadata(constants_js_1.RESOURCE_METADATA, ctor);
162
- if (!metadata && index_js_2.OpraSchema.isResource(metadata))
163
- throw new TypeError(`Class "${ctor.name}" doesn't have a valid Resource metadata`);
164
- const convertEndpoints = async (source) => {
165
- if (!source)
166
- return;
167
- const output = {};
168
- for (const [kA, oA] of Object.entries(source)) {
169
- const o = output[kA] = { ...oA };
170
- // Resolve lazy type
171
- if (oA.returnType) {
172
- o.returnType = await this.importDataType(oA.returnType);
173
- }
174
- if (oA.parameters) {
175
- const parameters = o.parameters = {};
176
- for (const [kP, oP] of Object.entries(oA.parameters)) {
177
- if (oP.enum) {
178
- oP.type = (0, enum_type_js_1.EnumType)(oP.enum, { name: kP + 'Enum' });
179
- }
180
- parameters[kP] = {
181
- ...oP,
182
- type: await this.importDataType(oP.type || 'any')
183
- };
184
- }
185
- }
186
- if (oA.options?.inputOverwriteFields) {
187
- const inputOverwriteFields = {};
188
- for (const [kP, oP] of Object.entries(oA.options.inputOverwriteFields)) {
189
- if (oP.enum) {
190
- oP.type = (0, enum_type_js_1.EnumType)(oP.enum, { name: kP + 'Enum' });
191
- }
192
- inputOverwriteFields[kP] = { ...oP, };
193
- if (oP.type)
194
- inputOverwriteFields[kP].type = await this.importDataType(oP.type);
195
- }
196
- o.options.inputOverwriteFields = inputOverwriteFields;
197
- }
198
- if (oA.options?.outputOverwriteFields) {
199
- const outputOverwriteFields = {};
200
- for (const [kP, oP] of Object.entries(oA.options.outputOverwriteFields)) {
201
- if (oP.enum) {
202
- oP.type = (0, enum_type_js_1.EnumType)(oP.enum, { name: kP + 'Enum' });
203
- }
204
- outputOverwriteFields[kP] = { ...oP };
205
- if (oP.type)
206
- outputOverwriteFields[kP].type = await this.importDataType(oP.type);
207
- }
208
- o.options.outputOverwriteFields = outputOverwriteFields;
209
- }
210
- }
211
- return output;
212
- };
213
- // Clone metadata to prevent changing its contents
214
- const initArguments = (0, index_js_1.cloneObject)(metadata);
215
- initArguments.controller = instance;
216
- initArguments.ctor = ctor;
217
- if (initArguments.actions)
218
- initArguments.actions = await convertEndpoints(initArguments.actions);
219
- if (initArguments.kind === 'Collection' || initArguments.kind === 'Singleton') {
220
- const dataType = await this.importDataType((metadata).type);
221
- if (!dataType)
222
- throw new TypeError(`Unable to determine data type of "${initArguments.name}" resource`);
223
- if (!(dataType instanceof complex_type_js_1.ComplexType))
224
- throw new TypeError(`Data type of "${initArguments.name}" resource is not a ComplexType`);
225
- initArguments.type = dataType;
226
- if (initArguments.operations)
227
- initArguments.operations = await convertEndpoints(initArguments.operations);
228
- }
229
- else if (initArguments.kind === 'Container') {
230
- const oldResources = initArguments.resources;
231
- if (Array.isArray(oldResources)) {
232
- initArguments.resources = [];
233
- for (const t of oldResources) {
234
- const rinit = await this.importResourceInstance(t);
235
- initArguments.resources.push(rinit);
236
- }
237
- }
238
- }
239
- return initArguments;
240
- }
241
- async createResource(container, initArguments) {
242
- if (initArguments.kind === 'Collection')
243
- return new collection_js_1.Collection(container, initArguments);
244
- if (initArguments.kind === 'Singleton')
245
- return new singleton_js_1.Singleton(container, initArguments);
246
- if (initArguments.kind === 'Storage')
247
- return new storage_js_1.Storage(container, initArguments);
248
- if (initArguments.kind === 'Container') {
249
- const newContainer = new container_js_1.Container(container, { ...initArguments, resources: undefined });
250
- if (initArguments.resources) {
251
- for (const r of initArguments.resources) {
252
- const res = await this.createResource(newContainer, r);
253
- newContainer.resources.set(res.name, res);
254
- }
255
- }
256
- return newContainer;
257
- }
258
- else
259
- throw new Error(`Unknown resource type ${initArguments.kind}`);
260
- }
261
- }
262
- exports.ApiDocumentFactory = ApiDocumentFactory;
@@ -1,326 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TypeDocumentFactory = void 0;
4
- const valgen_1 = require("valgen");
5
- const index_js_1 = require("../../helpers/index.js");
6
- const index_js_2 = require("../../schema/index.js");
7
- const constants_js_1 = require("../constants.js");
8
- const index_js_3 = require("../data-type/builtin/index.js");
9
- const complex_type_js_1 = require("../data-type/complex-type.js");
10
- const enum_type_js_1 = require("../data-type/enum-type.js");
11
- const mapped_type_js_1 = require("../data-type/mapped-type.js");
12
- const mixin_type_js_1 = require("../data-type/mixin-type.js");
13
- const simple_type_js_1 = require("../data-type/simple-type.js");
14
- const type_document_js_1 = require("../type-document.js");
15
- /**
16
- * @class TypeDocumentFactory
17
- */
18
- class TypeDocumentFactory {
19
- constructor() {
20
- this.typeQueue = new index_js_1.ResponsiveMap();
21
- this.circularRefs = new Map();
22
- this.curPath = [];
23
- this.cache = new Map();
24
- }
25
- /**
26
- * Creates ApiDocument instance from given schema object
27
- */
28
- static async createDocument(init) {
29
- const factory = new TypeDocumentFactory();
30
- const document = factory.document = new type_document_js_1.TypeDocument();
31
- await factory.initDocument(init);
32
- return document;
33
- }
34
- /**
35
- * Downloads schema from the given URL and creates the document instance * @param url
36
- */
37
- static async createDocumentFromUrl(url) {
38
- const factory = new TypeDocumentFactory();
39
- const document = factory.document = new type_document_js_1.TypeDocument();
40
- await factory.initDocumentFromUrl(url);
41
- return document;
42
- }
43
- async initDocument(init) {
44
- init.version = init.version || index_js_2.OpraSchema.SpecVersion;
45
- this.document.url = init.url;
46
- if (init.info)
47
- Object.assign(this.document.info, init.info);
48
- if (!init?.noBuiltinTypes) {
49
- const builtinDocument = await this.createBuiltinTypeDocument();
50
- this.document.references.set('opra', builtinDocument);
51
- }
52
- if (init.references)
53
- await this.addReferences(init.references);
54
- if (init.types) {
55
- this.curPath.push('Types->');
56
- // Add type sources into typeQueue
57
- if (Array.isArray(init.types)) {
58
- let i = 0;
59
- for (const thunk of init.types) {
60
- const metadata = Reflect.getMetadata(constants_js_1.DATATYPE_METADATA, thunk) || thunk[constants_js_1.DATATYPE_METADATA];
61
- if (!(metadata && metadata.name))
62
- throw new TypeError(`Metadata information not found at types[${i++}] "${String(thunk)}"`);
63
- this.typeQueue.set(metadata.name, thunk);
64
- }
65
- }
66
- else
67
- for (const [name, schema] of Object.entries(init.types)) {
68
- this.typeQueue.set(name, { ...schema, name });
69
- }
70
- // Create type instances
71
- for (const thunk of this.typeQueue.values()) {
72
- await this.importDataType(thunk);
73
- }
74
- this.document.types.sort();
75
- this.curPath.pop();
76
- }
77
- this.document.invalidate();
78
- return this.document;
79
- }
80
- async initDocumentFromUrl(url) {
81
- const resp = await fetch(url, { method: 'GET' });
82
- const init = await resp.json();
83
- if (!init)
84
- throw new TypeError(`Invalid response returned from url: ${url}`);
85
- return await this.initDocument({ ...init, url });
86
- }
87
- async createBuiltinTypeDocument() {
88
- const init = {
89
- version: index_js_2.OpraSchema.SpecVersion,
90
- url: 'https://oprajs.com/spec/v1.0',
91
- info: {
92
- version: index_js_2.OpraSchema.SpecVersion,
93
- title: 'Opra built-in types',
94
- license: {
95
- url: 'https://github.com/oprajs/opra/blob/main/LICENSE',
96
- name: 'MIT'
97
- }
98
- },
99
- types: [index_js_3.AnyType, index_js_3.Base64Type, index_js_3.BigintType, index_js_3.BooleanType,
100
- index_js_3.DateType, index_js_3.EmailType, index_js_3.IntegerType, index_js_3.NullType, index_js_3.NumberType, index_js_3.ObjectIdType,
101
- index_js_3.ObjectType, index_js_3.ApproxDateType, index_js_3.ApproxDatetimeType,
102
- index_js_3.StringType, index_js_3.DatetimeType, index_js_3.TimeType, index_js_3.UrlType, index_js_3.UuidType
103
- ]
104
- };
105
- const factory = new TypeDocumentFactory();
106
- factory.document = new type_document_js_1.TypeDocument();
107
- return await factory.initDocument({ ...init, noBuiltinTypes: true });
108
- }
109
- async addReferences(references) {
110
- const { document } = this;
111
- let ns;
112
- let r;
113
- for ([ns, r] of Object.entries(references)) {
114
- r = await r;
115
- if (typeof r === 'string') {
116
- document.references.set(ns, await this.initDocumentFromUrl(r));
117
- }
118
- else if (r instanceof type_document_js_1.TypeDocument)
119
- document.references.set(ns, r);
120
- else if (typeof r === 'object') {
121
- document.references.set(ns, await this.initDocument(r));
122
- }
123
- else
124
- throw new TypeError(`Invalid document reference (${ns}) in schema`);
125
- }
126
- }
127
- async importDataType(thunk) {
128
- thunk = await (0, index_js_1.resolveThunk)(thunk);
129
- let name = '';
130
- // let schema: OpraSchema.DataType | undefined;
131
- let ctor;
132
- if (typeof thunk === 'string') {
133
- name = thunk;
134
- thunk = this.typeQueue.get(name);
135
- }
136
- let initArguments;
137
- if (typeof thunk === 'function') {
138
- const metadata = Reflect.getMetadata(constants_js_1.DATATYPE_METADATA, thunk);
139
- if (!metadata) {
140
- // Check if is an internal type class like String, Number etc
141
- const dataType = this.document.getDataType(thunk, true);
142
- if (dataType)
143
- return dataType;
144
- throw new TypeError(`Class "${thunk.name}" doesn't have a valid DataType metadata`);
145
- }
146
- name = metadata.embedded ? undefined : metadata.name;
147
- initArguments = (0, index_js_1.cloneObject)(metadata);
148
- ctor = thunk;
149
- }
150
- else if (typeof thunk === 'object') {
151
- if (index_js_2.OpraSchema.isDataType(thunk)) {
152
- name = thunk.name;
153
- ctor = thunk.ctor || ctor;
154
- initArguments = (0, index_js_1.cloneObject)(thunk);
155
- }
156
- else {
157
- // It should be an enum object
158
- const metadata = thunk[constants_js_1.DATATYPE_METADATA];
159
- if (!metadata)
160
- throw new TypeError(`No EnumType metadata found for object ${JSON.stringify(thunk).substring(0, 20)}...`);
161
- name = metadata.embedded ? undefined : metadata.name;
162
- initArguments = (0, index_js_1.cloneObject)(metadata);
163
- initArguments.enumObject = thunk;
164
- }
165
- }
166
- ctor = ctor ?? (initArguments && ((0, index_js_1.isConstructor)(initArguments.ctor)) ? initArguments.ctor : undefined);
167
- if (name) {
168
- if (this.circularRefs.has(name.toLowerCase()))
169
- throw new TypeError('Circular reference detected');
170
- const dataType = this.document.getDataType(name, true);
171
- if (dataType)
172
- return dataType;
173
- this.curPath.push('/' + name);
174
- this.circularRefs.set(name, 1);
175
- }
176
- if (ctor) {
177
- if (this.circularRefs.has(ctor))
178
- throw new TypeError('Circular reference detected');
179
- const dataType = this.document.getDataType(ctor, true);
180
- if (dataType)
181
- return dataType;
182
- this.circularRefs.set(ctor, 1);
183
- }
184
- try {
185
- if (!initArguments)
186
- throw new TypeError(`No DataType schema determined`);
187
- // Create an empty DataType instance and add in to document.
188
- // This will help us for circular dependent data types
189
- const instance = this.createDataTypeInstance(initArguments.kind, name);
190
- if (name)
191
- this.document.types.set(name, instance);
192
- await this.prepareDataTypeInitArguments(initArguments, ctor);
193
- if (initArguments.kind === 'ComplexType') {
194
- if (typeof initArguments.additionalFields === 'function')
195
- initArguments.additionalFields = await this.importDataType(initArguments.additionalFields);
196
- complex_type_js_1.ComplexType.apply(instance, [this.document, initArguments]);
197
- }
198
- else if (initArguments.kind === 'SimpleType')
199
- simple_type_js_1.SimpleType.apply(instance, [this.document, initArguments]);
200
- else if (initArguments.kind === 'EnumType')
201
- enum_type_js_1.EnumType.apply(instance, [this.document, initArguments]);
202
- else if (initArguments.kind === 'MappedType')
203
- mapped_type_js_1.MappedType.apply(instance, [this.document, initArguments]);
204
- else if (initArguments.kind === 'MixinType')
205
- mixin_type_js_1.MixinType.apply(instance, [this.document, initArguments]);
206
- else
207
- throw new TypeError(`Invalid data type schema: ${String(initArguments)}`);
208
- return instance;
209
- }
210
- finally {
211
- if (name) {
212
- this.curPath.pop();
213
- this.circularRefs.delete(name.toLowerCase());
214
- }
215
- if (ctor)
216
- this.circularRefs.delete(ctor);
217
- }
218
- }
219
- async prepareDataTypeInitArguments(schema, ctor) {
220
- const initArguments = schema;
221
- // Import extending class first
222
- if (initArguments.kind === 'SimpleType' || initArguments.kind === 'ComplexType' ||
223
- initArguments.kind === 'EnumType') {
224
- if (ctor) {
225
- const baseClass = Object.getPrototypeOf(ctor.prototype).constructor;
226
- const baseMeta = Reflect.getMetadata(constants_js_1.DATATYPE_METADATA, baseClass);
227
- if (baseMeta) {
228
- initArguments.base = await this.importDataType(baseClass);
229
- }
230
- }
231
- else if (initArguments.base) {
232
- initArguments.base = await this.importDataType(initArguments.base);
233
- }
234
- }
235
- if (initArguments.kind === 'SimpleType' && ctor) {
236
- if (typeof ctor.prototype.decode === 'function')
237
- initArguments.decoder = initArguments.name
238
- ? (0, valgen_1.validator)(initArguments.name, ctor.prototype.decode) : (0, valgen_1.validator)(ctor.prototype.decode);
239
- if (typeof ctor.prototype.encode === 'function')
240
- initArguments.decoder = initArguments.name
241
- ? (0, valgen_1.validator)(initArguments.name, ctor.prototype.encode) : (0, valgen_1.validator)(ctor.prototype.encode);
242
- return;
243
- }
244
- if (initArguments.kind === 'ComplexType') {
245
- initArguments.ctor = ctor;
246
- if (initArguments.fields) {
247
- const srcFields = initArguments.fields;
248
- const trgFields = initArguments.fields = {};
249
- for (const [fieldName, o] of Object.entries(srcFields)) {
250
- try {
251
- this.curPath.push('.' + fieldName);
252
- const srcMeta = typeof o === 'string' ? { type: o } : o;
253
- const fieldInit = trgFields[fieldName] = {
254
- ...srcMeta,
255
- name: fieldName
256
- };
257
- if (srcMeta.enum) {
258
- const enumObject = srcMeta.enum;
259
- delete srcMeta.enum;
260
- if (enumObject[constants_js_1.DATATYPE_METADATA]) {
261
- fieldInit.type = await this.importDataType(enumObject);
262
- }
263
- else {
264
- const enumMeta = (0, enum_type_js_1.EnumType)(enumObject, { name: '' });
265
- fieldInit.type = await this.importDataType({ ...enumMeta, kind: 'EnumType', base: undefined });
266
- }
267
- }
268
- else {
269
- if (srcMeta.isArray && !srcMeta.type)
270
- throw new TypeError(`"type" must be defined explicitly for array properties`);
271
- fieldInit.type = await this.importDataType(srcMeta.type || srcMeta.designType || 'any');
272
- }
273
- this.curPath.pop();
274
- }
275
- catch (e) {
276
- e.message = `Error in resource "${initArguments.name}.${fieldName}". ` + e.message;
277
- throw e;
278
- }
279
- }
280
- }
281
- }
282
- if (initArguments.kind === 'MappedType') {
283
- const dataType = await this.importDataType(initArguments.base);
284
- // istanbul ignore next
285
- if (!(dataType instanceof complex_type_js_1.ComplexType))
286
- throw new TypeError('MappedType.type property must address to a ComplexType');
287
- initArguments.base = dataType;
288
- }
289
- if (initArguments.kind === 'MixinType') {
290
- const oldTypes = initArguments.types;
291
- initArguments.types = [];
292
- for (const type of oldTypes)
293
- initArguments.types.push(await this.importDataType(type));
294
- }
295
- return initArguments;
296
- }
297
- createDataTypeInstance(kind, name) {
298
- const dataType = {
299
- document: this.document,
300
- kind,
301
- name
302
- };
303
- switch (kind) {
304
- case index_js_2.OpraSchema.ComplexType.Kind:
305
- Object.setPrototypeOf(dataType, complex_type_js_1.ComplexType.prototype);
306
- break;
307
- case index_js_2.OpraSchema.EnumType.Kind:
308
- Object.setPrototypeOf(dataType, enum_type_js_1.EnumType.prototype);
309
- break;
310
- case index_js_2.OpraSchema.MappedType.Kind:
311
- Object.setPrototypeOf(dataType, mapped_type_js_1.MappedType.prototype);
312
- break;
313
- case index_js_2.OpraSchema.SimpleType.Kind:
314
- Object.setPrototypeOf(dataType, simple_type_js_1.SimpleType.prototype);
315
- break;
316
- case index_js_2.OpraSchema.MixinType.Kind:
317
- Object.setPrototypeOf(dataType, mixin_type_js_1.MixinType.prototype);
318
- break;
319
- default:
320
- throw new TypeError(`Unknown DataType kind (${kind})`);
321
- }
322
- return dataType;
323
- }
324
- }
325
- exports.TypeDocumentFactory = TypeDocumentFactory;
326
- TypeDocumentFactory.designTypeMap = new Map();
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createActionDecorator = void 0;
4
- const constants_js_1 = require("../constants.js");
5
- function createActionDecorator(options, bannedProperties, list) {
6
- const decorator = ((target, propertyKey) => {
7
- if (typeof propertyKey === 'string' && bannedProperties.includes(propertyKey))
8
- throw new TypeError(`The "${propertyKey}" property is reserved for "${propertyKey}" operations and cannot be used as an action'`);
9
- const resourceMetadata = (Reflect.getOwnMetadata(constants_js_1.RESOURCE_METADATA, target.constructor) || {});
10
- resourceMetadata.actions = resourceMetadata.actions || {};
11
- const actionMeta = { ...options };
12
- resourceMetadata.actions[propertyKey] = actionMeta;
13
- for (const fn of list)
14
- fn(actionMeta);
15
- Reflect.defineMetadata(constants_js_1.RESOURCE_METADATA, resourceMetadata, target.constructor);
16
- });
17
- decorator.Parameter = (name, arg0) => {
18
- const parameterOptions = typeof arg0 === 'string' || typeof arg0 === 'function' ? { type: arg0 } : { ...arg0 };
19
- list.push((operationMeta) => {
20
- operationMeta.parameters = operationMeta.parameters || {};
21
- operationMeta.parameters[name] = { ...parameterOptions };
22
- });
23
- return decorator;
24
- };
25
- decorator.Returns = (t) => {
26
- list.push((actionMetadata) => {
27
- actionMetadata.returnType = t;
28
- });
29
- return decorator;
30
- };
31
- return decorator;
32
- }
33
- exports.createActionDecorator = createActionDecorator;
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Action = void 0;
4
- const valgen_1 = require("valgen");
5
- const data_type_js_1 = require("../data-type/data-type.js");
6
- const endpoint_js_1 = require("./endpoint.js");
7
- /**
8
- *
9
- * @class Action
10
- */
11
- class Action extends endpoint_js_1.Endpoint {
12
- constructor(resource, name, init) {
13
- super(resource, name, init);
14
- this.resource = resource;
15
- this.name = name;
16
- this.kind = 'action';
17
- this.encodeReturning = valgen_1.isAny;
18
- if (init.returnType)
19
- this.returnType = init.returnType instanceof data_type_js_1.DataType
20
- ? init.returnType : this.resource.document.getDataType(init.returnType);
21
- this.returnMime = init.returnMime;
22
- }
23
- exportSchema(options) {
24
- const schema = super.exportSchema(options);
25
- if (this.returnType)
26
- schema.returnType = this.returnType.isEmbedded
27
- ? this.returnType.exportSchema(options)
28
- : this.returnType.name;
29
- if (this.returnMime)
30
- schema.returnMime = this.returnMime;
31
- return schema;
32
- }
33
- }
34
- exports.Action = Action;