@opra/common 0.5.0 → 0.7.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 (419) hide show
  1. package/cjs/constants.js +1 -0
  2. package/cjs/exception/enums/issue-severity.enum.js +23 -0
  3. package/cjs/{types.js → exception/error-issue.js} +0 -0
  4. package/cjs/exception/http-errors/bad-request.error.js +22 -0
  5. package/cjs/exception/http-errors/failed-dependency.error.js +21 -0
  6. package/cjs/exception/http-errors/forbidden.error.js +23 -0
  7. package/cjs/exception/http-errors/internal-server.error.js +21 -0
  8. package/cjs/exception/http-errors/method-not-allowed.error.js +22 -0
  9. package/cjs/exception/http-errors/not-acceptable.error.js +22 -0
  10. package/cjs/exception/http-errors/not-found.error.js +25 -0
  11. package/cjs/exception/http-errors/unauthorized.error.js +22 -0
  12. package/cjs/exception/http-errors/unprocessable-entity.error.js +21 -0
  13. package/cjs/exception/index.js +18 -0
  14. package/cjs/exception/opra-exception.js +56 -0
  15. package/cjs/exception/resource-errors/resource-conflict.error.js +20 -0
  16. package/cjs/exception/resource-errors/resource-not-found.error.js +20 -0
  17. package/cjs/exception/wrap-exception.js +42 -0
  18. package/cjs/filter/antlr/OpraFilterLexer.js +386 -0
  19. package/cjs/filter/antlr/OpraFilterParser.js +2070 -0
  20. package/cjs/filter/antlr/OpraFilterVisitor.js +3 -0
  21. package/cjs/filter/ast/abstract/ast.js +10 -0
  22. package/cjs/filter/ast/abstract/expression.js +7 -0
  23. package/cjs/filter/ast/abstract/literal.js +14 -0
  24. package/cjs/filter/ast/abstract/term.js +7 -0
  25. package/cjs/filter/ast/expressions/arithmetic-expression.js +29 -0
  26. package/cjs/filter/ast/expressions/array-expression.js +15 -0
  27. package/cjs/filter/ast/expressions/comparison-expression.js +18 -0
  28. package/cjs/filter/ast/expressions/logical-expression.js +18 -0
  29. package/cjs/filter/ast/expressions/parentheses-expression.js +15 -0
  30. package/cjs/filter/ast/index.js +19 -0
  31. package/cjs/filter/ast/terms/boolean-literal.js +10 -0
  32. package/cjs/filter/ast/terms/date-literal.js +28 -0
  33. package/cjs/filter/ast/terms/external-constant.js +13 -0
  34. package/cjs/filter/ast/terms/null-literal.js +11 -0
  35. package/cjs/filter/ast/terms/number-literal.js +40 -0
  36. package/cjs/filter/ast/terms/qualified-identifier.js +10 -0
  37. package/cjs/filter/ast/terms/string-literal.js +14 -0
  38. package/cjs/filter/ast/terms/time-literal.js +33 -0
  39. package/cjs/filter/build.js +129 -0
  40. package/cjs/filter/error-listener.js +14 -0
  41. package/cjs/filter/errors.js +21 -0
  42. package/cjs/filter/filter-tree-visitor.js +113 -0
  43. package/cjs/filter/index.js +8 -0
  44. package/cjs/filter/parse.js +37 -0
  45. package/cjs/filter/utils.js +26 -0
  46. package/cjs/helpers/index.js +4 -0
  47. package/cjs/{classes → helpers}/responsive-map.js +1 -1
  48. package/cjs/{enums → http/enums}/http-headers.enum.js +9 -0
  49. package/cjs/{enums → http/enums}/http-status.enum.js +0 -0
  50. package/cjs/http/http-request.js +118 -0
  51. package/cjs/http/index.js +9 -0
  52. package/cjs/http/interfaces/client-http-headers.interface.js +2 -0
  53. package/cjs/http/interfaces/server-http-headers.interface.js +2 -0
  54. package/cjs/http/multipart/batch-multipart.js +155 -0
  55. package/cjs/http/multipart/http-request-content.js +16 -0
  56. package/cjs/http/multipart/http-response-content.js +14 -0
  57. package/cjs/http/multipart/index.js +4 -0
  58. package/cjs/http/utils/normalize-headers.js +28 -0
  59. package/cjs/i18n/i18n.js +175 -0
  60. package/cjs/i18n/index.js +10 -0
  61. package/cjs/i18n/string-utils.js +13 -0
  62. package/cjs/i18n/translate.js +15 -0
  63. package/cjs/index.js +12 -5
  64. package/cjs/schema/constants.js +11 -0
  65. package/cjs/schema/decorators/opr-collection-resource.decorator.js +23 -0
  66. package/cjs/schema/decorators/opr-complex-type.decorator.js +27 -0
  67. package/cjs/schema/decorators/opr-field.decorator.js +28 -0
  68. package/cjs/schema/decorators/opr-resolver.decorator.js +81 -0
  69. package/cjs/schema/decorators/opr-simple-type.decorator.js +18 -0
  70. package/cjs/schema/decorators/opr-singleton-resource.decorator.js +23 -0
  71. package/cjs/schema/implementation/data-type/builtin/any.type.js +9 -0
  72. package/cjs/schema/implementation/data-type/builtin/base64-binary.type.js +15 -0
  73. package/cjs/schema/implementation/data-type/builtin/bigint.type.js +15 -0
  74. package/cjs/schema/implementation/data-type/builtin/boolean.type.js +15 -0
  75. package/cjs/schema/implementation/data-type/builtin/date-string.type.js +15 -0
  76. package/cjs/schema/implementation/data-type/builtin/date.type.js +15 -0
  77. package/cjs/schema/implementation/data-type/builtin/guid.type.js +15 -0
  78. package/cjs/schema/implementation/data-type/builtin/integer.type.js +15 -0
  79. package/cjs/schema/implementation/data-type/builtin/number.type.js +15 -0
  80. package/cjs/schema/implementation/data-type/builtin/object.type.js +15 -0
  81. package/cjs/schema/implementation/data-type/builtin/string.type.js +15 -0
  82. package/cjs/schema/implementation/data-type/builtin-data-types.js +37 -0
  83. package/cjs/schema/implementation/data-type/complex-type.js +111 -0
  84. package/cjs/schema/implementation/data-type/data-type.js +36 -0
  85. package/cjs/schema/implementation/data-type/simple-type.js +21 -0
  86. package/cjs/schema/implementation/data-type/union-type.js +25 -0
  87. package/cjs/schema/implementation/document-builder.js +140 -0
  88. package/cjs/schema/implementation/opra-document.js +181 -0
  89. package/cjs/schema/implementation/query/collection-count-query.js +19 -0
  90. package/cjs/schema/implementation/query/collection-create-query.js +28 -0
  91. package/cjs/schema/implementation/query/collection-delete-many-query.js +19 -0
  92. package/cjs/schema/implementation/query/collection-delete-query.js +27 -0
  93. package/cjs/schema/implementation/query/collection-get-query.js +38 -0
  94. package/cjs/schema/implementation/query/collection-search-query.js +55 -0
  95. package/cjs/schema/implementation/query/collection-update-many-query.js +21 -0
  96. package/cjs/schema/implementation/query/collection-update-query.js +39 -0
  97. package/cjs/schema/implementation/query/field-get-query.js +45 -0
  98. package/cjs/schema/implementation/query/index.js +22 -0
  99. package/cjs/schema/implementation/query/singleton-get-query.js +27 -0
  100. package/cjs/schema/implementation/resource/collection-resource-info.js +58 -0
  101. package/cjs/schema/implementation/resource/container-resource-info.js +30 -0
  102. package/cjs/schema/implementation/resource/resource-info.js +39 -0
  103. package/cjs/schema/implementation/resource/singleton-resource-info.js +37 -0
  104. package/cjs/schema/implementation/schema-builder/extract-resource-metadata.util.js +84 -0
  105. package/cjs/schema/implementation/schema-builder/extract-type-metadata.util.js +94 -0
  106. package/cjs/schema/index.js +28 -0
  107. package/cjs/schema/interfaces/child-field-query.interface.js +2 -0
  108. package/cjs/schema/interfaces/data-type.metadata.js +2 -0
  109. package/cjs/schema/interfaces/resource-container.interface.js +2 -0
  110. package/cjs/schema/interfaces/resource.metadata.js +2 -0
  111. package/cjs/schema/opra-schema.definition.js +49 -0
  112. package/cjs/schema/type-helpers/extend-type.helper.js +65 -0
  113. package/cjs/schema/type-helpers/mixin-type.helper.js +46 -0
  114. package/cjs/schema/type-helpers/mixin.utils.js +32 -0
  115. package/cjs/schema/types.js +2 -0
  116. package/cjs/schema/utils/class.utils.js +8 -0
  117. package/cjs/schema/utils/clone-object.util.js +19 -0
  118. package/cjs/schema/utils/inspect.util.js +7 -0
  119. package/cjs/schema/utils/normalize-field-array.util.js +44 -0
  120. package/cjs/schema/utils/path-to-tree.util.js +26 -0
  121. package/cjs/schema/utils/string-compare.util.js +11 -0
  122. package/cjs/url/formats/boolean-format.js +25 -0
  123. package/cjs/url/formats/date-format.js +48 -0
  124. package/cjs/url/formats/filter-format.js +18 -0
  125. package/cjs/url/formats/format.js +6 -0
  126. package/cjs/url/formats/integer-format.js +20 -0
  127. package/cjs/url/formats/number-format.js +28 -0
  128. package/cjs/url/formats/string-format.js +28 -0
  129. package/cjs/url/index.js +8 -0
  130. package/cjs/url/opra-url-path-component.js +33 -0
  131. package/cjs/url/opra-url-path.js +128 -0
  132. package/cjs/url/opra-url-search-params.js +247 -0
  133. package/cjs/url/opra-url.js +299 -0
  134. package/cjs/url/utils/path-utils.js +86 -0
  135. package/cjs/utils/index.js +6 -0
  136. package/cjs/utils/is-url.js +8 -0
  137. package/cjs/utils/path-to-tree.js +28 -0
  138. package/cjs/utils/type-guards.js +46 -0
  139. package/esm/constants.d.ts +0 -0
  140. package/esm/constants.js +1 -0
  141. package/esm/exception/enums/issue-severity.enum.d.ts +13 -0
  142. package/esm/exception/enums/issue-severity.enum.js +20 -0
  143. package/esm/exception/error-issue.d.ts +9 -0
  144. package/esm/{types.js → exception/error-issue.js} +0 -0
  145. package/esm/exception/http-errors/bad-request.error.d.ts +10 -0
  146. package/esm/exception/http-errors/bad-request.error.js +18 -0
  147. package/esm/exception/http-errors/failed-dependency.error.d.ts +9 -0
  148. package/esm/exception/http-errors/failed-dependency.error.js +17 -0
  149. package/esm/exception/http-errors/forbidden.error.d.ts +11 -0
  150. package/esm/exception/http-errors/forbidden.error.js +19 -0
  151. package/esm/exception/http-errors/internal-server.error.d.ts +9 -0
  152. package/esm/exception/http-errors/internal-server.error.js +17 -0
  153. package/esm/exception/http-errors/method-not-allowed.error.d.ts +10 -0
  154. package/esm/exception/http-errors/method-not-allowed.error.js +18 -0
  155. package/esm/exception/http-errors/not-acceptable.error.d.ts +10 -0
  156. package/esm/exception/http-errors/not-acceptable.error.js +18 -0
  157. package/esm/exception/http-errors/not-found.error.d.ts +13 -0
  158. package/esm/exception/http-errors/not-found.error.js +21 -0
  159. package/esm/exception/http-errors/unauthorized.error.d.ts +10 -0
  160. package/esm/exception/http-errors/unauthorized.error.js +18 -0
  161. package/esm/exception/http-errors/unprocessable-entity.error.d.ts +9 -0
  162. package/esm/exception/http-errors/unprocessable-entity.error.js +17 -0
  163. package/esm/exception/index.d.ts +15 -0
  164. package/esm/exception/index.js +15 -0
  165. package/esm/exception/opra-exception.d.ts +15 -0
  166. package/esm/exception/opra-exception.js +52 -0
  167. package/esm/exception/resource-errors/resource-conflict.error.d.ts +5 -0
  168. package/esm/exception/resource-errors/resource-conflict.error.js +16 -0
  169. package/esm/exception/resource-errors/resource-not-found.error.d.ts +4 -0
  170. package/esm/exception/resource-errors/resource-not-found.error.js +16 -0
  171. package/esm/exception/wrap-exception.d.ts +2 -0
  172. package/esm/exception/wrap-exception.js +38 -0
  173. package/esm/filter/antlr/OpraFilterLexer.d.ts +78 -0
  174. package/esm/filter/antlr/OpraFilterLexer.js +381 -0
  175. package/esm/filter/antlr/OpraFilterParser.d.ts +365 -0
  176. package/esm/filter/antlr/OpraFilterParser.js +2022 -0
  177. package/esm/filter/antlr/OpraFilterVisitor.d.ts +290 -0
  178. package/esm/filter/antlr/OpraFilterVisitor.js +2 -0
  179. package/esm/filter/ast/abstract/ast.d.ts +5 -0
  180. package/esm/filter/ast/abstract/ast.js +6 -0
  181. package/esm/filter/ast/abstract/expression.d.ts +3 -0
  182. package/esm/filter/ast/abstract/expression.js +3 -0
  183. package/esm/filter/ast/abstract/literal.d.ts +6 -0
  184. package/esm/filter/ast/abstract/literal.js +10 -0
  185. package/esm/filter/ast/abstract/term.d.ts +3 -0
  186. package/esm/filter/ast/abstract/term.js +3 -0
  187. package/esm/filter/ast/expressions/arithmetic-expression.d.ts +13 -0
  188. package/esm/filter/ast/expressions/arithmetic-expression.js +24 -0
  189. package/esm/filter/ast/expressions/array-expression.d.ts +7 -0
  190. package/esm/filter/ast/expressions/array-expression.js +11 -0
  191. package/esm/filter/ast/expressions/comparison-expression.d.ts +10 -0
  192. package/esm/filter/ast/expressions/comparison-expression.js +14 -0
  193. package/esm/filter/ast/expressions/logical-expression.d.ts +8 -0
  194. package/esm/filter/ast/expressions/logical-expression.js +14 -0
  195. package/esm/filter/ast/expressions/parentheses-expression.d.ts +6 -0
  196. package/esm/filter/ast/expressions/parentheses-expression.js +11 -0
  197. package/esm/filter/ast/index.d.ts +16 -0
  198. package/esm/filter/ast/index.js +16 -0
  199. package/esm/filter/ast/terms/boolean-literal.d.ts +5 -0
  200. package/esm/filter/ast/terms/boolean-literal.js +6 -0
  201. package/esm/filter/ast/terms/date-literal.d.ts +6 -0
  202. package/esm/filter/ast/terms/date-literal.js +24 -0
  203. package/esm/filter/ast/terms/external-constant.d.ts +5 -0
  204. package/esm/filter/ast/terms/external-constant.js +9 -0
  205. package/esm/filter/ast/terms/null-literal.d.ts +5 -0
  206. package/esm/filter/ast/terms/null-literal.js +7 -0
  207. package/esm/filter/ast/terms/number-literal.d.ts +6 -0
  208. package/esm/filter/ast/terms/number-literal.js +36 -0
  209. package/esm/filter/ast/terms/qualified-identifier.d.ts +4 -0
  210. package/esm/filter/ast/terms/qualified-identifier.js +6 -0
  211. package/esm/filter/ast/terms/string-literal.d.ts +5 -0
  212. package/esm/filter/ast/terms/string-literal.js +10 -0
  213. package/esm/filter/ast/terms/time-literal.d.ts +6 -0
  214. package/esm/filter/ast/terms/time-literal.js +29 -0
  215. package/esm/filter/build.d.ts +31 -0
  216. package/esm/filter/build.js +105 -0
  217. package/esm/filter/error-listener.d.ts +8 -0
  218. package/esm/filter/error-listener.js +10 -0
  219. package/esm/filter/errors.d.ts +20 -0
  220. package/esm/filter/errors.js +15 -0
  221. package/esm/filter/filter-tree-visitor.d.ts +30 -0
  222. package/esm/filter/filter-tree-visitor.js +109 -0
  223. package/esm/filter/index.d.ts +5 -0
  224. package/esm/filter/index.js +5 -0
  225. package/esm/filter/parse.d.ts +2 -0
  226. package/esm/filter/parse.js +33 -0
  227. package/esm/filter/utils.d.ts +2 -0
  228. package/esm/filter/utils.js +21 -0
  229. package/esm/helpers/index.d.ts +1 -0
  230. package/esm/helpers/index.js +1 -0
  231. package/esm/{classes → helpers}/responsive-map.d.ts +0 -0
  232. package/esm/{classes → helpers}/responsive-map.js +1 -1
  233. package/esm/{enums → http/enums}/http-headers.enum.d.ts +9 -0
  234. package/esm/{enums → http/enums}/http-headers.enum.js +9 -0
  235. package/esm/{enums → http/enums}/http-status.enum.d.ts +0 -0
  236. package/esm/{enums → http/enums}/http-status.enum.js +0 -0
  237. package/esm/http/http-request.d.ts +34 -0
  238. package/esm/http/http-request.js +114 -0
  239. package/esm/http/index.d.ts +6 -0
  240. package/esm/http/index.js +6 -0
  241. package/esm/http/interfaces/client-http-headers.interface.d.ts +65 -0
  242. package/esm/http/interfaces/client-http-headers.interface.js +1 -0
  243. package/esm/http/interfaces/server-http-headers.interface.d.ts +1 -0
  244. package/esm/http/interfaces/server-http-headers.interface.js +1 -0
  245. package/esm/http/multipart/batch-multipart.d.ts +30 -0
  246. package/esm/http/multipart/batch-multipart.js +150 -0
  247. package/esm/http/multipart/http-request-content.d.ts +8 -0
  248. package/esm/http/multipart/http-request-content.js +12 -0
  249. package/esm/http/multipart/http-response-content.d.ts +7 -0
  250. package/esm/http/multipart/http-response-content.js +10 -0
  251. package/esm/http/multipart/index.d.ts +1 -0
  252. package/esm/http/multipart/index.js +1 -0
  253. package/esm/http/utils/normalize-headers.d.ts +1 -0
  254. package/esm/http/utils/normalize-headers.js +24 -0
  255. package/esm/i18n/i18n.d.ts +28 -0
  256. package/esm/i18n/i18n.js +170 -0
  257. package/esm/i18n/index.d.ts +5 -0
  258. package/esm/i18n/index.js +6 -0
  259. package/esm/i18n/string-utils.d.ts +2 -0
  260. package/esm/i18n/string-utils.js +8 -0
  261. package/esm/i18n/translate.d.ts +4 -0
  262. package/esm/i18n/translate.js +11 -0
  263. package/esm/index.d.ts +10 -5
  264. package/esm/index.js +10 -5
  265. package/esm/schema/constants.d.ts +8 -0
  266. package/esm/schema/constants.js +8 -0
  267. package/esm/schema/decorators/opr-collection-resource.decorator.d.ts +8 -0
  268. package/esm/schema/decorators/opr-collection-resource.decorator.js +19 -0
  269. package/esm/schema/decorators/opr-complex-type.decorator.d.ts +6 -0
  270. package/esm/schema/decorators/opr-complex-type.decorator.js +23 -0
  271. package/esm/schema/decorators/opr-field.decorator.d.ts +3 -0
  272. package/esm/schema/decorators/opr-field.decorator.js +24 -0
  273. package/esm/schema/decorators/opr-resolver.decorator.d.ts +8 -0
  274. package/esm/schema/decorators/opr-resolver.decorator.js +71 -0
  275. package/esm/schema/decorators/opr-simple-type.decorator.d.ts +6 -0
  276. package/esm/schema/decorators/opr-simple-type.decorator.js +14 -0
  277. package/esm/schema/decorators/opr-singleton-resource.decorator.d.ts +8 -0
  278. package/esm/schema/decorators/opr-singleton-resource.decorator.js +19 -0
  279. package/esm/schema/implementation/data-type/builtin/any.type.d.ts +2 -0
  280. package/esm/schema/implementation/data-type/builtin/any.type.js +6 -0
  281. package/esm/schema/implementation/data-type/builtin/base64-binary.type.d.ts +2 -0
  282. package/esm/schema/implementation/data-type/builtin/base64-binary.type.js +12 -0
  283. package/esm/schema/implementation/data-type/builtin/bigint.type.d.ts +2 -0
  284. package/esm/schema/implementation/data-type/builtin/bigint.type.js +12 -0
  285. package/esm/schema/implementation/data-type/builtin/boolean.type.d.ts +2 -0
  286. package/esm/schema/implementation/data-type/builtin/boolean.type.js +12 -0
  287. package/esm/schema/implementation/data-type/builtin/date-string.type.d.ts +2 -0
  288. package/esm/schema/implementation/data-type/builtin/date-string.type.js +12 -0
  289. package/esm/schema/implementation/data-type/builtin/date.type.d.ts +2 -0
  290. package/esm/schema/implementation/data-type/builtin/date.type.js +12 -0
  291. package/esm/schema/implementation/data-type/builtin/guid.type.d.ts +2 -0
  292. package/esm/schema/implementation/data-type/builtin/guid.type.js +12 -0
  293. package/esm/schema/implementation/data-type/builtin/integer.type.d.ts +2 -0
  294. package/esm/schema/implementation/data-type/builtin/integer.type.js +12 -0
  295. package/esm/schema/implementation/data-type/builtin/number.type.d.ts +2 -0
  296. package/esm/schema/implementation/data-type/builtin/number.type.js +12 -0
  297. package/esm/schema/implementation/data-type/builtin/object.type.d.ts +2 -0
  298. package/esm/schema/implementation/data-type/builtin/object.type.js +12 -0
  299. package/esm/schema/implementation/data-type/builtin/string.type.d.ts +2 -0
  300. package/esm/schema/implementation/data-type/builtin/string.type.js +12 -0
  301. package/esm/schema/implementation/data-type/builtin-data-types.d.ts +4 -0
  302. package/esm/schema/implementation/data-type/builtin-data-types.js +34 -0
  303. package/esm/schema/implementation/data-type/complex-type.d.ts +29 -0
  304. package/esm/schema/implementation/data-type/complex-type.js +107 -0
  305. package/esm/schema/implementation/data-type/data-type.d.ts +16 -0
  306. package/esm/schema/implementation/data-type/data-type.js +32 -0
  307. package/esm/schema/implementation/data-type/simple-type.d.ts +12 -0
  308. package/esm/schema/implementation/data-type/simple-type.js +17 -0
  309. package/esm/schema/implementation/data-type/union-type.d.ts +16 -0
  310. package/esm/schema/implementation/data-type/union-type.js +21 -0
  311. package/esm/schema/implementation/document-builder.d.ts +16 -0
  312. package/esm/schema/implementation/document-builder.js +135 -0
  313. package/esm/schema/implementation/opra-document.d.ts +44 -0
  314. package/esm/schema/implementation/opra-document.js +177 -0
  315. package/esm/schema/implementation/query/collection-count-query.d.ts +14 -0
  316. package/esm/schema/implementation/query/collection-count-query.js +15 -0
  317. package/esm/schema/implementation/query/collection-create-query.d.ts +18 -0
  318. package/esm/schema/implementation/query/collection-create-query.js +24 -0
  319. package/esm/schema/implementation/query/collection-delete-many-query.d.ts +14 -0
  320. package/esm/schema/implementation/query/collection-delete-many-query.js +15 -0
  321. package/esm/schema/implementation/query/collection-delete-query.d.ts +10 -0
  322. package/esm/schema/implementation/query/collection-delete-query.js +23 -0
  323. package/esm/schema/implementation/query/collection-get-query.d.ts +21 -0
  324. package/esm/schema/implementation/query/collection-get-query.js +34 -0
  325. package/esm/schema/implementation/query/collection-search-query.d.ts +30 -0
  326. package/esm/schema/implementation/query/collection-search-query.js +51 -0
  327. package/esm/schema/implementation/query/collection-update-many-query.d.ts +15 -0
  328. package/esm/schema/implementation/query/collection-update-many-query.js +17 -0
  329. package/esm/schema/implementation/query/collection-update-query.d.ts +19 -0
  330. package/esm/schema/implementation/query/collection-update-query.js +35 -0
  331. package/esm/schema/implementation/query/field-get-query.d.ts +30 -0
  332. package/esm/schema/implementation/query/field-get-query.js +41 -0
  333. package/esm/schema/implementation/query/index.d.ts +27 -0
  334. package/esm/schema/implementation/query/index.js +17 -0
  335. package/esm/schema/implementation/query/singleton-get-query.d.ts +20 -0
  336. package/esm/schema/implementation/query/singleton-get-query.js +23 -0
  337. package/esm/schema/implementation/resource/collection-resource-info.d.ts +19 -0
  338. package/esm/schema/implementation/resource/collection-resource-info.js +54 -0
  339. package/esm/schema/implementation/resource/container-resource-info.d.ts +13 -0
  340. package/esm/schema/implementation/resource/container-resource-info.js +26 -0
  341. package/esm/schema/implementation/resource/resource-info.d.ts +17 -0
  342. package/esm/schema/implementation/resource/resource-info.js +35 -0
  343. package/esm/schema/implementation/resource/singleton-resource-info.d.ts +14 -0
  344. package/esm/schema/implementation/resource/singleton-resource-info.js +33 -0
  345. package/esm/schema/implementation/schema-builder/extract-resource-metadata.util.d.ts +3 -0
  346. package/esm/schema/implementation/schema-builder/extract-resource-metadata.util.js +80 -0
  347. package/esm/schema/implementation/schema-builder/extract-type-metadata.util.d.ts +4 -0
  348. package/esm/schema/implementation/schema-builder/extract-type-metadata.util.js +89 -0
  349. package/esm/schema/index.d.ts +25 -0
  350. package/esm/schema/index.js +25 -0
  351. package/esm/schema/interfaces/child-field-query.interface.d.ts +4 -0
  352. package/esm/schema/interfaces/child-field-query.interface.js +1 -0
  353. package/esm/schema/interfaces/data-type.metadata.d.ts +18 -0
  354. package/esm/schema/interfaces/data-type.metadata.js +1 -0
  355. package/esm/schema/interfaces/resource-container.interface.d.ts +8 -0
  356. package/esm/schema/interfaces/resource-container.interface.js +1 -0
  357. package/esm/schema/interfaces/resource.metadata.d.ts +18 -0
  358. package/esm/schema/interfaces/resource.metadata.js +1 -0
  359. package/esm/schema/opra-schema.definition.d.ts +178 -0
  360. package/esm/schema/opra-schema.definition.js +46 -0
  361. package/esm/schema/type-helpers/extend-type.helper.d.ts +3 -0
  362. package/esm/schema/type-helpers/extend-type.helper.js +59 -0
  363. package/esm/schema/type-helpers/mixin-type.helper.d.ts +2 -0
  364. package/esm/schema/type-helpers/mixin-type.helper.js +41 -0
  365. package/esm/schema/type-helpers/mixin.utils.d.ts +3 -0
  366. package/esm/schema/type-helpers/mixin.utils.js +27 -0
  367. package/esm/{types.d.ts → schema/types.d.ts} +8 -1
  368. package/esm/schema/types.js +1 -0
  369. package/esm/schema/utils/class.utils.d.ts +2 -0
  370. package/esm/schema/utils/class.utils.js +4 -0
  371. package/esm/schema/utils/clone-object.util.d.ts +1 -0
  372. package/esm/schema/utils/clone-object.util.js +14 -0
  373. package/esm/schema/utils/inspect.util.d.ts +4 -0
  374. package/esm/schema/utils/inspect.util.js +4 -0
  375. package/esm/schema/utils/normalize-field-array.util.d.ts +3 -0
  376. package/esm/schema/utils/normalize-field-array.util.js +40 -0
  377. package/esm/schema/utils/path-to-tree.util.d.ts +4 -0
  378. package/esm/schema/utils/path-to-tree.util.js +22 -0
  379. package/esm/schema/utils/string-compare.util.d.ts +1 -0
  380. package/esm/schema/utils/string-compare.util.js +7 -0
  381. package/esm/url/formats/boolean-format.d.ts +5 -0
  382. package/esm/url/formats/boolean-format.js +21 -0
  383. package/esm/url/formats/date-format.d.ts +16 -0
  384. package/esm/url/formats/date-format.js +44 -0
  385. package/esm/url/formats/filter-format.d.ts +6 -0
  386. package/esm/url/formats/filter-format.js +14 -0
  387. package/esm/url/formats/format.d.ts +4 -0
  388. package/esm/url/formats/format.js +2 -0
  389. package/esm/url/formats/integer-format.d.ts +9 -0
  390. package/esm/url/formats/integer-format.js +16 -0
  391. package/esm/url/formats/number-format.d.ts +12 -0
  392. package/esm/url/formats/number-format.js +24 -0
  393. package/esm/url/formats/string-format.d.ts +14 -0
  394. package/esm/url/formats/string-format.js +24 -0
  395. package/esm/url/index.d.ts +5 -0
  396. package/esm/url/index.js +5 -0
  397. package/esm/url/opra-url-path-component.d.ts +15 -0
  398. package/esm/url/opra-url-path-component.js +29 -0
  399. package/esm/url/opra-url-path.d.ts +30 -0
  400. package/esm/url/opra-url-path.js +124 -0
  401. package/esm/url/opra-url-search-params.d.ts +46 -0
  402. package/esm/url/opra-url-search-params.js +243 -0
  403. package/esm/url/opra-url.d.ts +79 -0
  404. package/esm/url/opra-url.js +295 -0
  405. package/esm/url/utils/path-utils.d.ts +8 -0
  406. package/esm/url/utils/path-utils.js +78 -0
  407. package/esm/utils/index.d.ts +3 -0
  408. package/esm/utils/index.js +3 -0
  409. package/esm/utils/is-url.d.ts +1 -0
  410. package/esm/utils/is-url.js +4 -0
  411. package/esm/utils/path-to-tree.d.ts +4 -0
  412. package/esm/utils/path-to-tree.js +24 -0
  413. package/esm/utils/type-guards.d.ts +9 -0
  414. package/esm/utils/type-guards.js +37 -0
  415. package/package.json +30 -10
  416. package/umd/opra-common.umd.min.js +1 -0
  417. package/cjs/classes/headers-map.js +0 -18
  418. package/esm/classes/headers-map.d.ts +0 -5
  419. package/esm/classes/headers-map.js +0 -14
