@clementine-solutions/jane-io 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/README.md +132 -1
  2. package/dist/core/analysis/diff.d.ts +35 -0
  3. package/dist/core/analysis/diff.js +88 -0
  4. package/dist/core/analysis/explain.d.ts +35 -0
  5. package/dist/core/analysis/explain.js +117 -0
  6. package/dist/core/analysis/index.d.ts +14 -0
  7. package/dist/core/analysis/index.js +26 -0
  8. package/dist/core/analysis/replay.d.ts +34 -0
  9. package/dist/core/analysis/replay.js +68 -0
  10. package/dist/core/analysis/telemetry.d.ts +28 -0
  11. package/dist/core/analysis/telemetry.js +123 -0
  12. package/dist/core/boundary-rules/at-most-one.d.ts +17 -0
  13. package/dist/core/boundary-rules/at-most-one.js +38 -0
  14. package/dist/core/boundary-rules/conditionally-required.d.ts +18 -0
  15. package/dist/core/boundary-rules/conditionally-required.js +44 -0
  16. package/dist/core/boundary-rules/date-range.d.ts +17 -0
  17. package/dist/core/boundary-rules/date-range.js +39 -0
  18. package/dist/core/boundary-rules/index.d.ts +18 -0
  19. package/dist/core/boundary-rules/index.js +21 -0
  20. package/dist/core/boundary-rules/mutually-exclusive.d.ts +16 -0
  21. package/dist/core/boundary-rules/mutually-exclusive.js +38 -0
  22. package/dist/core/boundary-rules/no-unknown-fields.d.ts +17 -0
  23. package/dist/core/boundary-rules/no-unknown-fields.js +39 -0
  24. package/dist/core/boundary-rules/require-all.d.ts +16 -0
  25. package/dist/core/boundary-rules/require-all.js +39 -0
  26. package/dist/core/boundary-rules/require-one.d.ts +17 -0
  27. package/dist/core/boundary-rules/require-one.js +41 -0
  28. package/dist/core/common/events.d.ts +37 -0
  29. package/dist/core/common/events.js +82 -0
  30. package/dist/core/common/fluent.d.ts +151 -0
  31. package/dist/core/common/fluent.js +429 -0
  32. package/dist/core/common/index.d.ts +16 -0
  33. package/dist/core/common/index.js +31 -0
  34. package/dist/core/common/policy.d.ts +170 -0
  35. package/dist/core/common/policy.js +550 -0
  36. package/dist/core/common/utilities.d.ts +59 -0
  37. package/dist/core/common/utilities.js +177 -0
  38. package/dist/core/common/wildcard.d.ts +27 -0
  39. package/dist/core/common/wildcard.js +63 -0
  40. package/dist/core/field-path/construct.d.ts +77 -0
  41. package/dist/core/field-path/construct.js +189 -0
  42. package/dist/core/field-path/format.d.ts +41 -0
  43. package/dist/core/field-path/format.js +154 -0
  44. package/dist/core/field-path/index.d.ts +14 -0
  45. package/dist/core/field-path/index.js +26 -0
  46. package/dist/core/field-path/utilities.d.ts +85 -0
  47. package/dist/core/field-path/utilities.js +138 -0
  48. package/dist/core/field-path/walk.d.ts +36 -0
  49. package/dist/core/field-path/walk.js +80 -0
  50. package/dist/core/fluent-registry.d.ts +138 -0
  51. package/dist/core/fluent-registry.js +151 -0
  52. package/dist/core/normalizers/array/compact-sparse-array.d.ts +22 -0
  53. package/dist/core/normalizers/array/compact-sparse-array.js +40 -0
  54. package/dist/core/normalizers/array/flatten-one-level.d.ts +17 -0
  55. package/dist/core/normalizers/array/flatten-one-level.js +45 -0
  56. package/dist/core/normalizers/array/remove-empty-string-items.d.ts +6 -0
  57. package/dist/core/normalizers/array/remove-empty-string-items.js +34 -0
  58. package/dist/core/normalizers/array/remove-null-items.d.ts +16 -0
  59. package/dist/core/normalizers/array/remove-null-items.js +34 -0
  60. package/dist/core/normalizers/array/remove-undefined-items.d.ts +16 -0
  61. package/dist/core/normalizers/array/remove-undefined-items.js +34 -0
  62. package/dist/core/normalizers/date/invalid-date-to-undefined.d.ts +17 -0
  63. package/dist/core/normalizers/date/invalid-date-to-undefined.js +35 -0
  64. package/dist/core/normalizers/index.d.ts +28 -0
  65. package/dist/core/normalizers/index.js +46 -0
  66. package/dist/core/normalizers/normalizer-register.d.ts +17 -0
  67. package/dist/core/normalizers/normalizer-register.js +41 -0
  68. package/dist/core/normalizers/number/infinity-to-undefined.d.ts +18 -0
  69. package/dist/core/normalizers/number/infinity-to-undefined.js +35 -0
  70. package/dist/core/normalizers/number/nan-to-undefined.d.ts +17 -0
  71. package/dist/core/normalizers/number/nan-to-undefined.js +34 -0
  72. package/dist/core/normalizers/number/normalize-negative-zero.d.ts +16 -0
  73. package/dist/core/normalizers/number/normalize-negative-zero.js +33 -0
  74. package/dist/core/normalizers/object/remove-empty-array-keys.d.ts +17 -0
  75. package/dist/core/normalizers/object/remove-empty-array-keys.js +38 -0
  76. package/dist/core/normalizers/object/remove-empty-object-keys.d.ts +16 -0
  77. package/dist/core/normalizers/object/remove-empty-object-keys.js +42 -0
  78. package/dist/core/normalizers/object/remove-empty-string-keys.d.ts +16 -0
  79. package/dist/core/normalizers/object/remove-empty-string-keys.js +37 -0
  80. package/dist/core/normalizers/object/remove-null-keys.d.ts +16 -0
  81. package/dist/core/normalizers/object/remove-null-keys.js +37 -0
  82. package/dist/core/normalizers/object/remove-undefined-keys.d.ts +16 -0
  83. package/dist/core/normalizers/object/remove-undefined-keys.js +37 -0
  84. package/dist/core/normalizers/string/collapse-whitespace.d.ts +17 -0
  85. package/dist/core/normalizers/string/collapse-whitespace.js +35 -0
  86. package/dist/core/normalizers/string/empty-to-undefined.d.ts +16 -0
  87. package/dist/core/normalizers/string/empty-to-undefined.js +33 -0
  88. package/dist/core/normalizers/string/trim.d.ts +16 -0
  89. package/dist/core/normalizers/string/trim.js +34 -0
  90. package/dist/core/parsers/index.d.ts +22 -0
  91. package/dist/core/parsers/index.js +43 -0
  92. package/dist/core/parsers/parse-array-string.d.ts +16 -0
  93. package/dist/core/parsers/parse-array-string.js +36 -0
  94. package/dist/core/parsers/parse-bigint-string.d.ts +16 -0
  95. package/dist/core/parsers/parse-bigint-string.js +33 -0
  96. package/dist/core/parsers/parse-binary-string.d.ts +16 -0
  97. package/dist/core/parsers/parse-binary-string.js +33 -0
  98. package/dist/core/parsers/parse-boolean-string.d.ts +16 -0
  99. package/dist/core/parsers/parse-boolean-string.js +27 -0
  100. package/dist/core/parsers/parse-date-string.d.ts +16 -0
  101. package/dist/core/parsers/parse-date-string.js +30 -0
  102. package/dist/core/parsers/parse-duration-string.d.ts +16 -0
  103. package/dist/core/parsers/parse-duration-string.js +37 -0
  104. package/dist/core/parsers/parse-hex-string.d.ts +16 -0
  105. package/dist/core/parsers/parse-hex-string.js +29 -0
  106. package/dist/core/parsers/parse-integer-string.d.ts +16 -0
  107. package/dist/core/parsers/parse-integer-string.js +30 -0
  108. package/dist/core/parsers/parse-json-string.d.ts +17 -0
  109. package/dist/core/parsers/parse-json-string.js +35 -0
  110. package/dist/core/parsers/parse-numeric-string.d.ts +16 -0
  111. package/dist/core/parsers/parse-numeric-string.js +29 -0
  112. package/dist/core/parsers/parse-object-string.d.ts +16 -0
  113. package/dist/core/parsers/parse-object-string.js +36 -0
  114. package/dist/core/parsers/parse-octal-string.d.ts +16 -0
  115. package/dist/core/parsers/parse-octal-string.js +33 -0
  116. package/dist/core/parsers/parse-scientific-notation-string.d.ts +16 -0
  117. package/dist/core/parsers/parse-scientific-notation-string.js +30 -0
  118. package/dist/core/parsers/parse-url-string.d.ts +16 -0
  119. package/dist/core/parsers/parse-url-string.js +36 -0
  120. package/dist/core/pipeline/boundary.d.ts +36 -0
  121. package/dist/core/pipeline/boundary.js +256 -0
  122. package/dist/core/pipeline/contain.d.ts +122 -0
  123. package/dist/core/pipeline/contain.js +339 -0
  124. package/dist/core/pipeline/index.d.ts +16 -0
  125. package/dist/core/pipeline/index.js +37 -0
  126. package/dist/core/pipeline/normalize.d.ts +34 -0
  127. package/dist/core/pipeline/normalize.js +76 -0
  128. package/dist/core/pipeline/parse.d.ts +40 -0
  129. package/dist/core/pipeline/parse.js +91 -0
  130. package/dist/core/pipeline/pipeline.d.ts +23 -0
  131. package/dist/core/pipeline/pipeline.js +418 -0
  132. package/dist/core/pipeline/scan.d.ts +46 -0
  133. package/dist/core/pipeline/scan.js +115 -0
  134. package/dist/core/pipeline/validate.d.ts +40 -0
  135. package/dist/core/pipeline/validate.js +74 -0
  136. package/dist/core/scanners/any/scan-for-sentinels.d.ts +19 -0
  137. package/dist/core/scanners/any/scan-for-sentinels.js +35 -0
  138. package/dist/core/scanners/array/array-is-deep.d.ts +19 -0
  139. package/dist/core/scanners/array/array-is-deep.js +38 -0
  140. package/dist/core/scanners/array/array-is-heterogenous.d.ts +18 -0
  141. package/dist/core/scanners/array/array-is-heterogenous.js +39 -0
  142. package/dist/core/scanners/array/array-is-large.d.ts +19 -0
  143. package/dist/core/scanners/array/array-is-large.js +32 -0
  144. package/dist/core/scanners/bigint/bigint-is-large.d.ts +20 -0
  145. package/dist/core/scanners/bigint/bigint-is-large.js +34 -0
  146. package/dist/core/scanners/bigint/bigint-not-safe.d.ts +20 -0
  147. package/dist/core/scanners/bigint/bigint-not-safe.js +34 -0
  148. package/dist/core/scanners/date/date-is-before-epoch.d.ts +19 -0
  149. package/dist/core/scanners/date/date-is-before-epoch.js +32 -0
  150. package/dist/core/scanners/date/date-is-far-future.d.ts +19 -0
  151. package/dist/core/scanners/date/date-is-far-future.js +32 -0
  152. package/dist/core/scanners/date/date-is-invalid.d.ts +19 -0
  153. package/dist/core/scanners/date/date-is-invalid.js +31 -0
  154. package/dist/core/scanners/index.d.ts +31 -0
  155. package/dist/core/scanners/index.js +58 -0
  156. package/dist/core/scanners/number/number-is-infinite.d.ts +19 -0
  157. package/dist/core/scanners/number/number-is-infinite.js +31 -0
  158. package/dist/core/scanners/number/number-is-nan.d.ts +19 -0
  159. package/dist/core/scanners/number/number-is-nan.js +31 -0
  160. package/dist/core/scanners/number/number-is-too-large.d.ts +20 -0
  161. package/dist/core/scanners/number/number-is-too-large.js +33 -0
  162. package/dist/core/scanners/number/number-is-unsafe-integer.d.ts +19 -0
  163. package/dist/core/scanners/number/number-is-unsafe-integer.js +31 -0
  164. package/dist/core/scanners/object/object-has-circular-references.d.ts +20 -0
  165. package/dist/core/scanners/object/object-has-circular-references.js +43 -0
  166. package/dist/core/scanners/object/object-has-many-keys.d.ts +19 -0
  167. package/dist/core/scanners/object/object-has-many-keys.js +33 -0
  168. package/dist/core/scanners/object/object-is-deep.d.ts +20 -0
  169. package/dist/core/scanners/object/object-is-deep.js +38 -0
  170. package/dist/core/scanners/scanner-registry.d.ts +19 -0
  171. package/dist/core/scanners/scanner-registry.js +36 -0
  172. package/dist/core/scanners/string/string-has-unsafe-unicode.d.ts +19 -0
  173. package/dist/core/scanners/string/string-has-unsafe-unicode.js +32 -0
  174. package/dist/core/scanners/string/string-has-whitespace-edges.d.ts +19 -0
  175. package/dist/core/scanners/string/string-has-whitespace-edges.js +31 -0
  176. package/dist/core/scanners/string/string-is-long.d.ts +19 -0
  177. package/dist/core/scanners/string/string-is-long.js +32 -0
  178. package/dist/core/scanners/unknown/unknown-not-scannable.d.ts +21 -0
  179. package/dist/core/scanners/unknown/unknown-not-scannable.js +34 -0
  180. package/dist/core/shapes/analysis.d.ts +239 -0
  181. package/dist/core/shapes/analysis.js +11 -0
  182. package/dist/core/shapes/boundary.d.ts +126 -0
  183. package/dist/core/shapes/boundary.js +11 -0
  184. package/dist/core/shapes/events.d.ts +83 -0
  185. package/dist/core/shapes/events.js +10 -0
  186. package/dist/core/shapes/field-path.d.ts +51 -0
  187. package/dist/core/shapes/field-path.js +10 -0
  188. package/dist/core/shapes/index.d.ts +21 -0
  189. package/dist/core/shapes/index.js +11 -0
  190. package/dist/core/shapes/normalize.d.ts +59 -0
  191. package/dist/core/shapes/normalize.js +11 -0
  192. package/dist/core/shapes/parse.d.ts +75 -0
  193. package/dist/core/shapes/parse.js +11 -0
  194. package/dist/core/shapes/pipeline.d.ts +149 -0
  195. package/dist/core/shapes/pipeline.js +11 -0
  196. package/dist/core/shapes/policy.d.ts +158 -0
  197. package/dist/core/shapes/policy.js +11 -0
  198. package/dist/core/shapes/public.d.ts +92 -0
  199. package/dist/core/shapes/public.js +10 -0
  200. package/dist/core/shapes/scan.d.ts +126 -0
  201. package/dist/core/shapes/scan.js +11 -0
  202. package/dist/core/shapes/validate.d.ts +65 -0
  203. package/dist/core/shapes/validate.js +11 -0
  204. package/dist/core/validators/array/array-max-items.d.ts +25 -0
  205. package/dist/core/validators/array/array-max-items.js +42 -0
  206. package/dist/core/validators/array/array-min-items.d.ts +25 -0
  207. package/dist/core/validators/array/array-min-items.js +42 -0
  208. package/dist/core/validators/array/array.d.ts +22 -0
  209. package/dist/core/validators/array/array.js +34 -0
  210. package/dist/core/validators/array/excludes.d.ts +25 -0
  211. package/dist/core/validators/array/excludes.js +47 -0
  212. package/dist/core/validators/array/has-unique-items.d.ts +24 -0
  213. package/dist/core/validators/array/has-unique-items.js +46 -0
  214. package/dist/core/validators/array/includes.d.ts +24 -0
  215. package/dist/core/validators/array/includes.js +46 -0
  216. package/dist/core/validators/array/items-equal.d.ts +25 -0
  217. package/dist/core/validators/array/items-equal.js +42 -0
  218. package/dist/core/validators/array/no-empty-string-items.d.ts +24 -0
  219. package/dist/core/validators/array/no-empty-string-items.js +46 -0
  220. package/dist/core/validators/array/no-null-items.d.ts +24 -0
  221. package/dist/core/validators/array/no-null-items.js +46 -0
  222. package/dist/core/validators/array/no-undefined-items.d.ts +24 -0
  223. package/dist/core/validators/array/no-undefined-items.js +45 -0
  224. package/dist/core/validators/array/non-empty-array.d.ts +24 -0
  225. package/dist/core/validators/array/non-empty-array.js +45 -0
  226. package/dist/core/validators/array/not-sparse.d.ts +25 -0
  227. package/dist/core/validators/array/not-sparse.js +44 -0
  228. package/dist/core/validators/bigint/bigint-equals.d.ts +24 -0
  229. package/dist/core/validators/bigint/bigint-equals.js +57 -0
  230. package/dist/core/validators/bigint/bigint-max.d.ts +25 -0
  231. package/dist/core/validators/bigint/bigint-max.js +63 -0
  232. package/dist/core/validators/bigint/bigint-min.d.ts +25 -0
  233. package/dist/core/validators/bigint/bigint-min.js +87 -0
  234. package/dist/core/validators/bigint/bigint-negative.d.ts +23 -0
  235. package/dist/core/validators/bigint/bigint-negative.js +73 -0
  236. package/dist/core/validators/bigint/bigint-non-negative.d.ts +24 -0
  237. package/dist/core/validators/bigint/bigint-non-negative.js +72 -0
  238. package/dist/core/validators/bigint/bigint-non-positive.d.ts +24 -0
  239. package/dist/core/validators/bigint/bigint-non-positive.js +72 -0
  240. package/dist/core/validators/bigint/bigint-positive.d.ts +24 -0
  241. package/dist/core/validators/bigint/bigint-positive.js +72 -0
  242. package/dist/core/validators/bigint/bigint-safe.d.ts +25 -0
  243. package/dist/core/validators/bigint/bigint-safe.js +75 -0
  244. package/dist/core/validators/bigint/bigint.d.ts +20 -0
  245. package/dist/core/validators/bigint/bigint.js +38 -0
  246. package/dist/core/validators/boolean/boolean.d.ts +21 -0
  247. package/dist/core/validators/boolean/boolean.js +39 -0
  248. package/dist/core/validators/boolean/is-false.d.ts +22 -0
  249. package/dist/core/validators/boolean/is-false.js +48 -0
  250. package/dist/core/validators/boolean/is-true.d.ts +22 -0
  251. package/dist/core/validators/boolean/is-true.js +48 -0
  252. package/dist/core/validators/common/is-country-code.d.ts +17 -0
  253. package/dist/core/validators/common/is-country-code.js +36 -0
  254. package/dist/core/validators/common/is-currency-code.d.ts +17 -0
  255. package/dist/core/validators/common/is-currency-code.js +36 -0
  256. package/dist/core/validators/common/is-email-strict.d.ts +17 -0
  257. package/dist/core/validators/common/is-email-strict.js +36 -0
  258. package/dist/core/validators/common/is-email.d.ts +17 -0
  259. package/dist/core/validators/common/is-email.js +36 -0
  260. package/dist/core/validators/common/is-ip.d.ts +17 -0
  261. package/dist/core/validators/common/is-ip.js +37 -0
  262. package/dist/core/validators/common/is-phone-strict.d.ts +17 -0
  263. package/dist/core/validators/common/is-phone-strict.js +36 -0
  264. package/dist/core/validators/common/is-phone.d.ts +17 -0
  265. package/dist/core/validators/common/is-phone.js +36 -0
  266. package/dist/core/validators/common/is-port.d.ts +17 -0
  267. package/dist/core/validators/common/is-port.js +35 -0
  268. package/dist/core/validators/common/is-postal-code.d.ts +17 -0
  269. package/dist/core/validators/common/is-postal-code.js +36 -0
  270. package/dist/core/validators/common/is-url.d.ts +17 -0
  271. package/dist/core/validators/common/is-url.js +38 -0
  272. package/dist/core/validators/common/is-uuid.d.ts +17 -0
  273. package/dist/core/validators/common/is-uuid.js +36 -0
  274. package/dist/core/validators/date/before-epoch.d.ts +28 -0
  275. package/dist/core/validators/date/before-epoch.js +56 -0
  276. package/dist/core/validators/date/date-now-required.d.ts +22 -0
  277. package/dist/core/validators/date/date-now-required.js +48 -0
  278. package/dist/core/validators/date/is-date.d.ts +21 -0
  279. package/dist/core/validators/date/is-date.js +47 -0
  280. package/dist/core/validators/date/is-far-future.d.ts +23 -0
  281. package/dist/core/validators/date/is-far-future.js +46 -0
  282. package/dist/core/validators/date/is-future.d.ts +24 -0
  283. package/dist/core/validators/date/is-future.js +59 -0
  284. package/dist/core/validators/date/is-past.d.ts +24 -0
  285. package/dist/core/validators/date/is-past.js +59 -0
  286. package/dist/core/validators/date/not-after.d.ts +25 -0
  287. package/dist/core/validators/date/not-after.js +66 -0
  288. package/dist/core/validators/date/not-before.d.ts +25 -0
  289. package/dist/core/validators/date/not-before.js +66 -0
  290. package/dist/core/validators/date/same-day.d.ts +25 -0
  291. package/dist/core/validators/date/same-day.js +60 -0
  292. package/dist/core/validators/date/same-month.d.ts +25 -0
  293. package/dist/core/validators/date/same-month.js +59 -0
  294. package/dist/core/validators/date/same-year.d.ts +24 -0
  295. package/dist/core/validators/date/same-year.js +56 -0
  296. package/dist/core/validators/date/too-early.d.ts +25 -0
  297. package/dist/core/validators/date/too-early.js +57 -0
  298. package/dist/core/validators/date/too-late.d.ts +25 -0
  299. package/dist/core/validators/date/too-late.js +57 -0
  300. package/dist/core/validators/date/weekday.d.ts +32 -0
  301. package/dist/core/validators/date/weekday.js +65 -0
  302. package/dist/core/validators/date/weekend.d.ts +27 -0
  303. package/dist/core/validators/date/weekend.js +56 -0
  304. package/dist/core/validators/index.d.ts +112 -0
  305. package/dist/core/validators/index.js +139 -0
  306. package/dist/core/validators/nullish/is-null-or-undefined.d.ts +22 -0
  307. package/dist/core/validators/nullish/is-null-or-undefined.js +40 -0
  308. package/dist/core/validators/nullish/is-null.d.ts +21 -0
  309. package/dist/core/validators/nullish/is-null.js +39 -0
  310. package/dist/core/validators/nullish/is-undefined.d.ts +21 -0
  311. package/dist/core/validators/nullish/is-undefined.js +39 -0
  312. package/dist/core/validators/number/finite.d.ts +22 -0
  313. package/dist/core/validators/number/finite.js +40 -0
  314. package/dist/core/validators/number/integer.d.ts +22 -0
  315. package/dist/core/validators/number/integer.js +40 -0
  316. package/dist/core/validators/number/less-than.d.ts +21 -0
  317. package/dist/core/validators/number/less-than.js +39 -0
  318. package/dist/core/validators/number/max.d.ts +21 -0
  319. package/dist/core/validators/number/max.js +39 -0
  320. package/dist/core/validators/number/min.d.ts +21 -0
  321. package/dist/core/validators/number/min.js +39 -0
  322. package/dist/core/validators/number/more-than.d.ts +21 -0
  323. package/dist/core/validators/number/more-than.js +39 -0
  324. package/dist/core/validators/number/negative.d.ts +20 -0
  325. package/dist/core/validators/number/negative.js +38 -0
  326. package/dist/core/validators/number/non-negative.d.ts +19 -0
  327. package/dist/core/validators/number/non-negative.js +37 -0
  328. package/dist/core/validators/number/non-positive.d.ts +19 -0
  329. package/dist/core/validators/number/non-positive.js +37 -0
  330. package/dist/core/validators/number/number.d.ts +19 -0
  331. package/dist/core/validators/number/number.js +31 -0
  332. package/dist/core/validators/number/positive.d.ts +20 -0
  333. package/dist/core/validators/number/positive.js +38 -0
  334. package/dist/core/validators/number/safe-integer.d.ts +19 -0
  335. package/dist/core/validators/number/safe-integer.js +42 -0
  336. package/dist/core/validators/object/deep-equals.d.ts +24 -0
  337. package/dist/core/validators/object/deep-equals.js +47 -0
  338. package/dist/core/validators/object/has-key.d.ts +23 -0
  339. package/dist/core/validators/object/has-key.js +42 -0
  340. package/dist/core/validators/object/has-value.d.ts +27 -0
  341. package/dist/core/validators/object/has-value.js +59 -0
  342. package/dist/core/validators/object/keys-equal.d.ts +26 -0
  343. package/dist/core/validators/object/keys-equal.js +47 -0
  344. package/dist/core/validators/object/max-keys.d.ts +24 -0
  345. package/dist/core/validators/object/max-keys.js +43 -0
  346. package/dist/core/validators/object/min-keys.d.ts +24 -0
  347. package/dist/core/validators/object/min-keys.js +43 -0
  348. package/dist/core/validators/object/missing-key.d.ts +23 -0
  349. package/dist/core/validators/object/missing-key.js +42 -0
  350. package/dist/core/validators/object/no-empty-array-values.d.ts +23 -0
  351. package/dist/core/validators/object/no-empty-array-values.js +44 -0
  352. package/dist/core/validators/object/no-empty-object-values.d.ts +23 -0
  353. package/dist/core/validators/object/no-empty-object-values.js +44 -0
  354. package/dist/core/validators/object/no-null-values.d.ts +23 -0
  355. package/dist/core/validators/object/no-null-values.js +44 -0
  356. package/dist/core/validators/object/no-undefined-values.d.ts +23 -0
  357. package/dist/core/validators/object/no-undefined-values.js +44 -0
  358. package/dist/core/validators/object/non-empty-object.d.ts +21 -0
  359. package/dist/core/validators/object/non-empty-object.js +40 -0
  360. package/dist/core/validators/object/only-keys.d.ts +23 -0
  361. package/dist/core/validators/object/only-keys.js +43 -0
  362. package/dist/core/validators/object/plain-object.d.ts +22 -0
  363. package/dist/core/validators/object/plain-object.js +35 -0
  364. package/dist/core/validators/string/alpha-num.d.ts +23 -0
  365. package/dist/core/validators/string/alpha-num.js +50 -0
  366. package/dist/core/validators/string/alpha.d.ts +24 -0
  367. package/dist/core/validators/string/alpha.js +51 -0
  368. package/dist/core/validators/string/chars-equal.d.ts +23 -0
  369. package/dist/core/validators/string/chars-equal.js +49 -0
  370. package/dist/core/validators/string/ends-with.d.ts +23 -0
  371. package/dist/core/validators/string/ends-with.js +50 -0
  372. package/dist/core/validators/string/is-ascii.d.ts +24 -0
  373. package/dist/core/validators/string/is-ascii.js +53 -0
  374. package/dist/core/validators/string/is-printable.d.ts +25 -0
  375. package/dist/core/validators/string/is-printable.js +53 -0
  376. package/dist/core/validators/string/matches.d.ts +23 -0
  377. package/dist/core/validators/string/matches.js +50 -0
  378. package/dist/core/validators/string/max-length.d.ts +24 -0
  379. package/dist/core/validators/string/max-length.js +50 -0
  380. package/dist/core/validators/string/min-length.d.ts +24 -0
  381. package/dist/core/validators/string/min-length.js +50 -0
  382. package/dist/core/validators/string/no-lead-space.d.ts +23 -0
  383. package/dist/core/validators/string/no-lead-space.js +50 -0
  384. package/dist/core/validators/string/no-repeat-space.d.ts +25 -0
  385. package/dist/core/validators/string/no-repeat-space.js +52 -0
  386. package/dist/core/validators/string/no-space.d.ts +24 -0
  387. package/dist/core/validators/string/no-space.js +51 -0
  388. package/dist/core/validators/string/no-trail-space.d.ts +23 -0
  389. package/dist/core/validators/string/no-trail-space.js +50 -0
  390. package/dist/core/validators/string/non-empty.d.ts +22 -0
  391. package/dist/core/validators/string/non-empty.js +48 -0
  392. package/dist/core/validators/string/not-one-of.d.ts +24 -0
  393. package/dist/core/validators/string/not-one-of.js +51 -0
  394. package/dist/core/validators/string/num-string.d.ts +23 -0
  395. package/dist/core/validators/string/num-string.js +50 -0
  396. package/dist/core/validators/string/one-of.d.ts +23 -0
  397. package/dist/core/validators/string/one-of.js +50 -0
  398. package/dist/core/validators/string/starts-with.d.ts +23 -0
  399. package/dist/core/validators/string/starts-with.js +50 -0
  400. package/dist/core/validators/string/string.d.ts +21 -0
  401. package/dist/core/validators/string/string.js +39 -0
  402. package/dist/core/validators/string/trimmed.d.ts +24 -0
  403. package/dist/core/validators/string/trimmed.js +51 -0
  404. package/dist/index.d.ts +83 -0
  405. package/dist/index.js +26 -0
  406. package/dist/test.d.ts +1 -0
  407. package/dist/test.js +12 -0
  408. package/package.json +2 -2
