@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,46 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Barrel File
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Re‑exports all normalization rules, providing a single,
7
+ * consolidated entry point for the normalization subsystem.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
12
+ |* Array Values *|
13
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
14
+ export { compactSparseArray } from './array/compact-sparse-array';
15
+ export { flattenOneLevel } from './array/flatten-one-level';
16
+ export { removeEmptyStringItems } from './array/remove-empty-string-items';
17
+ export { removeNullItems } from './array/remove-null-items';
18
+ export { removeUndefinedItems } from './array/remove-undefined-items';
19
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
20
+ |* Date Values *|
21
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
22
+ export { invalidDateToUndefined } from './date/invalid-date-to-undefined';
23
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
24
+ |* Number Values *|
25
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
26
+ export { infinityToUndefined } from './number/infinity-to-undefined';
27
+ export { nanToUndefined } from './number/nan-to-undefined';
28
+ export { normalizeNegativeZero } from './number/normalize-negative-zero';
29
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
30
+ |* Object Values *|
31
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
32
+ export { removeEmptyArrayKeys } from './object/remove-empty-array-keys';
33
+ export { removeEmptyObjectKeys } from './object/remove-empty-object-keys';
34
+ export { removeEmptyStringKeys } from './object/remove-empty-string-keys';
35
+ export { removeNullKeys } from './object/remove-null-keys';
36
+ export { removeUndefinedKeys } from './object/remove-undefined-keys';
37
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
38
+ |* String Values *|
39
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
40
+ export { collapseWhitespace } from './string/collapse-whitespace';
41
+ export { emptyToUndefined } from './string/empty-to-undefined';
42
+ export { trim } from './string/trim';
43
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
44
+ |* Registry *|
45
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
46
+ export { normalizationRuleRegistry } from './normalizer-register';
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Public | Normalizer Registry
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Exposes the full mapping of structural types to their
7
+ * associated normalization rules, defining Jane’s public
8
+ * normalization pipeline surface.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { NormalizationRule, StructuralType } from '../shapes';
13
+ /**
14
+ * Maps each structural type to the normalization rules that apply to it,
15
+ * defining the full normalization pipeline Jane runs for incoming values.
16
+ */
17
+ export declare const normalizationRuleRegistry: Record<StructuralType, readonly NormalizationRule[]>;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Public | Normalizer Registry
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Exposes the full mapping of structural types to their
7
+ * associated normalization rules, defining Jane’s public
8
+ * normalization pipeline surface.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import { collapseWhitespace, compactSparseArray, emptyToUndefined, flattenOneLevel, infinityToUndefined, invalidDateToUndefined, nanToUndefined, normalizeNegativeZero, removeEmptyArrayKeys, removeEmptyObjectKeys, removeEmptyStringItems, removeEmptyStringKeys, removeNullItems, removeNullKeys, removeUndefinedItems, removeUndefinedKeys, trim, } from '.';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Normalization Rule Registry *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Maps each structural type to the normalization rules that apply to it,
18
+ * defining the full normalization pipeline Jane runs for incoming values.
19
+ */
20
+ export const normalizationRuleRegistry = {
21
+ string: [trim, collapseWhitespace, emptyToUndefined],
22
+ number: [normalizeNegativeZero, nanToUndefined, infinityToUndefined],
23
+ boolean: [],
24
+ array: [
25
+ compactSparseArray,
26
+ flattenOneLevel,
27
+ removeEmptyStringItems,
28
+ removeNullItems,
29
+ removeUndefinedItems,
30
+ ],
31
+ object: [
32
+ removeUndefinedKeys,
33
+ removeNullKeys,
34
+ removeEmptyStringKeys,
35
+ removeEmptyArrayKeys,
36
+ removeEmptyObjectKeys,
37
+ ],
38
+ date: [invalidDateToUndefined],
39
+ unknown: [],
40
+ bigint: [],
41
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Infinity To Undefined
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Converts `Infinity` and `-Infinity` to `undefined`, removing
7
+ * non‑finite numeric values that cannot be represented or
8
+ * validated safely.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { NormalizationRule } from '../../shapes';
13
+ /**
14
+ * Converts `Infinity` and `-Infinity` to `undefined`, removing non‑finite
15
+ * numeric values that cannot be represented safely across serialization or
16
+ * downstream validation.
17
+ */
18
+ export declare const infinityToUndefined: NormalizationRule<unknown>;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Infinity To Undefined
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Converts `Infinity` and `-Infinity` to `undefined`, removing
7
+ * non‑finite numeric values that cannot be represented or
8
+ * validated safely.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import { normalizationEvent } from '../../pipeline';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Converts `Infinity` and `-Infinity` to `undefined`, removing non‑finite
18
+ * numeric values that cannot be represented safely across serialization or
19
+ * downstream validation.
20
+ */
21
+ export const infinityToUndefined = (value, _mode, path) => {
22
+ if (typeof value !== 'number')
23
+ return [];
24
+ if (value !== Infinity && value !== -Infinity)
25
+ return [];
26
+ const event = normalizationEvent('info', 'number.now.undefined', path, 'Converted Infinity or -Infinity to undefined.', 'Infinite values were removed.', { before: value, after: undefined });
27
+ return [
28
+ {
29
+ path,
30
+ nextValue: undefined,
31
+ lossy: 'lossy',
32
+ events: [event],
33
+ },
34
+ ];
35
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | NaN to Undefined
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Converts `NaN` to `undefined`, eliminating invalid numeric
7
+ * states that cannot be compared, serialized, or reasoned
8
+ * about reliably.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { NormalizationRule } from '../../shapes';
13
+ /**
14
+ * Converts `NaN` to `undefined`, eliminating invalid numeric states that cannot
15
+ * be meaningfully compared, serialized, or validated.
16
+ */
17
+ export declare const nanToUndefined: NormalizationRule<unknown>;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | NaN to Undefined
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Converts `NaN` to `undefined`, eliminating invalid numeric
7
+ * states that cannot be compared, serialized, or reasoned
8
+ * about reliably.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import { normalizationEvent } from '../../pipeline';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Converts `NaN` to `undefined`, eliminating invalid numeric states that cannot
18
+ * be meaningfully compared, serialized, or validated.
19
+ */
20
+ export const nanToUndefined = (value, _mode, path) => {
21
+ if (typeof value !== 'number')
22
+ return [];
23
+ if (!Number.isNaN(value))
24
+ return [];
25
+ const event = normalizationEvent('info', 'number.now.undefined', path, 'Converted NaN to undefined.', 'Invalid numeric values were removed.', { before: value, after: undefined });
26
+ return [
27
+ {
28
+ path,
29
+ nextValue: undefined,
30
+ lossy: 'lossy',
31
+ events: [event],
32
+ },
33
+ ];
34
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Normalize Negative Zero
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Normalizes `-0` to `0`, removing a JavaScript‑specific edge
7
+ * case while preserving the value’s intended semantics.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { NormalizationRule } from '../../shapes';
12
+ /**
13
+ * Normalizes `-0` to `0`, removing a JavaScript‑specific numeric edge case
14
+ * while preserving the value’s intended semantics.
15
+ */
16
+ export declare const normalizeNegativeZero: NormalizationRule<unknown>;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Normalize Negative Zero
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Normalizes `-0` to `0`, removing a JavaScript‑specific edge
7
+ * case while preserving the value’s intended semantics.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { normalizationEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Normalizes `-0` to `0`, removing a JavaScript‑specific numeric edge case
17
+ * while preserving the value’s intended semantics.
18
+ */
19
+ export const normalizeNegativeZero = (value, _mode, path) => {
20
+ if (typeof value !== 'number')
21
+ return [];
22
+ if (!Object.is(value, -0))
23
+ return [];
24
+ const event = normalizationEvent('info', 'number.now.positive-zero', path, 'Normalized -0 to 0.', 'Negative zero was corrected.', { before: value, after: 0 });
25
+ return [
26
+ {
27
+ path,
28
+ nextValue: 0,
29
+ lossy: 'lossless',
30
+ events: [event],
31
+ },
32
+ ];
33
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Empty Array Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are empty arrays, eliminating
7
+ * structurally empty list fields while preserving all
8
+ * non‑empty array data.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { NormalizationRule } from '../../shapes';
13
+ /**
14
+ * Removes keys whose values are empty arrays, eliminating structurally empty
15
+ * list fields while preserving all non‑empty array values.
16
+ */
17
+ export declare const removeEmptyArrayKeys: NormalizationRule<unknown>;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Empty Array Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are empty arrays, eliminating
7
+ * structurally empty list fields while preserving all
8
+ * non‑empty array data.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import { normalizationEvent } from '../../pipeline';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Removes keys whose values are empty arrays, eliminating structurally empty
18
+ * list fields while preserving all non‑empty array values.
19
+ */
20
+ export const removeEmptyArrayKeys = (value, _mode, path) => {
21
+ if (value === null || typeof value !== 'object')
22
+ return [];
23
+ if (Array.isArray(value))
24
+ return [];
25
+ const entries = Object.entries(value).filter(([_, v]) => !Array.isArray(v) || v.length > 0);
26
+ if (entries.length === Object.keys(value).length)
27
+ return [];
28
+ const nextValue = Object.fromEntries(entries);
29
+ const event = normalizationEvent('info', 'object.without.empty-arrays', path, 'Removed keys whose values were empty arrays.', 'Empty lists were removed.', { before: value, after: nextValue });
30
+ return [
31
+ {
32
+ path,
33
+ nextValue,
34
+ lossy: 'lossy',
35
+ events: [event],
36
+ },
37
+ ];
38
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Empty Object Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are empty plain objects, clearing
7
+ * fields that carry no structural or semantic content.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { NormalizationRule } from '../../shapes';
12
+ /**
13
+ * Removes keys whose values are empty plain objects, filtering out fields that
14
+ * carry no structural or semantic content.
15
+ */
16
+ export declare const removeEmptyObjectKeys: NormalizationRule<unknown>;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Empty Object Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are empty plain objects, clearing
7
+ * fields that carry no structural or semantic content.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { normalizationEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Removes keys whose values are empty plain objects, filtering out fields that
17
+ * carry no structural or semantic content.
18
+ */
19
+ export const removeEmptyObjectKeys = (value, _mode, path) => {
20
+ if (value === null || typeof value !== 'object')
21
+ return [];
22
+ if (Array.isArray(value))
23
+ return [];
24
+ const entries = Object.entries(value).filter(([_, v]) => {
25
+ if (v && typeof v === 'object' && !Array.isArray(v)) {
26
+ return Object.keys(v).length > 0;
27
+ }
28
+ return true;
29
+ });
30
+ if (entries.length === Object.keys(value).length)
31
+ return [];
32
+ const nextValue = Object.fromEntries(entries);
33
+ const event = normalizationEvent('info', 'object.without.empty-objects', path, 'Removed keys whose values were empty objects.', 'Empty objects were removed.', { before: value, after: nextValue });
34
+ return [
35
+ {
36
+ path,
37
+ nextValue,
38
+ lossy: 'lossy',
39
+ events: [event],
40
+ },
41
+ ];
42
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Empty String Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are empty strings, eliminating
7
+ * placeholder or accidental text fields.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { NormalizationRule } from '../../shapes';
12
+ /**
13
+ * Removes keys whose values are empty strings, clearing out placeholder or
14
+ * accidental text fields while retaining all meaningful values.
15
+ */
16
+ export declare const removeEmptyStringKeys: NormalizationRule<unknown>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Empty String Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are empty strings, eliminating
7
+ * placeholder or accidental text fields.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { normalizationEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Removes keys whose values are empty strings, clearing out placeholder or
17
+ * accidental text fields while retaining all meaningful values.
18
+ */
19
+ export const removeEmptyStringKeys = (value, _mode, path) => {
20
+ if (value === null || typeof value !== 'object')
21
+ return [];
22
+ if (Array.isArray(value))
23
+ return [];
24
+ const entries = Object.entries(value).filter(([_, v]) => v !== '');
25
+ if (entries.length === Object.keys(value).length)
26
+ return [];
27
+ const nextValue = Object.fromEntries(entries);
28
+ const event = normalizationEvent('info', 'object.without.empty-strings', path, 'Removed keys whose values were empty strings.', 'Empty text values were removed.', { before: value, after: nextValue });
29
+ return [
30
+ {
31
+ path,
32
+ nextValue,
33
+ lossy: 'lossy',
34
+ events: [event],
35
+ },
36
+ ];
37
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Null Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are null, stripping explicitly
7
+ * empty fields while preserving all defined data.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { NormalizationRule } from '../../shapes';
12
+ /**
13
+ * Removes keys whose values are null, eliminating explicitly empty fields while
14
+ * preserving all defined data.
15
+ */
16
+ export declare const removeNullKeys: NormalizationRule<unknown>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Null Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are null, stripping explicitly
7
+ * empty fields while preserving all defined data.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { normalizationEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Removes keys whose values are null, eliminating explicitly empty fields while
17
+ * preserving all defined data.
18
+ */
19
+ export const removeNullKeys = (value, _mode, path) => {
20
+ if (value === null || typeof value !== 'object')
21
+ return [];
22
+ if (Array.isArray(value))
23
+ return [];
24
+ const entries = Object.entries(value).filter(([_, v]) => v !== null);
25
+ if (entries.length === Object.keys(value).length)
26
+ return [];
27
+ const nextValue = Object.fromEntries(entries);
28
+ const event = normalizationEvent('info', 'object.without.null-keys', path, 'Removed keys whose values were null.', 'Null values were removed.', { before: value, after: nextValue });
29
+ return [
30
+ {
31
+ path,
32
+ nextValue,
33
+ lossy: 'lossy',
34
+ events: [event],
35
+ },
36
+ ];
37
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Undefined Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are undefined, producing a cleaner
7
+ * and more predictable object shape.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { NormalizationRule } from '../../shapes';
12
+ /**
13
+ * Removes keys whose values are undefined, producing a cleaner and more
14
+ * predictable object shape by stripping absent fields.
15
+ */
16
+ export declare const removeUndefinedKeys: NormalizationRule<unknown>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Remove Undefined Keys
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Removes keys whose values are undefined, producing a cleaner
7
+ * and more predictable object shape.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import { normalizationEvent } from '../../pipeline';
12
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
13
+ |* Implementation *|
14
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
15
+ /**
16
+ * Removes keys whose values are undefined, producing a cleaner and more
17
+ * predictable object shape by stripping absent fields.
18
+ */
19
+ export const removeUndefinedKeys = (value, _mode, path) => {
20
+ if (value === null || typeof value !== 'object')
21
+ return [];
22
+ if (Array.isArray(value))
23
+ return [];
24
+ const entries = Object.entries(value).filter(([_, v]) => v !== undefined);
25
+ if (entries.length === Object.keys(value).length)
26
+ return [];
27
+ const nextValue = Object.fromEntries(entries);
28
+ const event = normalizationEvent('info', 'object.without.undefined-keys', path, 'Removed keys whose values were undefined.', 'Undefined values were removed.', { before: value, after: nextValue });
29
+ return [
30
+ {
31
+ path,
32
+ nextValue,
33
+ lossy: 'lossy',
34
+ events: [event],
35
+ },
36
+ ];
37
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Collapse Whitespace
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Collapses repeated internal whitespace into a single space,
7
+ * producing cleaner, more consistent text without altering
8
+ * meaning.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import type { NormalizationRule } from '../../shapes';
13
+ /**
14
+ * Collapses repeated internal whitespace into a single space, producing a
15
+ * cleaner and more consistent text structure without altering meaning.
16
+ */
17
+ export declare const collapseWhitespace: NormalizationRule<unknown>;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Collapse Whitespace
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Collapses repeated internal whitespace into a single space,
7
+ * producing cleaner, more consistent text without altering
8
+ * meaning.
9
+ * @see https://jane-io.com
10
+ * ----------------------------------------------------------------------------
11
+ */
12
+ import { normalizationEvent } from '../../pipeline';
13
+ /* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
14
+ |* Implementation *|
15
+ \* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
16
+ /**
17
+ * Collapses repeated internal whitespace into a single space, producing a
18
+ * cleaner and more consistent text structure without altering meaning.
19
+ */
20
+ export const collapseWhitespace = (value, _mode, path) => {
21
+ if (typeof value !== 'string')
22
+ return [];
23
+ const collapsed = value.replace(/\s+/g, ' ');
24
+ if (collapsed === value)
25
+ return [];
26
+ const event = normalizationEvent('info', 'string.now.collapsed', path, 'Collapsed repeated internal whitespace into a single space.', 'Extra spaces inside the text were cleaned up.', { before: value, after: collapsed });
27
+ return [
28
+ {
29
+ path,
30
+ nextValue: collapsed,
31
+ lossy: 'lossy',
32
+ events: [event],
33
+ },
34
+ ];
35
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Normalizers | Empty To Undefined
4
+ * ----------------------------------------------------------------------------
5
+ * @package @clementine-solutions/jane
6
+ * @description Converts empty strings to undefined, removing text fields
7
+ * that contain no meaningful content.
8
+ * @see https://jane-io.com
9
+ * ----------------------------------------------------------------------------
10
+ */
11
+ import type { NormalizationRule } from '../../shapes';
12
+ /**
13
+ * Converts empty strings to undefined, removing text fields that contain no
14
+ * meaningful content.
15
+ */
16
+ export declare const emptyToUndefined: NormalizationRule<unknown>;