@@ -0,0 +1,59 @@
1
+ import * as Optionals from '@opra/optionals';
2
+ import { DATATYPE_METADATA, MAPPED_TYPE_METADATA } from '../constants.js';
3
+ import { applyMixins, inheritPropertyInitializers } from './mixin.utils.js';
4
+ export function PickType(classRef, keys) {
5
+ return ExtendType(classRef, classRef, { pickKeys: keys });
6
+ }
7
+ export function OmitType(classRef, keys) {
8
+ return ExtendType(classRef, classRef, { omitKeys: keys });
9
+ }
10
+ function ExtendType(classRef, orgClassRef, options) {
11
+ const pickKeys = options.pickKeys && options.pickKeys.map(x => String(x).toLowerCase());
12
+ const omitKeys = options.omitKeys && options.omitKeys.map(x => String(x).toLowerCase());
13
+ const isInheritedPredicate = (propertyName) => {
14
+ if (omitKeys && omitKeys.includes(propertyName.toLowerCase()))
15
+ return false;
16
+ if (pickKeys)
17
+ return pickKeys.includes(propertyName.toLowerCase());
18
+ return true;
19
+ };
20
+ // const isRequiredPredicate = (propertyName: string): boolean | undefined => {
21
+ // if (options.requiredKeys && options.requiredKeys.includes(propertyName as RequiredKey))
22
+ // return true;
23
+ // if (options.partialKeys && options.partialKeys.includes(propertyName as PartialKey))
24
+ // return false;
25
+ // return;
26
+ // };
27
+ class MappedClass {
28
+ constructor() {
29
+ inheritPropertyInitializers(this, classRef, isInheritedPredicate);
30
+ }
31
+ }
32
+ applyMixins(MappedClass, classRef);
33
+ const mappedTypeMetadata = [];
34
+ const m = Reflect.getOwnMetadata(DATATYPE_METADATA, classRef);
35
+ if (m) {
36
+ if (!(m.kind === 'ComplexType'))
37
+ throw new TypeError(`Class "${classRef}" is not a ComplexType`);
38
+ const meta = {
39
+ type: classRef
40
+ };
41
+ if (options.pickKeys)
42
+ meta.pick = options.pickKeys;
43
+ if (options.omitKeys)
44
+ meta.omit = options.omitKeys;
45
+ mappedTypeMetadata.push(meta);
46
+ }
47
+ else
48
+ throw new TypeError(`Class "${classRef}" doesn't have datatype metadata information`);
49
+ if (Optionals.SqbConnect) {
50
+ const { Entity, EntityMetadata } = Optionals.SqbConnect;
51
+ const srcMeta = Entity.getMetadata(classRef);
52
+ if (srcMeta) {
53
+ const trgMeta = EntityMetadata.define(MappedClass);
54
+ EntityMetadata.mixin(trgMeta, srcMeta, k => isInheritedPredicate(k));
55
+ }
56
+ }
57
+ Reflect.defineMetadata(MAPPED_TYPE_METADATA, mappedTypeMetadata, MappedClass);
58
+ return MappedClass;
59
+ }
@@ -0,0 +1,2 @@
1
+ import { Class } from 'ts-gems';
2
+ export declare function MixinType<A1 extends any[], I1, S1, A2 extends any[], I2, S2, A3 extends any[], I3, S3, A4 extends any[], I4, S4>(c1: Class<A1, I1, S1>, c2: Class<A2, I2, S2>, c3?: Class<A3, I3, S3>, c4?: Class<A4, I4, S4>): Class<any[], I1 & I2 & I3 & I4, S1 & S2 & S3 & S4>;
@@ -0,0 +1,41 @@
1
+ import * as Optionals from '@opra/optionals';
2
+ import { DATATYPE_METADATA, MAPPED_TYPE_METADATA } from '../constants.js';
3
+ import { applyMixins, inheritPropertyInitializers } from './mixin.utils.js';
4
+ export function MixinType(c1, c2, c3, c4) {
5
+ const clasRefs = [...arguments].filter(x => !!x);
6
+ if (!clasRefs.length)
7
+ throw new TypeError('You must provide base classeses');
8
+ if (clasRefs.length === 1)
9
+ return clasRefs[0];
10
+ class MappedClass {
11
+ constructor() {
12
+ for (const c of clasRefs)
13
+ inheritPropertyInitializers(this, c);
14
+ }
15
+ }
16
+ const mappedTypeMetadata = [];
17
+ for (const c of clasRefs) {
18
+ const m = Reflect.getOwnMetadata(DATATYPE_METADATA, c);
19
+ if (m) {
20
+ if (!(m.kind === 'ComplexType'))
21
+ throw new TypeError(`Class "${c}" is not a ComplexType`);
22
+ mappedTypeMetadata.push({
23
+ type: c
24
+ });
25
+ }
26
+ else if (Reflect.hasMetadata(MAPPED_TYPE_METADATA, c)) {
27
+ const mtm = Reflect.getMetadata(MAPPED_TYPE_METADATA, c);
28
+ if (mtm)
29
+ mappedTypeMetadata.push(...mtm);
30
+ }
31
+ else
32
+ throw new TypeError(`Class "${c}" doesn't have datatype metadata information`);
33
+ applyMixins(MappedClass, c);
34
+ }
35
+ if (Optionals.SqbConnect) {
36
+ const { Entity } = Optionals.SqbConnect;
37
+ Entity.mixin(MappedClass, ...clasRefs);
38
+ }
39
+ Reflect.defineMetadata(MAPPED_TYPE_METADATA, mappedTypeMetadata, MappedClass);
40
+ return MappedClass;
41
+ }
@@ -0,0 +1,3 @@
1
+ import { Type } from 'ts-gems';
2
+ export declare function applyMixins(derivedCtor: any, baseCtor: any, filter?: (k: string) => boolean): void;
3
+ export declare function inheritPropertyInitializers(target: Record<string, any>, sourceClass: Type, isPropertyInherited?: (key: string) => boolean): void;
@@ -0,0 +1,27 @@
1
+ export function applyMixins(derivedCtor, baseCtor, filter) {
2
+ for (const k of Object.getOwnPropertyNames(baseCtor.prototype)) {
3
+ if ((k === 'constructor' || k === '__proto__' || k === 'toJSON' || k === 'toString') ||
4
+ filter && !filter(k))
5
+ continue;
6
+ Object.defineProperty(derivedCtor.prototype, k, Object.getOwnPropertyDescriptor(baseCtor.prototype, k) ||
7
+ Object.create(null));
8
+ }
9
+ }
10
+ export function inheritPropertyInitializers(target, sourceClass,
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ isPropertyInherited = (key) => true) {
13
+ try {
14
+ const tempInstance = new sourceClass();
15
+ const propertyNames = Object.getOwnPropertyNames(tempInstance);
16
+ propertyNames
17
+ .filter((propertyName) => typeof tempInstance[propertyName] !== 'undefined' &&
18
+ typeof target[propertyName] === 'undefined')
19
+ .filter((propertyName) => isPropertyInherited(propertyName))
20
+ .forEach((propertyName) => {
21
+ target[propertyName] = tempInstance[propertyName];
22
+ });
23
+ }
24
+ catch {
25
+ //
26
+ }
27
+ }
@@ -1,7 +1,14 @@
1
- import { Builtin, DeepPickWritable } from 'ts-gems';
1
+ import { Builtin, DeepPickWritable, Type } from 'ts-gems';
2
2
  export declare type PartialInput<T> = DeepNullablePartial<DeepPickWritable<T>>;