@@ -0,0 +1,87 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Minimum (Bigint Min)
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that is
7
+ * greater than or equal to the provided `min` value.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { validationEvent } from '../../pipeline';
12
+ import { safeStringify } from '../../common';
13
+ import { detectStructuralType } from '../../pipeline/scan';
14
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
15
+ |* Implementation *|
16
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
17
+ /**
18
+ * Ensures the input is a string representing a BigInt that is
19
+ * greater than or equal to the provided `min` value.
20
+ *
21
+ * This validator follows Jane’s standard BigInt conventions:
22
+ * - The input must be a string. Non‑string values emit `bigint.not.string`.
23
+ * - Empty strings and non‑parseable strings emit `bigint.not.bigint`.
24
+ * - Parsed BigInt values smaller than `min` emit `bigint.too.small`.
25
+ *
26
+ * The rule is pure, total, async‑compatible, and preserves the
27
+ * provided path. It also supports userMessage overrides applied
28
+ * at the pipeline level.
29
+ */
30
+ export const bigintMin = (min) => {
31
+ // The returned function is the actual validator. We attach a
32
+ // factory marker below so Jane preserves the closure and does
33
+ // not attempt to serialize the `min` bigint.
34
+ const rule = async (value, path) => {
35
+ const structuralType = detectStructuralType(value);
36
+ // ------------------------------------------------------------
37
+ // Type check — the input must be a string.
38
+ // ------------------------------------------------------------
39
+ if (typeof value !== 'string') {
40
+ return [
41
+ validationEvent('error', 'bigint.not.string', path, `Expected 'string' but received '${structuralType}'.`, `Please provide a valid bigint string.`, { value, expected: 'string', actual: structuralType }),
42
+ ];
43
+ }
44
+ // ------------------------------------------------------------
45
+ // Empty-string check — BigInt("") parses as 0n, which is
46
+ // rarely what users intend. We treat empty strings as invalid.
47
+ // ------------------------------------------------------------
48
+ if (value.length === 0) {
49
+ return [
50
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
51
+ ];
52
+ }
53
+ // ------------------------------------------------------------
54
+ // Parse check — attempt to convert the string into a BigInt.
55
+ // Any failure (invalid characters, formatting, etc.) results
56
+ // in a `bigint.not.bigint` event.
57
+ // ------------------------------------------------------------
58
+ let parsed;
59
+ try {
60
+ parsed = BigInt(value);
61
+ }
62
+ catch {
63
+ return [
64
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
65
+ ];
66
+ }
67
+ // ------------------------------------------------------------
68
+ // Minimum check — ensure the parsed value is ≥ the provided `min`.
69
+ // ------------------------------------------------------------
70
+ if (parsed < min) {
71
+ return [
72
+ validationEvent('error', 'bigint.too.small', path, `${safeStringify(value)} must be ≥ ${min}.`, `Please provide a bigint at least ${min}.`, { value, expected: `≥ ${min}`, actual: parsed }),
73
+ ];
74
+ }
75
+ // ------------------------------------------------------------
76
+ // Valid — return an empty array to indicate success.
77
+ // ------------------------------------------------------------
78
+ return [];
79
+ };
80
+ // ------------------------------------------------------------
81
+ // Factory marker — prevents Jane from serializing the rule and
82
+ // losing the `min` bigint. This ensures the closure is preserved.
83
+ // ------------------------------------------------------------
84
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
+ rule.__janeFactory = true;
86
+ return rule;
87
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Negative
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a negative
7
+ * BigInt value.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Ensures the input is a string representing a negative BigInt value.
14
+ *
15
+ * This validator follows Jane’s standard BigInt conventions:
16
+ * - The input must be a string. Non‑string values emit `bigint.not.string`.
17
+ * - Empty strings and non‑parseable strings emit `bigint.not.bigint`.
18
+ * - Parsed BigInt values greater than or equal to 0 emit `bigint.not.negative`.
19
+ *
20
+ * The rule is pure, total, async‑compatible, and preserves the provided path.
21
+ * It also supports userMessage overrides applied at the pipeline level.
22
+ */
23
+ export declare const bigintNegative: ValidationRule;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Negative
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a negative
7
+ * BigInt value.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { validationEvent } from '../../pipeline';
12
+ import { safeStringify } from '../../common';
13
+ import { detectStructuralType } from '../../pipeline/scan';
14
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
15
+ |* Implementation *|
16
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
17
+ /**
18
+ * Ensures the input is a string representing a negative BigInt value.
19
+ *
20
+ * This validator follows Jane’s standard BigInt conventions:
21
+ * - The input must be a string. Non‑string values emit `bigint.not.string`.
22
+ * - Empty strings and non‑parseable strings emit `bigint.not.bigint`.
23
+ * - Parsed BigInt values greater than or equal to 0 emit `bigint.not.negative`.
24
+ *
25
+ * The rule is pure, total, async‑compatible, and preserves the provided path.
26
+ * It also supports userMessage overrides applied at the pipeline level.
27
+ */
28
+ export const bigintNegative = async (value, path) => {
29
+ const structuralType = detectStructuralType(value);
30
+ // ------------------------------------------------------------
31
+ // Type check — the input must be a string.
32
+ // ------------------------------------------------------------
33
+ if (typeof value !== 'string') {
34
+ return [
35
+ validationEvent('error', 'bigint.not.string', path, `Expected 'string' but received '${structuralType}'.`, `Please provide a valid bigint string.`, { value, expected: 'string', actual: structuralType }),
36
+ ];
37
+ }
38
+ // ------------------------------------------------------------
39
+ // Empty-string check — BigInt("") parses as 0n, which is
40
+ // rarely what users intend. We treat empty strings as invalid.
41
+ // ------------------------------------------------------------
42
+ if (value.length === 0) {
43
+ return [
44
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
45
+ ];
46
+ }
47
+ // ------------------------------------------------------------
48
+ // Parse check — attempt to convert the string into a BigInt.
49
+ // Any failure (invalid characters, formatting, etc.) results
50
+ // in a `bigint.not.bigint` event.
51
+ // ------------------------------------------------------------
52
+ let parsed;
53
+ try {
54
+ parsed = BigInt(value);
55
+ }
56
+ catch {
57
+ return [
58
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
59
+ ];
60
+ }
61
+ // ------------------------------------------------------------
62
+ // Negativity check — ensure the parsed value is strictly < 0.
63
+ // ------------------------------------------------------------
64
+ if (parsed >= 0n) {
65
+ return [
66
+ validationEvent('error', 'bigint.not.negative', path, `${safeStringify(value)} must be < 0.`, `Please provide a negative bigint.`, { value, expected: '< 0', actual: parsed }),
67
+ ];
68
+ }
69
+ // ------------------------------------------------------------
70
+ // Valid — return an empty array to indicate success.
71
+ // ------------------------------------------------------------
72
+ return [];
73
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Non-Negative
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that is
7
+ * greater than or equal to zero.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Ensures the input is a string representing a BigInt that is greater than or
14
+ * equal to zero.
15
+ *
16
+ * - Non-string values emit `bigint.not.string`.
17
+ * - Empty strings and non-parseable strings emit `bigint.not.bigint`.
18
+ * - Parsed BigInt values < 0 emit `bigint.not.non-negative`.
19
+ *
20
+ * This rule is pure, total, async-compatible, and preserves the
21
+ * provided path. It supports userMessage overrides applied at the
22
+ * pipeline level.
23
+ */
24
+ export declare const bigintNonNegative: ValidationRule;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Non-Negative
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that is
7
+ * greater than or equal to zero.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { validationEvent } from '../../pipeline';
12
+ import { detectStructuralType } from '../../pipeline/scan';
13
+ import { safeStringify } from '../../common';
14
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
15
+ |* Implementation *|
16
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
17
+ /**
18
+ * Ensures the input is a string representing a BigInt that is greater than or
19
+ * equal to zero.
20
+ *
21
+ * - Non-string values emit `bigint.not.string`.
22
+ * - Empty strings and non-parseable strings emit `bigint.not.bigint`.
23
+ * - Parsed BigInt values < 0 emit `bigint.not.non-negative`.
24
+ *
25
+ * This rule is pure, total, async-compatible, and preserves the
26
+ * provided path. It supports userMessage overrides applied at the
27
+ * pipeline level.
28
+ */
29
+ export const bigintNonNegative = async (value, path) => {
30
+ const structuralType = detectStructuralType(value);
31
+ // ------------------------------------------------------------
32
+ // Type check — the input must be a string.
33
+ // ------------------------------------------------------------
34
+ if (typeof value !== 'string') {
35
+ return [
36
+ validationEvent('error', 'bigint.not.string', path, `Expected 'string' but received '${structuralType}'.`, `Please provide a valid bigint string.`, { value, expected: 'string', actual: structuralType }),
37
+ ];
38
+ }
39
+ // ------------------------------------------------------------
40
+ // Empty-string check — BigInt("") parses as 0n, which is
41
+ // rarely what users intend. We treat empty strings as invalid.
42
+ // ------------------------------------------------------------
43
+ if (value.length === 0) {
44
+ return [
45
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
46
+ ];
47
+ }
48
+ // ------------------------------------------------------------
49
+ // Parse check — attempt to convert the string into a BigInt.
50
+ // ------------------------------------------------------------
51
+ let parsed;
52
+ try {
53
+ parsed = BigInt(value);
54
+ }
55
+ catch {
56
+ return [
57
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
58
+ ];
59
+ }
60
+ // ------------------------------------------------------------
61
+ // Non-negative check — ensure the parsed value is ≥ 0.
62
+ // ------------------------------------------------------------
63
+ if (parsed < 0n) {
64
+ return [
65
+ validationEvent('error', 'bigint.not.non-negative', path, `${safeStringify(value)} must be ≥ 0.`, `Please provide zero or a positive bigint.`, { value, expected: '≥ 0', actual: parsed }),
66
+ ];
67
+ }
68
+ // ------------------------------------------------------------
69
+ // Valid — return an empty array to indicate success.
70
+ // ------------------------------------------------------------
71
+ return [];
72
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Non-Positive
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that is
7
+ * less than or equal to zero.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Ensures the input is a string representing a BigInt that is less than or
14
+ * equal to zero.
15
+ *
16
+ * - Non-string values emit `bigint.not.string`.
17
+ * - Empty strings and non-parseable strings emit `bigint.not.bigint`.
18
+ * - Parsed BigInt values > 0 emit `bigint.not.non-positive`.
19
+ *
20
+ * This rule is pure, total, async-compatible, and preserves the
21
+ * provided path. It supports userMessage overrides applied at the
22
+ * pipeline level.
23
+ */
24
+ export declare const bigintNonPositive: ValidationRule;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Non-Positive
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that is
7
+ * less than or equal to zero.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { validationEvent } from '../../pipeline';
12
+ import { detectStructuralType } from '../../pipeline/scan';
13
+ import { safeStringify } from '../../common';
14
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
15
+ |* Implementation *|
16
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
17
+ /**
18
+ * Ensures the input is a string representing a BigInt that is less than or
19
+ * equal to zero.
20
+ *
21
+ * - Non-string values emit `bigint.not.string`.
22
+ * - Empty strings and non-parseable strings emit `bigint.not.bigint`.
23
+ * - Parsed BigInt values > 0 emit `bigint.not.non-positive`.
24
+ *
25
+ * This rule is pure, total, async-compatible, and preserves the
26
+ * provided path. It supports userMessage overrides applied at the
27
+ * pipeline level.
28
+ */
29
+ export const bigintNonPositive = async (value, path) => {
30
+ const structuralType = detectStructuralType(value);
31
+ // ------------------------------------------------------------
32
+ // Type check — the input must be a string.
33
+ // ------------------------------------------------------------
34
+ if (typeof value !== 'string') {
35
+ return [
36
+ validationEvent('error', 'bigint.not.string', path, `Expected 'string' but received '${structuralType}'.`, `Please provide a valid bigint string.`, { value, expected: 'string', actual: structuralType }),
37
+ ];
38
+ }
39
+ // ------------------------------------------------------------
40
+ // Empty-string check — BigInt("") parses as 0n, which is
41
+ // rarely what users intend. We treat empty strings as invalid.
42
+ // ------------------------------------------------------------
43
+ if (value.length === 0) {
44
+ return [
45
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
46
+ ];
47
+ }
48
+ // ------------------------------------------------------------
49
+ // Parse check — attempt to convert the string into a BigInt.
50
+ // ------------------------------------------------------------
51
+ let parsed;
52
+ try {
53
+ parsed = BigInt(value);
54
+ }
55
+ catch {
56
+ return [
57
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
58
+ ];
59
+ }
60
+ // ------------------------------------------------------------
61
+ // Non-positive check — ensure the parsed value is ≤ 0.
62
+ // ------------------------------------------------------------
63
+ if (parsed > 0n) {
64
+ return [
65
+ validationEvent('error', 'bigint.not.non-positive', path, `${safeStringify(value)} must be ≤ 0.`, `Please provide zero or a negative bigint.`, { value, expected: '≤ 0', actual: parsed }),
66
+ ];
67
+ }
68
+ // ------------------------------------------------------------
69
+ // Valid — return an empty array to indicate success.
70
+ // ------------------------------------------------------------
71
+ return [];
72
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Positive
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that is
7
+ * strictly greater than zero.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Ensures the input is a string representing a BigInt that is strictly greater
14
+ * than zero.
15
+ *
16
+ * - Non-string values emit `bigint.not.string`.
17
+ * - Empty strings and non-parseable strings emit `bigint.not.bigint`.
18
+ * - Parsed BigInt values ≤ 0 emit `bigint.not.positive`.
19
+ *
20
+ * This rule is pure, total, async-compatible, and preserves the
21
+ * provided path. It supports userMessage overrides applied at the
22
+ * pipeline level.
23
+ */
24
+ export declare const bigintPositive: ValidationRule;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Positive
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that is
7
+ * strictly greater than zero.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { validationEvent } from '../../pipeline';
12
+ import { detectStructuralType } from '../../pipeline/scan';
13
+ import { safeStringify } from '../../common';
14
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
15
+ |* Implementation *|
16
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
17
+ /**
18
+ * Ensures the input is a string representing a BigInt that is strictly greater
19
+ * than zero.
20
+ *
21
+ * - Non-string values emit `bigint.not.string`.
22
+ * - Empty strings and non-parseable strings emit `bigint.not.bigint`.
23
+ * - Parsed BigInt values ≤ 0 emit `bigint.not.positive`.
24
+ *
25
+ * This rule is pure, total, async-compatible, and preserves the
26
+ * provided path. It supports userMessage overrides applied at the
27
+ * pipeline level.
28
+ */
29
+ export const bigintPositive = async (value, path) => {
30
+ const structuralType = detectStructuralType(value);
31
+ // ------------------------------------------------------------
32
+ // Type check — the input must be a string.
33
+ // ------------------------------------------------------------
34
+ if (typeof value !== 'string') {
35
+ return [
36
+ validationEvent('error', 'bigint.not.string', path, `Expected 'string' but received '${structuralType}'.`, `Please provide a valid bigint string.`, { value, expected: 'string', actual: structuralType }),
37
+ ];
38
+ }
39
+ // ------------------------------------------------------------
40
+ // Empty-string check — BigInt("") parses as 0n, which is
41
+ // rarely what users intend. We treat empty strings as invalid.
42
+ // ------------------------------------------------------------
43
+ if (value.length === 0) {
44
+ return [
45
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
46
+ ];
47
+ }
48
+ // ------------------------------------------------------------
49
+ // Parse check — attempt to convert the string into a BigInt.
50
+ // ------------------------------------------------------------
51
+ let parsed;
52
+ try {
53
+ parsed = BigInt(value);
54
+ }
55
+ catch {
56
+ return [
57
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
58
+ ];
59
+ }
60
+ // ------------------------------------------------------------
61
+ // Positivity check — ensure the parsed value is strictly > 0.
62
+ // ------------------------------------------------------------
63
+ if (parsed <= 0n) {
64
+ return [
65
+ validationEvent('error', 'bigint.not.positive', path, `${safeStringify(value)} must be > 0.`, `Please provide a positive bigint.`, { value, expected: '> 0', actual: parsed }),
66
+ ];
67
+ }
68
+ // ------------------------------------------------------------
69
+ // Valid — return an empty array to indicate success.
70
+ // ------------------------------------------------------------
71
+ return [];
72
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Safe
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that
7
+ * falls within JavaScript’s safe integer range.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Ensures the input is a string representing a BigInt that falls
14
+ * within JavaScript’s safe integer range (Number.MIN_SAFE_INTEGER
15
+ * through Number.MAX_SAFE_INTEGER).
16
+ *
17
+ * - Non-string values emit `bigint.not.string`.
18
+ * - Empty strings and non-parseable strings emit `bigint.not.bigint`.
19
+ * - Parsed BigInt values outside the safe range emit `bigint.not.safe`.
20
+ *
21
+ * This rule is pure, total, async-compatible, and preserves the
22
+ * provided path. It supports userMessage overrides applied at the
23
+ * pipeline level.
24
+ */
25
+ export declare const bigintSafe: ValidationRule;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint Safe
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a string representing a BigInt that
7
+ * falls within JavaScript’s safe integer range.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { validationEvent } from '../../pipeline';
12
+ import { safeStringify } from '../../common';
13
+ import { detectStructuralType } from '../../pipeline/scan';
14
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
15
+ |* Implementation *|
16
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
17
+ /**
18
+ * Ensures the input is a string representing a BigInt that falls
19
+ * within JavaScript’s safe integer range (Number.MIN_SAFE_INTEGER
20
+ * through Number.MAX_SAFE_INTEGER).
21
+ *
22
+ * - Non-string values emit `bigint.not.string`.
23
+ * - Empty strings and non-parseable strings emit `bigint.not.bigint`.
24
+ * - Parsed BigInt values outside the safe range emit `bigint.not.safe`.
25
+ *
26
+ * This rule is pure, total, async-compatible, and preserves the
27
+ * provided path. It supports userMessage overrides applied at the
28
+ * pipeline level.
29
+ */
30
+ export const bigintSafe = async (value, path) => {
31
+ const structuralType = detectStructuralType(value);
32
+ // ------------------------------------------------------------
33
+ // Type check — the input must be a string.
34
+ // ------------------------------------------------------------
35
+ if (typeof value !== 'string') {
36
+ return [
37
+ validationEvent('error', 'bigint.not.string', path, `Expected 'string' but received '${structuralType}'.`, `Please provide a valid bigint string.`, { value, expected: 'string', actual: structuralType }),
38
+ ];
39
+ }
40
+ // ------------------------------------------------------------
41
+ // Empty-string check — BigInt("") parses as 0n, which is
42
+ // rarely what users intend. We treat empty strings as invalid.
43
+ // ------------------------------------------------------------
44
+ if (value.length === 0) {
45
+ return [
46
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
47
+ ];
48
+ }
49
+ // ------------------------------------------------------------
50
+ // Parse check — attempt to convert the string into a BigInt.
51
+ // ------------------------------------------------------------
52
+ let parsed;
53
+ try {
54
+ parsed = BigInt(value);
55
+ }
56
+ catch {
57
+ return [
58
+ validationEvent('error', 'bigint.not.bigint', path, `${safeStringify(value)} is not a valid bigint literal.`, `Please provide a valid bigint string.`, { value, expected: 'bigint literal', actual: value }),
59
+ ];
60
+ }
61
+ // ------------------------------------------------------------
62
+ // Safe-range check — ensure MIN_SAFE ≤ parsed ≤ MAX_SAFE.
63
+ // ------------------------------------------------------------
64
+ const maxSafe = BigInt(Number.MAX_SAFE_INTEGER);
65
+ const minSafe = BigInt(Number.MIN_SAFE_INTEGER);
66
+ if (parsed > maxSafe || parsed < minSafe) {
67
+ return [
68
+ validationEvent('error', 'bigint.not.safe', path, `${safeStringify(value)} exceeds JavaScript’s safe integer range.`, `Please provide a bigint within safe bounds.`, { value, expected: `${minSafe}–${maxSafe}`, actual: parsed }),
69
+ ];
70
+ }
71
+ // ------------------------------------------------------------
72
+ // Valid — return an empty array to indicate success.
73
+ // ------------------------------------------------------------
74
+ return [];
75
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a native JavaScript BigInt value.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import type { ValidationRule } from '../../shapes';
11
+ /**
12
+ * Ensures the input is a native JavaScript BigInt value.
13
+ *
14
+ * - Non-bigint values emit `bigint.not.bigint`.
15
+ *
16
+ * This rule is pure, total, async-compatible, and preserves the
17
+ * provided path. It supports userMessage overrides applied at the
18
+ * pipeline level.
19
+ */
20
+ export declare const bigint: ValidationRule;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Bigint
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Ensures the input is a native JavaScript BigInt value.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import { validationEvent } from '../../pipeline';
11
+ import { detectStructuralType } from '../../pipeline/scan';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Ensures the input is a native JavaScript BigInt value.
17
+ *
18
+ * - Non-bigint values emit `bigint.not.bigint`.
19
+ *
20
+ * This rule is pure, total, async-compatible, and preserves the
21
+ * provided path. It supports userMessage overrides applied at the
22
+ * pipeline level.
23
+ */
24
+ export const bigint = (value, path) => {
25
+ const structuralType = detectStructuralType(value);
26
+ // ------------------------------------------------------------
27
+ // Type check — the input must be a native BigInt.
28
+ // ------------------------------------------------------------
29
+ if (typeof value !== 'string') {
30
+ return [
31
+ validationEvent('error', 'bigint.not.string', path, `Expected 'bigint' but received '${structuralType}'.`, `Please provide a valid bigint.`, { value, expected: 'bigint', actual: structuralType }),
32
+ ];
33
+ }
34
+ // ------------------------------------------------------------
35
+ // Valid — return an empty array to indicate success.
36
+ // ------------------------------------------------------------
37
+ return [];
38
+ };