@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,309 @@
1
+ const randomUUID = () => crypto.randomUUID();
2
+
3
+ /**
4
+ * Deterministic stringifier with support for extended types and deserialization.
5
+ * @package
6
+ * @param {any} value - Value to stringify
7
+ * @param {object} [options] - Stringification options
8
+ * @param {number} [options.space] - Indentation for pretty printing (default: 0)
9
+ * @param {number} [options.maxDepth] - Maximum recursion depth (default: 100)
10
+ * @param {boolean} [options.useDelimiters] - Use <<Type>> markers for extended types (default: true)
11
+ * @param {string} [options.delimiterOpen] - Opening delimiter for type markers (default: '<<')
12
+ * @param {string} [options.delimiterClose] - Closing delimiter for type markers (default: '>>')
13
+ * @returns {string} Deterministic JSON string with optional type markers
14
+ */
15
+ export function stringify(value, options = {}) {
16
+ const {
17
+ space = 0,
18
+ maxDepth = 100,
19
+ useDelimiters = true,
20
+ delimiterOpen = '«',
21
+ delimiterClose = '»'
22
+ } = options;
23
+
24
+ const seen = new WeakMap();
25
+ const symbolIds = new WeakMap();
26
+
27
+ /**
28
+ * @param {string} type
29
+ * @param {string|null} value
30
+ * @returns {string|null}
31
+ */
32
+ const makeMarker = (type, value = null) => {
33
+ if (!useDelimiters) {
34
+ return null; // Signal to skip this value
35
+ }
36
+ return value !== null
37
+ ? `${delimiterOpen}${type}: ${value}${delimiterClose}`
38
+ : `${delimiterOpen}${type}${delimiterClose}`;
39
+ };
40
+
41
+ const getSymbolId = (sym) => {
42
+ const description = sym.description;
43
+ if (description !== undefined) {
44
+ return description;
45
+ }
46
+
47
+ if (!symbolIds.has(sym)) {
48
+ symbolIds.set(sym, randomUUID());
49
+ }
50
+ return symbolIds.get(sym);
51
+ };
52
+
53
+ const stringifyValue = (val, path = '$', depth = 0) => {
54
+ if (depth > maxDepth) {
55
+ return makeMarker('MaxDepth');
56
+ }
57
+
58
+ // Primitives
59
+ if (val === null) return null;
60
+ if (val === undefined) return makeMarker('undefined');
61
+ if (typeof val === 'number') {
62
+ if (Number.isNaN(val)) return makeMarker('NaN');
63
+ if (val === Infinity) return makeMarker('Infinity');
64
+ if (val === -Infinity) return makeMarker('-Infinity');
65
+ return val;
66
+ }
67
+ if (typeof val === 'boolean') return val;
68
+ if (typeof val === 'string') return val;
69
+ if (typeof val === 'symbol') {
70
+ return makeMarker('Symbol', getSymbolId(val));
71
+ }
72
+ if (typeof val === 'function') {
73
+ return val.name ? makeMarker('Function', val.name) : makeMarker('undefined');
74
+ }
75
+ if (typeof val === 'bigint') {
76
+ return makeMarker('BigInt', val.toString());
77
+ }
78
+
79
+ // Dates
80
+ if (val instanceof Date) {
81
+ const marker = makeMarker('Date', val.toISOString());
82
+ return marker !== null ? marker : val.toISOString();
83
+ }
84
+
85
+ // Arrays
86
+ if (Array.isArray(val)) {
87
+ if (seen.has(val)) {
88
+ return makeMarker('Circular', seen.get(val));
89
+ }
90
+ seen.set(val, path);
91
+
92
+ const items = val.map((item, index) =>
93
+ stringifyValue(item, `${path}[${index}]`, depth + 1)
94
+ ).filter(item => item !== null || val.includes(null)); // Keep explicit nulls
95
+
96
+ seen.delete(val);
97
+ return items;
98
+ }
99
+
100
+ // Objects
101
+ if (typeof val === 'object') {
102
+ if (seen.has(val)) {
103
+ return makeMarker('Circular', seen.get(val));
104
+ }
105
+ seen.set(val, path);
106
+
107
+ const keys = Object.keys(val).sort();
108
+ const result = {};
109
+
110
+ for (const key of keys) {
111
+ const keyPath = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)
112
+ ? `${path}.${key}`
113
+ : `${path}[${JSON.stringify(key)}]`;
114
+ const stringified = stringifyValue(val[key], keyPath, depth + 1);
115
+
116
+ // Skip only marker nulls (stripped values), not actual nulls
117
+ if (stringified !== null || val[key] === null) {
118
+ result[key] = stringified;
119
+ }
120
+ }
121
+
122
+ seen.delete(val);
123
+ return result;
124
+ }
125
+
126
+ return null;
127
+ };
128
+
129
+ const result = stringifyValue(value);
130
+ return JSON.stringify(result, null, space);
131
+ }
132
+
133
+ /**
134
+ * Parse a string created by stringify() back into an object.
135
+ * Handles both plain JSON and extended format with type markers.
136
+ * @package
137
+ * @param {string} text - JSON string to parse
138
+ * @param {object} [options] - Parse options
139
+ * @param {string} [options.delimiterOpen] - Opening delimiter for type markers (default '<<')
140
+ * @param {string} [options.delimiterClose] - Closing delimiter for type markers (default '>>')
141
+ * @returns {any} Parsed value with extended types and circular references restored
142
+ */
143
+ export function parse(text, options = {}) {
144
+ const {
145
+ delimiterOpen = '«',
146
+ delimiterClose = '»'
147
+ } = options;
148
+
149
+ const parsed = JSON.parse(text);
150
+ const pathMap = new Map();
151
+ const circularRefs = [];
152
+
153
+ // Escape regex special characters
154
+ const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
155
+ const markerPattern = new RegExp(
156
+ `^${escapeRegex(delimiterOpen)}([^:${escapeRegex(delimiterClose)}]+)(?::\\s*(.+?))?${escapeRegex(delimiterClose)}$`
157
+ );
158
+
159
+ const parseMarker = (str) => {
160
+ if (typeof str !== 'string') return null;
161
+ const match = str.match(markerPattern);
162
+ if (!match) return null;
163
+ return { type: match[1], value: match[2] };
164
+ };
165
+
166
+ const revive = (val, path = '$') => {
167
+ // Check for marker strings
168
+ const marker = parseMarker(val);
169
+ if (marker) {
170
+ switch (marker.type) {
171
+ case 'undefined': return undefined;
172
+ case 'NaN': return NaN;
173
+ case 'Infinity': return Infinity;
174
+ case '-Infinity': return -Infinity;
175
+ case 'BigInt': return BigInt(marker.value);
176
+ case 'Date': return new Date(marker.value);
177
+ case 'Symbol': return Symbol.for(marker.value);
178
+ case 'Function': return null;
179
+ case 'MaxDepth': return null;
180
+ case 'Circular':
181
+ circularRefs.push({ targetPath: path, sourcePath: marker.value });
182
+ return null;
183
+ }
184
+ }
185
+
186
+ if (val === null || typeof val !== 'object') {
187
+ return val;
188
+ }
189
+
190
+ // Arrays
191
+ if (Array.isArray(val)) {
192
+ const arr = [];
193
+ pathMap.set(path, arr);
194
+
195
+ val.forEach((item, index) => {
196
+ const itemPath = `${path}[${index}]`;
197
+ arr[index] = revive(item, itemPath);
198
+ });
199
+
200
+ return arr;
201
+ }
202
+
203
+ // Objects
204
+ const obj = {};
205
+ pathMap.set(path, obj);
206
+
207
+ for (const [key, value] of Object.entries(val)) {
208
+ const keyPath = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)
209
+ ? `${path}.${key}`
210
+ : `${path}[${JSON.stringify(key)}]`;
211
+ obj[key] = revive(value, keyPath);
212
+ }
213
+
214
+ return obj;
215
+ };
216
+
217
+ const result = revive(parsed);
218
+
219
+ // Second pass: resolve circular references
220
+ for (const { targetPath, sourcePath } of circularRefs) {
221
+ const target = resolvePath(result, targetPath);
222
+ const source = pathMap.get(sourcePath);
223
+
224
+ if (target && source) {
225
+ setPath(target.obj, target.key, source);
226
+ }
227
+ }
228
+
229
+ return result;
230
+ }
231
+
232
+ /**
233
+ * Resolve a JSONPath to an object and key
234
+ * @param {*} root - Root object
235
+ * @param {string} path - Path to resolve
236
+ * @returns {{obj: object, key: string|number}|null}
237
+ */
238
+ function resolvePath(root, path) {
239
+ if (path === '$') {
240
+ return null;
241
+ }
242
+
243
+ const parts = parsePath(path);
244
+ let current = root;
245
+
246
+ for (let i = 0; i < parts.length - 1; i++) {
247
+ current = current[parts[i]];
248
+ if (current === null || current === undefined) {
249
+ return null;
250
+ }
251
+ }
252
+
253
+ return { obj: current, key: parts[parts.length - 1] };
254
+ }
255
+
256
+ /**
257
+ * Set a value at the given object/key
258
+ * @param {object} obj - Parent object
259
+ * @param {string|number} key - Key to set
260
+ * @param {*} value - Value to set
261
+ */
262
+ function setPath(obj, key, value) {
263
+ obj[key] = value;
264
+ }
265
+
266
+ /**
267
+ * Parse a JSONPath into an array of keys
268
+ * @param {string} path - Path like $.foo.bar[0].baz
269
+ * @returns {Array<string|number>}
270
+ */
271
+ function parsePath(path) {
272
+ const parts = [];
273
+ let current = '';
274
+ let inBracket = false;
275
+
276
+ for (let i = 0; i < path.length; i++) {
277
+ const char = path[i];
278
+
279
+ if (char === '$' && i === 0) {
280
+ continue;
281
+ }
282
+
283
+ if (char === '.' && !inBracket) {
284
+ if (current) parts.push(current);
285
+ current = '';
286
+ } else if (char === '[') {
287
+ if (current) parts.push(current);
288
+ current = '';
289
+ inBracket = true;
290
+ } else if (char === ']') {
291
+ if (inBracket) {
292
+ const trimmed = current.trim();
293
+ if (trimmed.startsWith('"') && trimmed.endsWith('"')) {
294
+ parts.push(JSON.parse(trimmed));
295
+ } else {
296
+ parts.push(Number(trimmed));
297
+ }
298
+ current = '';
299
+ inBracket = false;
300
+ }
301
+ } else {
302
+ current += char;
303
+ }
304
+ }
305
+
306
+ if (current) parts.push(current);
307
+
308
+ return parts;
309
+ }
@@ -0,0 +1,64 @@
1
+ import { CompiledSchema } from '../compiled-schema.js';
2
+ import { Schema } from '../schema.js';
3
+
4
+
5
+ import { SchemaError } from '../errors.js';
6
+ /** @import {SchemaData} from '../types.js' */
7
+ /**
8
+ * Common implementation shared by both Schema and CompiledSchema
9
+ * (which only share a "fake" jsdoc interface to define their shape)
10
+ * @package
11
+ * @param {Schema|CompiledSchema|SchemaData} schema
12
+ * @param {WeakMap<object,object>} [seen] - cycle-detection map; shared across recursive calls
13
+ * @returns {SchemaData}
14
+ */
15
+ export function toData(schema, seen = new WeakMap()) {
16
+
17
+ if (typeof schema !== 'object') {
18
+ throw new SchemaError('Not a schema!')
19
+ }
20
+
21
+ if (seen.has(schema)) {
22
+ return seen.get(schema);
23
+ }
24
+
25
+ /** @type {SchemaData} */
26
+ const data = {};
27
+ seen.set(schema, data);
28
+
29
+ if (!(schema instanceof CompiledSchema) && schema.base) {
30
+ data.base = schema.base;
31
+ }
32
+ // sloppy copy so that we can also load dumb data
33
+ for (const group of ['properties', 'unionSchemas', 'metadata', 'options', 'handlers']) {
34
+ if (!schema[group]) {
35
+ continue;
36
+ }
37
+
38
+ for (const [key, value] of Object.entries(schema[group])) {
39
+ if (data[group] === undefined) {
40
+ data[group] = {};
41
+ }
42
+ const isSchema = (value instanceof Schema) || (value instanceof CompiledSchema);
43
+
44
+ let v = value;
45
+ if (isSchema) {
46
+ v = toData(value, seen);
47
+ }
48
+ else if (group === 'handlers') {
49
+ if (Array.isArray(value)) {
50
+ v = value.map(p => {
51
+ if (p === null) { return '$null' }
52
+ if (p === undefined) { return '$undefined' }
53
+ if (typeof p === 'object' && p.spec !== undefined) {
54
+ return p.spec;
55
+ }
56
+ return p;
57
+ });
58
+ }
59
+ }
60
+ (data[group])[key] = v;
61
+ }
62
+ }
63
+ return data;
64
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Return true if the provided value is one of the magic truthy keywords
3
+ * @param {string} value
4
+ * @returns {boolean}
5
+ */
6
+ export function isTruthyKeyword(value) {
7
+ return (value === 'true' || value === '1' || value === 'yes' || value === 'enabled' || value === 'active' || value === 'on');
8
+ }
9
+
10
+ /**
11
+ * Return true if the provided value is one of the magic falsey keywords
12
+ * @param {string} value
13
+ * @returns {boolean}
14
+ */
15
+ export function isFalseyKeyword(value) {
16
+ return (value === 'false' || value === '0' || value === 'no' || value === 'disabled' || value === 'inactive' || value === 'off' || value === '' || value === 'undefined' || value === 'null' || value === 'none');
17
+ }
18
+
19
+ /**
20
+ * This library has a slightly extended notion of truthiness that includes human-friendly string representations
21
+ *
22
+ * @param {any} value
23
+ * @returns {boolean}
24
+ */
25
+ export function isTruthy(value) {
26
+ if (typeof value === 'boolean') {
27
+ return value;
28
+ }
29
+ if (typeof value === 'string') {
30
+ const lower = value.toLowerCase().trim();
31
+ if (isTruthyKeyword(lower)) { return true }
32
+ if (isFalseyKeyword(lower)) { return false }
33
+ }
34
+ if (value instanceof Error) { return false }
35
+ return Boolean(value);
36
+ }
37
+
38
+ /**
39
+ * This library has a slightly extended notion of truthiness that includes human-friendly string representations
40
+ *
41
+ * @param {any} value
42
+ * @returns {boolean}
43
+ */
44
+ export function isFalsey(value) {
45
+ if (typeof value === 'boolean') {
46
+ return !value;
47
+ }
48
+ if (typeof value === 'string') {
49
+ const lower = value.toLowerCase().trim();
50
+ if (isTruthyKeyword(lower)) { return false }
51
+ if (isFalseyKeyword(lower)) { return true }
52
+ }
53
+ if (value instanceof Error) { return true }
54
+ return !Boolean(value);
55
+ }
package/src/index.js ADDED
@@ -0,0 +1,29 @@
1
+ // Copyright 2026 Version Zero | github.com/argh
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /**
5
+ * @module
6
+ * @mergeModuleWith <project>
7
+ */
8
+
9
+ // Register core libraries before any SchemaResolver is constructed.
10
+ // The node library is conditionally loaded based on runtime detection.
11
+ import { registerCoreLibrary } from './schema-resolver.js';
12
+ import coreLibrary from './core-library/index.js';
13
+
14
+ registerCoreLibrary(coreLibrary);
15
+
16
+ const IS_NODE = typeof globalThis.process !== 'undefined'
17
+ && typeof globalThis.process.versions?.node === 'string';
18
+
19
+ if (IS_NODE) {
20
+ const { default: coreLibraryNode } = await import('./core-library-node/index.js');
21
+ registerCoreLibrary(coreLibraryNode);
22
+ }
23
+
24
+ export { CompiledSchema } from './compiled-schema.js';
25
+ export { Schema, SchemaPolicy } from './schema.js';
26
+ export { SchemaError } from './errors.js'
27
+ export { SchemaResolver } from './schema-resolver.js';
28
+ export { SchemaLocation } from './schema-location.js';
29
+ export { EMPTY } from './constants.js';