3
3
  export declare type PartialOutput<T> = DeepNullablePartial<T>;
4
4
  declare type DeepNullablePartial<T> = T extends Builtin ? T : T extends Promise<infer U> ? Promise<DeepNullablePartial<U>> : T extends (infer U)[] ? DeepNullablePartial<U>[] : {
5
5
  [P in keyof T]?: DeepNullablePartial<Exclude<T[P], undefined>> | null;
6
6
  };
7
+ export declare type Thunk<T> = T | (() => T);
8
+ export declare type ThunkAsync<T> = T | Promise<T> | (() => T) | (() => Promise<T>);
9
+ export declare type TypeThunk<T = any> = Thunk<Type<T>>;
10
+ export declare type TypeThunkAsync<T = any> = ThunkAsync<Type<T>>;
11
+ export declare type Named<T> = T & {
12
+ name: string;
13
+ };
7
14
  export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { Type } from 'ts-gems';
2
+ export declare function isConstructor(obj: any): obj is Type;
@@ -0,0 +1,4 @@
1
+ export function isConstructor(obj) {
2
+ return typeof obj === 'function' &&
3
+ !!(obj.prototype && obj.prototype.constructor);
4
+ }
@@ -0,0 +1 @@
1
+ export declare function cloneObject<T extends {}>(obj: T, jsonOnly?: boolean): T;
@@ -0,0 +1,14 @@
1
+ import isPlainObject from 'putil-isplainobject';
2
+ import merge from 'putil-merge';
3
+ export function cloneObject(obj, jsonOnly) {
4
+ return merge({}, obj, {
5
+ deep: true,
6
+ clone: true,
7
+ filter: (source, key) => {
8
+ const v = source[key];
9
+ return v != null &&
10
+ !jsonOnly || (typeof v !== 'function' &&
11
+ (typeof v !== 'object' || isPlainObject(v) || Array.isArray(v)));
12
+ }
13
+ });
14
+ }
@@ -0,0 +1,4 @@
1
+ export declare const nodeInspectCustom: unique symbol;
2
+ export declare const colorReset = "\u001B[0m";
3
+ export declare const colorFgYellow = "\u001B[33m";
4
+ export declare const colorFgMagenta = "\u001B[35m";
@@ -0,0 +1,4 @@
1
+ export const nodeInspectCustom = Symbol.for('nodejs.util.inspect.custom');
2
+ export const colorReset = "\x1b[0m";
3
+ export const colorFgYellow = "\x1b[33m";
4
+ export const colorFgMagenta = "\x1b[35m";
@@ -0,0 +1,3 @@
1
+ import { ComplexType } from '../implementation/data-type/complex-type.js';
2
+ import type { OpraDocument } from '../implementation/opra-document.js';
3
+ export declare function normalizeFieldArray(document: OpraDocument, dataType: ComplexType | undefined, fields: string[], parentPath?: string): string[];
@@ -0,0 +1,40 @@
1
+ import { ComplexType } from '../implementation/data-type/complex-type.js';
2
+ import { pathToTree } from './path-to-tree.util.js';
3
+ export function normalizeFieldArray(document, dataType, fields, parentPath = '') {
4
+ const fieldsTree = pathToTree(fields) || {};
5
+ return _normalizeFieldsList([], document, dataType, fieldsTree, '', parentPath, {
6
+ additionalFields: true
7
+ });
8
+ }
9
+ function _normalizeFieldsList(target, document, dataType, node, parentPath = '', actualPath = '', options) {
10
+ let curPath = '';
11
+ for (const k of Object.keys(node)) {
12
+ const nodeVal = node[k];
13
+ const prop = dataType?.fields.get(k);
14
+ if (!prop) {
15
+ curPath = parentPath ? parentPath + '.' + k : k;
16
+ if (!options?.additionalFields || (dataType && !dataType.additionalFields))
17
+ throw new TypeError(`Unknown field "${curPath}"`);
18
+ if (typeof nodeVal === 'object')
19
+ _normalizeFieldsList(target, document, undefined, nodeVal, curPath, actualPath, options);
20
+ else
21
+ target.push(curPath);
22
+ continue;
23
+ }
24
+ curPath = parentPath ? parentPath + '.' + prop.name : prop.name;
25
+ const propType = document.getDataType(prop.type || 'string');
26
+ if (typeof nodeVal === 'object') {
27
+ if (!(propType && propType instanceof ComplexType))
28
+ throw new TypeError(`"${(actualPath ? actualPath + '.' + curPath : curPath)}" is not a complex type and has no sub fields`);
29
+ if (target.findIndex(x => x === parentPath) >= 0)
30
+ continue;
31
+ target = _normalizeFieldsList(target, document, propType, nodeVal, curPath, actualPath, options);
32
+ continue;
33
+ }
34
+ if (target.findIndex(x => x.startsWith(curPath + '.')) >= 0) {
35
+ target = target.filter(x => !x.startsWith(curPath + '.'));
36
+ }
37
+ target.push(curPath);
38
+ }
39
+ return target;
40
+ }
@@ -0,0 +1,4 @@
1
+ export interface ObjectTree {
2
+ [key: string]: boolean | ObjectTree;
3
+ }
4
+ export declare function pathToTree(arr: string[]): ObjectTree | undefined;
@@ -0,0 +1,22 @@
1
+ const dotPattern = /^([^.]+)\.(.*)$/;
2
+ export function pathToTree(arr) {
3
+ if (!arr.length)
4
+ return;
5
+ return _stringPathToObjectTree(arr, {});
6
+ }
7
+ function _stringPathToObjectTree(arr, target) {
8
+ for (const k of arr) {
9
+ const m = dotPattern.exec(k);
10
+ if (m) {
11
+ const key = m[1];
12
+ if (target[key] === true)
13
+ continue;
14
+ const sub = target[key] = typeof target[key] === 'object' ? target[key] : {};
15
+ _stringPathToObjectTree([m[2]], sub);
16
+ }
17
+ else {
18
+ target[k] = true;
19
+ }
20
+ }
21
+ return target;
22
+ }
@@ -0,0 +1 @@
1
+ export declare function stringCompare(a: string, b: string): number;
@@ -0,0 +1,7 @@
1
+ export function stringCompare(a, b) {
2
+ if (a < b)
3
+ return -1;
4
+ if (a > b)
5
+ return 1;
6
+ return 0;
7
+ }
@@ -0,0 +1,5 @@
1
+ import { Format } from './format.js';
2
+ export declare class BooleanFormat extends Format {
3
+ parse(value: string): boolean;
4
+ stringify(value: any): string;
5
+ }
@@ -0,0 +1,21 @@
1
+ import { Format } from './format.js';
2
+ const trueValues = ['true', 't', 'yes', 'y', '1'];
3
+ const falseValues = ['false', 'f', 'no', 'n', '0'];
4
+ export class BooleanFormat extends Format {
5
+ parse(value) {
6
+ if (value === '')
7
+ return true;
8
+ // noinspection SuspiciousTypeOfGuard
9
+ if (typeof value === 'boolean')
10
+ return value;
11
+ if (trueValues.includes(value.toLowerCase()))
12
+ return true;
13
+ if (falseValues.includes(value.toLowerCase()))
14
+ return false;
15
+ throw new TypeError(`"${value}" is not a valid boolean`);
16
+ }
17
+ stringify(value) {
18
+ return typeof value === 'boolean' ?
19
+ (value ? 'true' : 'false') : '';
20
+ }
21
+ }
@@ -0,0 +1,16 @@
1
+ import { Format } from './format.js';
2
+ export interface DateFormatOptions {
3
+ time?: boolean;
4
+ timeZone?: boolean;
5
+ min?: string;
6
+ max?: string;
7
+ }
8
+ export declare class DateFormat extends Format {
9
+ time: boolean;
10
+ timeZone: boolean;
11
+ min?: string;
12
+ max?: string;
13
+ constructor(options?: DateFormatOptions);
14
+ parse(value: string): string;
15
+ stringify(value: any): string;
16
+ }
@@ -0,0 +1,44 @@
1
+ /* eslint-disable max-len */
2
+ import { Format } from './format.js';
3
+ // noinspection RegExpUnnecessaryNonCapturingGroup
4
+ const DATE_FORMAT_PATTERN = /^(\d{4})(?:-?(0[1-9]|1[012])(?:-?([123]0|[012][1-9]|31))?)?(?:[T ]?([01][0-9]|2[0-3]):?([0-5][0-9]):?([0-5][0-9])?(?:\.(\d+))?(?:(Z)|(?:([+-])([01]?[0-9]|2[0-3]):?([0-5][0-9])?))?)?$/;
5
+ export class DateFormat extends Format {
6
+ time;
7
+ timeZone;
8
+ min;
9
+ max;
10
+ constructor(options) {
11
+ super();
12
+ this.max = options?.max ? coerceToDateString(options.max) : undefined;
13
+ this.min = options?.min ? coerceToDateString(options.min) : undefined;
14
+ this.time = options?.time ?? true;
15
+ this.timeZone = options?.timeZone ?? true;
16
+ }
17
+ parse(value) {
18
+ const v = coerceToDateString(value, this.time, this.timeZone);
19
+ if (this.min != null && v < this.min)
20
+ throw new TypeError(`Value must be ${this.min} or greater.`);
21
+ if (this.max != null && v > this.max)
22
+ throw new TypeError(`Value must be ${this.max} or less.`);
23
+ return v;
24
+ }
25
+ stringify(value) {
26
+ return coerceToDateString(value, this.time, this.timeZone);
27
+ }
28
+ }
29
+ function coerceToDateString(value, time, timeZone) {
30
+ if (value === '' || value == null)
31
+ return '';
32
+ const m = value.match(DATE_FORMAT_PATTERN);
33
+ if (!m)
34
+ throw new TypeError(`"${value}" is not a valid date.`);
35
+ let v = m[1] + '-' + (m[2] || '01') + '-' + (m[3] || '01');
36
+ if (time) {
37
+ v += 'T' + (m[4] || '00') + ':' + (m[5] || '00') + ':' + (m[6] || '00') +
38
+ (m[7] ? '.' + m[7] : '');
39
+ if (timeZone)
40
+ v += m[8] ? 'Z' :
41
+ (m[9] ? (m[9] + (m[10] || '00') + ':' + (m[11] || '00')) : '');
42
+ }
43
+ return v;
44
+ }
@@ -0,0 +1,6 @@
1
+ import { Ast, Expression } from '../../filter/ast/index.js';
2
+ import { Format } from './format.js';
3
+ export declare class FilterFormat extends Format {
4
+ parse(value: string | Expression): object;
5
+ stringify(value: Ast): string;
6
+ }
@@ -0,0 +1,14 @@
1
+ import { Expression } from '../../filter/ast/index.js';
2
+ import { parseFilter } from '../../filter/parse.js';
3
+ import { Format } from './format.js';
4
+ export class FilterFormat extends Format {
5
+ parse(value) {
6
+ if (value instanceof Expression)
7
+ return value;
8
+ return parseFilter(value);
9
+ }
10
+ stringify(value) {
11
+ // @ts-ignore
12
+ return value ? '' + value : '';
13
+ }
14
+ }
@@ -0,0 +1,4 @@
1
+ export declare abstract class Format {
2
+ abstract parse(value: string): any;
3
+ abstract stringify(value: any): string;
4
+ }
@@ -0,0 +1,2 @@
1
+ export class Format {
2
+ }
@@ -0,0 +1,9 @@
1
+ import { NumberFormat, NumberFormatOptions } from './number-format.js';
2
+ export interface IntegerFormatOptions extends NumberFormatOptions {
3
+ enum?: number[];
4
+ }
5
+ export declare class IntegerFormat extends NumberFormat {
6
+ enum?: number[];
7
+ constructor(options?: IntegerFormatOptions);
8
+ parse(value: string): number;
9
+ }
@@ -0,0 +1,16 @@
1
+ import { NumberFormat } from './number-format.js';
2
+ export class IntegerFormat extends NumberFormat {
3
+ enum;
4
+ constructor(options) {
5
+ super(options);
6
+ this.enum = options?.enum;
7
+ }
8
+ parse(value) {
9
+ const v = super.parse(value);
10
+ if (!Number.isInteger(v))
11
+ throw new TypeError(`"${value}" is not a valid integer`);
12
+ if (this.enum && !this.enum.includes(v))
13
+ throw new TypeError(`"${value}" is not one of allowed enum values (${this.enum}).`);
14
+ return v;
15
+ }
16
+ }
@@ -0,0 +1,12 @@
1
+ import { Format } from './format.js';
2
+ export interface NumberFormatOptions {
3
+ max?: number;
4
+ min?: number;
5
+ }
6
+ export declare class NumberFormat extends Format {
7
+ max?: number;
8
+ min?: number;
9
+ constructor(options?: NumberFormatOptions);
10
+ parse(value: string): number;
11
+ stringify(value: any): string;
12
+ }
@@ -0,0 +1,24 @@
1
+ import { Format } from './format.js';
2
+ export class NumberFormat extends Format {
3
+ max;
4
+ min;
5
+ constructor(options) {
6
+ super();
7
+ this.max = options?.max;
8
+ this.min = options?.min;
9
+ }
10
+ parse(value) {
11
+ // noinspection SuspiciousTypeOfGuard
12
+ const v = typeof value === 'number' ? value : parseFloat(value);
13
+ if (isNaN(v))
14
+ throw new TypeError(`"${value}" is not a valid number`);
15
+ if (this.min != null && v < this.min)
16
+ throw new TypeError(`Value must be ${this.min} or greater.`);
17
+ if (this.max != null && v > this.max)
18
+ throw new TypeError(`Value must be ${this.max} or less.`);
19
+ return v;
20
+ }
21
+ stringify(value) {
22
+ return typeof value === 'number' ? '' + value : '';
23
+ }
24
+ }
@@ -0,0 +1,14 @@
1
+ import { Format } from './format.js';
2
+ export interface StringFormatOptions {
3
+ maxLength?: number;
4
+ minLength?: number;
5
+ enum?: string[];
6
+ }
7
+ export declare class StringFormat extends Format {
8
+ maxLength?: number;
9
+ minLength?: number;
10
+ enum?: string[];
11
+ constructor(options?: StringFormatOptions);
12
+ parse(value: string): string;
13
+ stringify(value: any): string;
14
+ }
@@ -0,0 +1,24 @@
1
+ import { Format } from './format.js';
2
+ export class StringFormat extends Format {
3
+ maxLength;
4
+ minLength;
5
+ enum;
6
+ constructor(options) {
7
+ super();
8
+ this.maxLength = options?.maxLength;
9
+ this.minLength = options?.minLength;
10
+ this.enum = options?.enum;
11
+ }
12
+ parse(value) {
13
+ if (this.minLength != null && value.length < this.minLength)
14
+ throw new TypeError(`Value must be at least ${this.minLength} character${this.minLength > 1 ? 's' : ''} long.`);
15
+ if (this.maxLength != null && value.length > this.maxLength)
16
+ throw new TypeError(`Value can be up to ${this.maxLength} character${this.maxLength > 1 ? 's' : ''} long.`);
17
+ if (this.enum && !this.enum.includes(value))
18
+ throw new TypeError(`"${value}" is not one of allowed enum values (${this.enum}).`);
19
+ return value;
20
+ }
21
+ stringify(value) {
22
+ return value == null ? '' : '' + value;
23
+ }
24
+ }
@@ -0,0 +1,5 @@
1
+ export * from './opra-url.js';
2
+ export * from './opra-url-path.js';
3
+ export * from './opra-url-path-component.js';
4
+ export * from './opra-url-search-params.js';
5
+ export * from './utils/path-utils.js';
@@ -0,0 +1,5 @@
1
+ export * from './opra-url.js';
2
+ export * from './opra-url-path.js';
3
+ export * from './opra-url-path-component.js';
4
+ export * from './opra-url-search-params.js';
5
+ export * from './utils/path-utils.js';
@@ -0,0 +1,15 @@
1
+ declare const nodeInspectCustom: unique symbol;
2
+ export declare type OpraURLPathComponentInit = {
3
+ resource: string;
4
+ key?: any;
5
+ typeCast?: string;
6
+ };
7
+ export declare class OpraURLPathComponent {
8
+ resource: string;
9
+ key?: any;
10
+ typeCast?: string;
11
+ constructor(init: OpraURLPathComponentInit);
12
+ toString(): string;
13
+ [nodeInspectCustom](): any;
14
+ }
15
+ export {};
@@ -0,0 +1,29 @@
1
+ import { encodePathComponent } from './utils/path-utils.js';
2
+ const nodeInspectCustom = Symbol.for('nodejs.util.inspect.custom');
3
+ export class OpraURLPathComponent {
4
+ resource;
5
+ key;
6
+ typeCast;
7
+ constructor(init) {
8
+ this.resource = init.resource;
9
+ this.key = init.key;
10
+ this.typeCast = init.typeCast;
11
+ }
12
+ toString() {
13
+ const obj = encodePathComponent(this.resource, this.key, this.typeCast);
14
+ if (obj)
15
+ Object.setPrototypeOf(obj, OpraURLPathComponent.prototype);
16
+ return obj;
17
+ }
18
+ /* istanbul ignore next */
19
+ [nodeInspectCustom]() {
20
+ const out = {
21
+ resource: this.resource,
22
+ };
23
+ if (this.key != null)
24
+ out.key = this.key;
25
+ if (this.typeCast != null)
26
+ out.typeCast = this.typeCast;
27
+ return out;
28
+ }
29
+ }
@@ -0,0 +1,30 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ import { OpraURLPathComponent, OpraURLPathComponentInit } from './opra-url-path-component.js';
4
+ declare const nodeInspectCustom: unique symbol;
5
+ export declare class OpraURLPath extends EventEmitter {
6
+ private _entries;
7
+ constructor(...components: (OpraURLPathComponent | OpraURLPathComponentInit)[]);
8
+ constructor(init?: string | OpraURLPath | URL | OpraURLPathComponent | OpraURLPathComponentInit);
9
+ get size(): number;
10
+ add(component: OpraURLPathComponent | {
11
+ resource: string;
12
+ key?: any;
13
+ typeCast?: string;
14
+ }): void;
15
+ add(name: string, key?: any, typeCast?: string): void;
16
+ clear(): void;
17
+ get(index: number): OpraURLPathComponent;
18
+ join(pathString: string): this;
19
+ entries(): IterableIterator<[OpraURLPathComponent, number]>;
20
+ values(): IterableIterator<OpraURLPathComponent>;
21
+ forEach(callback: (name: string, key: any, _this: this) => void): void;
22
+ getResource(index: number): string | undefined;
23
+ getKey(index: number): any;
24
+ toString(): string;
25
+ [Symbol.iterator](): IterableIterator<[OpraURLPathComponent, number]>;
26
+ [nodeInspectCustom](): OpraURLPathComponent[];
27
+ protected _add(component: any, key?: any, typeCast?: string): void;
28
+ protected _parse(v: string): void;
29
+ }
30
+ export {};