@versionzero/schema 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +246 -0
  3. package/package.json +84 -0
  4. package/src/compilation/handler-compilation.js +28 -0
  5. package/src/compilation/metadata-compilation.js +35 -0
  6. package/src/compilation/schema-compilation.js +142 -0
  7. package/src/compilation/selection-compilation.js +84 -0
  8. package/src/compilation/union-compilation.js +510 -0
  9. package/src/compilation/values-compilation.js +35 -0
  10. package/src/compiled-schema.js +1709 -0
  11. package/src/constants.js +1 -0
  12. package/src/core-library/index.js +32 -0
  13. package/src/core-library/processors/aggregation-operators.js +75 -0
  14. package/src/core-library/processors/alpha-constraint.js +20 -0
  15. package/src/core-library/processors/alphanum-constraint.js +20 -0
  16. package/src/core-library/processors/array-operator.js +51 -0
  17. package/src/core-library/processors/assert-constraint.js +75 -0
  18. package/src/core-library/processors/base64-constraint.js +26 -0
  19. package/src/core-library/processors/camel-case-operator.js +24 -0
  20. package/src/core-library/processors/capitalize-operator.js +16 -0
  21. package/src/core-library/processors/cardnum-constraint.js +193 -0
  22. package/src/core-library/processors/ceil-operator.js +44 -0
  23. package/src/core-library/processors/collapse-operator.js +29 -0
  24. package/src/core-library/processors/compact-operator.js +34 -0
  25. package/src/core-library/processors/compile-operator.js +65 -0
  26. package/src/core-library/processors/concat-operator.js +51 -0
  27. package/src/core-library/processors/conditional-operators.js +301 -0
  28. package/src/core-library/processors/constant-case-operator.js +16 -0
  29. package/src/core-library/processors/data-size-operator.js +86 -0
  30. package/src/core-library/processors/date-object-operator.js +54 -0
  31. package/src/core-library/processors/date-operator.js +67 -0
  32. package/src/core-library/processors/date-range-constraint.js +76 -0
  33. package/src/core-library/processors/defined-constraint.js +30 -0
  34. package/src/core-library/processors/each-operator.js +57 -0
  35. package/src/core-library/processors/email-constraint.js +112 -0
  36. package/src/core-library/processors/entries-operator.js +25 -0
  37. package/src/core-library/processors/eq-constraint.js +37 -0
  38. package/src/core-library/processors/filter-operator.js +74 -0
  39. package/src/core-library/processors/find-schema-operator.js +45 -0
  40. package/src/core-library/processors/flatten-operator.js +40 -0
  41. package/src/core-library/processors/floor-operator.js +47 -0
  42. package/src/core-library/processors/get-operator.js +44 -0
  43. package/src/core-library/processors/group-by-operator.js +84 -0
  44. package/src/core-library/processors/has-prefix-constraint.js +37 -0
  45. package/src/core-library/processors/has-suffix-constraint.js +35 -0
  46. package/src/core-library/processors/hex-constraint.js +20 -0
  47. package/src/core-library/processors/hostname-constraint.js +22 -0
  48. package/src/core-library/processors/http-url-constraint.js +27 -0
  49. package/src/core-library/processors/in-constraint.js +66 -0
  50. package/src/core-library/processors/index-by-operator.js +98 -0
  51. package/src/core-library/processors/index.js +131 -0
  52. package/src/core-library/processors/input-operator.js +23 -0
  53. package/src/core-library/processors/instanceof-constraint.js +38 -0
  54. package/src/core-library/processors/integer-constraint.js +22 -0
  55. package/src/core-library/processors/invoke-operator.js +33 -0
  56. package/src/core-library/processors/ipv4-constraint.js +188 -0
  57. package/src/core-library/processors/ipv6-constraint.js +205 -0
  58. package/src/core-library/processors/is-array-constraint.js +21 -0
  59. package/src/core-library/processors/is-date-constraint.js +22 -0
  60. package/src/core-library/processors/is-number-constraint.js +21 -0
  61. package/src/core-library/processors/is-object-constraint.js +21 -0
  62. package/src/core-library/processors/is-string-constraint.js +21 -0
  63. package/src/core-library/processors/join-operator.js +41 -0
  64. package/src/core-library/processors/json-constraint.js +22 -0
  65. package/src/core-library/processors/json-decode-operator.js +25 -0
  66. package/src/core-library/processors/json-encode-operator.js +35 -0
  67. package/src/core-library/processors/kebab-case-operator.js +23 -0
  68. package/src/core-library/processors/keys-operator.js +20 -0
  69. package/src/core-library/processors/length-constraint.js +85 -0
  70. package/src/core-library/processors/lookup-operator.js +84 -0
  71. package/src/core-library/processors/lowercase-operator.js +14 -0
  72. package/src/core-library/processors/map-operator.js +84 -0
  73. package/src/core-library/processors/match-operator.js +64 -0
  74. package/src/core-library/processors/matches-constraint.js +54 -0
  75. package/src/core-library/processors/math-operators.js +151 -0
  76. package/src/core-library/processors/merge-deep-operator.js +61 -0
  77. package/src/core-library/processors/merge-operator.js +54 -0
  78. package/src/core-library/processors/metadata-operator.js +100 -0
  79. package/src/core-library/processors/negative-constraint.js +23 -0
  80. package/src/core-library/processors/never-constraint.js +69 -0
  81. package/src/core-library/processors/non-empty-constraint.js +59 -0
  82. package/src/core-library/processors/not-constraint.js +71 -0
  83. package/src/core-library/processors/number-operator.js +24 -0
  84. package/src/core-library/processors/numeric-constraint.js +22 -0
  85. package/src/core-library/processors/object-operator.js +38 -0
  86. package/src/core-library/processors/omit-operator.js +57 -0
  87. package/src/core-library/processors/parallel-operator.js +64 -0
  88. package/src/core-library/processors/pascal-case-operator.js +16 -0
  89. package/src/core-library/processors/phone-constraint.js +235 -0
  90. package/src/core-library/processors/pick-operator.js +62 -0
  91. package/src/core-library/processors/pipeline-operator.js +63 -0
  92. package/src/core-library/processors/port-constraint.js +22 -0
  93. package/src/core-library/processors/positive-constraint.js +23 -0
  94. package/src/core-library/processors/process-operator.js +55 -0
  95. package/src/core-library/processors/property-operator.js +49 -0
  96. package/src/core-library/processors/range-constraint.js +72 -0
  97. package/src/core-library/processors/reference-operator.js +79 -0
  98. package/src/core-library/processors/require-constraint.js +74 -0
  99. package/src/core-library/processors/reverse-operator.js +20 -0
  100. package/src/core-library/processors/round-operator.js +53 -0
  101. package/src/core-library/processors/schema-handler-operators.js +54 -0
  102. package/src/core-library/processors/semver-constraint.js +282 -0
  103. package/src/core-library/processors/sequence-processors.js +406 -0
  104. package/src/core-library/processors/sort-operator.js +52 -0
  105. package/src/core-library/processors/split-operator.js +43 -0
  106. package/src/core-library/processors/string-extra-operators.js +141 -0
  107. package/src/core-library/processors/string-operator.js +34 -0
  108. package/src/core-library/processors/target-operator.js +30 -0
  109. package/src/core-library/processors/template-operator.js +60 -0
  110. package/src/core-library/processors/title-case-operator.js +17 -0
  111. package/src/core-library/processors/trim-operator.js +14 -0
  112. package/src/core-library/processors/truthy-constraint.js +35 -0
  113. package/src/core-library/processors/type-operator.js +24 -0
  114. package/src/core-library/processors/unique-operator.js +21 -0
  115. package/src/core-library/processors/uppercase-operator.js +14 -0
  116. package/src/core-library/processors/url-constraint.js +31 -0
  117. package/src/core-library/processors/url-decode-operator.js +50 -0
  118. package/src/core-library/processors/url-encode-operator.js +44 -0
  119. package/src/core-library/processors/uuid-constraint.js +31 -0
  120. package/src/core-library/processors/values-operator.js +20 -0
  121. package/src/core-library/schemas/any-schema.js +23 -0
  122. package/src/core-library/schemas/array-schema.js +8 -0
  123. package/src/core-library/schemas/boolean-schema.js +10 -0
  124. package/src/core-library/schemas/date-schema.js +12 -0
  125. package/src/core-library/schemas/function-schema.js +40 -0
  126. package/src/core-library/schemas/number-schema.js +9 -0
  127. package/src/core-library/schemas/object-schema.js +10 -0
  128. package/src/core-library/schemas/root-schema.js +21 -0
  129. package/src/core-library/schemas/string-schema.js +9 -0
  130. package/src/core-library-node/index.js +47 -0
  131. package/src/core-library-node/processors/base64-decode-operator.js +20 -0
  132. package/src/core-library-node/processors/base64-encode-operator.js +20 -0
  133. package/src/core-library-node/processors/buffer-operator.js +39 -0
  134. package/src/core-library-node/processors/directory-constraint.js +35 -0
  135. package/src/core-library-node/processors/executable-constraint.js +34 -0
  136. package/src/core-library-node/processors/file-constraint.js +34 -0
  137. package/src/core-library-node/processors/file-size-constraint.js +94 -0
  138. package/src/core-library-node/processors/is-buffer-constraint.js +21 -0
  139. package/src/core-library-node/processors/reachable-constraint.js +28 -0
  140. package/src/core-library-node/processors/readable-constraint.js +34 -0
  141. package/src/core-library-node/processors/writable-constraint.js +59 -0
  142. package/src/core-library-node/schemas/buffer-schema.js +10 -0
  143. package/src/errors.js +209 -0
  144. package/src/executor/array-executor.js +78 -0
  145. package/src/executor/conditional-executor.js +134 -0
  146. package/src/executor/each-executor.js +68 -0
  147. package/src/executor/executor.js +123 -0
  148. package/src/executor/object-executor.js +98 -0
  149. package/src/executor/parallel-executor.js +43 -0
  150. package/src/executor/pipeline-executor.js +65 -0
  151. package/src/executor/sequence-executor.js +206 -0
  152. package/src/executor/serial-executor.js +24 -0
  153. package/src/executor/step-executor.js +68 -0
  154. package/src/helpers/case.js +124 -0
  155. package/src/helpers/data-size.js +144 -0
  156. package/src/helpers/debug-sink.js +15 -0
  157. package/src/helpers/deep.js +280 -0
  158. package/src/helpers/format.js +121 -0
  159. package/src/helpers/has-string-properties.js +30 -0
  160. package/src/helpers/index.js +16 -0
  161. package/src/helpers/object.js +115 -0
  162. package/src/helpers/parse-date.js +75 -0
  163. package/src/helpers/path.js +28 -0
  164. package/src/helpers/regex.js +18 -0
  165. package/src/helpers/stringify.js +309 -0
  166. package/src/helpers/to-data.js +64 -0
  167. package/src/helpers/truthy.js +55 -0
  168. package/src/index.js +29 -0
  169. package/src/schema-compiler.js +531 -0
  170. package/src/schema-location.js +200 -0
  171. package/src/schema-resolver.js +546 -0
  172. package/src/schema.js +1182 -0
  173. package/src/traversal/executors/check-condition.js +42 -0
  174. package/src/traversal/executors/check-input.js +27 -0
  175. package/src/traversal/executors/check-required.js +19 -0
  176. package/src/traversal/executors/check-schema.js +45 -0
  177. package/src/traversal/executors/defaults.js +21 -0
  178. package/src/traversal/executors/enter-existing.js +25 -0
  179. package/src/traversal/executors/enter-input.js +25 -0
  180. package/src/traversal/executors/enter.js +37 -0
  181. package/src/traversal/executors/exit.js +74 -0
  182. package/src/traversal/executors/finalize.js +64 -0
  183. package/src/traversal/executors/index.js +42 -0
  184. package/src/traversal/executors/normalize.js +38 -0
  185. package/src/traversal/executors/prepare-existing.js +27 -0
  186. package/src/traversal/executors/prepare-pending.js +54 -0
  187. package/src/traversal/executors/resolve-union.js +50 -0
  188. package/src/traversal/executors/serialize.js +48 -0
  189. package/src/traversal/executors/transform-early.js +51 -0
  190. package/src/traversal/executors/transform.js +68 -0
  191. package/src/traversal/executors/traversal-state-executor.js +46 -0
  192. package/src/traversal/executors/validate.js +63 -0
  193. package/src/traversal/traversal-context.js +231 -0
  194. package/src/traversal/traversal-state.js +809 -0
  195. package/src/types.js +102 -0
  196. package/src/value-processor/composed-value-processor.js +43 -0
  197. package/src/value-processor/defined-value-processor.js +72 -0
  198. package/src/value-processor/function-value-processor.js +68 -0
  199. package/src/value-processor/parameterized-value-processor.js +45 -0
  200. package/src/value-processor/parameters-value-processor.js +178 -0
  201. package/src/value-processor/spec.js +89 -0
  202. package/src/value-processor/value-processor.js +105 -0
  203. package/types/compilation/handler-compilation.d.ts +13 -0
  204. package/types/compilation/metadata-compilation.d.ts +6 -0
  205. package/types/compilation/schema-compilation.d.ts +32 -0
  206. package/types/compilation/selection-compilation.d.ts +9 -0
  207. package/types/compilation/union-compilation.d.ts +42 -0
  208. package/types/compilation/values-compilation.d.ts +12 -0
  209. package/types/compiled-schema.d.ts +883 -0
  210. package/types/constants.d.ts +1 -0
  211. package/types/core-library/index.d.ts +7 -0
  212. package/types/core-library/processors/aggregation-operators.d.ts +24 -0
  213. package/types/core-library/processors/alpha-constraint.d.ts +9 -0
  214. package/types/core-library/processors/alphanum-constraint.d.ts +9 -0
  215. package/types/core-library/processors/array-operator.d.ts +12 -0
  216. package/types/core-library/processors/assert-constraint.d.ts +30 -0
  217. package/types/core-library/processors/base64-constraint.d.ts +11 -0
  218. package/types/core-library/processors/camel-case-operator.d.ts +17 -0
  219. package/types/core-library/processors/capitalize-operator.d.ts +11 -0
  220. package/types/core-library/processors/cardnum-constraint.d.ts +51 -0
  221. package/types/core-library/processors/ceil-operator.d.ts +30 -0
  222. package/types/core-library/processors/collapse-operator.d.ts +24 -0
  223. package/types/core-library/processors/compact-operator.d.ts +29 -0
  224. package/types/core-library/processors/compile-operator.d.ts +34 -0
  225. package/types/core-library/processors/concat-operator.d.ts +23 -0
  226. package/types/core-library/processors/conditional-operators.d.ts +219 -0
  227. package/types/core-library/processors/constant-case-operator.d.ts +9 -0
  228. package/types/core-library/processors/data-size-operator.d.ts +31 -0
  229. package/types/core-library/processors/date-object-operator.d.ts +16 -0
  230. package/types/core-library/processors/date-operator.d.ts +21 -0
  231. package/types/core-library/processors/date-range-constraint.d.ts +26 -0
  232. package/types/core-library/processors/defined-constraint.d.ts +20 -0
  233. package/types/core-library/processors/each-operator.d.ts +34 -0
  234. package/types/core-library/processors/email-constraint.d.ts +54 -0
  235. package/types/core-library/processors/entries-operator.d.ts +13 -0
  236. package/types/core-library/processors/eq-constraint.d.ts +20 -0
  237. package/types/core-library/processors/filter-operator.d.ts +35 -0
  238. package/types/core-library/processors/find-schema-operator.d.ts +28 -0
  239. package/types/core-library/processors/flatten-operator.d.ts +26 -0
  240. package/types/core-library/processors/floor-operator.d.ts +33 -0
  241. package/types/core-library/processors/get-operator.d.ts +31 -0
  242. package/types/core-library/processors/group-by-operator.d.ts +36 -0
  243. package/types/core-library/processors/has-prefix-constraint.d.ts +22 -0
  244. package/types/core-library/processors/has-suffix-constraint.d.ts +20 -0
  245. package/types/core-library/processors/hex-constraint.d.ts +9 -0
  246. package/types/core-library/processors/hostname-constraint.d.ts +11 -0
  247. package/types/core-library/processors/http-url-constraint.d.ts +9 -0
  248. package/types/core-library/processors/in-constraint.d.ts +27 -0
  249. package/types/core-library/processors/index-by-operator.d.ts +26 -0
  250. package/types/core-library/processors/index.d.ts +8 -0
  251. package/types/core-library/processors/input-operator.d.ts +20 -0
  252. package/types/core-library/processors/instanceof-constraint.d.ts +23 -0
  253. package/types/core-library/processors/integer-constraint.d.ts +9 -0
  254. package/types/core-library/processors/invoke-operator.d.ts +12 -0
  255. package/types/core-library/processors/ipv4-constraint.d.ts +37 -0
  256. package/types/core-library/processors/ipv6-constraint.d.ts +34 -0
  257. package/types/core-library/processors/is-array-constraint.d.ts +10 -0
  258. package/types/core-library/processors/is-date-constraint.d.ts +10 -0
  259. package/types/core-library/processors/is-number-constraint.d.ts +10 -0
  260. package/types/core-library/processors/is-object-constraint.d.ts +10 -0
  261. package/types/core-library/processors/is-string-constraint.d.ts +10 -0
  262. package/types/core-library/processors/join-operator.d.ts +29 -0
  263. package/types/core-library/processors/json-constraint.d.ts +10 -0
  264. package/types/core-library/processors/json-decode-operator.d.ts +9 -0
  265. package/types/core-library/processors/json-encode-operator.d.ts +27 -0
  266. package/types/core-library/processors/kebab-case-operator.d.ts +16 -0
  267. package/types/core-library/processors/keys-operator.d.ts +9 -0
  268. package/types/core-library/processors/length-constraint.d.ts +34 -0
  269. package/types/core-library/processors/lookup-operator.d.ts +36 -0
  270. package/types/core-library/processors/lowercase-operator.d.ts +9 -0
  271. package/types/core-library/processors/map-operator.d.ts +38 -0
  272. package/types/core-library/processors/match-operator.d.ts +34 -0
  273. package/types/core-library/processors/matches-constraint.d.ts +29 -0
  274. package/types/core-library/processors/math-operators.d.ts +91 -0
  275. package/types/core-library/processors/merge-deep-operator.d.ts +32 -0
  276. package/types/core-library/processors/merge-operator.d.ts +26 -0
  277. package/types/core-library/processors/metadata-operator.d.ts +56 -0
  278. package/types/core-library/processors/negative-constraint.d.ts +13 -0
  279. package/types/core-library/processors/never-constraint.d.ts +26 -0
  280. package/types/core-library/processors/non-empty-constraint.d.ts +28 -0
  281. package/types/core-library/processors/not-constraint.d.ts +28 -0
  282. package/types/core-library/processors/number-operator.d.ts +9 -0
  283. package/types/core-library/processors/numeric-constraint.d.ts +10 -0
  284. package/types/core-library/processors/object-operator.d.ts +10 -0
  285. package/types/core-library/processors/omit-operator.d.ts +24 -0
  286. package/types/core-library/processors/parallel-operator.d.ts +41 -0
  287. package/types/core-library/processors/pascal-case-operator.d.ts +9 -0
  288. package/types/core-library/processors/phone-constraint.d.ts +65 -0
  289. package/types/core-library/processors/pick-operator.d.ts +27 -0
  290. package/types/core-library/processors/pipeline-operator.d.ts +40 -0
  291. package/types/core-library/processors/port-constraint.d.ts +11 -0
  292. package/types/core-library/processors/positive-constraint.d.ts +13 -0
  293. package/types/core-library/processors/process-operator.d.ts +37 -0
  294. package/types/core-library/processors/property-operator.d.ts +34 -0
  295. package/types/core-library/processors/range-constraint.d.ts +30 -0
  296. package/types/core-library/processors/reference-operator.d.ts +38 -0
  297. package/types/core-library/processors/require-constraint.d.ts +29 -0
  298. package/types/core-library/processors/reverse-operator.d.ts +9 -0
  299. package/types/core-library/processors/round-operator.d.ts +34 -0
  300. package/types/core-library/processors/schema-handler-operators.d.ts +28 -0
  301. package/types/core-library/processors/semver-constraint.d.ts +43 -0
  302. package/types/core-library/processors/sequence-processors.d.ts +213 -0
  303. package/types/core-library/processors/sort-operator.d.ts +31 -0
  304. package/types/core-library/processors/split-operator.d.ts +33 -0
  305. package/types/core-library/processors/string-extra-operators.d.ts +83 -0
  306. package/types/core-library/processors/string-operator.d.ts +10 -0
  307. package/types/core-library/processors/target-operator.d.ts +27 -0
  308. package/types/core-library/processors/template-operator.d.ts +31 -0
  309. package/types/core-library/processors/title-case-operator.d.ts +12 -0
  310. package/types/core-library/processors/trim-operator.d.ts +9 -0
  311. package/types/core-library/processors/truthy-constraint.d.ts +23 -0
  312. package/types/core-library/processors/type-operator.d.ts +11 -0
  313. package/types/core-library/processors/unique-operator.d.ts +10 -0
  314. package/types/core-library/processors/uppercase-operator.d.ts +9 -0
  315. package/types/core-library/processors/url-constraint.d.ts +20 -0
  316. package/types/core-library/processors/url-decode-operator.d.ts +31 -0
  317. package/types/core-library/processors/url-encode-operator.d.ts +36 -0
  318. package/types/core-library/processors/uuid-constraint.d.ts +20 -0
  319. package/types/core-library/processors/values-operator.d.ts +9 -0
  320. package/types/core-library/schemas/any-schema.d.ts +2 -0
  321. package/types/core-library/schemas/array-schema.d.ts +2 -0
  322. package/types/core-library/schemas/boolean-schema.d.ts +2 -0
  323. package/types/core-library/schemas/date-schema.d.ts +2 -0
  324. package/types/core-library/schemas/function-schema.d.ts +2 -0
  325. package/types/core-library/schemas/number-schema.d.ts +2 -0
  326. package/types/core-library/schemas/object-schema.d.ts +2 -0
  327. package/types/core-library/schemas/root-schema.d.ts +2 -0
  328. package/types/core-library/schemas/string-schema.d.ts +2 -0
  329. package/types/core-library-node/index.d.ts +12 -0
  330. package/types/core-library-node/processors/base64-decode-operator.d.ts +9 -0
  331. package/types/core-library-node/processors/base64-encode-operator.d.ts +9 -0
  332. package/types/core-library-node/processors/buffer-operator.d.ts +15 -0
  333. package/types/core-library-node/processors/directory-constraint.d.ts +14 -0
  334. package/types/core-library-node/processors/executable-constraint.d.ts +17 -0
  335. package/types/core-library-node/processors/file-constraint.d.ts +13 -0
  336. package/types/core-library-node/processors/file-size-constraint.d.ts +43 -0
  337. package/types/core-library-node/processors/is-buffer-constraint.d.ts +10 -0
  338. package/types/core-library-node/processors/reachable-constraint.d.ts +13 -0
  339. package/types/core-library-node/processors/readable-constraint.d.ts +17 -0
  340. package/types/core-library-node/processors/writable-constraint.d.ts +18 -0
  341. package/types/core-library-node/schemas/buffer-schema.d.ts +2 -0
  342. package/types/errors.d.ts +58 -0
  343. package/types/executor/array-executor.d.ts +17 -0
  344. package/types/executor/conditional-executor.d.ts +45 -0
  345. package/types/executor/each-executor.d.ts +15 -0
  346. package/types/executor/executor.d.ts +84 -0
  347. package/types/executor/object-executor.d.ts +14 -0
  348. package/types/executor/parallel-executor.d.ts +27 -0
  349. package/types/executor/pipeline-executor.d.ts +11 -0
  350. package/types/executor/sequence-executor.d.ts +32 -0
  351. package/types/executor/serial-executor.d.ts +16 -0
  352. package/types/executor/step-executor.d.ts +14 -0
  353. package/types/helpers/case.d.ts +30 -0
  354. package/types/helpers/data-size.d.ts +25 -0
  355. package/types/helpers/debug-sink.d.ts +9 -0
  356. package/types/helpers/deep.d.ts +33 -0
  357. package/types/helpers/format.d.ts +14 -0
  358. package/types/helpers/has-string-properties.d.ts +5 -0
  359. package/types/helpers/index.d.ts +13 -0
  360. package/types/helpers/object.d.ts +46 -0
  361. package/types/helpers/parse-date.d.ts +6 -0
  362. package/types/helpers/path.d.ts +13 -0
  363. package/types/helpers/regex.d.ts +7 -0
  364. package/types/helpers/stringify.d.ts +33 -0
  365. package/types/helpers/to-data.d.ts +13 -0
  366. package/types/helpers/truthy.d.ts +26 -0
  367. package/types/index.d.ts +6 -0
  368. package/types/schema-compiler.d.ts +49 -0
  369. package/types/schema-location.d.ts +64 -0
  370. package/types/schema-resolver.d.ts +145 -0
  371. package/types/schema.d.ts +586 -0
  372. package/types/traversal/executors/check-condition.d.ts +8 -0
  373. package/types/traversal/executors/check-input.d.ts +6 -0
  374. package/types/traversal/executors/check-required.d.ts +6 -0
  375. package/types/traversal/executors/check-schema.d.ts +7 -0
  376. package/types/traversal/executors/defaults.d.ts +8 -0
  377. package/types/traversal/executors/enter-existing.d.ts +6 -0
  378. package/types/traversal/executors/enter-input.d.ts +8 -0
  379. package/types/traversal/executors/enter.d.ts +7 -0
  380. package/types/traversal/executors/exit.d.ts +6 -0
  381. package/types/traversal/executors/finalize.d.ts +6 -0
  382. package/types/traversal/executors/index.d.ts +15 -0
  383. package/types/traversal/executors/normalize.d.ts +7 -0
  384. package/types/traversal/executors/prepare-existing.d.ts +6 -0
  385. package/types/traversal/executors/prepare-pending.d.ts +6 -0
  386. package/types/traversal/executors/resolve-union.d.ts +6 -0
  387. package/types/traversal/executors/serialize.d.ts +11 -0
  388. package/types/traversal/executors/transform-early.d.ts +6 -0
  389. package/types/traversal/executors/transform.d.ts +6 -0
  390. package/types/traversal/executors/traversal-state-executor.d.ts +19 -0
  391. package/types/traversal/executors/validate.d.ts +6 -0
  392. package/types/traversal/traversal-context.d.ts +67 -0
  393. package/types/traversal/traversal-state.d.ts +97 -0
  394. package/types/types.d.ts +218 -0
  395. package/types/value-processor/composed-value-processor.d.ts +17 -0
  396. package/types/value-processor/defined-value-processor.d.ts +16 -0
  397. package/types/value-processor/function-value-processor.d.ts +15 -0
  398. package/types/value-processor/parameterized-value-processor.d.ts +14 -0
  399. package/types/value-processor/parameters-value-processor.d.ts +28 -0
  400. package/types/value-processor/spec.d.ts +22 -0
  401. package/types/value-processor/value-processor.d.ts +92 -0
