@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,58 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Barrel File
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Re‑exports all scanner modules, providing a single,
7
+ * consolidated entry point for the scanning subsystem.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
12
+ |* All Values *|
13
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
14
+ export { scanForSentinels } from './any/scan-for-sentinels';
15
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
16
+ |* Array Values *|
17
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
18
+ export { arrayIsDeep } from './array/array-is-deep';
19
+ export { arrayIsHeterogeneous } from './array/array-is-heterogenous';
20
+ export { arrayIsLarge } from './array/array-is-large';
21
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
22
+ |* Bigint Values *|
23
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
24
+ export { bigintIsLarge } from './bigint/bigint-is-large';
25
+ export { bigintNotSafe } from './bigint/bigint-not-safe';
26
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
27
+ |* Date Values *|
28
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
29
+ export { dateIsBeforeEpoch } from './date/date-is-before-epoch';
30
+ export { dateIsFarFuture } from './date/date-is-far-future';
31
+ export { dateIsInvalid } from './date/date-is-invalid';
32
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
33
+ |* Number Values *|
34
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
35
+ export { numberIsInfinite } from './number/number-is-infinite';
36
+ export { numberIsNaN } from './number/number-is-nan';
37
+ export { numberIsTooLarge } from './number/number-is-too-large';
38
+ export { numberIsUnsafeInteger } from './number/number-is-unsafe-integer';
39
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
40
+ |* Object Values *|
41
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
42
+ export { objectHasCircularReferences } from './object/object-has-circular-references';
43
+ export { objectHasManyKeys } from './object/object-has-many-keys';
44
+ export { objectIsDeep } from './object/object-is-deep';
45
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
46
+ |* String Values *|
47
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
48
+ export { stringHasUnsafeUnicode } from './string/string-has-unsafe-unicode';
49
+ export { stringHasWhitespaceEdges } from './string/string-has-whitespace-edges';
50
+ export { stringIsLong } from './string/string-is-long';
51
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
52
+ |* Unknown Values *|
53
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
54
+ export { unknownNotScannable } from './unknown/unknown-not-scannable';
55
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
56
+ |* Registry *|
57
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
58
+ export { scanRuleRegistry } from './scanner-registry';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Number Is Infinite
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Flags numeric values that resolve to Infinity, surfacing
7
+ * calculation errors or malformed inputs before they propagate.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ScanRule } from '../../shapes';
12
+ /**
13
+ * Flags numeric values that are infinite rather than finite.
14
+ *
15
+ * Infinite values often indicate upstream calculation errors, division
16
+ * anomalies, or malformed input. This rule surfaces them early so downstream
17
+ * logic never assumes a safe, bounded number.
18
+ */
19
+ export declare const numberIsInfinite: ScanRule;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Number Is Infinite
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Flags numeric values that resolve to Infinity, surfacing
7
+ * calculation errors or malformed inputs before they propagate.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { scanEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Flags numeric values that are infinite rather than finite.
17
+ *
18
+ * Infinite values often indicate upstream calculation errors, division
19
+ * anomalies, or malformed input. This rule surfaces them early so downstream
20
+ * logic never assumes a safe, bounded number.
21
+ */
22
+ export const numberIsInfinite = (raw, path) => {
23
+ if (typeof raw !== 'number')
24
+ return [];
25
+ if (!Number.isFinite(raw)) {
26
+ return [
27
+ scanEvent('warn', 'number.not.finite', path, 'Value is infinite, which is not a safe numeric value.', 'This number is infinite.', { value: raw }),
28
+ ];
29
+ }
30
+ return [];
31
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Number Is NaN
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Detects numeric values that evaluate to NaN, ensuring failed
7
+ * arithmetic or parsing does not silently pass through scanning.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ScanRule } from '../../shapes';
12
+ /**
13
+ * Detects numeric values that resolve to NaN.
14
+ *
15
+ * NaN commonly arises from failed arithmetic, invalid parsing, or unexpected
16
+ * coercions. This rule ensures such values are treated as structurally unsafe
17
+ * rather than silently propagating through the scan pipeline.
18
+ */
19
+ export declare const numberIsNaN: ScanRule;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Number Is NaN
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Detects numeric values that evaluate to NaN, ensuring failed
7
+ * arithmetic or parsing does not silently pass through scanning.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { scanEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Detects numeric values that resolve to NaN.
17
+ *
18
+ * NaN commonly arises from failed arithmetic, invalid parsing, or unexpected
19
+ * coercions. This rule ensures such values are treated as structurally unsafe
20
+ * rather than silently propagating through the scan pipeline.
21
+ */
22
+ export const numberIsNaN = (raw, path) => {
23
+ if (typeof raw !== 'number')
24
+ return [];
25
+ if (Number.isNaN(raw)) {
26
+ return [
27
+ scanEvent('warn', 'number.not.number', path, 'Value is NaN, which is not a safe numeric value.', 'This number is not valid.', { value: raw }),
28
+ ];
29
+ }
30
+ return [];
31
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Number Is Too Large
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Warns when a number exceeds a conservative magnitude limit,
7
+ * highlighting values that may indicate corrupted or adversarial
8
+ * input.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { ScanRule } from '../../shapes';
13
+ /**
14
+ * Warns when a numeric value exceeds a conservative magnitude threshold.
15
+ *
16
+ * Extremely large numbers can signal corrupted data, unrealistic inputs, or
17
+ * adversarial payloads. This rule highlights values that may cause overflow,
18
+ * precision loss, or performance issues in downstream systems.
19
+ */
20
+ export declare const numberIsTooLarge: ScanRule;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Number Is Too Large
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Warns when a number exceeds a conservative magnitude limit,
7
+ * highlighting values that may indicate corrupted or adversarial
8
+ * input.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import { scanEvent } from '../../pipeline';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Warns when a numeric value exceeds a conservative magnitude threshold.
18
+ *
19
+ * Extremely large numbers can signal corrupted data, unrealistic inputs, or
20
+ * adversarial payloads. This rule highlights values that may cause overflow,
21
+ * precision loss, or performance issues in downstream systems.
22
+ */
23
+ export const numberIsTooLarge = (raw, path) => {
24
+ if (typeof raw !== 'number')
25
+ return [];
26
+ const max = 1e15;
27
+ if (Math.abs(raw) > max) {
28
+ return [
29
+ scanEvent('warn', 'number.is.too-large', path, `Number magnitude ${raw} exceeds safe threshold ${max}.`, 'This number is extremely large.', { value: raw, max }),
30
+ ];
31
+ }
32
+ return [];
33
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Number Is Unsafe Integer
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Flags integers outside JavaScript’s safe integer range,
7
+ * preventing precision‑loss issues in comparisons or arithmetic.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ScanRule } from '../../shapes';
12
+ /**
13
+ * Flags integers that fall outside JavaScript’s safe integer range.
14
+ *
15
+ * Values beyond the safe range cannot be represented precisely using standard
16
+ * numeric operations. This rule surfaces whole numbers that may behave
17
+ * unpredictably in comparisons, arithmetic, or serialization.
18
+ */
19
+ export declare const numberIsUnsafeInteger: ScanRule;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Number Is Unsafe Integer
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Flags integers outside JavaScript’s safe integer range,
7
+ * preventing precision‑loss issues in comparisons or arithmetic.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { scanEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Flags integers that fall outside JavaScript’s safe integer range.
17
+ *
18
+ * Values beyond the safe range cannot be represented precisely using standard
19
+ * numeric operations. This rule surfaces whole numbers that may behave
20
+ * unpredictably in comparisons, arithmetic, or serialization.
21
+ */
22
+ export const numberIsUnsafeInteger = (raw, path) => {
23
+ if (typeof raw !== 'number')
24
+ return [];
25
+ if (Number.isInteger(raw) && !Number.isSafeInteger(raw)) {
26
+ return [
27
+ scanEvent('warn', 'number.not.safe-integer', path, `Integer ${raw} exceeds JavaScript's safe integer range.`, 'This whole number is outside the safe range.', { value: raw }),
28
+ ];
29
+ }
30
+ return [];
31
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Object Has Circular References
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Detects self‑referential object graphs that can break
7
+ * serializers, confuse diffing logic, or trigger unbounded
8
+ * recursion during analysis.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { ScanRule } from '../../shapes';
13
+ /**
14
+ * Detects objects that contain circular references.
15
+ *
16
+ * Cyclic structures can break serializers, confuse diffing logic, and cause
17
+ * unbounded recursion during analysis. This rule surfaces self‑referential
18
+ * shapes early so containment and policy layers can respond safely.
19
+ */
20
+ export declare const objectHasCircularReferences: ScanRule;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Object Has Circular References
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Detects self‑referential object graphs that can break
7
+ * serializers, confuse diffing logic, or trigger unbounded
8
+ * recursion during analysis.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import { scanEvent } from '../../pipeline';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Detects objects that contain circular references.
18
+ *
19
+ * Cyclic structures can break serializers, confuse diffing logic, and cause
20
+ * unbounded recursion during analysis. This rule surfaces self‑referential
21
+ * shapes early so containment and policy layers can respond safely.
22
+ */
23
+ export const objectHasCircularReferences = (raw, path) => {
24
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
25
+ return [];
26
+ const seen = new WeakSet();
27
+ const stack = [raw];
28
+ while (stack.length > 0) {
29
+ const current = stack.pop();
30
+ if (seen.has(current)) {
31
+ return [
32
+ scanEvent('warn', 'object.has.circular-references', path, 'Object contains circular references.', 'This object refers to itself.', {}),
33
+ ];
34
+ }
35
+ seen.add(current);
36
+ for (const value of Object.values(current)) {
37
+ if (value && typeof value === 'object') {
38
+ stack.push(value);
39
+ }
40
+ }
41
+ }
42
+ return [];
43
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Object Has Many Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Flags objects whose number of own properties exceeds a safe
7
+ * threshold, surfacing unusually wide or adversarial shapes.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ScanRule } from '../../shapes';
12
+ /**
13
+ * Flags objects whose number of own enumerable keys exceeds a safe limit.
14
+ *
15
+ * Extremely wide objects often indicate malformed payloads, accidental
16
+ * fan‑out, or adversarial input. This rule highlights unusually large
17
+ * property maps before they stress memory or downstream processing.
18
+ */
19
+ export declare const objectHasManyKeys: ScanRule;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Object Has Many Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Flags objects whose number of own properties exceeds a safe
7
+ * threshold, surfacing unusually wide or adversarial shapes.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { scanEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Flags objects whose number of own enumerable keys exceeds a safe limit.
17
+ *
18
+ * Extremely wide objects often indicate malformed payloads, accidental
19
+ * fan‑out, or adversarial input. This rule highlights unusually large
20
+ * property maps before they stress memory or downstream processing.
21
+ */
22
+ export const objectHasManyKeys = (raw, path) => {
23
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
24
+ return [];
25
+ const maxKeys = 500;
26
+ const count = Object.keys(raw).length;
27
+ if (count > maxKeys) {
28
+ return [
29
+ scanEvent('warn', 'object.has.many-keys', path, `Object has ${count} keys, exceeding safe threshold ${maxKeys}.`, 'This object has many properties.', { count, maxKeys }),
30
+ ];
31
+ }
32
+ return [];
33
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Object Is Deep
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Warns when an object’s nesting depth surpasses a conservative
7
+ * structural limit, highlighting shapes that may cause stack
8
+ * pressure or pathological traversal costs.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { ScanRule } from '../../shapes';
13
+ /**
14
+ * Warns when an object’s nesting depth exceeds a conservative structural bound.
15
+ *
16
+ * Deeply nested shapes can cause stack pressure, slow traversal, and
17
+ * pathological input patterns. This rule surfaces excessive depth early so
18
+ * containment can replace or constrain hazardous structures.
19
+ */
20
+ export declare const objectIsDeep: ScanRule;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | Object Is Deep
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Warns when an object’s nesting depth surpasses a conservative
7
+ * structural limit, highlighting shapes that may cause stack
8
+ * pressure or pathological traversal costs.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Internal Modules *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ import { measureDepth } from '../../../core/pipeline';
16
+ import { scanEvent } from '../../pipeline';
17
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
18
+ |* Implementation *|
19
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
20
+ /**
21
+ * Warns when an object’s nesting depth exceeds a conservative structural bound.
22
+ *
23
+ * Deeply nested shapes can cause stack pressure, slow traversal, and
24
+ * pathological input patterns. This rule surfaces excessive depth early so
25
+ * containment can replace or constrain hazardous structures.
26
+ */
27
+ export const objectIsDeep = (raw, path) => {
28
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
29
+ return [];
30
+ const depth = measureDepth(raw);
31
+ const max = 50;
32
+ if (depth > max) {
33
+ return [
34
+ scanEvent('warn', 'object.is.deep', path, `Object depth ${depth} exceeds safe threshold ${max}.`, 'This object is deeply nested.', { depth, max }),
35
+ ];
36
+ }
37
+ return [];
38
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Public | Scanner Registry
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Exposes the full mapping of structural types to their
7
+ * associated scan rules, defining Jane’s public scanning
8
+ * configuration surface.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { ScanRuleSet } from '../shapes';
13
+ /**
14
+ * Central registry mapping structural types to the scan rules that evaluate
15
+ * them. This defines the composition and ordering of Jane’s scanning pipeline,
16
+ * ensuring each detected type is checked against the appropriate structural,
17
+ * safety, and shape‑integrity rules.
18
+ */
19
+ export declare const scanRuleRegistry: ScanRuleSet;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Public | Scanner Registry
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Exposes the full mapping of structural types to their
7
+ * associated scan rules, defining Jane’s public scanning
8
+ * configuration surface.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import { arrayIsDeep, arrayIsHeterogeneous, arrayIsLarge, bigintIsLarge, bigintNotSafe, dateIsBeforeEpoch, dateIsFarFuture, dateIsInvalid, numberIsInfinite, numberIsNaN, numberIsTooLarge, numberIsUnsafeInteger, objectHasCircularReferences, objectHasManyKeys, objectIsDeep, scanForSentinels, stringHasUnsafeUnicode, stringHasWhitespaceEdges, stringIsLong, unknownNotScannable, } from '.';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Scan Rule Registry *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Central registry mapping structural types to the scan rules that evaluate
18
+ * them. This defines the composition and ordering of Jane’s scanning pipeline,
19
+ * ensuring each detected type is checked against the appropriate structural,
20
+ * safety, and shape‑integrity rules.
21
+ */
22
+ export const scanRuleRegistry = {
23
+ all: [scanForSentinels],
24
+ string: [stringIsLong, stringHasUnsafeUnicode, stringHasWhitespaceEdges],
25
+ number: [numberIsInfinite, numberIsNaN, numberIsTooLarge, numberIsUnsafeInteger],
26
+ boolean: [],
27
+ array: [arrayIsLarge, arrayIsDeep, arrayIsHeterogeneous],
28
+ object: [objectIsDeep, objectHasCircularReferences, objectHasManyKeys],
29
+ date: [dateIsInvalid, dateIsBeforeEpoch, dateIsFarFuture],
30
+ unknown: [unknownNotScannable],
31
+ /**
32
+ * The following types can only be accepted by explicitly setting the
33
+ * `bigint`, `set`, or `map` property (in `exceptions`) to `true`.
34
+ */
35
+ bigint: [bigintIsLarge, bigintNotSafe],
36
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | String Has Unsafe Unicode
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Detects Unicode bidi control characters that can obscure
7
+ * text rendering or introduce security‑relevant ambiguity.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ScanRule } from '../../shapes';
12
+ /**
13
+ * Detects the presence of Unicode bidi control characters.
14
+ *
15
+ * These invisible characters can alter text rendering, obscure intent, or
16
+ * introduce security risks. This rule surfaces unsafe Unicode so downstream
17
+ * layers never operate on misleading or adversarial text.
18
+ */
19
+ export declare const stringHasUnsafeUnicode: ScanRule;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | String Has Unsafe Unicode
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Detects Unicode bidi control characters that can obscure
7
+ * text rendering or introduce security‑relevant ambiguity.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { scanEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Detects the presence of Unicode bidi control characters.
17
+ *
18
+ * These invisible characters can alter text rendering, obscure intent, or
19
+ * introduce security risks. This rule surfaces unsafe Unicode so downstream
20
+ * layers never operate on misleading or adversarial text.
21
+ */
22
+ export const stringHasUnsafeUnicode = (raw, path) => {
23
+ if (typeof raw !== 'string')
24
+ return [];
25
+ const unsafe = /[\u202A\u202B\u202D\u202E\u202C\u2066\u2067\u2068\u2069]/;
26
+ if (unsafe.test(raw)) {
27
+ return [
28
+ scanEvent('warn', 'string.has.unsafe-unicode', path, 'String contains unsafe Unicode bidi control characters.', 'This text contains unsafe Unicode characters.', {}),
29
+ ];
30
+ }
31
+ return [];
32
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | String Has Whitespace Edges
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Flags strings with leading or trailing whitespace, surfacing
7
+ * subtle formatting or input‑shape inconsistencies early.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ScanRule } from '../../shapes';
12
+ /**
13
+ * Flags strings with leading or trailing whitespace.
14
+ *
15
+ * Edge whitespace often indicates accidental padding, formatting mistakes, or
16
+ * subtle input‑shape inconsistencies. This rule highlights those anomalies
17
+ * before normalization or policy logic is applied.
18
+ */
19
+ export declare const stringHasWhitespaceEdges: ScanRule;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | String Has Whitespace Edges
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Flags strings with leading or trailing whitespace, surfacing
7
+ * subtle formatting or input‑shape inconsistencies early.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { scanEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Flags strings with leading or trailing whitespace.
17
+ *
18
+ * Edge whitespace often indicates accidental padding, formatting mistakes, or
19
+ * subtle input‑shape inconsistencies. This rule highlights those anomalies
20
+ * before normalization or policy logic is applied.
21
+ */
22
+ export const stringHasWhitespaceEdges = (raw, path) => {
23
+ if (typeof raw !== 'string')
24
+ return [];
25
+ if (raw !== raw.trim()) {
26
+ return [
27
+ scanEvent('warn', 'string.has.whitespace-edges', path, 'String has leading or trailing whitespace.', 'This text has extra spaces at the edges.', { raw }),
28
+ ];
29
+ }
30
+ return [];
31
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Scanners | String Is Long
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Warns when text exceeds a conservative length threshold,
7
+ * highlighting oversized or potentially adversarial input.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { ScanRule } from '../../shapes';
12
+ /**
13
+ * Warns when a string exceeds a conservative maximum length.
14
+ *
15
+ * Extremely long text can signal malformed payloads, denial‑of‑service
16
+ * attempts, or unbounded user input. This rule surfaces oversized strings
17
+ * early so containment and validation layers can respond safely.
18
+ */
19
+ export declare const stringIsLong: ScanRule;