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
|
@@ -25,14 +25,19 @@ describe(isUndefined, () => {
|
|
|
25
25
|
|
|
26
26
|
test('should return false for non-undefined values', () => {
|
|
27
27
|
expect(isUndefined(null)).toBe(false);
|
|
28
|
+
|
|
28
29
|
expect(isUndefined(0)).toBe(false);
|
|
30
|
+
|
|
29
31
|
expect(isUndefined('')).toBe(false);
|
|
32
|
+
|
|
30
33
|
expect(isUndefined(false)).toBe(false);
|
|
34
|
+
|
|
31
35
|
expect(isUndefined({})).toBe(false);
|
|
32
36
|
});
|
|
33
37
|
|
|
34
38
|
test('should act as a type guard', () => {
|
|
35
39
|
const value: string | undefined = undefined;
|
|
40
|
+
|
|
36
41
|
if (isUndefined(value)) {
|
|
37
42
|
expectType<typeof value, undefined>('=');
|
|
38
43
|
}
|
|
@@ -46,13 +51,17 @@ describe(isNotUndefined, () => {
|
|
|
46
51
|
|
|
47
52
|
test('should return true for non-undefined values', () => {
|
|
48
53
|
expect(isNotUndefined(null)).toBe(true);
|
|
54
|
+
|
|
49
55
|
expect(isNotUndefined(0)).toBe(true);
|
|
56
|
+
|
|
50
57
|
expect(isNotUndefined('')).toBe(true);
|
|
58
|
+
|
|
51
59
|
expect(isNotUndefined(false)).toBe(true);
|
|
52
60
|
});
|
|
53
61
|
|
|
54
62
|
test('should narrow types correctly', () => {
|
|
55
63
|
const value: string | undefined = 'test';
|
|
64
|
+
|
|
56
65
|
if (isNotUndefined(value)) {
|
|
57
66
|
expectType<typeof value, string>('=');
|
|
58
67
|
}
|
|
@@ -66,14 +75,19 @@ describe(isNull, () => {
|
|
|
66
75
|
|
|
67
76
|
test('should return false for non-null values', () => {
|
|
68
77
|
expect(isNull(undefined)).toBe(false);
|
|
78
|
+
|
|
69
79
|
expect(isNull(0)).toBe(false);
|
|
80
|
+
|
|
70
81
|
expect(isNull('')).toBe(false);
|
|
82
|
+
|
|
71
83
|
expect(isNull(false)).toBe(false);
|
|
84
|
+
|
|
72
85
|
expect(isNull({})).toBe(false);
|
|
73
86
|
});
|
|
74
87
|
|
|
75
88
|
test('should act as a type guard', () => {
|
|
76
89
|
const value: string | null = null;
|
|
90
|
+
|
|
77
91
|
if (isNull(value)) {
|
|
78
92
|
expectType<typeof value, null>('=');
|
|
79
93
|
}
|
|
@@ -87,12 +101,15 @@ describe(isNotNull, () => {
|
|
|
87
101
|
|
|
88
102
|
test('should return true for non-null values', () => {
|
|
89
103
|
expect(isNotNull(undefined)).toBe(true);
|
|
104
|
+
|
|
90
105
|
expect(isNotNull(0)).toBe(true);
|
|
106
|
+
|
|
91
107
|
expect(isNotNull('')).toBe(true);
|
|
92
108
|
});
|
|
93
109
|
|
|
94
110
|
test('should narrow types correctly', () => {
|
|
95
111
|
const value: string | null = 'test';
|
|
112
|
+
|
|
96
113
|
if (isNotNull(value)) {
|
|
97
114
|
expectType<typeof value, string>('=');
|
|
98
115
|
}
|
|
@@ -102,22 +119,30 @@ describe(isNotNull, () => {
|
|
|
102
119
|
describe(isString, () => {
|
|
103
120
|
test('should return true for strings', () => {
|
|
104
121
|
expect(isString('')).toBe(true);
|
|
122
|
+
|
|
105
123
|
expect(isString('hello')).toBe(true);
|
|
124
|
+
|
|
106
125
|
expect(isString('123')).toBe(true);
|
|
126
|
+
|
|
107
127
|
expect(isString(`template`)).toBe(true);
|
|
108
128
|
});
|
|
109
129
|
|
|
110
130
|
test('should return false for non-strings', () => {
|
|
111
131
|
expect(isString(123)).toBe(false);
|
|
132
|
+
|
|
112
133
|
expect(isString(true)).toBe(false);
|
|
134
|
+
|
|
113
135
|
expect(isString(null)).toBe(false);
|
|
136
|
+
|
|
114
137
|
expect(isString(undefined)).toBe(false);
|
|
138
|
+
|
|
115
139
|
// eslint-disable-next-line unicorn/new-for-builtins
|
|
116
140
|
expect(isString(new String('hello'))).toBe(false);
|
|
117
141
|
});
|
|
118
142
|
|
|
119
143
|
test('should act as a type guard', () => {
|
|
120
144
|
const value: unknown = 'test';
|
|
145
|
+
|
|
121
146
|
if (isString(value)) {
|
|
122
147
|
expectType<typeof value, string>('=');
|
|
123
148
|
|
|
@@ -129,24 +154,34 @@ describe(isString, () => {
|
|
|
129
154
|
describe(isNumber, () => {
|
|
130
155
|
test('should return true for numbers', () => {
|
|
131
156
|
expect(isNumber(0)).toBe(true);
|
|
157
|
+
|
|
132
158
|
expect(isNumber(42)).toBe(true);
|
|
159
|
+
|
|
133
160
|
expect(isNumber(-3.14)).toBe(true);
|
|
161
|
+
|
|
134
162
|
expect(isNumber(Number.NaN)).toBe(true);
|
|
163
|
+
|
|
135
164
|
expect(isNumber(Number.POSITIVE_INFINITY)).toBe(true);
|
|
165
|
+
|
|
136
166
|
expect(isNumber(Number.NEGATIVE_INFINITY)).toBe(true);
|
|
137
167
|
});
|
|
138
168
|
|
|
139
169
|
test('should return false for non-numbers', () => {
|
|
140
170
|
expect(isNumber('123')).toBe(false);
|
|
171
|
+
|
|
141
172
|
expect(isNumber(true)).toBe(false);
|
|
173
|
+
|
|
142
174
|
expect(isNumber(null)).toBe(false);
|
|
175
|
+
|
|
143
176
|
expect(isNumber(123n)).toBe(false);
|
|
177
|
+
|
|
144
178
|
// eslint-disable-next-line unicorn/new-for-builtins
|
|
145
179
|
expect(isNumber(new Number(42))).toBe(false);
|
|
146
180
|
});
|
|
147
181
|
|
|
148
182
|
test('should act as a type guard', () => {
|
|
149
183
|
const value: unknown = 42;
|
|
184
|
+
|
|
150
185
|
if (isNumber(value)) {
|
|
151
186
|
expectType<typeof value, number>('=');
|
|
152
187
|
|
|
@@ -158,19 +193,25 @@ describe(isNumber, () => {
|
|
|
158
193
|
describe(isBigint, () => {
|
|
159
194
|
test('should return true for bigints', () => {
|
|
160
195
|
expect(isBigint(0n)).toBe(true);
|
|
196
|
+
|
|
161
197
|
expect(isBigint(123n)).toBe(true);
|
|
198
|
+
|
|
162
199
|
expect(isBigint(-456n)).toBe(true);
|
|
163
200
|
});
|
|
164
201
|
|
|
165
202
|
test('should return false for non-bigints', () => {
|
|
166
203
|
expect(isBigint(123)).toBe(false);
|
|
204
|
+
|
|
167
205
|
expect(isBigint('123')).toBe(false);
|
|
206
|
+
|
|
168
207
|
expect(isBigint(true)).toBe(false);
|
|
208
|
+
|
|
169
209
|
expect(isBigint(null)).toBe(false);
|
|
170
210
|
});
|
|
171
211
|
|
|
172
212
|
test('should act as a type guard', () => {
|
|
173
213
|
const value: unknown = 123n;
|
|
214
|
+
|
|
174
215
|
if (isBigint(value)) {
|
|
175
216
|
expectType<typeof value, bigint>('=');
|
|
176
217
|
|
|
@@ -182,20 +223,26 @@ describe(isBigint, () => {
|
|
|
182
223
|
describe(isBoolean, () => {
|
|
183
224
|
test('should return true for booleans', () => {
|
|
184
225
|
expect(isBoolean(true)).toBe(true);
|
|
226
|
+
|
|
185
227
|
expect(isBoolean(false)).toBe(true);
|
|
186
228
|
});
|
|
187
229
|
|
|
188
230
|
test('should return false for non-booleans', () => {
|
|
189
231
|
expect(isBoolean(1)).toBe(false);
|
|
232
|
+
|
|
190
233
|
expect(isBoolean(0)).toBe(false);
|
|
234
|
+
|
|
191
235
|
expect(isBoolean('true')).toBe(false);
|
|
236
|
+
|
|
192
237
|
expect(isBoolean(null)).toBe(false);
|
|
238
|
+
|
|
193
239
|
// eslint-disable-next-line unicorn/new-for-builtins
|
|
194
240
|
expect(isBoolean(new Boolean(true))).toBe(false);
|
|
195
241
|
});
|
|
196
242
|
|
|
197
243
|
test('should act as a type guard', () => {
|
|
198
244
|
const value: unknown = true;
|
|
245
|
+
|
|
199
246
|
if (isBoolean(value)) {
|
|
200
247
|
expectType<typeof value, boolean>('=');
|
|
201
248
|
|
|
@@ -207,18 +254,23 @@ describe(isBoolean, () => {
|
|
|
207
254
|
describe(isSymbol, () => {
|
|
208
255
|
test('should return true for symbols', () => {
|
|
209
256
|
expect(isSymbol(Symbol())).toBe(true);
|
|
257
|
+
|
|
210
258
|
expect(isSymbol(Symbol('test'))).toBe(true);
|
|
259
|
+
|
|
211
260
|
expect(isSymbol(Symbol.iterator)).toBe(true);
|
|
212
261
|
});
|
|
213
262
|
|
|
214
263
|
test('should return false for non-symbols', () => {
|
|
215
264
|
expect(isSymbol('symbol')).toBe(false);
|
|
265
|
+
|
|
216
266
|
expect(isSymbol(123)).toBe(false);
|
|
267
|
+
|
|
217
268
|
expect(isSymbol(null)).toBe(false);
|
|
218
269
|
});
|
|
219
270
|
|
|
220
271
|
test('should act as a type guard', () => {
|
|
221
272
|
const value: unknown = Symbol('test');
|
|
273
|
+
|
|
222
274
|
if (isSymbol(value)) {
|
|
223
275
|
expectType<typeof value, symbol>('=');
|
|
224
276
|
|
|
@@ -230,22 +282,31 @@ describe(isSymbol, () => {
|
|
|
230
282
|
describe(isNotBoolean, () => {
|
|
231
283
|
test('should return false for boolean values', () => {
|
|
232
284
|
expect(isNotBoolean(true)).toBe(false);
|
|
285
|
+
|
|
233
286
|
expect(isNotBoolean(false)).toBe(false);
|
|
234
287
|
});
|
|
235
288
|
|
|
236
289
|
test('should return true for non-boolean values', () => {
|
|
237
290
|
expect(isNotBoolean(0)).toBe(true);
|
|
291
|
+
|
|
238
292
|
expect(isNotBoolean(1)).toBe(true);
|
|
293
|
+
|
|
239
294
|
expect(isNotBoolean('true')).toBe(true);
|
|
295
|
+
|
|
240
296
|
expect(isNotBoolean('false')).toBe(true);
|
|
297
|
+
|
|
241
298
|
expect(isNotBoolean(null)).toBe(true);
|
|
299
|
+
|
|
242
300
|
expect(isNotBoolean(undefined)).toBe(true);
|
|
301
|
+
|
|
243
302
|
expect(isNotBoolean({})).toBe(true);
|
|
303
|
+
|
|
244
304
|
expect(isNotBoolean([])).toBe(true);
|
|
245
305
|
});
|
|
246
306
|
|
|
247
307
|
test('should act as a type guard', () => {
|
|
248
308
|
const value: string | number | boolean = 'test';
|
|
309
|
+
|
|
249
310
|
if (isNotBoolean(value)) {
|
|
250
311
|
expectType<typeof value, string | number>('<=');
|
|
251
312
|
|
|
@@ -258,27 +319,41 @@ describe(isNotBoolean, () => {
|
|
|
258
319
|
describe(isNotNumber, () => {
|
|
259
320
|
test('should return false for number values', () => {
|
|
260
321
|
expect(isNotNumber(0)).toBe(false);
|
|
322
|
+
|
|
261
323
|
expect(isNotNumber(42)).toBe(false);
|
|
324
|
+
|
|
262
325
|
expect(isNotNumber(-3.14)).toBe(false);
|
|
326
|
+
|
|
263
327
|
expect(isNotNumber(Number.NaN)).toBe(false);
|
|
328
|
+
|
|
264
329
|
expect(isNotNumber(Number.POSITIVE_INFINITY)).toBe(false);
|
|
330
|
+
|
|
265
331
|
expect(isNotNumber(Number.NEGATIVE_INFINITY)).toBe(false);
|
|
266
332
|
});
|
|
267
333
|
|
|
268
334
|
test('should return true for non-number values', () => {
|
|
269
335
|
expect(isNotNumber('123')).toBe(true);
|
|
336
|
+
|
|
270
337
|
expect(isNotNumber(true)).toBe(true);
|
|
338
|
+
|
|
271
339
|
expect(isNotNumber(false)).toBe(true);
|
|
340
|
+
|
|
272
341
|
expect(isNotNumber(null)).toBe(true);
|
|
342
|
+
|
|
273
343
|
expect(isNotNumber(undefined)).toBe(true);
|
|
344
|
+
|
|
274
345
|
expect(isNotNumber(123n)).toBe(true);
|
|
346
|
+
|
|
275
347
|
expect(isNotNumber({})).toBe(true);
|
|
348
|
+
|
|
276
349
|
expect(isNotNumber([])).toBe(true);
|
|
350
|
+
|
|
277
351
|
expect(isNotNumber(Symbol('test'))).toBe(true);
|
|
278
352
|
});
|
|
279
353
|
|
|
280
354
|
test('should act as a type guard', () => {
|
|
281
355
|
const value: string | number | boolean = 'test';
|
|
356
|
+
|
|
282
357
|
if (isNotNumber(value)) {
|
|
283
358
|
expectType<typeof value, string | boolean>('<=');
|
|
284
359
|
|
|
@@ -292,23 +367,33 @@ describe(isNotNumber, () => {
|
|
|
292
367
|
describe(isNotBigint, () => {
|
|
293
368
|
test('should return false for bigint values', () => {
|
|
294
369
|
expect(isNotBigint(0n)).toBe(false);
|
|
370
|
+
|
|
295
371
|
expect(isNotBigint(123n)).toBe(false);
|
|
372
|
+
|
|
296
373
|
expect(isNotBigint(-456n)).toBe(false);
|
|
297
374
|
});
|
|
298
375
|
|
|
299
376
|
test('should return true for non-bigint values', () => {
|
|
300
377
|
expect(isNotBigint(123)).toBe(true);
|
|
378
|
+
|
|
301
379
|
expect(isNotBigint('123')).toBe(true);
|
|
380
|
+
|
|
302
381
|
expect(isNotBigint(true)).toBe(true);
|
|
382
|
+
|
|
303
383
|
expect(isNotBigint(false)).toBe(true);
|
|
384
|
+
|
|
304
385
|
expect(isNotBigint(null)).toBe(true);
|
|
386
|
+
|
|
305
387
|
expect(isNotBigint(undefined)).toBe(true);
|
|
388
|
+
|
|
306
389
|
expect(isNotBigint({})).toBe(true);
|
|
390
|
+
|
|
307
391
|
expect(isNotBigint(Symbol('test'))).toBe(true);
|
|
308
392
|
});
|
|
309
393
|
|
|
310
394
|
test('should act as a type guard', () => {
|
|
311
395
|
const value: number | bigint = 123;
|
|
396
|
+
|
|
312
397
|
if (isNotBigint(value)) {
|
|
313
398
|
expectType<typeof value, number>('<=');
|
|
314
399
|
|
|
@@ -320,25 +405,37 @@ describe(isNotBigint, () => {
|
|
|
320
405
|
describe(isNotString, () => {
|
|
321
406
|
test('should return false for string values', () => {
|
|
322
407
|
expect(isNotString('')).toBe(false);
|
|
408
|
+
|
|
323
409
|
expect(isNotString('hello')).toBe(false);
|
|
410
|
+
|
|
324
411
|
expect(isNotString('123')).toBe(false);
|
|
412
|
+
|
|
325
413
|
expect(isNotString(`template`)).toBe(false);
|
|
326
414
|
});
|
|
327
415
|
|
|
328
416
|
test('should return true for non-string values', () => {
|
|
329
417
|
expect(isNotString(123)).toBe(true);
|
|
418
|
+
|
|
330
419
|
expect(isNotString(true)).toBe(true);
|
|
420
|
+
|
|
331
421
|
expect(isNotString(false)).toBe(true);
|
|
422
|
+
|
|
332
423
|
expect(isNotString(null)).toBe(true);
|
|
424
|
+
|
|
333
425
|
expect(isNotString(undefined)).toBe(true);
|
|
426
|
+
|
|
334
427
|
expect(isNotString({})).toBe(true);
|
|
428
|
+
|
|
335
429
|
expect(isNotString([])).toBe(true);
|
|
430
|
+
|
|
336
431
|
expect(isNotString(Symbol('test'))).toBe(true);
|
|
432
|
+
|
|
337
433
|
expect(isNotString(123n)).toBe(true);
|
|
338
434
|
});
|
|
339
435
|
|
|
340
436
|
test('should act as a type guard', () => {
|
|
341
437
|
const value: string | number | boolean = 42;
|
|
438
|
+
|
|
342
439
|
if (isNotString(value)) {
|
|
343
440
|
expectType<typeof value, number | boolean>('<=');
|
|
344
441
|
|
|
@@ -352,24 +449,35 @@ describe(isNotString, () => {
|
|
|
352
449
|
describe(isNotSymbol, () => {
|
|
353
450
|
test('should return false for symbol values', () => {
|
|
354
451
|
expect(isNotSymbol(Symbol())).toBe(false);
|
|
452
|
+
|
|
355
453
|
expect(isNotSymbol(Symbol('test'))).toBe(false);
|
|
454
|
+
|
|
356
455
|
expect(isNotSymbol(Symbol.iterator)).toBe(false);
|
|
357
456
|
});
|
|
358
457
|
|
|
359
458
|
test('should return true for non-symbol values', () => {
|
|
360
459
|
expect(isNotSymbol('symbol')).toBe(true);
|
|
460
|
+
|
|
361
461
|
expect(isNotSymbol(123)).toBe(true);
|
|
462
|
+
|
|
362
463
|
expect(isNotSymbol(true)).toBe(true);
|
|
464
|
+
|
|
363
465
|
expect(isNotSymbol(false)).toBe(true);
|
|
466
|
+
|
|
364
467
|
expect(isNotSymbol(null)).toBe(true);
|
|
468
|
+
|
|
365
469
|
expect(isNotSymbol(undefined)).toBe(true);
|
|
470
|
+
|
|
366
471
|
expect(isNotSymbol({})).toBe(true);
|
|
472
|
+
|
|
367
473
|
expect(isNotSymbol([])).toBe(true);
|
|
474
|
+
|
|
368
475
|
expect(isNotSymbol(123n)).toBe(true);
|
|
369
476
|
});
|
|
370
477
|
|
|
371
478
|
test('should act as a type guard', () => {
|
|
372
479
|
const value: string | number | symbol = 'test';
|
|
480
|
+
|
|
373
481
|
if (isNotSymbol(value)) {
|
|
374
482
|
expectType<typeof value, string | number>('<=');
|
|
375
483
|
|
|
@@ -381,22 +489,31 @@ describe(isNotSymbol, () => {
|
|
|
381
489
|
describe(isNullish, () => {
|
|
382
490
|
test('should return true for null and undefined', () => {
|
|
383
491
|
expect(isNullish(null)).toBe(true);
|
|
492
|
+
|
|
384
493
|
expect(isNullish(undefined)).toBe(true);
|
|
385
494
|
});
|
|
386
495
|
|
|
387
496
|
test('should return false for non-nullish values', () => {
|
|
388
497
|
expect(isNullish(0)).toBe(false);
|
|
498
|
+
|
|
389
499
|
expect(isNullish(false)).toBe(false);
|
|
500
|
+
|
|
390
501
|
expect(isNullish('')).toBe(false);
|
|
502
|
+
|
|
391
503
|
expect(isNullish('null')).toBe(false);
|
|
504
|
+
|
|
392
505
|
expect(isNullish('undefined')).toBe(false);
|
|
506
|
+
|
|
393
507
|
expect(isNullish({})).toBe(false);
|
|
508
|
+
|
|
394
509
|
expect(isNullish([])).toBe(false);
|
|
510
|
+
|
|
395
511
|
expect(isNullish(Number.NaN)).toBe(false);
|
|
396
512
|
});
|
|
397
513
|
|
|
398
514
|
test('should act as a type guard', () => {
|
|
399
515
|
const value: string | null | undefined = null;
|
|
516
|
+
|
|
400
517
|
if (isNullish(value)) {
|
|
401
518
|
expectType<typeof value, null | undefined>('<=');
|
|
402
519
|
|
|
@@ -408,6 +525,7 @@ describe(isNullish, () => {
|
|
|
408
525
|
test('should handle edge cases', () => {
|
|
409
526
|
// Test that it uses loose equality (==)
|
|
410
527
|
expect(isNullish(null)).toBe(true);
|
|
528
|
+
|
|
411
529
|
expect(isNullish(undefined)).toBe(true);
|
|
412
530
|
});
|
|
413
531
|
});
|
|
@@ -415,24 +533,35 @@ describe(isNullish, () => {
|
|
|
415
533
|
describe(isNonNullish, () => {
|
|
416
534
|
test('should return false for null and undefined', () => {
|
|
417
535
|
expect(isNonNullish(null)).toBe(false);
|
|
536
|
+
|
|
418
537
|
expect(isNonNullish(undefined)).toBe(false);
|
|
419
538
|
});
|
|
420
539
|
|
|
421
540
|
test('should return true for non-nullish values', () => {
|
|
422
541
|
expect(isNonNullish(0)).toBe(true);
|
|
542
|
+
|
|
423
543
|
expect(isNonNullish(false)).toBe(true);
|
|
544
|
+
|
|
424
545
|
expect(isNonNullish('')).toBe(true);
|
|
546
|
+
|
|
425
547
|
expect(isNonNullish('null')).toBe(true);
|
|
548
|
+
|
|
426
549
|
expect(isNonNullish('undefined')).toBe(true);
|
|
550
|
+
|
|
427
551
|
expect(isNonNullish({})).toBe(true);
|
|
552
|
+
|
|
428
553
|
expect(isNonNullish([])).toBe(true);
|
|
554
|
+
|
|
429
555
|
expect(isNonNullish(Number.NaN)).toBe(true);
|
|
556
|
+
|
|
430
557
|
expect(isNonNullish(Symbol('test'))).toBe(true);
|
|
558
|
+
|
|
431
559
|
expect(isNonNullish(123n)).toBe(true);
|
|
432
560
|
});
|
|
433
561
|
|
|
434
562
|
test('should act as a type guard', () => {
|
|
435
563
|
const value: string | null | undefined = 'test';
|
|
564
|
+
|
|
436
565
|
if (isNonNullish(value)) {
|
|
437
566
|
expectType<typeof value, string>('<=');
|
|
438
567
|
|
|
@@ -450,6 +579,7 @@ describe(isNonNullish, () => {
|
|
|
450
579
|
];
|
|
451
580
|
|
|
452
581
|
const definedItems = items.filter(isNonNullish);
|
|
582
|
+
|
|
453
583
|
expectType<typeof definedItems, string[]>('<=');
|
|
454
584
|
|
|
455
585
|
expect(definedItems).toHaveLength(3);
|
|
@@ -459,6 +589,7 @@ describe(isNonNullish, () => {
|
|
|
459
589
|
|
|
460
590
|
test('should handle complex union types', () => {
|
|
461
591
|
type ComplexType = string | number | boolean | null | undefined;
|
|
592
|
+
|
|
462
593
|
const value: ComplexType = 42;
|
|
463
594
|
|
|
464
595
|
if (isNonNullish(value)) {
|
|
@@ -494,12 +625,15 @@ describe('type guard behavior in complex scenarios', () => {
|
|
|
494
625
|
];
|
|
495
626
|
|
|
496
627
|
const nonNullish = mixed.filter(isNonNullish);
|
|
628
|
+
|
|
497
629
|
expectType<typeof nonNullish, (string | number | boolean)[]>('<=');
|
|
498
630
|
|
|
499
631
|
const nonBooleans = nonNullish.filter(isNotBoolean);
|
|
632
|
+
|
|
500
633
|
expectType<typeof nonBooleans, (string | number)[]>('<=');
|
|
501
634
|
|
|
502
635
|
const strings = nonBooleans.filter(isNotNumber);
|
|
636
|
+
|
|
503
637
|
expectType<typeof strings, string[]>('<=');
|
|
504
638
|
|
|
505
639
|
assert.deepStrictEqual(strings, ['hello', 'world']);
|
package/src/guard/key-is-in.mts
CHANGED
package/src/iterator/range.mts
CHANGED
|
@@ -40,11 +40,15 @@ import { SafeInt, asSafeInt } from '../number/index.mjs';
|
|
|
40
40
|
*
|
|
41
41
|
* ```ts
|
|
42
42
|
* const zeroToThree = Array.from(range(0, 3));
|
|
43
|
+
*
|
|
43
44
|
* const threeToZero = Array.from(range(3, 0, -1));
|
|
45
|
+
*
|
|
44
46
|
* const defaultEnd = Array.from(range(4));
|
|
45
47
|
*
|
|
46
48
|
* assert.deepStrictEqual(zeroToThree, [0, 1, 2]);
|
|
49
|
+
*
|
|
47
50
|
* assert.deepStrictEqual(threeToZero, [3, 2, 1]);
|
|
51
|
+
*
|
|
48
52
|
* assert.deepStrictEqual(defaultEnd, [0, 1, 2, 3]);
|
|
49
53
|
* ```
|
|
50
54
|
*
|
|
@@ -86,15 +90,20 @@ export function* range(
|
|
|
86
90
|
switch (args.length) {
|
|
87
91
|
case 1: {
|
|
88
92
|
const [end] = args;
|
|
93
|
+
|
|
89
94
|
for (const i of range(0, end, 1)) {
|
|
90
95
|
yield i;
|
|
91
96
|
}
|
|
97
|
+
|
|
92
98
|
break;
|
|
93
99
|
}
|
|
94
100
|
|
|
95
101
|
case 2:
|
|
102
|
+
|
|
103
|
+
// falls through
|
|
96
104
|
case 3: {
|
|
97
105
|
const [start, end, step = 1] = args;
|
|
106
|
+
|
|
98
107
|
for (
|
|
99
108
|
let mut_i: SafeInt = asSafeInt(start);
|
|
100
109
|
step > 0 ? mut_i < end : mut_i > end;
|
package/src/json/json.mts
CHANGED
|
@@ -21,12 +21,15 @@ export namespace Json {
|
|
|
21
21
|
*
|
|
22
22
|
* ```ts
|
|
23
23
|
* const validJson = '{"name": "Alice", "age": 30}';
|
|
24
|
+
*
|
|
24
25
|
* const invalidJson = '{invalid json}';
|
|
25
26
|
*
|
|
26
27
|
* const parsed = Json.parse(validJson);
|
|
28
|
+
*
|
|
27
29
|
* const failed = Json.parse(invalidJson);
|
|
28
30
|
*
|
|
29
31
|
* assert.ok(Result.isOk(parsed));
|
|
32
|
+
*
|
|
30
33
|
* if (Result.isOk(parsed)) {
|
|
31
34
|
* assert.deepStrictEqual(parsed.value, { name: 'Alice', age: 30 });
|
|
32
35
|
* }
|
|
@@ -35,10 +38,12 @@ export namespace Json {
|
|
|
35
38
|
*
|
|
36
39
|
* // With reviver
|
|
37
40
|
* const jsonWithDate = '{"created": "2024-01-01T00:00:00.000Z"}';
|
|
41
|
+
*
|
|
38
42
|
* const withReviver = Json.parse(jsonWithDate, (key, value) => {
|
|
39
43
|
* if (key === 'created' && typeof value === 'string') {
|
|
40
44
|
* return new Date(value);
|
|
41
45
|
* }
|
|
46
|
+
*
|
|
42
47
|
* return value;
|
|
43
48
|
* });
|
|
44
49
|
*
|
|
@@ -71,6 +76,7 @@ export namespace Json {
|
|
|
71
76
|
);
|
|
72
77
|
} catch (error: unknown) {
|
|
73
78
|
const errStr = unknownToString(error);
|
|
79
|
+
|
|
74
80
|
return Result.err(errStr);
|
|
75
81
|
}
|
|
76
82
|
};
|
|
@@ -91,22 +97,27 @@ export namespace Json {
|
|
|
91
97
|
*
|
|
92
98
|
* // Basic stringify
|
|
93
99
|
* const basic = Json.stringify(data);
|
|
100
|
+
*
|
|
94
101
|
* assert.ok(Result.isOk(basic));
|
|
102
|
+
*
|
|
95
103
|
* if (Result.isOk(basic)) {
|
|
96
104
|
* assert(basic.value === '{"name":"Bob","age":25,"active":true}');
|
|
97
105
|
* }
|
|
98
106
|
*
|
|
99
107
|
* // With formatting
|
|
100
108
|
* const formatted = Json.stringify(data, undefined, 2);
|
|
109
|
+
*
|
|
101
110
|
* assert.ok(Result.isOk(formatted));
|
|
102
111
|
*
|
|
103
112
|
* // With replacer
|
|
104
113
|
* const filtered = Json.stringify(data, (key, value) => {
|
|
105
114
|
* if (key === 'age') return undefined; // omit age field
|
|
115
|
+
*
|
|
106
116
|
* return value;
|
|
107
117
|
* });
|
|
108
118
|
*
|
|
109
119
|
* assert.ok(Result.isOk(filtered));
|
|
120
|
+
*
|
|
110
121
|
* if (Result.isOk(filtered)) {
|
|
111
122
|
* assert(isString(filtered.value));
|
|
112
123
|
*
|
|
@@ -143,6 +154,7 @@ export namespace Json {
|
|
|
143
154
|
return Result.ok(JSON.stringify(value, replacer, space));
|
|
144
155
|
} catch (error) {
|
|
145
156
|
const errStr = unknownToString(error);
|
|
157
|
+
|
|
146
158
|
return Result.err(errStr);
|
|
147
159
|
}
|
|
148
160
|
};
|
|
@@ -171,21 +183,26 @@ export namespace Json {
|
|
|
171
183
|
* const safeJson = Json.stringifySelected(user, ['id', 'name', 'role']);
|
|
172
184
|
*
|
|
173
185
|
* assert.ok(Result.isOk(safeJson));
|
|
186
|
+
*
|
|
174
187
|
* if (Result.isOk(safeJson)) {
|
|
175
188
|
* assert(isString(safeJson.value));
|
|
176
189
|
*
|
|
177
190
|
* const parsed: unknown = JSON.parse(safeJson.value);
|
|
191
|
+
*
|
|
178
192
|
* assert.deepStrictEqual(parsed, {
|
|
179
193
|
* id: 1,
|
|
180
194
|
* name: 'Charlie',
|
|
181
195
|
* role: 'admin',
|
|
182
196
|
* });
|
|
197
|
+
*
|
|
183
198
|
* assert.ok(!safeJson.value.includes('password'));
|
|
199
|
+
*
|
|
184
200
|
* assert.ok(!safeJson.value.includes('email'));
|
|
185
201
|
* }
|
|
186
202
|
*
|
|
187
203
|
* // With formatting
|
|
188
204
|
* const formatted = Json.stringifySelected(user, ['id', 'name'], 2);
|
|
205
|
+
*
|
|
189
206
|
* assert.ok(Result.isOk(formatted));
|
|
190
207
|
* ```
|
|
191
208
|
*
|
|
@@ -218,6 +235,7 @@ export namespace Json {
|
|
|
218
235
|
);
|
|
219
236
|
} catch (error) {
|
|
220
237
|
const errStr = unknownToString(error);
|
|
238
|
+
|
|
221
239
|
return Result.err(errStr);
|
|
222
240
|
}
|
|
223
241
|
};
|
|
@@ -250,16 +268,20 @@ export namespace Json {
|
|
|
250
268
|
* const sorted = Json.stringifySortedKey(unorderedData);
|
|
251
269
|
*
|
|
252
270
|
* assert.ok(Result.isOk(sorted));
|
|
271
|
+
*
|
|
253
272
|
* if (Result.isOk(sorted)) {
|
|
254
273
|
* // Keys should appear in alphabetical order
|
|
255
274
|
* const expected =
|
|
256
275
|
* '{"apple":2,"mango":3,"nested":{"alpha":"a","beta":"b","zulu":"z"},"zebra":1}';
|
|
276
|
+
*
|
|
257
277
|
* assert(sorted.value === expected);
|
|
258
278
|
* }
|
|
259
279
|
*
|
|
260
280
|
* // With formatting
|
|
261
281
|
* const formatted = Json.stringifySortedKey(unorderedData, 2);
|
|
282
|
+
*
|
|
262
283
|
* assert.ok(Result.isOk(formatted));
|
|
284
|
+
*
|
|
263
285
|
* if (Result.isOk(formatted)) {
|
|
264
286
|
* assert(isString(formatted.value));
|
|
265
287
|
*
|
|
@@ -267,9 +289,11 @@ export namespace Json {
|
|
|
267
289
|
* assert.ok(
|
|
268
290
|
* formatted.value.indexOf('"apple"') < formatted.value.indexOf('"mango"'),
|
|
269
291
|
* );
|
|
292
|
+
*
|
|
270
293
|
* assert.ok(
|
|
271
294
|
* formatted.value.indexOf('"mango"') < formatted.value.indexOf('"nested"'),
|
|
272
295
|
* );
|
|
296
|
+
*
|
|
273
297
|
* assert.ok(
|
|
274
298
|
* formatted.value.indexOf('"nested"') < formatted.value.indexOf('"zebra"'),
|
|
275
299
|
* );
|
|
@@ -321,10 +345,13 @@ const keysDeepImpl = (
|
|
|
321
345
|
): void => {
|
|
322
346
|
for (const k of Object.keys(obj)) {
|
|
323
347
|
mut_keys.push(k);
|
|
348
|
+
|
|
324
349
|
const o = obj[k];
|
|
350
|
+
|
|
325
351
|
if (isRecord(o)) {
|
|
326
352
|
keysDeepImpl(o, mut_keys);
|
|
327
353
|
}
|
|
354
|
+
|
|
328
355
|
if (Array.isArray(o)) {
|
|
329
356
|
for (const li of o) {
|
|
330
357
|
if (isRecord(li)) {
|
|
@@ -349,6 +376,8 @@ const keysDeepImpl = (
|
|
|
349
376
|
*/
|
|
350
377
|
const keysDeep = (obj: UnknownRecord): readonly string[] => {
|
|
351
378
|
const mut_keys: string[] = [];
|
|
379
|
+
|
|
352
380
|
keysDeepImpl(obj, mut_keys);
|
|
381
|
+
|
|
353
382
|
return mut_keys;
|
|
354
383
|
};
|