@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.
- package/README.md +132 -1
- package/dist/core/analysis/diff.d.ts +35 -0
- package/dist/core/analysis/diff.js +88 -0
- package/dist/core/analysis/explain.d.ts +35 -0
- package/dist/core/analysis/explain.js +117 -0
- package/dist/core/analysis/index.d.ts +14 -0
- package/dist/core/analysis/index.js +26 -0
- package/dist/core/analysis/replay.d.ts +34 -0
- package/dist/core/analysis/replay.js +68 -0
- package/dist/core/analysis/telemetry.d.ts +28 -0
- package/dist/core/analysis/telemetry.js +123 -0
- package/dist/core/boundary-rules/at-most-one.d.ts +17 -0
- package/dist/core/boundary-rules/at-most-one.js +38 -0
- package/dist/core/boundary-rules/conditionally-required.d.ts +18 -0
- package/dist/core/boundary-rules/conditionally-required.js +44 -0
- package/dist/core/boundary-rules/date-range.d.ts +17 -0
- package/dist/core/boundary-rules/date-range.js +39 -0
- package/dist/core/boundary-rules/index.d.ts +18 -0
- package/dist/core/boundary-rules/index.js +21 -0
- package/dist/core/boundary-rules/mutually-exclusive.d.ts +16 -0
- package/dist/core/boundary-rules/mutually-exclusive.js +38 -0
- package/dist/core/boundary-rules/no-unknown-fields.d.ts +17 -0
- package/dist/core/boundary-rules/no-unknown-fields.js +39 -0
- package/dist/core/boundary-rules/require-all.d.ts +16 -0
- package/dist/core/boundary-rules/require-all.js +39 -0
- package/dist/core/boundary-rules/require-one.d.ts +17 -0
- package/dist/core/boundary-rules/require-one.js +41 -0
- package/dist/core/common/events.d.ts +37 -0
- package/dist/core/common/events.js +82 -0
- package/dist/core/common/fluent.d.ts +151 -0
- package/dist/core/common/fluent.js +429 -0
- package/dist/core/common/index.d.ts +16 -0
- package/dist/core/common/index.js +31 -0
- package/dist/core/common/policy.d.ts +170 -0
- package/dist/core/common/policy.js +550 -0
- package/dist/core/common/utilities.d.ts +59 -0
- package/dist/core/common/utilities.js +177 -0
- package/dist/core/common/wildcard.d.ts +27 -0
- package/dist/core/common/wildcard.js +63 -0
- package/dist/core/field-path/construct.d.ts +77 -0
- package/dist/core/field-path/construct.js +189 -0
- package/dist/core/field-path/format.d.ts +41 -0
- package/dist/core/field-path/format.js +154 -0
- package/dist/core/field-path/index.d.ts +14 -0
- package/dist/core/field-path/index.js +26 -0
- package/dist/core/field-path/utilities.d.ts +85 -0
- package/dist/core/field-path/utilities.js +138 -0
- package/dist/core/field-path/walk.d.ts +36 -0
- package/dist/core/field-path/walk.js +80 -0
- package/dist/core/fluent-registry.d.ts +138 -0
- package/dist/core/fluent-registry.js +151 -0
- package/dist/core/normalizers/array/compact-sparse-array.d.ts +22 -0
- package/dist/core/normalizers/array/compact-sparse-array.js +40 -0
- package/dist/core/normalizers/array/flatten-one-level.d.ts +17 -0
- package/dist/core/normalizers/array/flatten-one-level.js +45 -0
- package/dist/core/normalizers/array/remove-empty-string-items.d.ts +6 -0
- package/dist/core/normalizers/array/remove-empty-string-items.js +34 -0
- package/dist/core/normalizers/array/remove-null-items.d.ts +16 -0
- package/dist/core/normalizers/array/remove-null-items.js +34 -0
- package/dist/core/normalizers/array/remove-undefined-items.d.ts +16 -0
- package/dist/core/normalizers/array/remove-undefined-items.js +34 -0
- package/dist/core/normalizers/date/invalid-date-to-undefined.d.ts +17 -0
- package/dist/core/normalizers/date/invalid-date-to-undefined.js +35 -0
- package/dist/core/normalizers/index.d.ts +28 -0
- package/dist/core/normalizers/index.js +46 -0
- package/dist/core/normalizers/normalizer-register.d.ts +17 -0
- package/dist/core/normalizers/normalizer-register.js +41 -0
- package/dist/core/normalizers/number/infinity-to-undefined.d.ts +18 -0
- package/dist/core/normalizers/number/infinity-to-undefined.js +35 -0
- package/dist/core/normalizers/number/nan-to-undefined.d.ts +17 -0
- package/dist/core/normalizers/number/nan-to-undefined.js +34 -0
- package/dist/core/normalizers/number/normalize-negative-zero.d.ts +16 -0
- package/dist/core/normalizers/number/normalize-negative-zero.js +33 -0
- package/dist/core/normalizers/object/remove-empty-array-keys.d.ts +17 -0
- package/dist/core/normalizers/object/remove-empty-array-keys.js +38 -0
- package/dist/core/normalizers/object/remove-empty-object-keys.d.ts +16 -0
- package/dist/core/normalizers/object/remove-empty-object-keys.js +42 -0
- package/dist/core/normalizers/object/remove-empty-string-keys.d.ts +16 -0
- package/dist/core/normalizers/object/remove-empty-string-keys.js +37 -0
- package/dist/core/normalizers/object/remove-null-keys.d.ts +16 -0
- package/dist/core/normalizers/object/remove-null-keys.js +37 -0
- package/dist/core/normalizers/object/remove-undefined-keys.d.ts +16 -0
- package/dist/core/normalizers/object/remove-undefined-keys.js +37 -0
- package/dist/core/normalizers/string/collapse-whitespace.d.ts +17 -0
- package/dist/core/normalizers/string/collapse-whitespace.js +35 -0
- package/dist/core/normalizers/string/empty-to-undefined.d.ts +16 -0
- package/dist/core/normalizers/string/empty-to-undefined.js +33 -0
- package/dist/core/normalizers/string/trim.d.ts +16 -0
- package/dist/core/normalizers/string/trim.js +34 -0
- package/dist/core/parsers/index.d.ts +22 -0
- package/dist/core/parsers/index.js +43 -0
- package/dist/core/parsers/parse-array-string.d.ts +16 -0
- package/dist/core/parsers/parse-array-string.js +36 -0
- package/dist/core/parsers/parse-bigint-string.d.ts +16 -0
- package/dist/core/parsers/parse-bigint-string.js +33 -0
- package/dist/core/parsers/parse-binary-string.d.ts +16 -0
- package/dist/core/parsers/parse-binary-string.js +33 -0
- package/dist/core/parsers/parse-boolean-string.d.ts +16 -0
- package/dist/core/parsers/parse-boolean-string.js +27 -0
- package/dist/core/parsers/parse-date-string.d.ts +16 -0
- package/dist/core/parsers/parse-date-string.js +30 -0
- package/dist/core/parsers/parse-duration-string.d.ts +16 -0
- package/dist/core/parsers/parse-duration-string.js +37 -0
- package/dist/core/parsers/parse-hex-string.d.ts +16 -0
- package/dist/core/parsers/parse-hex-string.js +29 -0
- package/dist/core/parsers/parse-integer-string.d.ts +16 -0
- package/dist/core/parsers/parse-integer-string.js +30 -0
- package/dist/core/parsers/parse-json-string.d.ts +17 -0
- package/dist/core/parsers/parse-json-string.js +35 -0
- package/dist/core/parsers/parse-numeric-string.d.ts +16 -0
- package/dist/core/parsers/parse-numeric-string.js +29 -0
- package/dist/core/parsers/parse-object-string.d.ts +16 -0
- package/dist/core/parsers/parse-object-string.js +36 -0
- package/dist/core/parsers/parse-octal-string.d.ts +16 -0
- package/dist/core/parsers/parse-octal-string.js +33 -0
- package/dist/core/parsers/parse-scientific-notation-string.d.ts +16 -0
- package/dist/core/parsers/parse-scientific-notation-string.js +30 -0
- package/dist/core/parsers/parse-url-string.d.ts +16 -0
- package/dist/core/parsers/parse-url-string.js +36 -0
- package/dist/core/pipeline/boundary.d.ts +36 -0
- package/dist/core/pipeline/boundary.js +256 -0
- package/dist/core/pipeline/contain.d.ts +122 -0
- package/dist/core/pipeline/contain.js +339 -0
- package/dist/core/pipeline/index.d.ts +16 -0
- package/dist/core/pipeline/index.js +37 -0
- package/dist/core/pipeline/normalize.d.ts +34 -0
- package/dist/core/pipeline/normalize.js +76 -0
- package/dist/core/pipeline/parse.d.ts +40 -0
- package/dist/core/pipeline/parse.js +91 -0
- package/dist/core/pipeline/pipeline.d.ts +23 -0
- package/dist/core/pipeline/pipeline.js +418 -0
- package/dist/core/pipeline/scan.d.ts +46 -0
- package/dist/core/pipeline/scan.js +115 -0
- package/dist/core/pipeline/validate.d.ts +40 -0
- package/dist/core/pipeline/validate.js +74 -0
- package/dist/core/scanners/any/scan-for-sentinels.d.ts +19 -0
- package/dist/core/scanners/any/scan-for-sentinels.js +35 -0
- package/dist/core/scanners/array/array-is-deep.d.ts +19 -0
- package/dist/core/scanners/array/array-is-deep.js +38 -0
- package/dist/core/scanners/array/array-is-heterogenous.d.ts +18 -0
- package/dist/core/scanners/array/array-is-heterogenous.js +39 -0
- package/dist/core/scanners/array/array-is-large.d.ts +19 -0
- package/dist/core/scanners/array/array-is-large.js +32 -0
- package/dist/core/scanners/bigint/bigint-is-large.d.ts +20 -0
- package/dist/core/scanners/bigint/bigint-is-large.js +34 -0
- package/dist/core/scanners/bigint/bigint-not-safe.d.ts +20 -0
- package/dist/core/scanners/bigint/bigint-not-safe.js +34 -0
- package/dist/core/scanners/date/date-is-before-epoch.d.ts +19 -0
- package/dist/core/scanners/date/date-is-before-epoch.js +32 -0
- package/dist/core/scanners/date/date-is-far-future.d.ts +19 -0
- package/dist/core/scanners/date/date-is-far-future.js +32 -0
- package/dist/core/scanners/date/date-is-invalid.d.ts +19 -0
- package/dist/core/scanners/date/date-is-invalid.js +31 -0
- package/dist/core/scanners/index.d.ts +31 -0
- package/dist/core/scanners/index.js +58 -0
- package/dist/core/scanners/number/number-is-infinite.d.ts +19 -0
- package/dist/core/scanners/number/number-is-infinite.js +31 -0
- package/dist/core/scanners/number/number-is-nan.d.ts +19 -0
- package/dist/core/scanners/number/number-is-nan.js +31 -0
- package/dist/core/scanners/number/number-is-too-large.d.ts +20 -0
- package/dist/core/scanners/number/number-is-too-large.js +33 -0
- package/dist/core/scanners/number/number-is-unsafe-integer.d.ts +19 -0
- package/dist/core/scanners/number/number-is-unsafe-integer.js +31 -0
- package/dist/core/scanners/object/object-has-circular-references.d.ts +20 -0
- package/dist/core/scanners/object/object-has-circular-references.js +43 -0
- package/dist/core/scanners/object/object-has-many-keys.d.ts +19 -0
- package/dist/core/scanners/object/object-has-many-keys.js +33 -0
- package/dist/core/scanners/object/object-is-deep.d.ts +20 -0
- package/dist/core/scanners/object/object-is-deep.js +38 -0
- package/dist/core/scanners/scanner-registry.d.ts +19 -0
- package/dist/core/scanners/scanner-registry.js +36 -0
- package/dist/core/scanners/string/string-has-unsafe-unicode.d.ts +19 -0
- package/dist/core/scanners/string/string-has-unsafe-unicode.js +32 -0
- package/dist/core/scanners/string/string-has-whitespace-edges.d.ts +19 -0
- package/dist/core/scanners/string/string-has-whitespace-edges.js +31 -0
- package/dist/core/scanners/string/string-is-long.d.ts +19 -0
- package/dist/core/scanners/string/string-is-long.js +32 -0
- package/dist/core/scanners/unknown/unknown-not-scannable.d.ts +21 -0
- package/dist/core/scanners/unknown/unknown-not-scannable.js +34 -0
- package/dist/core/shapes/analysis.d.ts +239 -0
- package/dist/core/shapes/analysis.js +11 -0
- package/dist/core/shapes/boundary.d.ts +126 -0
- package/dist/core/shapes/boundary.js +11 -0
- package/dist/core/shapes/events.d.ts +83 -0
- package/dist/core/shapes/events.js +10 -0
- package/dist/core/shapes/field-path.d.ts +51 -0
- package/dist/core/shapes/field-path.js +10 -0
- package/dist/core/shapes/index.d.ts +21 -0
- package/dist/core/shapes/index.js +11 -0
- package/dist/core/shapes/normalize.d.ts +59 -0
- package/dist/core/shapes/normalize.js +11 -0
- package/dist/core/shapes/parse.d.ts +75 -0
- package/dist/core/shapes/parse.js +11 -0
- package/dist/core/shapes/pipeline.d.ts +149 -0
- package/dist/core/shapes/pipeline.js +11 -0
- package/dist/core/shapes/policy.d.ts +158 -0
- package/dist/core/shapes/policy.js +11 -0
- package/dist/core/shapes/public.d.ts +92 -0
- package/dist/core/shapes/public.js +10 -0
- package/dist/core/shapes/scan.d.ts +126 -0
- package/dist/core/shapes/scan.js +11 -0
- package/dist/core/shapes/validate.d.ts +65 -0
- package/dist/core/shapes/validate.js +11 -0
- package/dist/core/validators/array/array-max-items.d.ts +25 -0
- package/dist/core/validators/array/array-max-items.js +42 -0
- package/dist/core/validators/array/array-min-items.d.ts +25 -0
- package/dist/core/validators/array/array-min-items.js +42 -0
- package/dist/core/validators/array/array.d.ts +22 -0
- package/dist/core/validators/array/array.js +34 -0
- package/dist/core/validators/array/excludes.d.ts +25 -0
- package/dist/core/validators/array/excludes.js +47 -0
- package/dist/core/validators/array/has-unique-items.d.ts +24 -0
- package/dist/core/validators/array/has-unique-items.js +46 -0
- package/dist/core/validators/array/includes.d.ts +24 -0
- package/dist/core/validators/array/includes.js +46 -0
- package/dist/core/validators/array/items-equal.d.ts +25 -0
- package/dist/core/validators/array/items-equal.js +42 -0
- package/dist/core/validators/array/no-empty-string-items.d.ts +24 -0
- package/dist/core/validators/array/no-empty-string-items.js +46 -0
- package/dist/core/validators/array/no-null-items.d.ts +24 -0
- package/dist/core/validators/array/no-null-items.js +46 -0
- package/dist/core/validators/array/no-undefined-items.d.ts +24 -0
- package/dist/core/validators/array/no-undefined-items.js +45 -0
- package/dist/core/validators/array/non-empty-array.d.ts +24 -0
- package/dist/core/validators/array/non-empty-array.js +45 -0
- package/dist/core/validators/array/not-sparse.d.ts +25 -0
- package/dist/core/validators/array/not-sparse.js +44 -0
- package/dist/core/validators/bigint/bigint-equals.d.ts +24 -0
- package/dist/core/validators/bigint/bigint-equals.js +57 -0
- package/dist/core/validators/bigint/bigint-max.d.ts +25 -0
- package/dist/core/validators/bigint/bigint-max.js +63 -0
- package/dist/core/validators/bigint/bigint-min.d.ts +25 -0
- package/dist/core/validators/bigint/bigint-min.js +87 -0
- package/dist/core/validators/bigint/bigint-negative.d.ts +23 -0
- package/dist/core/validators/bigint/bigint-negative.js +73 -0
- package/dist/core/validators/bigint/bigint-non-negative.d.ts +24 -0
- package/dist/core/validators/bigint/bigint-non-negative.js +72 -0
- package/dist/core/validators/bigint/bigint-non-positive.d.ts +24 -0
- package/dist/core/validators/bigint/bigint-non-positive.js +72 -0
- package/dist/core/validators/bigint/bigint-positive.d.ts +24 -0
- package/dist/core/validators/bigint/bigint-positive.js +72 -0
- package/dist/core/validators/bigint/bigint-safe.d.ts +25 -0
- package/dist/core/validators/bigint/bigint-safe.js +75 -0
- package/dist/core/validators/bigint/bigint.d.ts +20 -0
- package/dist/core/validators/bigint/bigint.js +38 -0
- package/dist/core/validators/boolean/boolean.d.ts +21 -0
- package/dist/core/validators/boolean/boolean.js +39 -0
- package/dist/core/validators/boolean/is-false.d.ts +22 -0
- package/dist/core/validators/boolean/is-false.js +48 -0
- package/dist/core/validators/boolean/is-true.d.ts +22 -0
- package/dist/core/validators/boolean/is-true.js +48 -0
- package/dist/core/validators/common/is-country-code.d.ts +17 -0
- package/dist/core/validators/common/is-country-code.js +36 -0
- package/dist/core/validators/common/is-currency-code.d.ts +17 -0
- package/dist/core/validators/common/is-currency-code.js +36 -0
- package/dist/core/validators/common/is-email-strict.d.ts +17 -0
- package/dist/core/validators/common/is-email-strict.js +36 -0
- package/dist/core/validators/common/is-email.d.ts +17 -0
- package/dist/core/validators/common/is-email.js +36 -0
- package/dist/core/validators/common/is-ip.d.ts +17 -0
- package/dist/core/validators/common/is-ip.js +37 -0
- package/dist/core/validators/common/is-phone-strict.d.ts +17 -0
- package/dist/core/validators/common/is-phone-strict.js +36 -0
- package/dist/core/validators/common/is-phone.d.ts +17 -0
- package/dist/core/validators/common/is-phone.js +36 -0
- package/dist/core/validators/common/is-port.d.ts +17 -0
- package/dist/core/validators/common/is-port.js +35 -0
- package/dist/core/validators/common/is-postal-code.d.ts +17 -0
- package/dist/core/validators/common/is-postal-code.js +36 -0
- package/dist/core/validators/common/is-url.d.ts +17 -0
- package/dist/core/validators/common/is-url.js +38 -0
- package/dist/core/validators/common/is-uuid.d.ts +17 -0
- package/dist/core/validators/common/is-uuid.js +36 -0
- package/dist/core/validators/date/before-epoch.d.ts +28 -0
- package/dist/core/validators/date/before-epoch.js +56 -0
- package/dist/core/validators/date/date-now-required.d.ts +22 -0
- package/dist/core/validators/date/date-now-required.js +48 -0
- package/dist/core/validators/date/is-date.d.ts +21 -0
- package/dist/core/validators/date/is-date.js +47 -0
- package/dist/core/validators/date/is-far-future.d.ts +23 -0
- package/dist/core/validators/date/is-far-future.js +46 -0
- package/dist/core/validators/date/is-future.d.ts +24 -0
- package/dist/core/validators/date/is-future.js +59 -0
- package/dist/core/validators/date/is-past.d.ts +24 -0
- package/dist/core/validators/date/is-past.js +59 -0
- package/dist/core/validators/date/not-after.d.ts +25 -0
- package/dist/core/validators/date/not-after.js +66 -0
- package/dist/core/validators/date/not-before.d.ts +25 -0
- package/dist/core/validators/date/not-before.js +66 -0
- package/dist/core/validators/date/same-day.d.ts +25 -0
- package/dist/core/validators/date/same-day.js +60 -0
- package/dist/core/validators/date/same-month.d.ts +25 -0
- package/dist/core/validators/date/same-month.js +59 -0
- package/dist/core/validators/date/same-year.d.ts +24 -0
- package/dist/core/validators/date/same-year.js +56 -0
- package/dist/core/validators/date/too-early.d.ts +25 -0
- package/dist/core/validators/date/too-early.js +57 -0
- package/dist/core/validators/date/too-late.d.ts +25 -0
- package/dist/core/validators/date/too-late.js +57 -0
- package/dist/core/validators/date/weekday.d.ts +32 -0
- package/dist/core/validators/date/weekday.js +65 -0
- package/dist/core/validators/date/weekend.d.ts +27 -0
- package/dist/core/validators/date/weekend.js +56 -0
- package/dist/core/validators/index.d.ts +112 -0
- package/dist/core/validators/index.js +139 -0
- package/dist/core/validators/nullish/is-null-or-undefined.d.ts +22 -0
- package/dist/core/validators/nullish/is-null-or-undefined.js +40 -0
- package/dist/core/validators/nullish/is-null.d.ts +21 -0
- package/dist/core/validators/nullish/is-null.js +39 -0
- package/dist/core/validators/nullish/is-undefined.d.ts +21 -0
- package/dist/core/validators/nullish/is-undefined.js +39 -0
- package/dist/core/validators/number/finite.d.ts +22 -0
- package/dist/core/validators/number/finite.js +40 -0
- package/dist/core/validators/number/integer.d.ts +22 -0
- package/dist/core/validators/number/integer.js +40 -0
- package/dist/core/validators/number/less-than.d.ts +21 -0
- package/dist/core/validators/number/less-than.js +39 -0
- package/dist/core/validators/number/max.d.ts +21 -0
- package/dist/core/validators/number/max.js +39 -0
- package/dist/core/validators/number/min.d.ts +21 -0
- package/dist/core/validators/number/min.js +39 -0
- package/dist/core/validators/number/more-than.d.ts +21 -0
- package/dist/core/validators/number/more-than.js +39 -0
- package/dist/core/validators/number/negative.d.ts +20 -0
- package/dist/core/validators/number/negative.js +38 -0
- package/dist/core/validators/number/non-negative.d.ts +19 -0
- package/dist/core/validators/number/non-negative.js +37 -0
- package/dist/core/validators/number/non-positive.d.ts +19 -0
- package/dist/core/validators/number/non-positive.js +37 -0
- package/dist/core/validators/number/number.d.ts +19 -0
- package/dist/core/validators/number/number.js +31 -0
- package/dist/core/validators/number/positive.d.ts +20 -0
- package/dist/core/validators/number/positive.js +38 -0
- package/dist/core/validators/number/safe-integer.d.ts +19 -0
- package/dist/core/validators/number/safe-integer.js +42 -0
- package/dist/core/validators/object/deep-equals.d.ts +24 -0
- package/dist/core/validators/object/deep-equals.js +47 -0
- package/dist/core/validators/object/has-key.d.ts +23 -0
- package/dist/core/validators/object/has-key.js +42 -0
- package/dist/core/validators/object/has-value.d.ts +27 -0
- package/dist/core/validators/object/has-value.js +59 -0
- package/dist/core/validators/object/keys-equal.d.ts +26 -0
- package/dist/core/validators/object/keys-equal.js +47 -0
- package/dist/core/validators/object/max-keys.d.ts +24 -0
- package/dist/core/validators/object/max-keys.js +43 -0
- package/dist/core/validators/object/min-keys.d.ts +24 -0
- package/dist/core/validators/object/min-keys.js +43 -0
- package/dist/core/validators/object/missing-key.d.ts +23 -0
- package/dist/core/validators/object/missing-key.js +42 -0
- package/dist/core/validators/object/no-empty-array-values.d.ts +23 -0
- package/dist/core/validators/object/no-empty-array-values.js +44 -0
- package/dist/core/validators/object/no-empty-object-values.d.ts +23 -0
- package/dist/core/validators/object/no-empty-object-values.js +44 -0
- package/dist/core/validators/object/no-null-values.d.ts +23 -0
- package/dist/core/validators/object/no-null-values.js +44 -0
- package/dist/core/validators/object/no-undefined-values.d.ts +23 -0
- package/dist/core/validators/object/no-undefined-values.js +44 -0
- package/dist/core/validators/object/non-empty-object.d.ts +21 -0
- package/dist/core/validators/object/non-empty-object.js +40 -0
- package/dist/core/validators/object/only-keys.d.ts +23 -0
- package/dist/core/validators/object/only-keys.js +43 -0
- package/dist/core/validators/object/plain-object.d.ts +22 -0
- package/dist/core/validators/object/plain-object.js +35 -0
- package/dist/core/validators/string/alpha-num.d.ts +23 -0
- package/dist/core/validators/string/alpha-num.js +50 -0
- package/dist/core/validators/string/alpha.d.ts +24 -0
- package/dist/core/validators/string/alpha.js +51 -0
- package/dist/core/validators/string/chars-equal.d.ts +23 -0
- package/dist/core/validators/string/chars-equal.js +49 -0
- package/dist/core/validators/string/ends-with.d.ts +23 -0
- package/dist/core/validators/string/ends-with.js +50 -0
- package/dist/core/validators/string/is-ascii.d.ts +24 -0
- package/dist/core/validators/string/is-ascii.js +53 -0
- package/dist/core/validators/string/is-printable.d.ts +25 -0
- package/dist/core/validators/string/is-printable.js +53 -0
- package/dist/core/validators/string/matches.d.ts +23 -0
- package/dist/core/validators/string/matches.js +50 -0
- package/dist/core/validators/string/max-length.d.ts +24 -0
- package/dist/core/validators/string/max-length.js +50 -0
- package/dist/core/validators/string/min-length.d.ts +24 -0
- package/dist/core/validators/string/min-length.js +50 -0
- package/dist/core/validators/string/no-lead-space.d.ts +23 -0
- package/dist/core/validators/string/no-lead-space.js +50 -0
- package/dist/core/validators/string/no-repeat-space.d.ts +25 -0
- package/dist/core/validators/string/no-repeat-space.js +52 -0
- package/dist/core/validators/string/no-space.d.ts +24 -0
- package/dist/core/validators/string/no-space.js +51 -0
- package/dist/core/validators/string/no-trail-space.d.ts +23 -0
- package/dist/core/validators/string/no-trail-space.js +50 -0
- package/dist/core/validators/string/non-empty.d.ts +22 -0
- package/dist/core/validators/string/non-empty.js +48 -0
- package/dist/core/validators/string/not-one-of.d.ts +24 -0
- package/dist/core/validators/string/not-one-of.js +51 -0
- package/dist/core/validators/string/num-string.d.ts +23 -0
- package/dist/core/validators/string/num-string.js +50 -0
- package/dist/core/validators/string/one-of.d.ts +23 -0
- package/dist/core/validators/string/one-of.js +50 -0
- package/dist/core/validators/string/starts-with.d.ts +23 -0
- package/dist/core/validators/string/starts-with.js +50 -0
- package/dist/core/validators/string/string.d.ts +21 -0
- package/dist/core/validators/string/string.js +39 -0
- package/dist/core/validators/string/trimmed.d.ts +24 -0
- package/dist/core/validators/string/trimmed.js +51 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.js +26 -0
- package/dist/test.d.ts +1 -0
- package/dist/test.js +12 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1 +1,132 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Jane IO
|
|
2
|
+
|
|
3
|
+
[](https://gitlab.com/clementine-solution/open-source/jane-io/-/commits/main)
|
|
4
|
+
[](https://gitlab.com/clementine-solution/open-source/jane-io/-/commits/main)
|
|
5
|
+
[](https://www.npmjs.com/package/@clementine-solutions/jane-io)
|
|
6
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
7
|
+
|
|
8
|
+
> A clarity-first boundary system for shaping, validating, and transforming data with full introspection and policy control.
|
|
9
|
+
|
|
10
|
+
Jane IO is a TypeScript-first data validation library that emphasizes **explicit design**, **runtime safety**, and **comprehensive observability**. Unlike traditional validators, Jane treats data processing as a multi-stage pipeline with policy-driven decision making.
|
|
11
|
+
|
|
12
|
+
## Key Features
|
|
13
|
+
|
|
14
|
+
- **Security-First**: Built-in protection against prototype pollution, circular references, and unsafe Unicode
|
|
15
|
+
- **Type-Safe**: Full TypeScript coverage with immutable, composable APIs
|
|
16
|
+
- **Observable**: Rich telemetry, diff tracking, and audit trails
|
|
17
|
+
- **Configurable**: Policy-driven behavior with multiple validation modes
|
|
18
|
+
- **Performant**: Lazy evaluation and efficient data structures
|
|
19
|
+
- **Extensible**: Plugin architecture for custom validators and parsers
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install @clementine-solutions/jane-io
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
yarn add @clementine-solutions/jane-io
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pnpm add @clementine-solutions/jane-io
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Quick Start
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { jane } from '@clementine-solutions/jane-io';
|
|
39
|
+
|
|
40
|
+
// Simple validation
|
|
41
|
+
const result = await jane.value("hello@example.com")
|
|
42
|
+
.parse("string")
|
|
43
|
+
.matches(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)
|
|
44
|
+
.run();
|
|
45
|
+
|
|
46
|
+
if (result.ok) {
|
|
47
|
+
console.log("Valid email:", result.value);
|
|
48
|
+
} else {
|
|
49
|
+
console.log("Issues:", result.issues);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Documentation
|
|
54
|
+
|
|
55
|
+
- [Getting Started Guide](https://jane-io.com/docs/getting-started/introduction)
|
|
56
|
+
- [Conceptual Overview](https://jane-io.clementine.solutions/concepts/introduction/)
|
|
57
|
+
|
|
58
|
+
## Use Cases
|
|
59
|
+
|
|
60
|
+
Jane excels at:
|
|
61
|
+
|
|
62
|
+
- **API Data Validation**: Secure processing of external inputs.
|
|
63
|
+
- **Configuration Management**: Structured config validation with audit trails.
|
|
64
|
+
- **Data Transformation Pipelines**: ETL workflows with error tracking.
|
|
65
|
+
- **Form Validation**: Complex multi-field validation scenarios.
|
|
66
|
+
- **Data Import/Export**: Safe handling of structured data.
|
|
67
|
+
|
|
68
|
+
## Architecture
|
|
69
|
+
|
|
70
|
+
Jane's pipeline processes data through distinct stages:
|
|
71
|
+
|
|
72
|
+
```mermaid
|
|
73
|
+
graph LR
|
|
74
|
+
A[Raw Input] --> B[Contain]
|
|
75
|
+
B --> C[Scan]
|
|
76
|
+
C --> D[Normalize]
|
|
77
|
+
D --> E[Parse]
|
|
78
|
+
E --> F[Validate]
|
|
79
|
+
F --> G[Policy]
|
|
80
|
+
G --> H[Result]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
- **Contain**: Structural safety and sanitization.
|
|
84
|
+
- **Scan**: Analysis and hazard detection.
|
|
85
|
+
- **Normalize**: Data hygiene and standardization.
|
|
86
|
+
- **Parse**: Semantic interpretation.
|
|
87
|
+
- **Validate**: Business rule enforcement.
|
|
88
|
+
- **Policy**: Decision-making and observability.
|
|
89
|
+
|
|
90
|
+
## Security Features
|
|
91
|
+
|
|
92
|
+
- **Structural Hazard Detection**: Identifies circular references, excessive depth, and unsafe structures.
|
|
93
|
+
- **Unicode Safety**: Detects and handles bidirectional control characters.
|
|
94
|
+
- **Prototype Pollution Prevention**: Safe property access and key filtering.
|
|
95
|
+
- **Containment Sentinels**: Safe representation of dangerous values.
|
|
96
|
+
- **Immutable Processing**: No side effects or data mutation.
|
|
97
|
+
|
|
98
|
+
## Observability
|
|
99
|
+
|
|
100
|
+
Jane provides comprehensive introspection:
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
const result = await jane.value(data)
|
|
104
|
+
.withDiff() // Track changes
|
|
105
|
+
.withExplain() // Explain decisions
|
|
106
|
+
.withReplay() // Reconstruct transformations
|
|
107
|
+
.withTelemetry(sink) // Custom telemetry
|
|
108
|
+
.run();
|
|
109
|
+
|
|
110
|
+
// Access detailed metadata
|
|
111
|
+
console.log(result.metadata);
|
|
112
|
+
console.log(result.diff);
|
|
113
|
+
console.log(result.explain);
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## License
|
|
117
|
+
|
|
118
|
+
Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for details.
|
|
119
|
+
|
|
120
|
+
## Acknowledgments
|
|
121
|
+
|
|
122
|
+
Jane IO is built with care for the developer experience and runtime safety. Special thanks to the TypeScript community and the broader JavaScript ecosystem for inspiration and tooling.
|
|
123
|
+
|
|
124
|
+
## Support
|
|
125
|
+
|
|
126
|
+
- **Issues**: [GitLab Issues](https://gitlab.com/clementine-solution/open-source/jane-io/issues)
|
|
127
|
+
- **Discussions**: [GitLab Discussions](https://gitlab.com/clementine-solution/open-source/jane-io/discussions)
|
|
128
|
+
- **Documentation**: [Jane IO Docs](https://jane-io.com/)
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
**Jane IO** - Data validation with clarity and confidence.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Diff
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Structural diff utilities used to compare safe and
|
|
7
|
+
* normalized values.
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
import type { DiffEntry, DiffFunction, FieldPath, JsonValue, PipelineBuilder } from '../shapes';
|
|
12
|
+
/**
|
|
13
|
+
* Computes a structural diff between two JSON‑compatible values.
|
|
14
|
+
*
|
|
15
|
+
* Delegates all traversal to `walkDiff`, collecting every change into a flat
|
|
16
|
+
* list of diff entries rooted at the top‑level path. Always returns a stable
|
|
17
|
+
* `{ entries }` object with no filtering or interpretation.
|
|
18
|
+
*/
|
|
19
|
+
export declare const diff: DiffFunction;
|
|
20
|
+
/**
|
|
21
|
+
* Recursively walks two JSON‑compatible values and records structural changes.
|
|
22
|
+
*
|
|
23
|
+
* Compares primitives, arrays, and plain objects by shape and content, emitting
|
|
24
|
+
* diff entries at each divergent path. Keys and indices are traversed in a
|
|
25
|
+
* stable order, and non‑object mismatches are treated as direct value changes.
|
|
26
|
+
* All entries are appended to `out`; no filtering or interpretation occurs here.
|
|
27
|
+
*/
|
|
28
|
+
export declare function walkDiff(before: JsonValue | undefined, after: JsonValue | undefined, path: FieldPath, out: DiffEntry[]): void;
|
|
29
|
+
/**
|
|
30
|
+
* Runs the pipeline and returns its computed diff.
|
|
31
|
+
*
|
|
32
|
+
* Delegates execution to the provided builder and exposes only the diff
|
|
33
|
+
* portion of the result. No additional processing or filtering occurs here.
|
|
34
|
+
*/
|
|
35
|
+
export declare function runDiff<T>(builder: PipelineBuilder): Promise<import("../shapes").DiffResult | undefined>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Diff
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Structural diff utilities used to compare safe and
|
|
7
|
+
* normalized values.
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
import { isObject, isPlainObject } from '../common';
|
|
12
|
+
import { appendSegment, rootPath, setIndex, setKey } from '../field-path';
|
|
13
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
14
|
+
|* Diff *|
|
|
15
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
16
|
+
/**
|
|
17
|
+
* Computes a structural diff between two JSON‑compatible values.
|
|
18
|
+
*
|
|
19
|
+
* Delegates all traversal to `walkDiff`, collecting every change into a flat
|
|
20
|
+
* list of diff entries rooted at the top‑level path. Always returns a stable
|
|
21
|
+
* `{ entries }` object with no filtering or interpretation.
|
|
22
|
+
*/
|
|
23
|
+
export const diff = (before, after) => {
|
|
24
|
+
const entries = [];
|
|
25
|
+
walkDiff(before, after, rootPath(), entries);
|
|
26
|
+
return { entries };
|
|
27
|
+
};
|
|
28
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
29
|
+
|* Walk Diff *|
|
|
30
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
31
|
+
/**
|
|
32
|
+
* Recursively walks two JSON‑compatible values and records structural changes.
|
|
33
|
+
*
|
|
34
|
+
* Compares primitives, arrays, and plain objects by shape and content, emitting
|
|
35
|
+
* diff entries at each divergent path. Keys and indices are traversed in a
|
|
36
|
+
* stable order, and non‑object mismatches are treated as direct value changes.
|
|
37
|
+
* All entries are appended to `out`; no filtering or interpretation occurs here.
|
|
38
|
+
*/
|
|
39
|
+
export function walkDiff(before, after, path, out) {
|
|
40
|
+
if (before === after)
|
|
41
|
+
return;
|
|
42
|
+
if (!isObject(before) || !isObject(after)) {
|
|
43
|
+
out.push({
|
|
44
|
+
path,
|
|
45
|
+
kind: before === undefined ? 'added' : after === undefined ? 'removed' : 'changed',
|
|
46
|
+
before,
|
|
47
|
+
after,
|
|
48
|
+
});
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (Array.isArray(before) && Array.isArray(after)) {
|
|
52
|
+
const max = Math.max(before.length, after.length);
|
|
53
|
+
for (let i = 0; i < max; i++) {
|
|
54
|
+
const childPath = appendSegment(path, setIndex(i));
|
|
55
|
+
walkDiff(before[i], after[i], childPath, out);
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (isPlainObject(before) && isPlainObject(after)) {
|
|
60
|
+
const beforeKeys = Object.keys(before);
|
|
61
|
+
const afterKeys = Object.keys(after);
|
|
62
|
+
const allKeys = new Set([...beforeKeys, ...afterKeys]);
|
|
63
|
+
for (const key of allKeys) {
|
|
64
|
+
const childPath = appendSegment(path, setKey(key));
|
|
65
|
+
walkDiff(before[key], after[key], childPath, out);
|
|
66
|
+
}
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
out.push({
|
|
70
|
+
path,
|
|
71
|
+
kind: 'changed',
|
|
72
|
+
before,
|
|
73
|
+
after,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
77
|
+
|* Run Diff *|
|
|
78
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
79
|
+
/**
|
|
80
|
+
* Runs the pipeline and returns its computed diff.
|
|
81
|
+
*
|
|
82
|
+
* Delegates execution to the provided builder and exposes only the diff
|
|
83
|
+
* portion of the result. No additional processing or filtering occurs here.
|
|
84
|
+
*/
|
|
85
|
+
export async function runDiff(builder) {
|
|
86
|
+
const result = await builder.run();
|
|
87
|
+
return result.diff;
|
|
88
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Explain
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Builds a human‑readable narrative of all pipeline events in
|
|
7
|
+
* order.
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
import type { ExplainFunction, PipelineBuilder } from '../shapes';
|
|
12
|
+
/**
|
|
13
|
+
* Builds a linear explanation of all pipeline events.
|
|
14
|
+
*
|
|
15
|
+
* Emits scan hazards, normalization events, diff entries, parse changes, and
|
|
16
|
+
* validation errors in pipeline order. Each event is mapped to a stable
|
|
17
|
+
* ExplainStep with its path, stage, kind, code, and message. No filtering or
|
|
18
|
+
* interpretation occurs; this is a direct narrative of what the pipeline saw.
|
|
19
|
+
*/
|
|
20
|
+
export declare const explain: ExplainFunction;
|
|
21
|
+
/**
|
|
22
|
+
* Formats a value for human‑readable explain output.
|
|
23
|
+
*
|
|
24
|
+
* Produces stable string representations for primitives and falls back to
|
|
25
|
+
* compact JSON for objects. Never throws; errors during formatting degrade
|
|
26
|
+
* gracefully to `String(value)`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function format(value: unknown): string;
|
|
29
|
+
/**
|
|
30
|
+
* Runs the pipeline and returns its explain output.
|
|
31
|
+
*
|
|
32
|
+
* Delegates execution to the provided builder and exposes only the explain
|
|
33
|
+
* portion of the result. No additional processing or reshaping occurs here.
|
|
34
|
+
*/
|
|
35
|
+
export declare function runExplain<T>(builder: PipelineBuilder): Promise<import("../shapes").ExplainResult | undefined>;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Explain
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Builds a human‑readable narrative of all pipeline events in
|
|
7
|
+
* order.
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
12
|
+
|* Explain *|
|
|
13
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
14
|
+
/**
|
|
15
|
+
* Builds a linear explanation of all pipeline events.
|
|
16
|
+
*
|
|
17
|
+
* Emits scan hazards, normalization events, diff entries, parse changes, and
|
|
18
|
+
* validation errors in pipeline order. Each event is mapped to a stable
|
|
19
|
+
* ExplainStep with its path, stage, kind, code, and message. No filtering or
|
|
20
|
+
* interpretation occurs; this is a direct narrative of what the pipeline saw.
|
|
21
|
+
*/
|
|
22
|
+
export const explain = ({ scanEvents, normalizationEvents, parseEvents, validationEvents, diff, }) => {
|
|
23
|
+
const steps = [];
|
|
24
|
+
for (const ev of scanEvents) {
|
|
25
|
+
steps.push({
|
|
26
|
+
path: ev.path,
|
|
27
|
+
stage: 'scan',
|
|
28
|
+
kind: 'hazard',
|
|
29
|
+
code: ev.code,
|
|
30
|
+
message: ev.message,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
for (const ev of normalizationEvents) {
|
|
34
|
+
steps.push({
|
|
35
|
+
path: ev.path,
|
|
36
|
+
stage: 'normalize',
|
|
37
|
+
kind: ev.kind === 'fatal' ? 'hazard' : 'change',
|
|
38
|
+
code: ev.code,
|
|
39
|
+
message: ev.message,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (diff) {
|
|
43
|
+
for (const entry of diff.entries) {
|
|
44
|
+
const message = entry.kind === 'added'
|
|
45
|
+
? `Added value: ${format(entry.after)}`
|
|
46
|
+
: entry.kind === 'removed'
|
|
47
|
+
? `Removed value: ${format(entry.before)}`
|
|
48
|
+
: `Changed from ${format(entry.before)} to ${format(entry.after)}`;
|
|
49
|
+
steps.push({
|
|
50
|
+
path: entry.path,
|
|
51
|
+
stage: 'normalize',
|
|
52
|
+
kind: 'change',
|
|
53
|
+
code: `normalize.${entry.kind}`,
|
|
54
|
+
message,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const ev of parseEvents) {
|
|
59
|
+
steps.push({
|
|
60
|
+
path: ev.path,
|
|
61
|
+
stage: 'parse',
|
|
62
|
+
kind: 'change',
|
|
63
|
+
code: ev.code,
|
|
64
|
+
message: ev.message,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
for (const ev of validationEvents) {
|
|
68
|
+
steps.push({
|
|
69
|
+
path: ev.path,
|
|
70
|
+
stage: 'validate',
|
|
71
|
+
kind: 'error',
|
|
72
|
+
code: ev.code,
|
|
73
|
+
message: ev.message,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return { steps };
|
|
77
|
+
};
|
|
78
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
79
|
+
|* Format *|
|
|
80
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
81
|
+
/**
|
|
82
|
+
* Formats a value for human‑readable explain output.
|
|
83
|
+
*
|
|
84
|
+
* Produces stable string representations for primitives and falls back to
|
|
85
|
+
* compact JSON for objects. Never throws; errors during formatting degrade
|
|
86
|
+
* gracefully to `String(value)`.
|
|
87
|
+
*/
|
|
88
|
+
export function format(value) {
|
|
89
|
+
try {
|
|
90
|
+
if (value === undefined)
|
|
91
|
+
return 'undefined';
|
|
92
|
+
if (value === null)
|
|
93
|
+
return 'null';
|
|
94
|
+
if (typeof value === 'string')
|
|
95
|
+
return JSON.stringify(value);
|
|
96
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
97
|
+
return String(value);
|
|
98
|
+
}
|
|
99
|
+
return JSON.stringify(value, null, 0);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return String(value);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
106
|
+
|* Run Explain *|
|
|
107
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
108
|
+
/**
|
|
109
|
+
* Runs the pipeline and returns its explain output.
|
|
110
|
+
*
|
|
111
|
+
* Delegates execution to the provided builder and exposes only the explain
|
|
112
|
+
* portion of the result. No additional processing or reshaping occurs here.
|
|
113
|
+
*/
|
|
114
|
+
export async function runExplain(builder) {
|
|
115
|
+
const result = await builder.run();
|
|
116
|
+
return result.explain;
|
|
117
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Barrel File
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Re‑exports the public Analysis modules (Diff, Explain,
|
|
7
|
+
* Replay, Telemetry).
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
export { diff, walkDiff, runDiff } from './diff';
|
|
12
|
+
export { explain, format, runExplain } from './explain';
|
|
13
|
+
export { applyEntry, replay, runReplay } from './replay';
|
|
14
|
+
export { runTelemetry, telemetry } from './telemetry';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Barrel File
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Re‑exports the public Analysis modules (Diff, Explain,
|
|
7
|
+
* Replay, Telemetry).
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
12
|
+
|* Diff *|
|
|
13
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
14
|
+
export { diff, walkDiff, runDiff } from './diff';
|
|
15
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
16
|
+
|* Explain *|
|
|
17
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
18
|
+
export { explain, format, runExplain } from './explain';
|
|
19
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
20
|
+
|* Replay *|
|
|
21
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
22
|
+
export { applyEntry, replay, runReplay } from './replay';
|
|
23
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
24
|
+
|* Telemetry *|
|
|
25
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
26
|
+
export { runTelemetry, telemetry } from './telemetry';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Replay
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Reconstructs intermediate states by applying diff entries
|
|
7
|
+
* in order.
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
import type { DiffEntry, InternalJsonValue, PipelineBuilder, ReplayFunction } from '../shapes';
|
|
12
|
+
/**
|
|
13
|
+
* Applies a single diff entry to an internal JSON value.
|
|
14
|
+
*
|
|
15
|
+
* Clones the current state, then sets or clears the value at the entry’s path
|
|
16
|
+
* according to its kind. Used by Replay to advance state one change at a time.
|
|
17
|
+
* Never mutates the original state.
|
|
18
|
+
*/
|
|
19
|
+
export declare function applyEntry(state: InternalJsonValue, entry: DiffEntry): InternalJsonValue;
|
|
20
|
+
/**
|
|
21
|
+
* Replays a diff step‑by‑step to reconstruct intermediate states.
|
|
22
|
+
*
|
|
23
|
+
* Clones the initial value, applies each diff entry in order, and records a
|
|
24
|
+
* snapshot after every application. Produces a stable sequence of ReplayStep
|
|
25
|
+
* objects with index, entry, and resulting state. Never mutates inputs.
|
|
26
|
+
*/
|
|
27
|
+
export declare const replay: ReplayFunction;
|
|
28
|
+
/**
|
|
29
|
+
* Runs the pipeline and returns its replay output.
|
|
30
|
+
*
|
|
31
|
+
* Delegates execution to the provided builder and exposes only the replay
|
|
32
|
+
* portion of the result. No additional processing or transformation occurs.
|
|
33
|
+
*/
|
|
34
|
+
export declare function runReplay<T>(builder: PipelineBuilder): Promise<import("../shapes").ReplayResult | undefined>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Replay
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Reconstructs intermediate states by applying diff entries
|
|
7
|
+
* in order.
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
import { setAtPath } from '../field-path';
|
|
12
|
+
import { deepClone } from '../pipeline';
|
|
13
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
14
|
+
|* Apply Entry *|
|
|
15
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
16
|
+
/**
|
|
17
|
+
* Applies a single diff entry to an internal JSON value.
|
|
18
|
+
*
|
|
19
|
+
* Clones the current state, then sets or clears the value at the entry’s path
|
|
20
|
+
* according to its kind. Used by Replay to advance state one change at a time.
|
|
21
|
+
* Never mutates the original state.
|
|
22
|
+
*/
|
|
23
|
+
export function applyEntry(state, entry) {
|
|
24
|
+
const clone = deepClone(state);
|
|
25
|
+
switch (entry.kind) {
|
|
26
|
+
case 'added':
|
|
27
|
+
case 'changed':
|
|
28
|
+
return setAtPath(clone, entry.path, entry.after);
|
|
29
|
+
case 'removed':
|
|
30
|
+
return setAtPath(clone, entry.path, undefined);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
34
|
+
|* Replay *|
|
|
35
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
36
|
+
/**
|
|
37
|
+
* Replays a diff step‑by‑step to reconstruct intermediate states.
|
|
38
|
+
*
|
|
39
|
+
* Clones the initial value, applies each diff entry in order, and records a
|
|
40
|
+
* snapshot after every application. Produces a stable sequence of ReplayStep
|
|
41
|
+
* objects with index, entry, and resulting state. Never mutates inputs.
|
|
42
|
+
*/
|
|
43
|
+
export const replay = ({ before, diff }) => {
|
|
44
|
+
const steps = [];
|
|
45
|
+
let current = deepClone(before);
|
|
46
|
+
diff.forEach((entry, index) => {
|
|
47
|
+
current = applyEntry(current, entry);
|
|
48
|
+
steps.push({
|
|
49
|
+
index,
|
|
50
|
+
entry,
|
|
51
|
+
state: deepClone(current),
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
return { steps };
|
|
55
|
+
};
|
|
56
|
+
/* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— *\
|
|
57
|
+
|* Run Replay *|
|
|
58
|
+
\* ——— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ————— * ——— */
|
|
59
|
+
/**
|
|
60
|
+
* Runs the pipeline and returns its replay output.
|
|
61
|
+
*
|
|
62
|
+
* Delegates execution to the provided builder and exposes only the replay
|
|
63
|
+
* portion of the result. No additional processing or transformation occurs.
|
|
64
|
+
*/
|
|
65
|
+
export async function runReplay(builder) {
|
|
66
|
+
const result = await builder.run();
|
|
67
|
+
return result.replay;
|
|
68
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ----------------------------------------------------------------------------
|
|
3
|
+
* Analysis | Telemetry
|
|
4
|
+
* ----------------------------------------------------------------------------
|
|
5
|
+
* @package @clementine-solutions/jane
|
|
6
|
+
* @description Emits structured records for each pipeline stage for
|
|
7
|
+
* auditing and observability.
|
|
8
|
+
* @see https://jane-io.com
|
|
9
|
+
* ----------------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
import type { PipelineBuilder, PipelineResult, TelemetryContext, TelemetryResult, TelemetrySink } from '../shapes';
|
|
12
|
+
/**
|
|
13
|
+
* Collects flat telemetry records for each pipeline stage.
|
|
14
|
+
*
|
|
15
|
+
* Emits one record per stage with boundary, pipeline, timestamp, and the
|
|
16
|
+
* stage‑specific payload (events, diff, explain, replay). Stages are reported
|
|
17
|
+
* in pipeline order, and a final `decide` record captures the policy outcome.
|
|
18
|
+
* No aggregation, filtering, or interpretation occurs here.
|
|
19
|
+
*/
|
|
20
|
+
export declare function telemetry<T>(ctx: TelemetryContext<T>): TelemetryResult;
|
|
21
|
+
/**
|
|
22
|
+
* Runs the pipeline and emits telemetry if enabled by policy.
|
|
23
|
+
*
|
|
24
|
+
* Delegates execution to the builder, collects stage records through the
|
|
25
|
+
* telemetry helper, and forwards them to the provided sink. Returns the full
|
|
26
|
+
* pipeline result unchanged.
|
|
27
|
+
*/
|
|
28
|
+
export declare function runTelemetry<T>(builder: PipelineBuilder, sink: TelemetrySink): Promise<PipelineResult<T>>;
|