@@ -0,0 +1,51 @@
1
+ import { TraversalState } from '../traversal-state.js';
2
+ import { deepEquals } from '../../helpers/deep.js';
3
+ import { isEmpty, isObject } from '../../helpers/object.js';
4
+
5
+ /**
6
+ * @param {TraversalState} state
7
+ * @returns {TraversalState|null|undefined|Promise<TraversalState|null|undefined>}
8
+ */
9
+ export function transformEarly(state) {
10
+
11
+ if (state.value !== undefined && ((state.value === state.pending)
12
+ || (state.hasChildren && state.isIncremental
13
+ && deepEquals(state.pending, state.value)))) {
14
+ state.pending = undefined;
15
+ return state;
16
+ }
17
+ if (state.pending === undefined || state.schema === undefined || state.isUnion || state.schema.isImplicit) {
18
+ return state;
19
+ }
20
+ if ((state.hasChildren && state.isOpaque) /*|| !state.hasWorkInProgress*/) {
21
+ return state;
22
+ }
23
+
24
+ if (state.hasChildren && !state.mandatory && isEmpty(state.pending)) {
25
+ return state;
26
+ }
27
+
28
+ // We will transform early!
29
+ // Note that this implies that any mutations to child properties performed by this transform
30
+ // will very likely get overwritten when the children are traversed!
31
+ //
32
+
33
+ const result = state.schema._transformValue(state.pending, state.target, state.location, state.options);
34
+
35
+ /**
36
+ * @param {any} transformed
37
+ * @returns {TraversalState|null}
38
+ */
39
+ const updateState = (transformed) => {
40
+ if (transformed !== undefined) {
41
+ if (transformed !== state.value && state.hasChildren) {
42
+ state.copyPendingChildValues(state.pending, transformed);
43
+ }
44
+ state.pending = undefined;
45
+ state.value = transformed;
46
+ }
47
+ return (state.value === null)? null : state;
48
+ }
49
+
50
+ return (result instanceof Promise)? result.then(updateState) : updateState(result);
51
+ }
@@ -0,0 +1,68 @@
1
+ import { TraversalState } from '../traversal-state.js';
2
+ import { deepEquals } from '../../helpers/deep.js';
3
+ import { isEmpty } from '../../helpers/object.js';
4
+
5
+ /**
6
+ * @param {TraversalState} state
7
+ * @returns {TraversalState|null|undefined|Promise<TraversalState|null|undefined>}
8
+ */
9
+ export function transform(state) {
10
+
11
+ if (state.isPruned) {
12
+ return null;
13
+ }
14
+ if (state.isComplete) {
15
+ return state;
16
+ }
17
+ if (!state.condition) {
18
+ return undefined;
19
+ }
20
+
21
+ if (state.schema === undefined || state.isUnion) {
22
+ return state;
23
+ }
24
+
25
+ if (state.value !== undefined && ((state.value === state.pending)
26
+ || (state.hasChildren && state.isIncremental
27
+ && deepEquals(state.pending, state.value)))) {
28
+ state.pending = undefined;
29
+ return state;
30
+ }
31
+ if (state.pending === undefined) {
32
+ return state;
33
+ }
34
+ if (state.schema?.isImplicit) {
35
+ // implicit schemas never directly transform; they must use a value prepared by their parent.
36
+ return state;
37
+ }
38
+ if (!state.hasWorkInProgress || (state.hasChildren && state.isOpaque && state.hasIncompleteDescendents)) {
39
+ return state;
40
+ }
41
+
42
+ // todo - mandatory may not be set (via TraversalState set input) if we resolved a union this pass!
43
+
44
+ if (state.hasChildren && state.isIncremental && !state.mandatory && isEmpty(state.pending) && !state.schema.options.allowEmpty) {
45
+ return state;
46
+ }
47
+
48
+ // seems to be safe to do the transform
49
+
50
+ const result = state.schema._transformValue(state.pending, state.target, state.location, state.options);
51
+
52
+ /**
53
+ * @param {any} transformed
54
+ * @returns {TraversalState|null}
55
+ */
56
+ const updateState = (transformed) => {
57
+ if (transformed !== undefined) {
58
+ if (transformed !== state.value && state.hasChildren) {
59
+ state.copyPendingChildValues(state.pending, transformed);
60
+ }
61
+ state.pending = undefined;
62
+ state.value = transformed;
63
+ }
64
+ return (state.value === null)? null : state;
65
+ }
66
+
67
+ return (result instanceof Promise)? result.then(updateState) : updateState(result);
68
+ }
@@ -0,0 +1,46 @@
1
+ import { TraversalState } from '../traversal-state.js';
2
+ import { Executor, toExecutor } from '../../executor/executor.js';
3
+ import { EachExecutor } from '../../executor/each-executor.js';
4
+ import { SerialExecutor } from "../../executor/serial-executor.js";
5
+
6
+
7
+ /**
8
+ * @augments Executor<TraversalState>
9
+ */
10
+ export class TraversalStateExecutor extends Executor
11
+ {
12
+ /** @type {Executor<TraversalState>} */
13
+ #executor;
14
+
15
+ /**
16
+ * @param {any} enter
17
+ * @param {any} exit
18
+ */
19
+ constructor(enter, exit) {
20
+ super();
21
+ /** @type {Executor<TraversalState>} */
22
+ const enterExecutor = toExecutor(enter);
23
+ /** @type {Executor<TraversalState>} */
24
+ const exitExecutor = toExecutor(exit);
25
+
26
+ // wrap Each in a Serial so that we can return the original input instead of the processed array
27
+ /** @type {Executor<TraversalState>} */
28
+ const childExecutor = new SerialExecutor(
29
+ /** @type {Executor<TraversalState>} */ (new EachExecutor(this, ((state) => state?.activePropertyStates ?? [])))
30
+ );
31
+
32
+ // todo - wrap in a TryExecutor so we can ensure the location is set in any exceptions
33
+ this.#executor = new SerialExecutor([enterExecutor, childExecutor, exitExecutor]);
34
+ }
35
+
36
+
37
+ /**
38
+ *
39
+ * @param {TraversalState} state
40
+ * @returns {TraversalState|null|undefined|Promise<TraversalState|null|undefined>}
41
+ */
42
+ execute(state) {
43
+ return this.#executor.execute(state);
44
+ }
45
+ }
46
+
@@ -0,0 +1,63 @@
1
+ import { TraversalState } from '../traversal-state.js';
2
+ import { PipelineExecutor } from '../../executor/pipeline-executor.js';
3
+
4
+ import { ValidationError } from '../../errors.js';
5
+
6
+ /**
7
+ * @param {TraversalState} state
8
+ * @returns {TraversalState|Promise<TraversalState>}
9
+ */
10
+ export function validate(state) {
11
+ if (state.completed) {
12
+ // we must already be validated!
13
+ return state;
14
+ }
15
+ // const doValidation = state.context.final || (state.value !== undefined && (state.isIncremental || !state.isContainer));
16
+ const doValidation = state.context.final || state.isComplete;
17
+
18
+ if (!doValidation) {
19
+ const foo = state.isComplete;
20
+ return state;
21
+ }
22
+
23
+ if (state.schema === undefined) {
24
+ if (state.allowUnknown) {
25
+ return state;
26
+ }
27
+ throw new ValidationError('Unknown value', {path: state.path});
28
+ }
29
+ if (state.schema.isUnion) {
30
+ throw new ValidationError('Unable to resolve union', {path: state.path})
31
+ }
32
+
33
+ if (state.value === undefined && state.schema.isReference && !state.isRequired) {
34
+ return state;
35
+ }
36
+
37
+ if (state.hasWorkInProgress) {
38
+ if (state.value === undefined && !state.isRequired) {
39
+ return state;
40
+ }
41
+
42
+ const foo = state.hasWorkInProgress;
43
+ throw new ValidationError(`Incomplete assignment`, {value: state.pending, path: state.path});
44
+ }
45
+ if (state.value === undefined) {
46
+ return state;
47
+ }
48
+
49
+ const result = state.schema._validateValue(state.value, state.target, state.location, state.options);
50
+
51
+ /**
52
+ * @param {any} validated
53
+ * @returns {TraversalState}
54
+ */
55
+ const updateState = (validated) => {
56
+ if (validated !== state.value) {
57
+ state.value = validated;
58
+ }
59
+ return state;
60
+ }
61
+
62
+ return (result instanceof Promise)? result.then(updateState) : updateState(result);
63
+ }
@@ -0,0 +1,231 @@
1
+ import { SchemaLocation } from '../schema-location.js';
2
+
3
+ import { TraversalState } from './traversal-state.js';
4
+ import { debug } from '../helpers/debug-sink.js';
5
+ import { behead } from '../helpers/path.js';
6
+ import { CompiledSchema } from "../compiled-schema.js";
7
+ import { EMPTY } from '../constants.js';
8
+ import { SchemaError } from '../errors.js';
9
+
10
+
11
+ /**
12
+ * @typedef {object} TraversalContextStandardOptions
13
+ * @property {boolean} [strict]
14
+ * @property {boolean} [deep]
15
+ * @property {boolean} [debug]
16
+ */
17
+
18
+ /** @typedef {TraversalContextStandardOptions & {[key:string]:any}} TraversalContextOptions */
19
+
20
+ export class TraversalContext
21
+ {
22
+ /**
23
+ * @param {SchemaLocation|CompiledSchema} root
24
+ * @param {TraversalContextOptions} [options]
25
+ */
26
+ constructor(root, options = {}) {
27
+
28
+ this.root = (root instanceof CompiledSchema)? new SchemaLocation(root) : root;
29
+ this._final = false;
30
+
31
+ this._options = {...options, deep: options.deep ?? false, strict: options.strict ?? true, debug: options.debug ?? false}
32
+
33
+ this.traversals = 0;
34
+ this.counter = 0;
35
+
36
+ /** @type {Map.<string,TraversalState>} */
37
+ this.stateMap = new Map();
38
+ this._debugEnabled = options?.debug ?? false;
39
+
40
+ this.compiling = false; // magic flag needed to prevent union resolution of a CompiledSchema value from being a problem
41
+ }
42
+
43
+ get options() {
44
+ return this._options;
45
+ }
46
+
47
+ get deep() {
48
+ return this._options.deep;
49
+ }
50
+
51
+ get strict() {
52
+ return this._options.strict;
53
+ }
54
+
55
+ update() {
56
+ this.counter++;
57
+ this.final = false;
58
+
59
+ // this._debug('update', {counter: this.counter, final: this.final})
60
+ }
61
+
62
+ _finalizeCount = 0;
63
+
64
+ set final(finalize) {
65
+ // todo - make this configurable? (it's really just a last resort to prevent hangs.)
66
+ if (this._final && !finalize && this._finalizeCount++ > 100) {
67
+ throw new SchemaError('Unable to finalize a stable output value');
68
+ }
69
+ this._final = finalize ?? true;
70
+ }
71
+
72
+ get final() {
73
+ return Boolean(this._final);
74
+ }
75
+
76
+ finalize() {
77
+ this._final = true;
78
+ return this;
79
+ }
80
+
81
+ get isComplete() {
82
+ for (const state of this.stateMap.values()) {
83
+ if (!state.isComplete) {
84
+ // this._debug('not complete:', {incomplete: this.incomplete});
85
+
86
+ return false;
87
+ }
88
+ }
89
+ // this._debug('COMPLETE');
90
+ return true;
91
+ }
92
+
93
+ get incomplete() {
94
+ const incomplete = new Set();
95
+ for (const state of this.stateMap.values()) {
96
+ if (!state.isComplete) {
97
+ incomplete.add(state.path);
98
+ }
99
+ }
100
+ return incomplete;
101
+ }
102
+
103
+ // override the "target" value
104
+ setValue(value) {
105
+ // this._debug('setting target value');
106
+ this._value = value;
107
+ }
108
+
109
+ // get the root "target" value, or the override if set
110
+ getValue() {
111
+ if (this._value !== undefined) {
112
+ return this._value;
113
+ }
114
+ const traversalState = this.getState('');
115
+ return traversalState?.value;
116
+ }
117
+
118
+ /**
119
+ * @param {any} input
120
+ * @param {string} [path]
121
+ */
122
+ setAssignedInput(input, path = '') {
123
+ if (input === undefined) {
124
+ return;
125
+ }
126
+
127
+ let state = this.getState(''); // start at root
128
+
129
+ while (path) {
130
+ const [propertyName, remainingPath] = behead(path);
131
+ const propertyState = state.getChildState(propertyName);
132
+
133
+ state.assignedInput ??= EMPTY;
134
+ state = propertyState;
135
+ path = remainingPath;
136
+ state.mandatory = true;
137
+ }
138
+ state.assignedInput = input;
139
+ state.mandatory = true;
140
+ }
141
+
142
+
143
+ /**
144
+ * @param {string|SchemaLocation} path
145
+ * @returns {TraversalState}
146
+ */
147
+ getState(path) {
148
+ if (path instanceof SchemaLocation) {
149
+ path = path.path;
150
+ }
151
+ let state = this.stateMap.get(path);
152
+ if (state === undefined) {
153
+ const context = this;
154
+
155
+ /** @type {TraversalState} */
156
+ state = new TraversalState(context, path);
157
+
158
+ if (context._value !== undefined) {
159
+ // state.value = path === ''? context.#value : deepValue(context.#value, path);
160
+ }
161
+ this.stateMap.set(path, state);
162
+ }
163
+
164
+ return state;
165
+ }
166
+
167
+ /*
168
+ containerAssignmentsComplete(path) {
169
+ if (path === '' && this.uncompleted.size > 0) {
170
+ return false;
171
+ }
172
+ for (const p of this.uncompleted) {
173
+ if (p.startsWith(`${path}.`)) {
174
+ return false;
175
+ }
176
+ }
177
+ return true;
178
+ }
179
+
180
+ */
181
+
182
+ _debug(...args) {
183
+ if (!this._debugEnabled) return;
184
+
185
+ debug({contextName: 'context'}, ...args);
186
+ }
187
+
188
+ traverse(executor) {
189
+
190
+ const rootState = this.getState('');
191
+
192
+ let done = false;
193
+
194
+ const updateDone = (counter) => {
195
+ if (this.isComplete) {
196
+ done = true;
197
+ }
198
+ else if (this.counter === counter) {
199
+ if (this.final) {
200
+ done = true;
201
+ }
202
+ else {
203
+ this.final = true;
204
+ }
205
+ }
206
+ else {
207
+ this.final = false;
208
+ }
209
+ return done;
210
+ }
211
+
212
+ const loop = () => {
213
+ let result = undefined;
214
+ while (!done) {
215
+ const counter = this.counter;
216
+ result = executor.execute(rootState);
217
+
218
+ if (result instanceof Promise) {
219
+ return result.then(
220
+ resolved => updateDone(counter)? resolved : loop(),
221
+ rejected => { throw(rejected) }
222
+ );
223
+ }
224
+ updateDone(counter);
225
+ this.traversals++;
226
+ }
227
+ return result;
228
+ }
229
+ return loop();
230
+ }
231
+ }