@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,39 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Is Undefined
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validates that the value is exactly `undefined`.
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
+ * Validates that the value is exactly `undefined`.
17
+ *
18
+ * - Any value other than `undefined` emits `value.not.undefined`.
19
+ * - Returns an empty array when the value is valid.
20
+ *
21
+ * This rule is pure, total, async‑compatible, and returns a readonly array of
22
+ * JaneEvent objects. It preserves the provided path and supports userMessage
23
+ * overrides applied at the pipeline level.
24
+ */
25
+ export const isUndefined = async (value, path) => {
26
+ const structuralType = detectStructuralType(value);
27
+ // ------------------------------------------------------------
28
+ // Undefined check
29
+ // ------------------------------------------------------------
30
+ if (value !== undefined) {
31
+ return [
32
+ validationEvent('error', 'value.not.undefined', path, `Value must be undefined.`, `Please provide an undefined value.`, { value, expected: 'undefined', actual: structuralType }),
33
+ ];
34
+ }
35
+ // ------------------------------------------------------------
36
+ // Valid
37
+ // ------------------------------------------------------------
38
+ return [];
39
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Finite
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a finite number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import type { ValidationRule } from '../../shapes';
11
+ /**
12
+ * Validate that the value is a finite number.
13
+ *
14
+ * This rule accepts only JavaScript numbers that are both numeric and finite.
15
+ * Non-number values, NaN, Infinity, and -Infinity are rejected.
16
+ *
17
+ * If the value is not a number, a type.not.valid event is emitted.
18
+ * If the value is a number but not finite, a number.not.finite event is emitted.
19
+ *
20
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
21
+ */
22
+ export declare const finite: ValidationRule;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Finite
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a finite number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import { validationEvent } from '../../pipeline';
11
+ import { detectStructuralType } from '../../pipeline/scan';
12
+ import { safeStringify } from '../../common';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Validate that the value is a finite number.
18
+ *
19
+ * This rule accepts only JavaScript numbers that are both numeric and finite.
20
+ * Non-number values, NaN, Infinity, and -Infinity are rejected.
21
+ *
22
+ * If the value is not a number, a type.not.valid event is emitted.
23
+ * If the value is a number but not finite, a number.not.finite event is emitted.
24
+ *
25
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
26
+ */
27
+ export const finite = async (value, path) => {
28
+ const structuralType = detectStructuralType(value);
29
+ if (typeof value !== 'number') {
30
+ return [
31
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
32
+ ];
33
+ }
34
+ if (!Number.isFinite(value)) {
35
+ return [
36
+ validationEvent('error', 'number.not.finite', path, `${safeStringify(value)} must be a valid, bounded number.`, `Please enter a valid number.`, { expected: 'finite number', actual: value }),
37
+ ];
38
+ }
39
+ return [];
40
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Integer
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is an integer.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import type { ValidationRule } from '../../shapes';
11
+ /**
12
+ * Validate that the value is an integer.
13
+ *
14
+ * This rule accepts only JavaScript numbers that are both numeric and integer‑valued.
15
+ * Non-number values and non-integer numbers are rejected.
16
+ *
17
+ * If the value is not a number, a type.not.valid event is emitted.
18
+ * If the value is a number but not an integer, a number.not.integer event is emitted.
19
+ *
20
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
21
+ */
22
+ export declare const integer: ValidationRule;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Integer
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is an integer.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import { validationEvent } from '../../pipeline';
11
+ import { detectStructuralType } from '../../pipeline/scan';
12
+ import { safeStringify } from '../../common';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Validate that the value is an integer.
18
+ *
19
+ * This rule accepts only JavaScript numbers that are both numeric and integer‑valued.
20
+ * Non-number values and non-integer numbers are rejected.
21
+ *
22
+ * If the value is not a number, a type.not.valid event is emitted.
23
+ * If the value is a number but not an integer, a number.not.integer event is emitted.
24
+ *
25
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
26
+ */
27
+ export const integer = async (value, path) => {
28
+ const structuralType = detectStructuralType(value);
29
+ if (typeof value !== 'number') {
30
+ return [
31
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
32
+ ];
33
+ }
34
+ if (!Number.isInteger(value)) {
35
+ return [
36
+ validationEvent('error', 'number.not.integer', path, `${safeStringify(value)} must be an integer-based number.`, `Please enter a valid number.`, { expected: 'integer', actual: value }),
37
+ ];
38
+ }
39
+ return [];
40
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Less Than
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a number strictly less than the
7
+ * given limit.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Validate that the value is a number strictly less than the given limit.
14
+ *
15
+ * This rule accepts only JavaScript numbers. Non-number values are rejected.
16
+ * If the value is numeric but not less than the provided limit, a
17
+ * number.too.high event is emitted.
18
+ *
19
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
20
+ */
21
+ export declare const lessThan: (limit: number) => ValidationRule;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Less Than
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a number strictly less than the
7
+ * given limit.
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
+ * Validate that the value is a number strictly less than the given limit.
19
+ *
20
+ * This rule accepts only JavaScript numbers. Non-number values are rejected.
21
+ * If the value is numeric but not less than the provided limit, a
22
+ * number.too.high event is emitted.
23
+ *
24
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
25
+ */
26
+ export const lessThan = (limit) => async (value, path) => {
27
+ const structuralType = detectStructuralType(value);
28
+ if (typeof value !== 'number') {
29
+ return [
30
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
31
+ ];
32
+ }
33
+ if (!(value < limit)) {
34
+ return [
35
+ validationEvent('error', 'number.too.high', path, `${safeStringify(value)} must be < ${limit}.`, `Please enter a number less than ${limit}.`, { expected: `< ${limit}`, actual: value }),
36
+ ];
37
+ }
38
+ return [];
39
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Maximum (Max)
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a number less than or equal to
7
+ * the given limit.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Validate that the value is a number less than or equal to the given limit.
14
+ *
15
+ * This rule accepts only JavaScript numbers. Non-number values are rejected.
16
+ * If the value is numeric but greater than the provided limit, a
17
+ * number.too.high event is emitted.
18
+ *
19
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
20
+ */
21
+ export declare const max: (limit: number) => ValidationRule;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Maximum (Max)
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a number less than or equal to
7
+ * the given limit.
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
+ * Validate that the value is a number less than or equal to the given limit.
19
+ *
20
+ * This rule accepts only JavaScript numbers. Non-number values are rejected.
21
+ * If the value is numeric but greater than the provided limit, a
22
+ * number.too.high event is emitted.
23
+ *
24
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
25
+ */
26
+ export const max = (limit) => async (value, path) => {
27
+ const structuralType = detectStructuralType(value);
28
+ if (typeof value !== 'number' || Number.isNaN(value)) {
29
+ return [
30
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
31
+ ];
32
+ }
33
+ if (value > limit) {
34
+ return [
35
+ validationEvent('error', 'number.too.high', path, `${safeStringify(value)} must be ≤ ${limit}.`, `Please enter a number no greater than ${limit}.`, { expected: `≤ ${limit}`, actual: value }),
36
+ ];
37
+ }
38
+ return [];
39
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Minimum (Min)
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a number greater than or equal
7
+ * to the given limit.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Validate that the value is a number greater than or equal to the given limit.
14
+ *
15
+ * This rule accepts only JavaScript numbers. Non-number values are rejected.
16
+ * If the value is numeric but less than the provided limit, a
17
+ * number.too.low event is emitted.
18
+ *
19
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
20
+ */
21
+ export declare const min: (limit: number) => ValidationRule;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Minimum (Min)
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a number greater than or equal
7
+ * to the given limit.
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
+ * Validate that the value is a number greater than or equal to the given limit.
19
+ *
20
+ * This rule accepts only JavaScript numbers. Non-number values are rejected.
21
+ * If the value is numeric but less than the provided limit, a
22
+ * number.too.low event is emitted.
23
+ *
24
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
25
+ */
26
+ export const min = (limit) => async (value, path) => {
27
+ const structuralType = detectStructuralType(value);
28
+ if (typeof value !== 'number' || Number.isNaN(value)) {
29
+ return [
30
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
31
+ ];
32
+ }
33
+ if (value < limit) {
34
+ return [
35
+ validationEvent('error', 'number.too.low', path, `${safeStringify(value)} must be ≥ ${limit}.`, `Please enter a number at least ${limit}.`, { expected: `≥ ${limit}`, actual: value }),
36
+ ];
37
+ }
38
+ return [];
39
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | More Than
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a number strictly greater than
7
+ * the given limit.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ValidationRule } from '../../shapes';
12
+ /**
13
+ * Validate that the value is a number strictly greater than the given limit.
14
+ *
15
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
16
+ * If the value is numeric but not greater than the provided limit, a
17
+ * number.too.low event is emitted.
18
+ *
19
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
20
+ */
21
+ export declare const moreThan: (limit: number) => ValidationRule;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | More Than
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a number strictly greater than
7
+ * the given limit.
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
+ * Validate that the value is a number strictly greater than the given limit.
19
+ *
20
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
21
+ * If the value is numeric but not greater than the provided limit, a
22
+ * number.too.low event is emitted.
23
+ *
24
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
25
+ */
26
+ export const moreThan = (limit) => async (value, path) => {
27
+ const structuralType = detectStructuralType(value);
28
+ if (typeof value !== 'number' || Number.isNaN(value)) {
29
+ return [
30
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
31
+ ];
32
+ }
33
+ if (!(value > limit)) {
34
+ return [
35
+ validationEvent('error', 'number.too.low', path, `${safeStringify(value)} must be > ${limit}.`, `Please enter a number greater than ${limit}.`, { expected: `> ${limit}`, actual: value }),
36
+ ];
37
+ }
38
+ return [];
39
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Negative
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a negative number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import type { ValidationRule } from '../../shapes';
11
+ /**
12
+ * Validate that the value is a negative number.
13
+ *
14
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
15
+ * If the value is numeric but not strictly less than zero, a number.not.negative
16
+ * event is emitted.
17
+ *
18
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
19
+ */
20
+ export declare const negative: ValidationRule;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Negative
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a negative number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import { validationEvent } from '../../pipeline';
11
+ import { detectStructuralType } from '../../pipeline/scan';
12
+ import { safeStringify } from '../../common';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Validate that the value is a negative number.
18
+ *
19
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
20
+ * If the value is numeric but not strictly less than zero, a number.not.negative
21
+ * event is emitted.
22
+ *
23
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
24
+ */
25
+ export const negative = async (value, path) => {
26
+ const structuralType = detectStructuralType(value);
27
+ if (typeof value !== 'number' || Number.isNaN(value)) {
28
+ return [
29
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
30
+ ];
31
+ }
32
+ if (!(value < 0)) {
33
+ return [
34
+ validationEvent('error', 'number.not.negative', path, `${safeStringify(value)} must be < 0.`, `Please enter a negative number.`, { expected: `< 0`, actual: value }),
35
+ ];
36
+ }
37
+ return [];
38
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Non-Negative
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a non‑negative number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import type { ValidationRule } from '../../shapes';
11
+ /**
12
+ * Validate that the value is a non‑negative number.
13
+ *
14
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
15
+ * If the value is numeric but less than zero, a number.not.non-negative event is emitted.
16
+ *
17
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
18
+ */
19
+ export declare const nonNegative: ValidationRule;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Non-Negative
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a non‑negative number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import { validationEvent } from '../../pipeline';
11
+ import { detectStructuralType } from '../../pipeline/scan';
12
+ import { safeStringify } from '../../common';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Validate that the value is a non‑negative number.
18
+ *
19
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
20
+ * If the value is numeric but less than zero, a number.not.non-negative event is emitted.
21
+ *
22
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
23
+ */
24
+ export const nonNegative = async (value, path) => {
25
+ const structuralType = detectStructuralType(value);
26
+ if (typeof value !== 'number' || Number.isNaN(value)) {
27
+ return [
28
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
29
+ ];
30
+ }
31
+ if (value < 0) {
32
+ return [
33
+ validationEvent('error', 'number.not.non-negative', path, `${safeStringify(value)} must be ≥ 0.`, `Please enter zero or a positive number.`, { expected: `≥ 0`, actual: value }),
34
+ ];
35
+ }
36
+ return [];
37
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Non Positive
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a non‑positive number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import type { ValidationRule } from '../../shapes';
11
+ /**
12
+ * Validate that the value is a non‑positive number.
13
+ *
14
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
15
+ * If the value is numeric but greater than zero, a number.not.non-positive event is emitted.
16
+ *
17
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
18
+ */
19
+ export declare const nonPositive: ValidationRule;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Non Positive
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a non‑positive number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import { validationEvent } from '../../pipeline';
11
+ import { detectStructuralType } from '../../pipeline/scan';
12
+ import { safeStringify } from '../../common';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Validate that the value is a non‑positive number.
18
+ *
19
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
20
+ * If the value is numeric but greater than zero, a number.not.non-positive event is emitted.
21
+ *
22
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
23
+ */
24
+ export const nonPositive = async (value, path) => {
25
+ const structuralType = detectStructuralType(value);
26
+ if (typeof value !== 'number' || Number.isNaN(value)) {
27
+ return [
28
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
29
+ ];
30
+ }
31
+ if (value > 0) {
32
+ return [
33
+ validationEvent('error', 'number.not.non-positive', path, `${safeStringify(value)} must be ≤ 0.`, `Please enter zero or a negative number.`, { expected: `≤ 0`, actual: value }),
34
+ ];
35
+ }
36
+ return [];
37
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Number
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a JavaScript number.
7
+ * @see https://jane-io.com
8
+ * ----------------------------------------------------------------------------
9
+ */
10
+ import type { ValidationRule } from '../../shapes';
11
+ /**
12
+ * Validate that the value is a JavaScript number.
13
+ *
14
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
15
+ * If the value is not a number, a type.not.valid event is emitted.
16
+ *
17
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
18
+ */
19
+ export declare const number: ValidationRule;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Validators | Number
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Validate that the value is a JavaScript number.
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
+ * Validate that the value is a JavaScript number.
17
+ *
18
+ * This rule accepts only JavaScript numbers. Non-number values and NaN are rejected.
19
+ * If the value is not a number, a type.not.valid event is emitted.
20
+ *
21
+ * The rule is async-compatible and returns a readonly array of JaneEvent objects.
22
+ */
23
+ export const number = async (value, path) => {
24
+ const structuralType = detectStructuralType(value);
25
+ if (typeof value !== 'number' || Number.isNaN(value)) {
26
+ return [
27
+ validationEvent('error', 'type.not.valid', path, `Expected 'number' but received '${structuralType}'.`, `Please enter a valid number.`, { expected: 'number', actual: structuralType }),
28
+ ];
29
+ }
30
+ return [];
31
+ };