ts-data-forge 5.0.0 → 5.1.0
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 +55 -6
- package/dist/array/impl/array-utils-creation.d.mts +14 -0
- package/dist/array/impl/array-utils-creation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-creation.mjs +12 -0
- package/dist/array/impl/array-utils-creation.mjs.map +1 -1
- package/dist/array/impl/array-utils-element-access.d.mts +10 -0
- package/dist/array/impl/array-utils-element-access.d.mts.map +1 -1
- package/dist/array/impl/array-utils-element-access.mjs +7 -0
- package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
- package/dist/array/impl/array-utils-modification.d.mts +14 -0
- package/dist/array/impl/array-utils-modification.d.mts.map +1 -1
- package/dist/array/impl/array-utils-modification.mjs +1 -0
- package/dist/array/impl/array-utils-modification.mjs.map +1 -1
- package/dist/array/impl/array-utils-reducing-value.d.mts +26 -2
- package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -1
- package/dist/array/impl/array-utils-reducing-value.mjs +2 -1
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
- package/dist/array/impl/array-utils-search.d.mts +30 -0
- package/dist/array/impl/array-utils-search.d.mts.map +1 -1
- package/dist/array/impl/array-utils-search.mjs +1 -0
- package/dist/array/impl/array-utils-search.mjs.map +1 -1
- package/dist/array/impl/array-utils-set-op.d.mts +13 -0
- package/dist/array/impl/array-utils-set-op.d.mts.map +1 -1
- package/dist/array/impl/array-utils-set-op.mjs +13 -0
- package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
- package/dist/array/impl/array-utils-size.d.mts +3 -0
- package/dist/array/impl/array-utils-size.d.mts.map +1 -1
- package/dist/array/impl/array-utils-size.mjs +3 -0
- package/dist/array/impl/array-utils-size.mjs.map +1 -1
- package/dist/array/impl/array-utils-slice-clamped.d.mts +2 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -1
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
- package/dist/array/impl/array-utils-slicing.d.mts +15 -0
- package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
- package/dist/array/impl/array-utils-slicing.mjs +7 -0
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
- package/dist/array/impl/array-utils-transformation.d.mts +27 -0
- package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-transformation.mjs +7 -0
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
- package/dist/array/impl/array-utils-validation.d.mts +17 -0
- package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-validation.mjs +11 -0
- package/dist/array/impl/array-utils-validation.mjs.map +1 -1
- package/dist/collections/imap-mapped.mjs +1 -0
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.d.mts +20 -0
- package/dist/collections/imap.d.mts.map +1 -1
- package/dist/collections/imap.mjs +3 -0
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/iset-mapped.d.mts +27 -0
- package/dist/collections/iset-mapped.d.mts.map +1 -1
- package/dist/collections/iset-mapped.mjs +7 -0
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.d.mts +29 -0
- package/dist/collections/iset.d.mts.map +1 -1
- package/dist/collections/iset.mjs +7 -0
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.d.mts +40 -0
- package/dist/collections/queue.d.mts.map +1 -1
- package/dist/collections/queue.mjs +9 -0
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.d.mts +35 -0
- package/dist/collections/stack.d.mts.map +1 -1
- package/dist/collections/stack.mjs +8 -0
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.mjs +1 -1
- package/dist/functional/match.d.mts.map +1 -1
- package/dist/functional/match.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-expect-to-be.d.mts +1 -0
- package/dist/functional/optional/impl/optional-expect-to-be.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-filter.d.mts +3 -0
- package/dist/functional/optional/impl/optional-filter.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-flat-map.d.mts +2 -0
- package/dist/functional/optional/impl/optional-flat-map.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-from-nullable.d.mts +2 -0
- package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-from-nullable.mjs +2 -0
- package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-optional.d.mts +2 -0
- package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-is-optional.mjs +2 -0
- package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-some.d.mts +1 -0
- package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-is-some.mjs +1 -0
- package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-map.d.mts +2 -0
- package/dist/functional/optional/impl/optional-map.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-none.d.mts +2 -0
- package/dist/functional/optional/impl/optional-none.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-none.mjs +2 -0
- package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-or-else.d.mts +4 -0
- package/dist/functional/optional/impl/optional-or-else.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-some.d.mts +3 -1
- package/dist/functional/optional/impl/optional-some.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-some.mjs +2 -0
- package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-to-nullable.d.mts +2 -0
- package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-to-nullable.mjs +2 -0
- package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-or.d.mts +3 -0
- package/dist/functional/optional/impl/optional-unwrap-or.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-throw.d.mts +1 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs +1 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap.d.mts +2 -0
- package/dist/functional/optional/impl/optional-unwrap.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-zip.d.mts +2 -0
- package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-zip.mjs +2 -0
- package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
- package/dist/functional/result/impl/result-err.d.mts +3 -1
- package/dist/functional/result/impl/result-err.d.mts.map +1 -1
- package/dist/functional/result/impl/result-err.mjs +2 -0
- package/dist/functional/result/impl/result-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-expect-to-be.d.mts +1 -0
- package/dist/functional/result/impl/result-expect-to-be.d.mts.map +1 -1
- package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
- package/dist/functional/result/impl/result-flat-map.d.mts +5 -0
- package/dist/functional/result/impl/result-flat-map.d.mts.map +1 -1
- package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
- package/dist/functional/result/impl/result-fold.d.mts +4 -0
- package/dist/functional/result/impl/result-fold.d.mts.map +1 -1
- package/dist/functional/result/impl/result-fold.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-promise.d.mts +3 -0
- package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -1
- package/dist/functional/result/impl/result-from-promise.mjs +3 -0
- package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-throwable.d.mts +2 -0
- package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -1
- package/dist/functional/result/impl/result-from-throwable.mjs +4 -1
- package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-err.d.mts +2 -0
- package/dist/functional/result/impl/result-is-err.d.mts.map +1 -1
- package/dist/functional/result/impl/result-is-err.mjs +2 -0
- package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-ok.d.mts +2 -0
- package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -1
- package/dist/functional/result/impl/result-is-ok.mjs +2 -0
- package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-result.d.mts +4 -0
- package/dist/functional/result/impl/result-is-result.d.mts.map +1 -1
- package/dist/functional/result/impl/result-is-result.mjs +4 -0
- package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
- package/dist/functional/result/impl/result-map-err.d.mts +3 -0
- package/dist/functional/result/impl/result-map-err.d.mts.map +1 -1
- package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-map.d.mts +4 -0
- package/dist/functional/result/impl/result-map.d.mts.map +1 -1
- package/dist/functional/result/impl/result-map.mjs.map +1 -1
- package/dist/functional/result/impl/result-ok.d.mts +3 -1
- package/dist/functional/result/impl/result-ok.d.mts.map +1 -1
- package/dist/functional/result/impl/result-ok.mjs +2 -0
- package/dist/functional/result/impl/result-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-or-else.d.mts +4 -0
- package/dist/functional/result/impl/result-or-else.d.mts.map +1 -1
- package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
- package/dist/functional/result/impl/result-swap.d.mts +2 -0
- package/dist/functional/result/impl/result-swap.d.mts.map +1 -1
- package/dist/functional/result/impl/result-swap.mjs +2 -0
- package/dist/functional/result/impl/result-swap.mjs.map +1 -1
- package/dist/functional/result/impl/result-to-optional.d.mts +2 -0
- package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -1
- package/dist/functional/result/impl/result-to-optional.mjs +2 -0
- package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-or.d.mts +3 -0
- package/dist/functional/result/impl/result-unwrap-err-or.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-throw.d.mts +2 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs +2 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err.d.mts +1 -0
- package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err.mjs +1 -0
- package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok-or.d.mts +3 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok.d.mts +1 -0
- package/dist/functional/result/impl/result-unwrap-ok.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-throw.d.mts +2 -0
- package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-throw.mjs +2 -0
- package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
- package/dist/functional/result/impl/result-zip.d.mts +3 -1
- package/dist/functional/result/impl/result-zip.d.mts.map +1 -1
- package/dist/functional/result/impl/result-zip.mjs +3 -1
- package/dist/functional/result/impl/result-zip.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-err.d.mts +2 -1
- package/dist/functional/ternary-result/impl/ternary-result-err.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-err.mjs +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.d.mts +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-flat-map.d.mts +4 -0
- package/dist/functional/ternary-result/impl/ternary-result-flat-map.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-fold.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-fold.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +4 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.d.mts +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.d.mts +4 -0
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +4 -0
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.d.mts +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map-err.d.mts +3 -0
- package/dist/functional/ternary-result/impl/ternary-result-map-err.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map-warn.d.mts +3 -0
- package/dist/functional/ternary-result/impl/ternary-result-map-warn.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map.d.mts +6 -0
- package/dist/functional/ternary-result/impl/ternary-result-map.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-ok.d.mts +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-ok.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-or-else.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-or-else.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.d.mts +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.d.mts +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.d.mts +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +1 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.d.mts +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +2 -0
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-warn.d.mts +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-warn.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-zip.d.mts +4 -0
- package/dist/functional/ternary-result/impl/ternary-result-zip.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +4 -0
- package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
- package/dist/globals.d.mts +10 -0
- package/dist/guard/index.mjs +1 -1
- package/dist/guard/is-record.d.mts +31 -0
- package/dist/guard/is-record.d.mts.map +1 -1
- package/dist/guard/is-record.mjs +32 -1
- package/dist/guard/is-record.mjs.map +1 -1
- package/dist/guard/is-type.d.mts +3 -0
- package/dist/guard/is-type.d.mts.map +1 -1
- package/dist/guard/is-type.mjs +3 -0
- package/dist/guard/is-type.mjs.map +1 -1
- package/dist/guard/key-is-in.d.mts +1 -0
- package/dist/guard/key-is-in.d.mts.map +1 -1
- package/dist/guard/key-is-in.mjs +1 -0
- package/dist/guard/key-is-in.mjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/iterator/range.d.mts +4 -0
- package/dist/iterator/range.d.mts.map +1 -1
- package/dist/iterator/range.mjs +1 -0
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/json.d.mts +21 -0
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +22 -0
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +14 -0
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int.mjs +14 -0
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +2 -2
- package/dist/number/branded-types/positive-int.d.mts +14 -0
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +14 -0
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +21 -0
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +22 -1
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +21 -0
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +23 -2
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +1 -1
- package/dist/number/branded-types/uint.d.mts +12 -0
- package/dist/number/branded-types/uint.d.mts.map +1 -1
- package/dist/number/branded-types/uint.mjs +12 -0
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/num.d.mts +9 -0
- package/dist/number/num.d.mts.map +1 -1
- package/dist/number/num.mjs +8 -1
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +22 -0
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +23 -0
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/object.d.mts +9 -0
- package/dist/object/object.d.mts.map +1 -1
- package/dist/object/object.mjs +7 -0
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/map-nullable.mjs.map +1 -1
- package/dist/others/tuple.d.mts +11 -0
- package/dist/others/tuple.d.mts.map +1 -1
- package/dist/others/tuple.mjs +11 -0
- package/dist/others/tuple.mjs.map +1 -1
- package/dist/others/unknown-to-string.d.mts.map +1 -1
- package/dist/others/unknown-to-string.mjs +2 -1
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/promise.d.mts +4 -0
- package/dist/promise/promise.d.mts.map +1 -1
- package/dist/promise/promise.mjs +5 -0
- package/dist/promise/promise.mjs.map +1 -1
- package/package.json +20 -24
- package/src/array/impl/array-utils-creation.mts +20 -0
- package/src/array/impl/array-utils-creation.test.mts +71 -0
- package/src/array/impl/array-utils-element-access.mts +13 -0
- package/src/array/impl/array-utils-element-access.test.mts +21 -0
- package/src/array/impl/array-utils-iterators.test.mts +17 -0
- package/src/array/impl/array-utils-modification.mts +40 -0
- package/src/array/impl/array-utils-modification.test.mts +75 -0
- package/src/array/impl/array-utils-overload-type-error.test.mts +19 -0
- package/src/array/impl/array-utils-reducing-value.mts +55 -9
- package/src/array/impl/array-utils-reducing-value.test.mts +90 -0
- package/src/array/impl/array-utils-search.mts +53 -0
- package/src/array/impl/array-utils-search.test.mts +51 -0
- package/src/array/impl/array-utils-set-op.mts +19 -0
- package/src/array/impl/array-utils-set-op.test.mts +116 -0
- package/src/array/impl/array-utils-size.mts +3 -0
- package/src/array/impl/array-utils-size.test.mts +1 -0
- package/src/array/impl/array-utils-slice-clamped.mts +7 -0
- package/src/array/impl/array-utils-slice-clamped.test.mts +20 -0
- package/src/array/impl/array-utils-slicing.mts +27 -0
- package/src/array/impl/array-utils-slicing.test.mts +57 -0
- package/src/array/impl/array-utils-transformation.mts +58 -0
- package/src/array/impl/array-utils-transformation.test.mts +113 -1
- package/src/array/impl/array-utils-validation.mts +23 -0
- package/src/array/impl/array-utils-validation.test.mts +96 -0
- package/src/array/impl/array.test.mts +12 -0
- package/src/collections/imap-mapped.mts +11 -0
- package/src/collections/imap-mapped.test.mts +70 -0
- package/src/collections/imap.mts +32 -0
- package/src/collections/imap.test.mts +106 -0
- package/src/collections/iset-mapped.mts +35 -0
- package/src/collections/iset-mapped.test.mts +111 -0
- package/src/collections/iset.mts +34 -0
- package/src/collections/iset.test.mts +193 -0
- package/src/collections/queue.mts +53 -0
- package/src/collections/queue.test.mts +32 -0
- package/src/collections/stack.mts +42 -0
- package/src/collections/stack.test.mts +44 -0
- package/src/functional/match.mts +16 -0
- package/src/functional/match.test.mts +2 -0
- package/src/functional/optional/impl/optional-expect-to-be.mts +3 -0
- package/src/functional/optional/impl/optional-filter.mts +6 -0
- package/src/functional/optional/impl/optional-flat-map.mts +4 -0
- package/src/functional/optional/impl/optional-from-nullable.mts +2 -0
- package/src/functional/optional/impl/optional-is-optional.mts +2 -0
- package/src/functional/optional/impl/optional-is-some.mts +1 -0
- package/src/functional/optional/impl/optional-map.mts +5 -0
- package/src/functional/optional/impl/optional-none.mts +2 -0
- package/src/functional/optional/impl/optional-or-else.mts +6 -0
- package/src/functional/optional/impl/optional-some.mts +3 -1
- package/src/functional/optional/impl/optional-to-nullable.mts +2 -0
- package/src/functional/optional/impl/optional-unwrap-or.mts +5 -0
- package/src/functional/optional/impl/optional-unwrap-throw.mts +1 -0
- package/src/functional/optional/impl/optional-unwrap.mts +2 -0
- package/src/functional/optional/impl/optional-zip.mts +2 -0
- package/src/functional/optional.test.mts +73 -0
- package/src/functional/pipe.test.mts +3 -0
- package/src/functional/result/impl/result-err.mts +3 -1
- package/src/functional/result/impl/result-expect-to-be.mts +3 -0
- package/src/functional/result/impl/result-flat-map.mts +7 -0
- package/src/functional/result/impl/result-fold.mts +6 -0
- package/src/functional/result/impl/result-from-promise.mts +3 -0
- package/src/functional/result/impl/result-from-throwable.mts +6 -1
- package/src/functional/result/impl/result-is-err.mts +2 -0
- package/src/functional/result/impl/result-is-ok.mts +2 -0
- package/src/functional/result/impl/result-is-result.mts +4 -0
- package/src/functional/result/impl/result-map-err.mts +5 -0
- package/src/functional/result/impl/result-map.mts +6 -0
- package/src/functional/result/impl/result-ok.mts +3 -1
- package/src/functional/result/impl/result-or-else.mts +6 -0
- package/src/functional/result/impl/result-swap.mts +2 -0
- package/src/functional/result/impl/result-to-optional.mts +2 -0
- package/src/functional/result/impl/result-unwrap-err-or.mts +5 -0
- package/src/functional/result/impl/result-unwrap-err-throw.mts +2 -0
- package/src/functional/result/impl/result-unwrap-err.mts +1 -0
- package/src/functional/result/impl/result-unwrap-ok-or.mts +5 -0
- package/src/functional/result/impl/result-unwrap-ok.mts +2 -0
- package/src/functional/result/impl/result-unwrap-throw.mts +2 -0
- package/src/functional/result/impl/result-zip.mts +3 -1
- package/src/functional/result.test.mts +88 -0
- package/src/functional/ternary-result/impl/ternary-result-err.mts +2 -1
- package/src/functional/ternary-result/impl/ternary-result-expect-to-be.mts +4 -0
- package/src/functional/ternary-result/impl/ternary-result-flat-map.mts +7 -0
- package/src/functional/ternary-result/impl/ternary-result-fold.mts +5 -0
- package/src/functional/ternary-result/impl/ternary-result-from-promise.mts +2 -0
- package/src/functional/ternary-result/impl/ternary-result-from-throwable.mts +5 -1
- package/src/functional/ternary-result/impl/ternary-result-is-ok.mts +1 -0
- package/src/functional/ternary-result/impl/ternary-result-is-ternary-result.mts +4 -0
- package/src/functional/ternary-result/impl/ternary-result-is-warn.mts +1 -0
- package/src/functional/ternary-result/impl/ternary-result-map-err.mts +6 -0
- package/src/functional/ternary-result/impl/ternary-result-map-warn.mts +6 -0
- package/src/functional/ternary-result/impl/ternary-result-map.mts +9 -0
- package/src/functional/ternary-result/impl/ternary-result-ok.mts +1 -1
- package/src/functional/ternary-result/impl/ternary-result-or-else.mts +5 -0
- package/src/functional/ternary-result/impl/ternary-result-to-optional.mts +2 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-err-or.mts +5 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mts +1 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-err.mts +2 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mts +5 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-ok.mts +3 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-throw.mts +1 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mts +5 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mts +1 -0
- package/src/functional/ternary-result/impl/ternary-result-unwrap-warn.mts +2 -0
- package/src/functional/ternary-result/impl/ternary-result-warn.mts +4 -1
- package/src/functional/ternary-result/impl/ternary-result-zip.mts +4 -0
- package/src/functional/ternary-result.test.mts +91 -0
- package/src/globals.d.mts +10 -0
- package/src/guard/has-key.test.mts +9 -0
- package/src/guard/is-non-empty-string.test.mts +20 -0
- package/src/guard/is-non-null-object.test.mts +19 -0
- package/src/guard/is-primitive.test.mts +23 -0
- package/src/guard/is-record.mts +34 -0
- package/src/guard/is-record.test.mts +21 -0
- package/src/guard/is-type.mts +3 -0
- package/src/guard/is-type.test.mts +134 -0
- package/src/guard/key-is-in.mts +1 -0
- package/src/iterator/range.mts +9 -0
- package/src/json/json.mts +29 -0
- package/src/json/json.test.mts +87 -0
- package/src/number/branded-types/finite-number.test.mts +38 -0
- package/src/number/branded-types/int.mts +14 -0
- package/src/number/branded-types/int.test.mts +42 -0
- package/src/number/branded-types/int16.test.mts +47 -0
- package/src/number/branded-types/int32.test.mts +47 -0
- package/src/number/branded-types/non-negative-finite-number.test.mts +40 -0
- package/src/number/branded-types/non-negative-int16.test.mts +43 -0
- package/src/number/branded-types/non-negative-int32.test.mts +43 -0
- package/src/number/branded-types/non-zero-finite-number.test.mts +51 -0
- package/src/number/branded-types/non-zero-int.test.mts +53 -0
- package/src/number/branded-types/non-zero-int16.test.mts +44 -0
- package/src/number/branded-types/non-zero-int32.test.mts +44 -0
- package/src/number/branded-types/non-zero-safe-int.mts +2 -2
- package/src/number/branded-types/non-zero-safe-int.test.mts +62 -0
- package/src/number/branded-types/non-zero-uint16.test.mts +37 -0
- package/src/number/branded-types/non-zero-uint32.test.mts +37 -0
- package/src/number/branded-types/positive-finite-number.test.mts +45 -0
- package/src/number/branded-types/positive-int.mts +14 -0
- package/src/number/branded-types/positive-int.test.mts +47 -0
- package/src/number/branded-types/positive-int16.test.mts +35 -0
- package/src/number/branded-types/positive-int32.test.mts +35 -0
- package/src/number/branded-types/positive-safe-int.mts +22 -1
- package/src/number/branded-types/positive-safe-int.test.mts +49 -0
- package/src/number/branded-types/positive-uint16.test.mts +37 -0
- package/src/number/branded-types/positive-uint32.test.mts +37 -0
- package/src/number/branded-types/safe-int.mts +23 -2
- package/src/number/branded-types/safe-int.test.mts +52 -0
- package/src/number/branded-types/safe-uint.mts +1 -1
- package/src/number/branded-types/safe-uint.test.mts +48 -0
- package/src/number/branded-types/uint.mts +12 -0
- package/src/number/branded-types/uint.test.mts +43 -0
- package/src/number/branded-types/uint16.test.mts +41 -0
- package/src/number/branded-types/uint32.test.mts +41 -0
- package/src/number/enum/int8.test.mts +6 -0
- package/src/number/enum/uint8.test.mts +6 -0
- package/src/number/num.mts +12 -1
- package/src/number/num.test.mts +62 -0
- package/src/number/refined-number-utils.mts +25 -0
- package/src/object/object.mts +15 -0
- package/src/object/object.test.mts +10 -0
- package/src/others/cast-mutable.test.mts +7 -0
- package/src/others/cast-readonly.test.mts +17 -0
- package/src/others/if-then.test.mts +16 -0
- package/src/others/map-nullable.mts +3 -0
- package/src/others/map-nullable.test.mts +27 -0
- package/src/others/memoize-function.test.mts +41 -0
- package/src/others/tuple.mts +11 -0
- package/src/others/unknown-to-string.mts +4 -1
- package/src/others/unknown-to-string.test.mts +10 -0
- package/src/promise/promise.mts +4 -0
- package/src/promise/promise.test.mts +1 -0
package/src/object/object.mts
CHANGED
|
@@ -17,20 +17,25 @@ export namespace Obj {
|
|
|
17
17
|
*
|
|
18
18
|
* ```ts
|
|
19
19
|
* const obj1 = { name: 'Alice', age: 30 };
|
|
20
|
+
*
|
|
20
21
|
* const obj2 = { name: 'Alice', age: 30 };
|
|
22
|
+
*
|
|
21
23
|
* const obj3 = { name: 'Alice', age: 31 };
|
|
22
24
|
*
|
|
23
25
|
* assert.ok(Obj.shallowEq(obj1, obj2));
|
|
26
|
+
*
|
|
24
27
|
* assert.notOk(Obj.shallowEq(obj1, obj3));
|
|
25
28
|
*
|
|
26
29
|
* // Custom equality function
|
|
27
30
|
* const obj4 = { value: 1 };
|
|
31
|
+
*
|
|
28
32
|
* const obj5 = { value: 1.00001 };
|
|
29
33
|
*
|
|
30
34
|
* const closeEnough = (a: unknown, b: unknown): boolean => {
|
|
31
35
|
* if (typeof a === 'number' && typeof b === 'number') {
|
|
32
36
|
* return Math.abs(a - b) < 0.001;
|
|
33
37
|
* }
|
|
38
|
+
*
|
|
34
39
|
* return Object.is(a, b);
|
|
35
40
|
* };
|
|
36
41
|
*
|
|
@@ -50,6 +55,7 @@ export namespace Obj {
|
|
|
50
55
|
eq: (x: unknown, y: unknown) => boolean = Object.is,
|
|
51
56
|
): boolean => {
|
|
52
57
|
const aEntries = Object.entries(a);
|
|
58
|
+
|
|
53
59
|
const bEntries = Object.entries(b);
|
|
54
60
|
|
|
55
61
|
if (aEntries.length !== bEntries.length) return false;
|
|
@@ -78,6 +84,7 @@ export namespace Obj {
|
|
|
78
84
|
*
|
|
79
85
|
* // Direct usage
|
|
80
86
|
* const publicInfo = Obj.pick(user, ['id', 'name', 'role']);
|
|
87
|
+
*
|
|
81
88
|
* assert.deepStrictEqual(publicInfo, {
|
|
82
89
|
* id: 1,
|
|
83
90
|
* name: 'Bob',
|
|
@@ -122,6 +129,7 @@ export namespace Obj {
|
|
|
122
129
|
switch (args.length) {
|
|
123
130
|
case 2: {
|
|
124
131
|
const [record, keys] = args;
|
|
132
|
+
|
|
125
133
|
const keysSet = new Set<keyof R>(keys);
|
|
126
134
|
|
|
127
135
|
return (
|
|
@@ -134,6 +142,7 @@ export namespace Obj {
|
|
|
134
142
|
|
|
135
143
|
case 1: {
|
|
136
144
|
const [keys] = args;
|
|
145
|
+
|
|
137
146
|
return (record: R) => pick(record, keys);
|
|
138
147
|
}
|
|
139
148
|
}
|
|
@@ -161,6 +170,7 @@ export namespace Obj {
|
|
|
161
170
|
*
|
|
162
171
|
* // Direct usage - remove sensitive fields
|
|
163
172
|
* const safeUser = Obj.omit(user, ['password', 'internalNote']);
|
|
173
|
+
*
|
|
164
174
|
* assert.deepStrictEqual(safeUser, {
|
|
165
175
|
* id: 1,
|
|
166
176
|
* name: 'Charlie',
|
|
@@ -206,6 +216,7 @@ export namespace Obj {
|
|
|
206
216
|
switch (args.length) {
|
|
207
217
|
case 2: {
|
|
208
218
|
const [record, keys] = args;
|
|
219
|
+
|
|
209
220
|
const keysSet = new Set<keyof R>(keys);
|
|
210
221
|
|
|
211
222
|
return (
|
|
@@ -218,12 +229,14 @@ export namespace Obj {
|
|
|
218
229
|
|
|
219
230
|
case 1: {
|
|
220
231
|
const [keys] = args;
|
|
232
|
+
|
|
221
233
|
return <R2 extends UnknownRecord>(record: R2) => {
|
|
222
234
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
223
235
|
const result = omit(record, keys as readonly (keyof R2)[]) as Omit<
|
|
224
236
|
R2,
|
|
225
237
|
ArrayElement<Keys>
|
|
226
238
|
>;
|
|
239
|
+
|
|
227
240
|
return result;
|
|
228
241
|
};
|
|
229
242
|
}
|
|
@@ -253,6 +266,7 @@ export namespace Obj {
|
|
|
253
266
|
* ] as const;
|
|
254
267
|
*
|
|
255
268
|
* const obj1 = Obj.fromEntries(entries1);
|
|
269
|
+
*
|
|
256
270
|
* assert.deepStrictEqual(obj1, {
|
|
257
271
|
* name: 'David',
|
|
258
272
|
* age: 25,
|
|
@@ -266,6 +280,7 @@ export namespace Obj {
|
|
|
266
280
|
* ];
|
|
267
281
|
*
|
|
268
282
|
* const obj2 = Obj.fromEntries(dynamicEntries);
|
|
283
|
+
*
|
|
269
284
|
* assert.deepStrictEqual(obj2, { x: 10, y: 20 });
|
|
270
285
|
* ```
|
|
271
286
|
*
|
|
@@ -38,6 +38,7 @@ describe('pick', () => {
|
|
|
38
38
|
|
|
39
39
|
test('pick should support curried form', () => {
|
|
40
40
|
const pickAB = Obj.pick(['a', 'b']);
|
|
41
|
+
|
|
41
42
|
const result = pickAB({ a: 1, b: 2, c: 3, d: 4 });
|
|
42
43
|
|
|
43
44
|
assert.deepStrictEqual(result, { a: 1, b: 2 });
|
|
@@ -45,6 +46,7 @@ describe('pick', () => {
|
|
|
45
46
|
|
|
46
47
|
test('pick should work with pipe when curried', () => {
|
|
47
48
|
const pickIdAndName = Obj.pick(['id', 'name']);
|
|
49
|
+
|
|
48
50
|
const user = { id: 1, name: 'Alice', email: 'alice@example.com', age: 30 };
|
|
49
51
|
|
|
50
52
|
const result = pipe(user).map(pickIdAndName).value;
|
|
@@ -54,6 +56,7 @@ describe('pick', () => {
|
|
|
54
56
|
|
|
55
57
|
test('pick should handle empty keys in curried form', () => {
|
|
56
58
|
const pickNone = Obj.pick([]);
|
|
59
|
+
|
|
57
60
|
const result = pickNone({ a: 1, b: 2 });
|
|
58
61
|
|
|
59
62
|
assert.deepStrictEqual(result, {});
|
|
@@ -61,6 +64,7 @@ describe('pick', () => {
|
|
|
61
64
|
|
|
62
65
|
test('pick should work for records that only partially contain the key in curried form', () => {
|
|
63
66
|
const pickVisible = Obj.pick(['name', 'age']);
|
|
67
|
+
|
|
64
68
|
const user = {
|
|
65
69
|
id: 1,
|
|
66
70
|
name: 'Alice',
|
|
@@ -85,6 +89,7 @@ describe('omit', () => {
|
|
|
85
89
|
|
|
86
90
|
test('omit should support curried form', () => {
|
|
87
91
|
const omitC = Obj.omit(['c']);
|
|
92
|
+
|
|
88
93
|
const result = omitC({ a: 1, b: 2, c: 3, d: 4 });
|
|
89
94
|
|
|
90
95
|
assert.deepStrictEqual(result, { a: 1, b: 2, d: 4 });
|
|
@@ -92,6 +97,7 @@ describe('omit', () => {
|
|
|
92
97
|
|
|
93
98
|
test('omit should work with pipe when curried', () => {
|
|
94
99
|
const omitSensitive = Obj.omit(['password', 'email']);
|
|
100
|
+
|
|
95
101
|
const user = {
|
|
96
102
|
id: 1,
|
|
97
103
|
name: 'Alice',
|
|
@@ -106,7 +112,9 @@ describe('omit', () => {
|
|
|
106
112
|
|
|
107
113
|
test('omit should handle empty keys in curried form', () => {
|
|
108
114
|
const omitNone = Obj.omit([]);
|
|
115
|
+
|
|
109
116
|
const original = { a: 1, b: 2, c: 3 };
|
|
117
|
+
|
|
110
118
|
const result = omitNone(original);
|
|
111
119
|
|
|
112
120
|
assert.deepStrictEqual(result, original);
|
|
@@ -114,6 +122,7 @@ describe('omit', () => {
|
|
|
114
122
|
|
|
115
123
|
test('should omit multiple keys in curried form', () => {
|
|
116
124
|
const omitBAndD = Obj.omit(['b', 'd']);
|
|
125
|
+
|
|
117
126
|
const result = omitBAndD({ a: 1, b: 2, c: 3, d: 4, e: 5 });
|
|
118
127
|
|
|
119
128
|
assert.deepStrictEqual(result, { a: 1, c: 3, e: 5 });
|
|
@@ -121,6 +130,7 @@ describe('omit', () => {
|
|
|
121
130
|
|
|
122
131
|
test('omit should work for records that only partially contain the key in curried form', () => {
|
|
123
132
|
const omitSensitive = Obj.omit(['password', 'email']);
|
|
133
|
+
|
|
124
134
|
const user = {
|
|
125
135
|
id: 1,
|
|
126
136
|
name: 'Alice',
|
|
@@ -4,6 +4,7 @@ import { castDeepMutable, castMutable } from './cast-mutable.mjs';
|
|
|
4
4
|
describe(castMutable, () => {
|
|
5
5
|
test('should allow mutating arrays that were readonly', () => {
|
|
6
6
|
const readonlyArray: readonly number[] = [1, 2, 3];
|
|
7
|
+
|
|
7
8
|
const mut_array = castMutable(readonlyArray);
|
|
8
9
|
|
|
9
10
|
expectType<typeof mut_array, number[]>('=');
|
|
@@ -11,6 +12,7 @@ describe(castMutable, () => {
|
|
|
11
12
|
mut_array.push(4);
|
|
12
13
|
|
|
13
14
|
assert.deepStrictEqual(mut_array, [1, 2, 3, 4]);
|
|
15
|
+
|
|
14
16
|
assert.deepStrictEqual(readonlyArray, [1, 2, 3, 4]);
|
|
15
17
|
});
|
|
16
18
|
|
|
@@ -21,12 +23,15 @@ describe(castMutable, () => {
|
|
|
21
23
|
};
|
|
22
24
|
|
|
23
25
|
const mut_user = castMutable(readonlyUser);
|
|
26
|
+
|
|
24
27
|
expectType<typeof mut_user, { name: string; age: number }>('=');
|
|
25
28
|
|
|
26
29
|
mut_user.age = 31;
|
|
30
|
+
|
|
27
31
|
mut_user.name = 'Bob';
|
|
28
32
|
|
|
29
33
|
assert.deepStrictEqual(mut_user, { name: 'Bob', age: 31 });
|
|
34
|
+
|
|
30
35
|
assert.deepStrictEqual(readonlyUser, { name: 'Bob', age: 31 });
|
|
31
36
|
});
|
|
32
37
|
});
|
|
@@ -65,12 +70,14 @@ describe(castDeepMutable, () => {
|
|
|
65
70
|
expectType<typeof mut_state, MutableState>('~=');
|
|
66
71
|
|
|
67
72
|
mut_state.user.profile.tags.push('editor');
|
|
73
|
+
|
|
68
74
|
mut_state.user.profile.name = 'Bob';
|
|
69
75
|
|
|
70
76
|
assert.deepStrictEqual(mut_state.user.profile, {
|
|
71
77
|
name: 'Bob',
|
|
72
78
|
tags: ['admin', 'owner', 'editor'],
|
|
73
79
|
});
|
|
80
|
+
|
|
74
81
|
assert.deepStrictEqual(readonlyState.user.profile.tags, [
|
|
75
82
|
'admin',
|
|
76
83
|
'owner',
|
|
@@ -3,6 +3,7 @@ import { castDeepReadonly, castReadonly } from './cast-readonly.mjs';
|
|
|
3
3
|
describe(castReadonly, () => {
|
|
4
4
|
test('should cast mutable array to readonly', () => {
|
|
5
5
|
const mutableArr = [1, 2, 3];
|
|
6
|
+
|
|
6
7
|
const readonlyArr = castReadonly(mutableArr);
|
|
7
8
|
|
|
8
9
|
expect(readonlyArr).toBe(mutableArr); // Same reference
|
|
@@ -12,6 +13,7 @@ describe(castReadonly, () => {
|
|
|
12
13
|
|
|
13
14
|
test('should cast mutable object to readonly', () => {
|
|
14
15
|
const mutableObj = { x: 1, y: 2 };
|
|
16
|
+
|
|
15
17
|
const readonlyObj = castReadonly(mutableObj);
|
|
16
18
|
|
|
17
19
|
expect(readonlyObj).toBe(mutableObj); // Same reference
|
|
@@ -21,20 +23,25 @@ describe(castReadonly, () => {
|
|
|
21
23
|
|
|
22
24
|
test('should preserve the runtime value', () => {
|
|
23
25
|
const original = { value: 42 };
|
|
26
|
+
|
|
24
27
|
const readonly = castReadonly(original);
|
|
25
28
|
|
|
26
29
|
expect(readonly.value).toBe(42);
|
|
30
|
+
|
|
27
31
|
expect(Object.is(readonly, original)).toBe(true);
|
|
28
32
|
});
|
|
29
33
|
|
|
30
34
|
test('castReadonly should work with primitives', () => {
|
|
31
35
|
expect(castReadonly(42)).toBe(42);
|
|
36
|
+
|
|
32
37
|
expect(castReadonly('hello')).toBe('hello');
|
|
38
|
+
|
|
33
39
|
expect(castReadonly(true)).toBe(true);
|
|
34
40
|
});
|
|
35
41
|
|
|
36
42
|
test('castReadonly should work with null and undefined', () => {
|
|
37
43
|
expect(castReadonly(null)).toBeNull();
|
|
44
|
+
|
|
38
45
|
// eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
|
|
39
46
|
expect(castReadonly(undefined)).toBeUndefined();
|
|
40
47
|
});
|
|
@@ -46,6 +53,7 @@ describe(castDeepReadonly, () => {
|
|
|
46
53
|
a: { b: [1, 2, 3] },
|
|
47
54
|
c: { d: { e: 'value' } },
|
|
48
55
|
};
|
|
56
|
+
|
|
49
57
|
const readonlyNested = castDeepReadonly(mutableNested);
|
|
50
58
|
|
|
51
59
|
expect(readonlyNested).toBe(mutableNested); // Same reference
|
|
@@ -60,10 +68,13 @@ describe(castDeepReadonly, () => {
|
|
|
60
68
|
users: [{ id: 1, profile: { name: 'Alice' } }],
|
|
61
69
|
settings: { theme: 'dark', options: { debug: true } },
|
|
62
70
|
};
|
|
71
|
+
|
|
63
72
|
const readonly = castDeepReadonly(complex);
|
|
64
73
|
|
|
65
74
|
expect(readonly).toBe(complex);
|
|
75
|
+
|
|
66
76
|
expect(readonly.users[0]?.profile.name).toBe('Alice');
|
|
77
|
+
|
|
67
78
|
expect(readonly.settings.options.debug).toBe(true);
|
|
68
79
|
});
|
|
69
80
|
|
|
@@ -72,21 +83,27 @@ describe(castDeepReadonly, () => {
|
|
|
72
83
|
{ id: 1, meta: { active: true } },
|
|
73
84
|
{ id: 2, meta: { active: false } },
|
|
74
85
|
];
|
|
86
|
+
|
|
75
87
|
const readonly = castDeepReadonly(data);
|
|
76
88
|
|
|
77
89
|
expect(readonly).toBe(data);
|
|
90
|
+
|
|
78
91
|
expect(readonly[0]?.meta.active).toBe(true);
|
|
92
|
+
|
|
79
93
|
expect(readonly[1]?.meta.active).toBe(false);
|
|
80
94
|
});
|
|
81
95
|
|
|
82
96
|
test('castDeepReadonly should work with primitives', () => {
|
|
83
97
|
expect(castDeepReadonly(42)).toBe(42);
|
|
98
|
+
|
|
84
99
|
expect(castDeepReadonly('hello')).toBe('hello');
|
|
100
|
+
|
|
85
101
|
expect(castDeepReadonly(true)).toBe(true);
|
|
86
102
|
});
|
|
87
103
|
|
|
88
104
|
test('castDeepReadonly should work with null and undefined', () => {
|
|
89
105
|
expect(castDeepReadonly(null)).toBeNull();
|
|
106
|
+
|
|
90
107
|
// eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
|
|
91
108
|
expect(castDeepReadonly(undefined)).toBeUndefined();
|
|
92
109
|
});
|
|
@@ -18,12 +18,16 @@ describe(ifThen, () => {
|
|
|
18
18
|
test('should work for validation logic', () => {
|
|
19
19
|
const validateField = (value: string, isRequired: boolean): boolean => {
|
|
20
20
|
const hasValue = value.trim().length > 0;
|
|
21
|
+
|
|
21
22
|
return ifThen(isRequired, hasValue);
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
expect(validateField('hello', true)).toBe(true); // required and has value
|
|
26
|
+
|
|
25
27
|
expect(validateField('', true)).toBe(false); // required but no value
|
|
28
|
+
|
|
26
29
|
expect(validateField('', false)).toBe(true); // not required, so valid
|
|
30
|
+
|
|
27
31
|
expect(validateField('hello', false)).toBe(true); // not required, has value
|
|
28
32
|
});
|
|
29
33
|
|
|
@@ -36,8 +40,11 @@ describe(ifThen, () => {
|
|
|
36
40
|
ifThen(isAdmin, hasPermission);
|
|
37
41
|
|
|
38
42
|
expect(checkPermission(true, true)).toBe(true); // admin with permission
|
|
43
|
+
|
|
39
44
|
expect(checkPermission(true, false)).toBe(false); // admin without permission
|
|
45
|
+
|
|
40
46
|
expect(checkPermission(false, true)).toBe(true); // non-admin with permission
|
|
47
|
+
|
|
41
48
|
expect(checkPermission(false, false)).toBe(true); // non-admin without permission
|
|
42
49
|
});
|
|
43
50
|
|
|
@@ -50,8 +57,11 @@ describe(ifThen, () => {
|
|
|
50
57
|
ifThen(isPremium, hasAllFeatures);
|
|
51
58
|
|
|
52
59
|
expect(validateSubscription(true, true)).toBe(true); // premium with all features
|
|
60
|
+
|
|
53
61
|
expect(validateSubscription(true, false)).toBe(false); // premium without all features
|
|
62
|
+
|
|
54
63
|
expect(validateSubscription(false, true)).toBe(true); // non-premium with features
|
|
64
|
+
|
|
55
65
|
expect(validateSubscription(false, false)).toBe(true); // non-premium without features
|
|
56
66
|
});
|
|
57
67
|
|
|
@@ -60,8 +70,11 @@ describe(ifThen, () => {
|
|
|
60
70
|
ifThen(a, b) && ifThen(b, c);
|
|
61
71
|
|
|
62
72
|
expect(validateChain(true, true, true)).toBe(true); // valid chain
|
|
73
|
+
|
|
63
74
|
expect(validateChain(true, false, true)).toBe(false); // breaks at first implication
|
|
75
|
+
|
|
64
76
|
expect(validateChain(false, false, false)).toBe(true); // vacuously true chain
|
|
77
|
+
|
|
65
78
|
expect(validateChain(true, true, false)).toBe(false); // breaks at second implication
|
|
66
79
|
});
|
|
67
80
|
|
|
@@ -71,8 +84,11 @@ describe(ifThen, () => {
|
|
|
71
84
|
ifThen(!isExpired, isValid);
|
|
72
85
|
|
|
73
86
|
expect(checkExpiredLogic(false, true)).toBe(true); // not expired and valid
|
|
87
|
+
|
|
74
88
|
expect(checkExpiredLogic(false, false)).toBe(false); // not expired but invalid
|
|
89
|
+
|
|
75
90
|
expect(checkExpiredLogic(true, true)).toBe(true); // expired but valid (vacuous)
|
|
91
|
+
|
|
76
92
|
expect(checkExpiredLogic(true, false)).toBe(true); // expired and invalid (vacuous)
|
|
77
93
|
});
|
|
78
94
|
});
|
|
@@ -36,10 +36,13 @@ export function mapNullable<const A, const B>(
|
|
|
36
36
|
switch (args.length) {
|
|
37
37
|
case 2: {
|
|
38
38
|
const [value, mapFn] = args;
|
|
39
|
+
|
|
39
40
|
return value == null ? undefined : mapFn(value);
|
|
40
41
|
}
|
|
42
|
+
|
|
41
43
|
case 1: {
|
|
42
44
|
const [mapFn] = args;
|
|
45
|
+
|
|
43
46
|
return (value: A | null | undefined) => mapNullable(value, mapFn);
|
|
44
47
|
}
|
|
45
48
|
}
|
|
@@ -38,6 +38,7 @@ describe(mapNullable, () => {
|
|
|
38
38
|
|
|
39
39
|
test('should work with complex transformations', () => {
|
|
40
40
|
const user = { name: 'Alice', age: 30 };
|
|
41
|
+
|
|
41
42
|
const result = mapNullable(
|
|
42
43
|
user,
|
|
43
44
|
(u) => `${u.name} is ${u.age} years old`,
|
|
@@ -48,11 +49,13 @@ describe(mapNullable, () => {
|
|
|
48
49
|
|
|
49
50
|
test('should work with nullable object properties', () => {
|
|
50
51
|
const user: { name?: string } = { name: 'Bob' };
|
|
52
|
+
|
|
51
53
|
const result = mapNullable(user.name, (name) => name.toUpperCase());
|
|
52
54
|
|
|
53
55
|
expect(result).toBe('BOB');
|
|
54
56
|
|
|
55
57
|
const userWithoutName: { name?: string } = {};
|
|
58
|
+
|
|
56
59
|
const resultEmpty = mapNullable(userWithoutName.name, (name) =>
|
|
57
60
|
name.toUpperCase(),
|
|
58
61
|
);
|
|
@@ -100,6 +103,7 @@ describe(mapNullable, () => {
|
|
|
100
103
|
);
|
|
101
104
|
|
|
102
105
|
const user = { name: 'Charlie', age: 25 };
|
|
106
|
+
|
|
103
107
|
const result1 = getName(user);
|
|
104
108
|
|
|
105
109
|
expect(result1).toBe('Charlie');
|
|
@@ -111,6 +115,7 @@ describe(mapNullable, () => {
|
|
|
111
115
|
|
|
112
116
|
test('should work with pipe composition', () => {
|
|
113
117
|
const toUpperCase = mapNullable((s: string) => s.toUpperCase());
|
|
118
|
+
|
|
114
119
|
const addGreeting = mapNullable((s: string) => `Hello, ${s}!`);
|
|
115
120
|
|
|
116
121
|
const result = pipe('world').map(toUpperCase).map(addGreeting).value;
|
|
@@ -120,6 +125,7 @@ describe(mapNullable, () => {
|
|
|
120
125
|
|
|
121
126
|
test('should handle null values in pipe composition', () => {
|
|
122
127
|
const toUpperCase = mapNullable((s: string) => s.toUpperCase());
|
|
128
|
+
|
|
123
129
|
const addGreeting = mapNullable((s: string) => `Hello, ${s}!`);
|
|
124
130
|
|
|
125
131
|
const result = pipe(null as string | null)
|
|
@@ -131,7 +137,9 @@ describe(mapNullable, () => {
|
|
|
131
137
|
|
|
132
138
|
test('should work with multiple transformations in pipe', () => {
|
|
133
139
|
const toStr = mapNullable((n: number) => n.toString());
|
|
140
|
+
|
|
134
141
|
const addPrefix = mapNullable((s: string) => `Number: ${s}`);
|
|
142
|
+
|
|
135
143
|
const toUpperCase = mapNullable((s: string) => s.toUpperCase());
|
|
136
144
|
|
|
137
145
|
const result = pipe(42 as number | null)
|
|
@@ -206,7 +214,9 @@ describe(mapNullable, () => {
|
|
|
206
214
|
const getValue = (): string | null => 'hello';
|
|
207
215
|
|
|
208
216
|
const step1 = mapNullable(getValue(), (s) => s.toUpperCase());
|
|
217
|
+
|
|
209
218
|
const step2 = mapNullable(step1, (s) => s.length);
|
|
219
|
+
|
|
210
220
|
const step3 = mapNullable(step2, (n) => n * 2);
|
|
211
221
|
|
|
212
222
|
expect(step3).toBe(10); // 'HELLO'.length * 2 = 5 * 2 = 10
|
|
@@ -216,25 +226,33 @@ describe(mapNullable, () => {
|
|
|
216
226
|
const getValue = (): string | null => null;
|
|
217
227
|
|
|
218
228
|
const step1 = mapNullable(getValue(), (s) => s.toUpperCase());
|
|
229
|
+
|
|
219
230
|
const step2 = mapNullable(step1, (s) => s.length);
|
|
231
|
+
|
|
220
232
|
const step3 = mapNullable(step2, (n) => n * 2);
|
|
221
233
|
|
|
222
234
|
expect(step1).toBeUndefined();
|
|
235
|
+
|
|
223
236
|
expect(step2).toBeUndefined();
|
|
237
|
+
|
|
224
238
|
expect(step3).toBeUndefined();
|
|
225
239
|
});
|
|
226
240
|
|
|
227
241
|
test('should work with curried functions in chain', () => {
|
|
228
242
|
const toUpperCase = mapNullable((s: string) => s.toUpperCase());
|
|
243
|
+
|
|
229
244
|
const getLength = mapNullable((s: string) => s.length);
|
|
245
|
+
|
|
230
246
|
const double = mapNullable((n: number) => n * 2);
|
|
231
247
|
|
|
232
248
|
const input1 = 'hello';
|
|
249
|
+
|
|
233
250
|
const result1 = double(getLength(toUpperCase(input1)));
|
|
234
251
|
|
|
235
252
|
expect(result1).toBe(10);
|
|
236
253
|
|
|
237
254
|
const input2: string | null = null;
|
|
255
|
+
|
|
238
256
|
const result2 = double(getLength(toUpperCase(input2)));
|
|
239
257
|
|
|
240
258
|
expect(result2).toBeUndefined();
|
|
@@ -264,9 +282,11 @@ describe(mapNullable, () => {
|
|
|
264
282
|
const extractUserName = mapNullable(
|
|
265
283
|
(r: ApiResponse) => r.data?.user?.name,
|
|
266
284
|
);
|
|
285
|
+
|
|
267
286
|
const formatName = mapNullable((name: string) => `Mr. ${name}`);
|
|
268
287
|
|
|
269
288
|
const userName = extractUserName(response);
|
|
289
|
+
|
|
270
290
|
const formattedName = formatName(userName);
|
|
271
291
|
|
|
272
292
|
expect(formattedName).toBe('Mr. John Doe');
|
|
@@ -284,15 +304,19 @@ describe(mapNullable, () => {
|
|
|
284
304
|
};
|
|
285
305
|
|
|
286
306
|
const extractAge = mapNullable((data: FormDataType) => data.age);
|
|
307
|
+
|
|
287
308
|
const parseAge = mapNullable((ageStr: string) =>
|
|
288
309
|
Number.parseInt(ageStr, 10),
|
|
289
310
|
);
|
|
311
|
+
|
|
290
312
|
const validateAge = mapNullable((age: number) =>
|
|
291
313
|
age >= 18 ? age : null,
|
|
292
314
|
);
|
|
293
315
|
|
|
294
316
|
const extractedAge = extractAge(formData);
|
|
317
|
+
|
|
295
318
|
const parsedAge = parseAge(extractedAge);
|
|
319
|
+
|
|
296
320
|
const validAge = validateAge(parsedAge);
|
|
297
321
|
|
|
298
322
|
expect(validAge).toBe(25);
|
|
@@ -310,14 +334,17 @@ describe(mapNullable, () => {
|
|
|
310
334
|
};
|
|
311
335
|
|
|
312
336
|
const extractAge = mapNullable((data: FormDataType) => data.age);
|
|
337
|
+
|
|
313
338
|
const parseAge = mapNullable((ageStr: string) =>
|
|
314
339
|
Number.parseInt(ageStr, 10),
|
|
315
340
|
);
|
|
316
341
|
|
|
317
342
|
const extractedAge = extractAge(incompleteFormData);
|
|
343
|
+
|
|
318
344
|
const parsedAge = parseAge(extractedAge);
|
|
319
345
|
|
|
320
346
|
expect(extractedAge).toBeUndefined();
|
|
347
|
+
|
|
321
348
|
expect(parsedAge).toBeUndefined();
|
|
322
349
|
});
|
|
323
350
|
});
|