@splendidlabz/utils 1.6.0 → 1.8.1
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/CHANGELOG.md +19 -0
- package/dist/cjs/dom/accessibility.cjs +53 -0
- package/dist/cjs/dom/actions/index.cjs +407 -0
- package/dist/cjs/dom/actions/masonry.cjs +149 -0
- package/dist/cjs/dom/actions/prefer-horizontal-scroll.cjs +157 -0
- package/dist/cjs/dom/actions/sticky.cjs +211 -0
- package/dist/cjs/dom/bounding-box.cjs +70 -0
- package/dist/cjs/dom/clipboard.cjs +37 -0
- package/dist/cjs/dom/cookie.cjs +57 -0
- package/dist/cjs/dom/css-vars.cjs +57 -0
- package/dist/cjs/dom/events.cjs +95 -0
- package/dist/cjs/dom/focusable.cjs +143 -0
- package/dist/cjs/dom/font-size.cjs +74 -0
- package/dist/cjs/dom/get-element.cjs +98 -0
- package/dist/cjs/dom/hash.cjs +35 -0
- package/dist/cjs/dom/index.cjs +1197 -0
- package/dist/cjs/dom/keyboard.cjs +51 -0
- package/dist/cjs/dom/local-store.cjs +79 -0
- package/dist/cjs/dom/media.cjs +59 -0
- package/dist/cjs/dom/observers/index.cjs +156 -0
- package/dist/cjs/dom/observers/intersection-observer.cjs +91 -0
- package/dist/cjs/dom/observers/mutation-observer.cjs +95 -0
- package/dist/cjs/dom/observers/observer.cjs +48 -0
- package/dist/cjs/dom/observers/resize-observer.cjs +82 -0
- package/dist/cjs/dom/pkce.cjs +53 -0
- package/dist/cjs/dom/query-params.cjs +38 -0
- package/dist/cjs/dom/random-string.cjs +38 -0
- package/dist/cjs/dom/sanitize.cjs +65 -0
- package/dist/cjs/dom/session-store.cjs +49 -0
- package/dist/cjs/dom/spam-prevention.cjs +50 -0
- package/dist/cjs/dom/trap-focus.cjs +197 -0
- package/dist/cjs/dom/ui/aria-current.cjs +43 -0
- package/dist/cjs/dom/ui/inconsistent-button-fix.cjs +35 -0
- package/dist/cjs/dom/ui/index.cjs +105 -0
- package/dist/cjs/dom/ui/scroll-container.cjs +47 -0
- package/dist/cjs/dom/ui/traverse-and-scramble.cjs +50 -0
- package/dist/cjs/lib/arrays/index.cjs +139 -0
- package/dist/cjs/lib/arrays/item-position.cjs +42 -0
- package/dist/cjs/lib/arrays/join.cjs +43 -0
- package/dist/cjs/lib/arrays/shuffle.cjs +42 -0
- package/dist/cjs/lib/arrays/sort.cjs +67 -0
- package/dist/cjs/lib/arrays/split-array.cjs +41 -0
- package/dist/cjs/lib/arrays/unique.cjs +31 -0
- package/dist/cjs/lib/auth/index.cjs +53 -0
- package/dist/cjs/lib/auth/route-manager.cjs +51 -0
- package/dist/cjs/lib/checks.cjs +58 -0
- package/dist/cjs/lib/date/days.cjs +37 -0
- package/dist/cjs/lib/date/index.cjs +208 -0
- package/dist/cjs/lib/date/months.cjs +102 -0
- package/dist/cjs/lib/date/time.cjs +117 -0
- package/dist/cjs/lib/form/form-data.cjs +83 -0
- package/dist/cjs/lib/form/index.cjs +122 -0
- package/dist/cjs/lib/form/sanitize.cjs +61 -0
- package/dist/cjs/lib/functions/debounce.cjs +43 -0
- package/dist/cjs/lib/functions/env.cjs +32 -0
- package/dist/cjs/lib/functions/functional.cjs +62 -0
- package/dist/cjs/lib/functions/index.cjs +122 -0
- package/dist/cjs/lib/functions/throttle.cjs +38 -0
- package/dist/cjs/lib/functions/timeout.cjs +41 -0
- package/dist/cjs/lib/hash.cjs +43 -0
- package/dist/cjs/lib/index.cjs +1146 -0
- package/dist/cjs/lib/numbers/index.cjs +49 -0
- package/dist/cjs/lib/numbers/math.cjs +36 -0
- package/dist/cjs/lib/objects/camelcase-keys.cjs +80 -0
- package/dist/cjs/lib/objects/empty.cjs +39 -0
- package/dist/cjs/lib/objects/equal.cjs +47 -0
- package/dist/cjs/lib/objects/extend.cjs +147 -0
- package/dist/cjs/lib/objects/flatten.cjs +48 -0
- package/dist/cjs/lib/objects/index.cjs +378 -0
- package/dist/cjs/lib/objects/json.cjs +35 -0
- package/dist/cjs/lib/objects/loop.cjs +40 -0
- package/dist/cjs/lib/objects/mix/mix.cjs +115 -0
- package/dist/cjs/lib/objects/nested-property.cjs +45 -0
- package/dist/cjs/lib/objects/normalize-object.cjs +106 -0
- package/dist/cjs/lib/objects/omit-empty.cjs +40 -0
- package/dist/cjs/lib/objects/size.cjs +63 -0
- package/dist/cjs/lib/objects/split.cjs +39 -0
- package/dist/cjs/lib/promises/index.cjs +69 -0
- package/dist/cjs/lib/promises/reject.cjs +67 -0
- package/dist/cjs/lib/sse.cjs +99 -0
- package/dist/cjs/lib/strings/convert-case/convert-case.cjs +96 -0
- package/dist/cjs/lib/strings/index.cjs +190 -0
- package/dist/cjs/lib/strings/markdown.cjs +59 -0
- package/dist/cjs/lib/strings/name.cjs +46 -0
- package/dist/cjs/lib/strings/pluralize.cjs +40 -0
- package/dist/cjs/lib/strings/query-string.cjs +43 -0
- package/dist/cjs/lib/style/index.cjs +64 -0
- package/dist/cjs/lib/symbols/index.cjs +40 -0
- package/dist/cjs/lib/symbols/symbols.cjs +38 -0
- package/dist/cjs/node/common.cjs +42 -0
- package/dist/cjs/node/dirname.cjs +49 -0
- package/dist/cjs/node/file-cache.cjs +196 -0
- package/dist/cjs/node/file.cjs +50 -0
- package/dist/cjs/node/hash.cjs +42 -0
- package/dist/cjs/node/index.cjs +290 -0
- package/dist/cjs/node/pkce.cjs +62 -0
- package/dist/cjs/node/random-string.cjs +43 -0
- package/dist/cjs/node/sanitize.cjs +65 -0
- package/dist/esm/dom/accessibility.js +27 -0
- package/dist/esm/dom/actions/index.js +379 -0
- package/dist/esm/dom/actions/masonry.js +123 -0
- package/dist/esm/dom/actions/prefer-horizontal-scroll.js +131 -0
- package/dist/esm/dom/actions/sticky.js +185 -0
- package/dist/esm/dom/bounding-box.js +45 -0
- package/dist/esm/dom/clipboard.js +13 -0
- package/dist/esm/dom/cookie.js +32 -0
- package/dist/esm/dom/css-vars.js +28 -0
- package/dist/esm/dom/events.js +67 -0
- package/dist/esm/dom/focusable.js +118 -0
- package/dist/esm/dom/font-size.js +44 -0
- package/dist/esm/dom/get-element.js +67 -0
- package/dist/esm/dom/hash.js +11 -0
- package/dist/esm/dom/index.js +1100 -0
- package/dist/esm/dom/keyboard.js +23 -0
- package/dist/esm/dom/local-store.js +55 -0
- package/dist/esm/dom/media.js +33 -0
- package/dist/esm/dom/observers/index.js +128 -0
- package/dist/esm/dom/observers/intersection-observer.js +65 -0
- package/dist/esm/dom/observers/mutation-observer.js +69 -0
- package/dist/esm/dom/observers/observer.js +22 -0
- package/dist/esm/dom/observers/resize-observer.js +56 -0
- package/dist/esm/dom/pkce.js +27 -0
- package/dist/esm/dom/query-params.js +14 -0
- package/dist/esm/dom/random-string.js +13 -0
- package/dist/esm/dom/sanitize.js +31 -0
- package/dist/esm/dom/session-store.js +25 -0
- package/dist/esm/dom/spam-prevention.js +26 -0
- package/dist/esm/dom/trap-focus.js +170 -0
- package/dist/esm/dom/ui/aria-current.js +18 -0
- package/dist/esm/dom/ui/inconsistent-button-fix.js +11 -0
- package/dist/esm/dom/ui/index.js +75 -0
- package/dist/esm/dom/ui/scroll-container.js +23 -0
- package/dist/esm/dom/ui/traverse-and-scramble.js +26 -0
- package/dist/esm/lib/arrays/index.js +106 -0
- package/dist/esm/lib/arrays/item-position.js +16 -0
- package/dist/esm/lib/arrays/join.js +17 -0
- package/dist/esm/lib/arrays/shuffle.js +18 -0
- package/dist/esm/lib/arrays/sort.js +41 -0
- package/dist/esm/lib/arrays/split-array.js +17 -0
- package/dist/esm/lib/arrays/unique.js +7 -0
- package/dist/esm/lib/auth/index.js +26 -0
- package/dist/esm/lib/auth/route-manager.js +26 -0
- package/dist/esm/lib/checks.js +31 -0
- package/dist/esm/lib/date/days.js +13 -0
- package/dist/esm/lib/date/index.js +173 -0
- package/dist/esm/lib/date/months.js +78 -0
- package/dist/esm/lib/date/time.js +84 -0
- package/dist/esm/lib/form/form-data.js +58 -0
- package/dist/esm/lib/form/index.js +92 -0
- package/dist/esm/lib/form/sanitize.js +35 -0
- package/dist/esm/lib/functions/debounce.js +19 -0
- package/dist/esm/lib/functions/env.js +8 -0
- package/dist/esm/lib/functions/functional.js +35 -0
- package/dist/esm/lib/functions/index.js +87 -0
- package/dist/esm/lib/functions/throttle.js +14 -0
- package/dist/esm/lib/functions/timeout.js +15 -0
- package/dist/esm/lib/hash.js +19 -0
- package/dist/esm/lib/index.js +1027 -0
- package/dist/esm/lib/numbers/index.js +21 -0
- package/dist/esm/lib/numbers/math.js +11 -0
- package/dist/esm/lib/objects/camelcase-keys.js +54 -0
- package/dist/esm/lib/objects/empty.js +14 -0
- package/dist/esm/lib/objects/equal.js +12 -0
- package/dist/esm/lib/objects/extend.js +121 -0
- package/dist/esm/lib/objects/flatten.js +22 -0
- package/dist/esm/lib/objects/index.js +323 -0
- package/dist/esm/lib/objects/json.js +11 -0
- package/dist/esm/lib/objects/loop.js +15 -0
- package/dist/esm/lib/objects/mix/mix.js +89 -0
- package/dist/esm/lib/objects/nested-property.js +19 -0
- package/dist/esm/lib/objects/normalize-object.js +80 -0
- package/dist/esm/lib/objects/omit-empty.js +16 -0
- package/dist/esm/lib/objects/size.js +39 -0
- package/dist/esm/lib/objects/split.js +15 -0
- package/dist/esm/lib/promises/index.js +33 -0
- package/dist/esm/lib/promises/reject.js +33 -0
- package/dist/esm/lib/sse.js +72 -0
- package/dist/esm/lib/strings/convert-case/convert-case.js +65 -0
- package/dist/esm/lib/strings/index.js +140 -0
- package/dist/esm/lib/strings/markdown.js +34 -0
- package/dist/esm/lib/strings/name.js +22 -0
- package/dist/esm/lib/strings/pluralize.js +6 -0
- package/dist/esm/lib/strings/query-string.js +17 -0
- package/dist/esm/lib/style/index.js +38 -0
- package/dist/esm/lib/symbols/index.js +13 -0
- package/dist/esm/lib/symbols/symbols.js +13 -0
- package/dist/esm/node/common.js +8 -0
- package/dist/esm/node/dirname.js +14 -0
- package/dist/esm/node/file-cache.js +158 -0
- package/dist/esm/node/file.js +15 -0
- package/dist/esm/node/hash.js +8 -0
- package/dist/esm/node/index.js +243 -0
- package/dist/esm/node/pkce.js +28 -0
- package/dist/esm/node/random-string.js +9 -0
- package/dist/esm/node/sanitize.js +31 -0
- package/dist/{dom/accessibility.d.ts → types/dom/accessibility.d.cts} +5 -3
- package/dist/types/dom/actions/index.d.cts +3 -0
- package/dist/types/dom/actions/masonry.d.cts +5 -0
- package/dist/types/dom/actions/prefer-horizontal-scroll.d.cts +5 -0
- package/dist/types/dom/actions/sticky.d.cts +5 -0
- package/dist/{dom/bounding-box.d.ts → types/dom/bounding-box.d.cts} +4 -2
- package/dist/{dom/clipboard.d.ts → types/dom/clipboard.d.cts} +3 -1
- package/dist/types/dom/cookie.d.cts +7 -0
- package/dist/types/dom/css-vars.d.cts +6 -0
- package/dist/types/dom/events.d.cts +20 -0
- package/dist/{dom/focusable.d.ts → types/dom/focusable.d.cts} +5 -3
- package/dist/types/dom/font-size.d.cts +7 -0
- package/dist/{dom/get-element.d.ts → types/dom/get-element.d.cts} +10 -8
- package/dist/types/dom/hash.d.cts +3 -0
- package/dist/types/dom/index.d.cts +30 -0
- package/dist/{dom/keyboard.d.ts → types/dom/keyboard.d.cts} +7 -5
- package/dist/{dom/local-store.d.ts → types/dom/local-store.d.cts} +3 -1
- package/dist/types/dom/media.d.cts +5 -0
- package/dist/types/dom/observers/index.d.cts +3 -0
- package/dist/{dom/observers/intersection-observer.d.ts → types/dom/observers/intersection-observer.d.cts} +3 -1
- package/dist/{dom/observers/mutation-observer.d.ts → types/dom/observers/mutation-observer.d.cts} +3 -1
- package/dist/types/dom/observers/observer.d.cts +3 -0
- package/dist/{dom/observers/resize-observer.d.ts → types/dom/observers/resize-observer.d.cts} +3 -1
- package/dist/{node/pkce.d.ts → types/dom/pkce.d.cts} +3 -1
- package/dist/{dom/query-params.d.ts → types/dom/query-params.d.cts} +3 -1
- package/dist/{dom/random-string.d.ts → types/dom/random-string.d.cts} +4 -2
- package/dist/{dom/sanitize.d.ts → types/dom/sanitize.d.cts} +3 -1
- package/dist/{dom/session-store.d.ts → types/dom/session-store.d.cts} +3 -1
- package/dist/types/dom/spam-prevention.d.cts +14 -0
- package/dist/{dom/trap-focus.d.ts → types/dom/trap-focus.d.cts} +8 -4
- package/dist/types/dom/ui/aria-current.d.cts +7 -0
- package/dist/{dom/ui/inconsistent-button-fix.d.ts → types/dom/ui/inconsistent-button-fix.d.cts} +3 -1
- package/dist/types/dom/ui/index.d.cts +4 -0
- package/dist/types/dom/ui/scroll-container.d.cts +3 -0
- package/dist/{dom/ui/traverse-and-scramble.d.ts → types/dom/ui/traverse-and-scramble.d.cts} +3 -1
- package/dist/types/lib/arrays/index.d.cts +6 -0
- package/dist/{lib/arrays/item-position.d.ts → types/lib/arrays/item-position.d.cts} +5 -3
- package/dist/{lib/arrays/join.d.ts → types/lib/arrays/join.d.cts} +3 -1
- package/dist/types/lib/arrays/shuffle.d.cts +3 -0
- package/dist/{lib/arrays/sort.d.ts → types/lib/arrays/sort.d.cts} +3 -1
- package/dist/types/lib/arrays/split-array.d.cts +6 -0
- package/dist/types/lib/arrays/unique.d.cts +3 -0
- package/dist/types/lib/auth/index.d.cts +1 -0
- package/dist/{lib/auth/route-manager.d.ts → types/lib/auth/route-manager.d.cts} +5 -2
- package/dist/{lib/checks.d.ts → types/lib/checks.d.cts} +6 -4
- package/dist/{lib/date/days.d.ts → types/lib/date/days.d.cts} +3 -1
- package/dist/types/lib/date/index.d.cts +3 -0
- package/dist/{lib/date/months.d.ts → types/lib/date/months.d.cts} +3 -1
- package/dist/types/lib/date/time.d.cts +21 -0
- package/dist/types/lib/form/form-data.d.cts +9 -0
- package/dist/types/lib/form/index.d.cts +2 -0
- package/dist/{lib/form/sanitize.d.ts → types/lib/form/sanitize.d.cts} +6 -4
- package/dist/types/lib/functions/debounce.d.cts +3 -0
- package/dist/types/lib/functions/env.d.cts +3 -0
- package/dist/types/lib/functions/functional.d.cts +6 -0
- package/dist/types/lib/functions/index.d.cts +5 -0
- package/dist/types/lib/functions/throttle.d.cts +3 -0
- package/dist/types/lib/functions/timeout.d.cts +5 -0
- package/dist/types/lib/hash.d.cts +3 -0
- package/dist/types/lib/index.d.cts +43 -0
- package/dist/types/lib/numbers/index.d.cts +5 -0
- package/dist/types/lib/numbers/math.d.cts +4 -0
- package/dist/types/lib/objects/camelcase-keys.d.cts +3 -0
- package/dist/types/lib/objects/empty.d.cts +4 -0
- package/dist/types/lib/objects/equal.d.cts +4 -0
- package/dist/types/lib/objects/extend.d.cts +6 -0
- package/dist/types/lib/objects/flatten.d.cts +6 -0
- package/dist/types/lib/objects/index.d.cts +13 -0
- package/dist/types/lib/objects/json.d.cts +3 -0
- package/dist/types/lib/objects/loop.d.cts +4 -0
- package/dist/types/lib/objects/mix/mix.d.cts +44 -0
- package/dist/{lib/objects/nested-property.d.ts → types/lib/objects/nested-property.d.cts} +5 -3
- package/dist/types/lib/objects/normalize-object.d.cts +3 -0
- package/dist/types/lib/objects/omit-empty.d.cts +3 -0
- package/dist/types/lib/objects/size.d.cts +3 -0
- package/dist/{lib/objects/split.d.ts → types/lib/objects/split.d.cts} +3 -1
- package/dist/types/lib/promises/index.d.cts +1 -0
- package/dist/types/lib/promises/reject.d.cts +5 -0
- package/dist/{lib/sse.d.ts → types/lib/sse.d.cts} +4 -2
- package/dist/types/lib/strings/convert-case/convert-case.d.cts +10 -0
- package/dist/types/lib/strings/index.d.cts +5 -0
- package/dist/{lib/strings/markdown.d.ts → types/lib/strings/markdown.d.cts} +4 -2
- package/dist/types/lib/strings/name.d.cts +7 -0
- package/dist/types/lib/strings/pluralize.d.cts +3 -0
- package/dist/types/lib/strings/query-string.d.cts +10 -0
- package/dist/types/lib/style/index.d.cts +3 -0
- package/dist/types/lib/symbols/index.d.cts +1 -0
- package/dist/types/lib/symbols/symbols.d.cts +4 -0
- package/dist/types/node/common.d.cts +3 -0
- package/dist/types/node/dirname.d.cts +9 -0
- package/dist/{node/file-cache.d.ts → types/node/file-cache.d.cts} +7 -5
- package/dist/types/node/file.d.cts +4 -0
- package/dist/types/node/hash.d.cts +3 -0
- package/dist/types/node/index.d.cts +7 -0
- package/dist/{dom/pkce.d.ts → types/node/pkce.d.cts} +3 -1
- package/dist/types/node/random-string.d.cts +3 -0
- package/dist/{node/sanitize.d.ts → types/node/sanitize.d.cts} +3 -1
- package/package.json +28 -16
- package/{dom → src/dom}/index.js +1 -0
- package/src/dom/spam-prevention.js +39 -0
- package/{dom → src/dom}/ui/aria-current.js +1 -1
- package/{lib → src/lib}/arrays/index.js +1 -0
- package/{lib → src/lib}/arrays/sort.js +6 -6
- package/src/lib/arrays/split-array.js +15 -0
- package/{lib → src/lib}/auth/route-manager.js +1 -0
- package/{lib → src/lib}/date/time.js +38 -5
- package/{lib → src/lib}/numbers/index.js +1 -1
- package/src/lib/numbers/split-unit.test.js +45 -0
- package/src/lib/objects/mix/mix.js +191 -0
- package/{lib → src/lib}/objects/mix/mix.test.js +99 -2
- package/src/lib/strings/pluralize.js +2 -0
- package/{lib → src/lib}/style/index.js +2 -0
- package/{node → src/node}/file-cache.js +1 -1
- package/tsconfig.json +6 -6
- package/tsup.config.js +38 -0
- package/tsup.config.mjs +43 -0
- package/dist/dom/actions/index.d.ts +0 -3
- package/dist/dom/actions/masonry.d.ts +0 -3
- package/dist/dom/actions/prefer-horizontal-scroll.d.ts +0 -3
- package/dist/dom/actions/sticky.d.ts +0 -3
- package/dist/dom/cookie.d.ts +0 -5
- package/dist/dom/css-vars.d.ts +0 -4
- package/dist/dom/events.d.ts +0 -18
- package/dist/dom/font-size.d.ts +0 -5
- package/dist/dom/hash.d.ts +0 -1
- package/dist/dom/index.d.ts +0 -22
- package/dist/dom/media.d.ts +0 -3
- package/dist/dom/observers/index.d.ts +0 -3
- package/dist/dom/observers/observer.d.ts +0 -1
- package/dist/dom/ui/aria-current.d.ts +0 -5
- package/dist/dom/ui/index.d.ts +0 -4
- package/dist/dom/ui/scroll-container.d.ts +0 -1
- package/dist/lib/arrays/index.d.ts +0 -5
- package/dist/lib/arrays/shuffle.d.ts +0 -1
- package/dist/lib/arrays/unique.d.ts +0 -1
- package/dist/lib/auth/index.d.ts +0 -1
- package/dist/lib/date/index.d.ts +0 -3
- package/dist/lib/date/time.d.ts +0 -8
- package/dist/lib/form/form-data.d.ts +0 -7
- package/dist/lib/form/index.d.ts +0 -2
- package/dist/lib/functions/debounce.d.ts +0 -1
- package/dist/lib/functions/env.d.ts +0 -1
- package/dist/lib/functions/functional.d.ts +0 -4
- package/dist/lib/functions/index.d.ts +0 -5
- package/dist/lib/functions/throttle.d.ts +0 -1
- package/dist/lib/functions/timeout.d.ts +0 -3
- package/dist/lib/hash.d.ts +0 -1
- package/dist/lib/index.d.ts +0 -14
- package/dist/lib/numbers/index.d.ts +0 -2
- package/dist/lib/numbers/math.d.ts +0 -2
- package/dist/lib/objects/camelcase-keys.d.ts +0 -1
- package/dist/lib/objects/empty.d.ts +0 -2
- package/dist/lib/objects/equal.d.ts +0 -2
- package/dist/lib/objects/extend.d.ts +0 -4
- package/dist/lib/objects/flatten.d.ts +0 -4
- package/dist/lib/objects/index.d.ts +0 -13
- package/dist/lib/objects/json.d.ts +0 -1
- package/dist/lib/objects/loop.d.ts +0 -2
- package/dist/lib/objects/mix/mix.d.ts +0 -1
- package/dist/lib/objects/normalize-object.d.ts +0 -1
- package/dist/lib/objects/omit-empty.d.ts +0 -1
- package/dist/lib/objects/size.d.ts +0 -1
- package/dist/lib/promises/index.d.ts +0 -1
- package/dist/lib/promises/reject.d.ts +0 -3
- package/dist/lib/strings/convert-case/convert-case.d.ts +0 -8
- package/dist/lib/strings/index.d.ts +0 -5
- package/dist/lib/strings/name.d.ts +0 -5
- package/dist/lib/strings/pluralize.d.ts +0 -1
- package/dist/lib/strings/query-string.d.ts +0 -8
- package/dist/lib/style/index.d.ts +0 -1
- package/dist/lib/symbols/index.d.ts +0 -1
- package/dist/lib/symbols/symbols.d.ts +0 -2
- package/dist/node/common.d.ts +0 -1
- package/dist/node/dirname.d.ts +0 -7
- package/dist/node/file.d.ts +0 -2
- package/dist/node/hash.d.ts +0 -1
- package/dist/node/index.d.ts +0 -7
- package/dist/node/random-string.d.ts +0 -1
- package/lib/objects/mix/mix.js +0 -102
- package/lib/strings/pluralize.js +0 -2
- /package/{dom → src/dom}/accessibility.js +0 -0
- /package/{dom → src/dom}/actions/index.js +0 -0
- /package/{dom → src/dom}/actions/masonry.js +0 -0
- /package/{dom → src/dom}/actions/prefer-horizontal-scroll.js +0 -0
- /package/{dom → src/dom}/actions/sticky.js +0 -0
- /package/{dom → src/dom}/bounding-box.js +0 -0
- /package/{dom → src/dom}/clipboard.js +0 -0
- /package/{dom → src/dom}/cookie.js +0 -0
- /package/{dom → src/dom}/css-vars.js +0 -0
- /package/{dom → src/dom}/events.js +0 -0
- /package/{dom → src/dom}/events.test.js +0 -0
- /package/{dom → src/dom}/focusable.js +0 -0
- /package/{dom → src/dom}/font-size.js +0 -0
- /package/{dom → src/dom}/get-element.js +0 -0
- /package/{dom → src/dom}/hash.js +0 -0
- /package/{dom → src/dom}/keyboard.js +0 -0
- /package/{dom → src/dom}/local-store.js +0 -0
- /package/{dom → src/dom}/media.js +0 -0
- /package/{dom → src/dom}/observers/index.js +0 -0
- /package/{dom → src/dom}/observers/intersection-observer.js +0 -0
- /package/{dom → src/dom}/observers/mutation-observer.js +0 -0
- /package/{dom → src/dom}/observers/observer.js +0 -0
- /package/{dom → src/dom}/observers/resize-observer.js +0 -0
- /package/{dom → src/dom}/pkce.js +0 -0
- /package/{dom → src/dom}/query-params.js +0 -0
- /package/{dom → src/dom}/random-string.js +0 -0
- /package/{dom → src/dom}/random-string.test.js +0 -0
- /package/{dom → src/dom}/sanitize.js +0 -0
- /package/{dom → src/dom}/session-store.js +0 -0
- /package/{dom → src/dom}/trap-focus.js +0 -0
- /package/{dom → src/dom}/ui/inconsistent-button-fix.js +0 -0
- /package/{dom → src/dom}/ui/index.js +0 -0
- /package/{dom → src/dom}/ui/scroll-container.js +0 -0
- /package/{dom → src/dom}/ui/traverse-and-scramble.js +0 -0
- /package/{lib → src/lib}/arrays/item-position.js +0 -0
- /package/{lib → src/lib}/arrays/join.js +0 -0
- /package/{lib → src/lib}/arrays/shuffle.js +0 -0
- /package/{lib → src/lib}/arrays/sort.spec.js +0 -0
- /package/{lib → src/lib}/arrays/unique.js +0 -0
- /package/{lib → src/lib}/auth/index.js +0 -0
- /package/{lib → src/lib}/checks.js +0 -0
- /package/{lib → src/lib}/date/days.js +0 -0
- /package/{lib → src/lib}/date/index.js +0 -0
- /package/{lib → src/lib}/date/months.js +0 -0
- /package/{lib → src/lib}/form/form-data.js +0 -0
- /package/{lib → src/lib}/form/index.js +0 -0
- /package/{lib → src/lib}/form/sanitize.js +0 -0
- /package/{lib → src/lib}/form/sanitize.spec.js +0 -0
- /package/{lib → src/lib}/functions/debounce.js +0 -0
- /package/{lib → src/lib}/functions/env.js +0 -0
- /package/{lib → src/lib}/functions/functional.js +0 -0
- /package/{lib → src/lib}/functions/index.js +0 -0
- /package/{lib → src/lib}/functions/throttle.js +0 -0
- /package/{lib → src/lib}/functions/timeout.js +0 -0
- /package/{lib → src/lib}/hash.js +0 -0
- /package/{lib → src/lib}/hash.spec.js +0 -0
- /package/{lib → src/lib}/index.js +0 -0
- /package/{lib → src/lib}/numbers/math.js +0 -0
- /package/{lib → src/lib}/objects/camelcase-keys.js +0 -0
- /package/{lib → src/lib}/objects/camelcase-keys.test.js +0 -0
- /package/{lib → src/lib}/objects/empty.js +0 -0
- /package/{lib → src/lib}/objects/equal.js +0 -0
- /package/{lib → src/lib}/objects/extend.js +0 -0
- /package/{lib → src/lib}/objects/extend.test.js +0 -0
- /package/{lib → src/lib}/objects/flatten.js +0 -0
- /package/{lib → src/lib}/objects/index.js +0 -0
- /package/{lib → src/lib}/objects/json.js +0 -0
- /package/{lib → src/lib}/objects/loop.js +0 -0
- /package/{lib → src/lib}/objects/loop.test.js +0 -0
- /package/{lib → src/lib}/objects/mix/mix.md +0 -0
- /package/{lib → src/lib}/objects/nested-property.js +0 -0
- /package/{lib → src/lib}/objects/normalize-object.js +0 -0
- /package/{lib → src/lib}/objects/omit-empty.js +0 -0
- /package/{lib → src/lib}/objects/omit-empty.test.js +0 -0
- /package/{lib → src/lib}/objects/size.js +0 -0
- /package/{lib → src/lib}/objects/split.js +0 -0
- /package/{lib → src/lib}/promises/index.js +0 -0
- /package/{lib → src/lib}/promises/reject.js +0 -0
- /package/{lib → src/lib}/sse.js +0 -0
- /package/{lib → src/lib}/strings/convert-case/convert-case.js +0 -0
- /package/{lib → src/lib}/strings/convert-case/convert-case.md +0 -0
- /package/{lib → src/lib}/strings/convert-case/convert-case.test.js +0 -0
- /package/{lib → src/lib}/strings/index.js +0 -0
- /package/{lib → src/lib}/strings/markdown.js +0 -0
- /package/{lib → src/lib}/strings/name.js +0 -0
- /package/{lib → src/lib}/strings/name.test.js +0 -0
- /package/{lib → src/lib}/strings/query-string.js +0 -0
- /package/{lib → src/lib}/symbols/index.js +0 -0
- /package/{lib → src/lib}/symbols/symbols.js +0 -0
- /package/{node → src/node}/common.js +0 -0
- /package/{node → src/node}/dirname.js +0 -0
- /package/{node → src/node}/file.js +0 -0
- /package/{node → src/node}/hash.js +0 -0
- /package/{node → src/node}/index.js +0 -0
- /package/{node → src/node}/pkce.js +0 -0
- /package/{node → src/node}/random-string.js +0 -0
- /package/{node → src/node}/random-string.test.js +0 -0
- /package/{node → src/node}/sanitize.js +0 -0
- /package/{node → src/node}/sanitize.spec.js +0 -0
|
@@ -16,10 +16,12 @@ export function ms(arg) {
|
|
|
16
16
|
if (unit === 'hours') return getTimeInMs(value, 'hours')
|
|
17
17
|
if (unit === 'm') return getTimeInMs(value, 'minutes')
|
|
18
18
|
if (unit === 'min') return getTimeInMs(value, 'minutes')
|
|
19
|
+
if (unit === 'mins') return getTimeInMs(value, 'minutes')
|
|
19
20
|
if (unit === 'minute') return getTimeInMs(value, 'minutes')
|
|
20
21
|
if (unit === 'minutes') return getTimeInMs(value, 'minutes')
|
|
21
22
|
if (unit === 's') return getTimeInMs(value, 'seconds')
|
|
22
23
|
if (unit === 'sec') return getTimeInMs(value, 'seconds')
|
|
24
|
+
if (unit === 'secs') return getTimeInMs(value, 'seconds')
|
|
23
25
|
if (unit === 'second') return getTimeInMs(value, 'seconds')
|
|
24
26
|
if (unit === 'seconds') return getTimeInMs(value, 'seconds')
|
|
25
27
|
|
|
@@ -27,11 +29,6 @@ export function ms(arg) {
|
|
|
27
29
|
return value
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
export function seconds(arg) {
|
|
31
|
-
const value = ms(arg)
|
|
32
|
-
return value / 1000
|
|
33
|
-
}
|
|
34
|
-
|
|
35
32
|
export function getTimeInMs(value, unit = 'ms') {
|
|
36
33
|
switch (unit) {
|
|
37
34
|
case 'ms':
|
|
@@ -48,3 +45,39 @@ export function getTimeInMs(value, unit = 'ms') {
|
|
|
48
45
|
return value * 1000 * 60 * 60 * 24 * 7
|
|
49
46
|
}
|
|
50
47
|
}
|
|
48
|
+
|
|
49
|
+
export function toWeeks(ms) {
|
|
50
|
+
return ms / 1000 / 60 / 60 / 24 / 7
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function toDays(ms) {
|
|
54
|
+
return ms / 1000 / 60 / 60 / 24
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function toHours(ms) {
|
|
58
|
+
return ms / 1000 / 60 / 60
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function toMinutes(ms) {
|
|
62
|
+
return ms / 1000 / 60
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function toSeconds(ms) {
|
|
66
|
+
return ms / 1000
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Get the total number of weeks, days, hours, minutes, and seconds
|
|
70
|
+
export function toReadableTime(ms) {
|
|
71
|
+
const weekMs = 1000 * 60 * 60 * 24 * 7
|
|
72
|
+
const dayMs = 1000 * 60 * 60 * 24
|
|
73
|
+
const hourMs = 1000 * 60 * 60
|
|
74
|
+
const minuteMs = 1000 * 60
|
|
75
|
+
|
|
76
|
+
const weeks = Math.floor(ms / weekMs)
|
|
77
|
+
const days = Math.floor((ms % weekMs) / dayMs)
|
|
78
|
+
const hours = Math.floor((ms % dayMs) / hourMs)
|
|
79
|
+
const minutes = Math.floor((ms % hourMs) / minuteMs)
|
|
80
|
+
const seconds = Math.floor((ms % minuteMs) / 1000)
|
|
81
|
+
|
|
82
|
+
return { weeks, days, hours, minutes, seconds }
|
|
83
|
+
}
|
|
@@ -4,7 +4,7 @@ export function splitUnit(string) {
|
|
|
4
4
|
// If there are no units, return the number straight.
|
|
5
5
|
if (typeof string === 'number') return [string, null]
|
|
6
6
|
|
|
7
|
-
const regex = /(-?\d*\.?\d+)([a-z]+)/i
|
|
7
|
+
const regex = /(-?\d*\.?\d+)\s*([a-z]+)/i
|
|
8
8
|
const match = string.match(regex)
|
|
9
9
|
|
|
10
10
|
if (match) return [parseFloat(match[1]), match[2]]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
|
2
|
+
import { splitUnit } from './index.js'
|
|
3
|
+
|
|
4
|
+
describe('splitUnit', () => {
|
|
5
|
+
test('handles number input', () => {
|
|
6
|
+
const result = splitUnit(42)
|
|
7
|
+
expect(result).toEqual([42, null])
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
test('handles unitless string numbers', () => {
|
|
11
|
+
const result = splitUnit('100')
|
|
12
|
+
expect(result).toEqual([100, null])
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
test('handles "3hours" without space', () => {
|
|
16
|
+
const result = splitUnit('3hours')
|
|
17
|
+
expect(result).toEqual([3, 'hours'])
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
test('handles "2rem" CSS unit', () => {
|
|
21
|
+
const result = splitUnit('2rem')
|
|
22
|
+
expect(result).toEqual([2, 'rem'])
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test('handles decimal values', () => {
|
|
26
|
+
const result = splitUnit('1.5em')
|
|
27
|
+
expect(result).toEqual([1.5, 'em'])
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
test('handles negative values', () => {
|
|
31
|
+
const result = splitUnit('-10px')
|
|
32
|
+
expect(result).toEqual([-10, 'px'])
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
// Tests with spaces
|
|
36
|
+
test('handles values with spaces', () => {
|
|
37
|
+
const result = splitUnit('30 days')
|
|
38
|
+
expect(result).toEqual([30, 'days'])
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
test('handles values with many spaces between number and unit', () => {
|
|
42
|
+
const result = splitUnit('10 em')
|
|
43
|
+
expect(result).toEqual([10, 'em'])
|
|
44
|
+
})
|
|
45
|
+
})
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
const DEFAULT_OPTIONS = { array: 'replace' } // Can be concat or replace
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Deep merges multiple objects into a new object with intelligent handling of arrays and nested objects.
|
|
5
|
+
*
|
|
6
|
+
* @param {...Object} sources - Objects to merge. Null and undefined values are skipped.
|
|
7
|
+
* @return {Object} A new object containing the merged properties from all sources.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const obj1 = { a: 1, b: { x: 10 } }
|
|
11
|
+
* const obj2 = { b: { y: 20 }, c: 3 }
|
|
12
|
+
* const result = mix(obj1, obj2)
|
|
13
|
+
* // Returns: { a: 1, b: { x: 10, y: 20 }, c: 3 }
|
|
14
|
+
*/
|
|
15
|
+
export const mix = createMix()
|
|
16
|
+
export const concatMix = createMix({ array: 'concat' })
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Creates a customized mix function with specific options for array handling.
|
|
20
|
+
*
|
|
21
|
+
* @param {Object} [userOptions={}] - Configuration options for the mix function.
|
|
22
|
+
* @param {('replace'|'concat')} [userOptions.array='replace'] - How to handle array merging:
|
|
23
|
+
* - 'replace': Arrays from later sources completely replace arrays from earlier sources
|
|
24
|
+
* - 'concat': Arrays are concatenated together
|
|
25
|
+
* @return {Function} A mix function configured with the provided options.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // Create mix function that concatenates arrays
|
|
29
|
+
* const concatMix = createMix({ array: 'concat' })
|
|
30
|
+
* const obj1 = { items: [1, 2] }
|
|
31
|
+
* const obj2 = { items: [3, 4] }
|
|
32
|
+
* const result = concatMix(obj1, obj2)
|
|
33
|
+
* // Returns: { items: [1, 2, 3, 4] }
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Create mix function that replaces arrays (default behavior)
|
|
37
|
+
* const replaceMix = createMix({ array: 'replace' })
|
|
38
|
+
* const obj1 = { items: [1, 2] }
|
|
39
|
+
* const obj2 = { items: [3, 4] }
|
|
40
|
+
* const result = replaceMix(obj1, obj2)
|
|
41
|
+
* // Returns: { items: [3, 4] }
|
|
42
|
+
*/
|
|
43
|
+
export function createMix(userOptions = {}) {
|
|
44
|
+
const options = { ...DEFAULT_OPTIONS, ...userOptions }
|
|
45
|
+
|
|
46
|
+
function _mix(...sources) {
|
|
47
|
+
const result = {}
|
|
48
|
+
for (const source of sources) {
|
|
49
|
+
// Skip null or undefined sources
|
|
50
|
+
if (source == null) continue
|
|
51
|
+
merge(result, source, options)
|
|
52
|
+
}
|
|
53
|
+
return result
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return _mix
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Recursively merges properties from input object into output object.
|
|
61
|
+
* Handles property descriptors, prevents prototype pollution, and deep clones values.
|
|
62
|
+
*
|
|
63
|
+
* @param {Object} output - The target object to merge properties into.
|
|
64
|
+
* @param {Object} input - The source object to merge properties from.
|
|
65
|
+
* @param {Object} options - Merge options including array handling strategy.
|
|
66
|
+
* @property {('replace'|'concat')} options.array - How to handle array merging.
|
|
67
|
+
*/
|
|
68
|
+
function merge(output, input, options) {
|
|
69
|
+
const props = Object.keys(input)
|
|
70
|
+
|
|
71
|
+
for (const prop of props) {
|
|
72
|
+
// Prevents Prototype Pollution
|
|
73
|
+
if (prop === '__proto__') continue
|
|
74
|
+
|
|
75
|
+
const descriptor = Object.getOwnPropertyDescriptor(input, prop)
|
|
76
|
+
const value = descriptor.value
|
|
77
|
+
if (value) descriptor.value = cloneDescriptorValue(value)
|
|
78
|
+
|
|
79
|
+
// If don't have prop => Define property
|
|
80
|
+
if (!output[prop]) {
|
|
81
|
+
Object.defineProperty(output, prop, descriptor)
|
|
82
|
+
continue
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// If have prop, but type is not object => Overwrite by redefining property
|
|
86
|
+
if (typeof output[prop] !== 'object') {
|
|
87
|
+
Object.defineProperty(output, prop, descriptor)
|
|
88
|
+
continue
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Incoming non-object (primitive/null) => always overwrite
|
|
92
|
+
if (descriptor.value == null || typeof descriptor.value !== 'object') {
|
|
93
|
+
Object.defineProperty(output, prop, descriptor)
|
|
94
|
+
continue
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// If have prop, and incoming is Array => concat or replace
|
|
98
|
+
if (objectType(descriptor.value) === '[object Array]') {
|
|
99
|
+
output[prop] =
|
|
100
|
+
options.array === 'replace'
|
|
101
|
+
? descriptor.value.slice()
|
|
102
|
+
: output[prop].concat(descriptor.value)
|
|
103
|
+
continue
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// If have prop, but type is Object => Merge.
|
|
107
|
+
merge(output[prop], descriptor.value, options)
|
|
108
|
+
|
|
109
|
+
// Not sure if I have to deal with overwriting maps / dates. When it comes, I guess!
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Creates a deep clone of a property descriptor value.
|
|
115
|
+
* Handles arrays, objects, dates, maps, sets, and other types appropriately.
|
|
116
|
+
*
|
|
117
|
+
* @param {*} value - The value to clone.
|
|
118
|
+
* @return {*} A deep clone of the input value.
|
|
119
|
+
* @property {Array} value - Cloned recursively with all elements deep cloned.
|
|
120
|
+
* @property {Object} value - Cloned with all properties and descriptors preserved.
|
|
121
|
+
* @property {Date} value - Cloned as new Date with same time value.
|
|
122
|
+
* @property {Map} value - Cloned with all entries deep cloned.
|
|
123
|
+
* @property {Set} value - Cloned with all entries deep cloned.
|
|
124
|
+
*/
|
|
125
|
+
function cloneDescriptorValue(value) {
|
|
126
|
+
// Arrays
|
|
127
|
+
if (objectType(value) === '[object Array]') {
|
|
128
|
+
const array = []
|
|
129
|
+
for (let v of value) {
|
|
130
|
+
v = cloneDescriptorValue(v)
|
|
131
|
+
array.push(v)
|
|
132
|
+
}
|
|
133
|
+
return array
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Objects
|
|
137
|
+
if (objectType(value) === '[object Object]') {
|
|
138
|
+
const obj = {}
|
|
139
|
+
const props = Object.keys(value)
|
|
140
|
+
for (const prop of props) {
|
|
141
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, prop)
|
|
142
|
+
if (descriptor.value)
|
|
143
|
+
descriptor.value = cloneDescriptorValue(descriptor.value)
|
|
144
|
+
Object.defineProperty(obj, prop, descriptor)
|
|
145
|
+
}
|
|
146
|
+
return obj
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Other Types of Objects
|
|
150
|
+
if (objectType(value) === '[object Date]') {
|
|
151
|
+
return new Date(value.getTime())
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (objectType(value) === '[object Map]') {
|
|
155
|
+
const map = new Map()
|
|
156
|
+
for (const entry of value) {
|
|
157
|
+
map.set(entry[0], cloneDescriptorValue(entry[1]))
|
|
158
|
+
}
|
|
159
|
+
return map
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (objectType(value) === '[object Set]') {
|
|
163
|
+
const set = new Set()
|
|
164
|
+
for (const entry of value.entries()) {
|
|
165
|
+
set.add(cloneDescriptorValue(entry[0]))
|
|
166
|
+
}
|
|
167
|
+
return set
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Types we don't need to clone or cannot clone.
|
|
171
|
+
// Examples:
|
|
172
|
+
// - Primitives don't need to clone
|
|
173
|
+
// - Functions cannot clone
|
|
174
|
+
return value
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Returns the precise object type of a value using Object.prototype.toString.
|
|
179
|
+
*
|
|
180
|
+
* @param {*} value - The value to get the type of.
|
|
181
|
+
* @return {string} The object type string (e.g., '[object Array]', '[object Object]', '[object Date]').
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* objectType([]) // '[object Array]'
|
|
185
|
+
* objectType({}) // '[object Object]'
|
|
186
|
+
* objectType(new Date()) // '[object Date]'
|
|
187
|
+
* objectType(null) // '[object Null]'
|
|
188
|
+
*/
|
|
189
|
+
function objectType(value) {
|
|
190
|
+
return Object.prototype.toString.call(value)
|
|
191
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { expect, it } from 'vitest'
|
|
2
2
|
|
|
3
|
-
import { mix } from './mix.js'
|
|
3
|
+
import { concatMix, createMix, mix } from './mix.js'
|
|
4
4
|
|
|
5
5
|
it('Merge objects', () => {
|
|
6
6
|
const one = { one: 'one', overwrite: 'nope' }
|
|
@@ -176,7 +176,8 @@ it('Double objects with nested same array', () => {
|
|
|
176
176
|
|
|
177
177
|
const three = mix(one, two)
|
|
178
178
|
expect(typeof three.array.push).toBe('function')
|
|
179
|
-
expect(three.array).toHaveLength(
|
|
179
|
+
expect(three.array).toHaveLength(3)
|
|
180
|
+
expect(three.array).toEqual([4, 5, 6])
|
|
180
181
|
})
|
|
181
182
|
|
|
182
183
|
it('Objects in Arrays', () => {
|
|
@@ -217,6 +218,54 @@ it('Deep nested arrays', () => {
|
|
|
217
218
|
expect(two.array[1]).not.toBe(three.array[1])
|
|
218
219
|
})
|
|
219
220
|
|
|
221
|
+
it('concatMix: concatenates arrays', () => {
|
|
222
|
+
const one = {
|
|
223
|
+
array: [1, 2, 3],
|
|
224
|
+
}
|
|
225
|
+
const two = {
|
|
226
|
+
array: [4, 5, 6],
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const three = concatMix(one, two)
|
|
230
|
+
expect(typeof three.array.push).toBe('function')
|
|
231
|
+
expect(three.array).toHaveLength(6)
|
|
232
|
+
expect(three.array).toEqual([1, 2, 3, 4, 5, 6])
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
it('concatMix: empty array concat', () => {
|
|
236
|
+
const one = {}
|
|
237
|
+
const two = { array: [1, 2, 3] }
|
|
238
|
+
const three = concatMix(one, two)
|
|
239
|
+
|
|
240
|
+
expect(three).toEqual(two)
|
|
241
|
+
expect(typeof three.array.push).toBe('function')
|
|
242
|
+
expect(three.array).toHaveLength(3)
|
|
243
|
+
|
|
244
|
+
// Prevent mutation
|
|
245
|
+
three.array.push(4)
|
|
246
|
+
expect(two.array).toHaveLength(3)
|
|
247
|
+
expect(three.array).toHaveLength(4)
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
it('concatMix: nested objects with concatenated arrays', () => {
|
|
251
|
+
const one = {
|
|
252
|
+
nested: {
|
|
253
|
+
items: [1, 2],
|
|
254
|
+
other: 'value1',
|
|
255
|
+
},
|
|
256
|
+
}
|
|
257
|
+
const two = {
|
|
258
|
+
nested: {
|
|
259
|
+
items: [3, 4],
|
|
260
|
+
other: 'value2',
|
|
261
|
+
},
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const three = concatMix(one, two)
|
|
265
|
+
expect(three.nested.items).toEqual([1, 2, 3, 4])
|
|
266
|
+
expect(three.nested.other).toBe('value2')
|
|
267
|
+
})
|
|
268
|
+
|
|
220
269
|
it('Functions (cannot be cloned)', () => {
|
|
221
270
|
const one = {}
|
|
222
271
|
const two = {
|
|
@@ -346,3 +395,51 @@ it('should not skip null and false properties', () => {
|
|
|
346
395
|
|
|
347
396
|
expect(mix(obj1, obj2)).toEqual(expected)
|
|
348
397
|
})
|
|
398
|
+
|
|
399
|
+
it('Real Nested Example', () => {
|
|
400
|
+
const defaultOpts = {
|
|
401
|
+
transforms: {
|
|
402
|
+
extractFromFileName: { date: 'pubDate', slug: 'slug' },
|
|
403
|
+
setLatestDate: {
|
|
404
|
+
targetProperty: 'date',
|
|
405
|
+
sourceProperties: ['pubDate', 'updateDate'],
|
|
406
|
+
},
|
|
407
|
+
generateExcerpt: true,
|
|
408
|
+
stripFileNumbering: true,
|
|
409
|
+
stripMore: true,
|
|
410
|
+
},
|
|
411
|
+
sort: {
|
|
412
|
+
props: ['data.date', 'data.pubDate', 'data.title'],
|
|
413
|
+
reverse: true,
|
|
414
|
+
},
|
|
415
|
+
filter: 'published',
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
const newOptions = {
|
|
419
|
+
transforms: {
|
|
420
|
+
extractFromFileName: false,
|
|
421
|
+
generateExcerpt: false,
|
|
422
|
+
stripMore: false,
|
|
423
|
+
// stripFileNumbering: true,
|
|
424
|
+
},
|
|
425
|
+
sort: { props: ['filePath'], reverse: false },
|
|
426
|
+
filter: false,
|
|
427
|
+
}
|
|
428
|
+
const expected = {
|
|
429
|
+
transforms: {
|
|
430
|
+
setLatestDate: {
|
|
431
|
+
targetProperty: 'date',
|
|
432
|
+
sourceProperties: ['pubDate', 'updateDate'],
|
|
433
|
+
},
|
|
434
|
+
extractFromFileName: false,
|
|
435
|
+
generateExcerpt: false,
|
|
436
|
+
stripFileNumbering: true,
|
|
437
|
+
stripMore: false,
|
|
438
|
+
},
|
|
439
|
+
sort: { props: ['filePath'], reverse: false },
|
|
440
|
+
filter: false,
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
const mixReplace = createMix({ array: 'replace' })
|
|
444
|
+
expect(mixReplace(defaultOpts, newOptions)).toEqual(expected)
|
|
445
|
+
})
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { toKebab } from '../strings/convert-case/convert-case.js'
|
|
2
2
|
|
|
3
3
|
export function toStyleString(style) {
|
|
4
|
+
if (!style) return null
|
|
5
|
+
if (typeof style === 'string') return style
|
|
4
6
|
return Object.entries(style)
|
|
5
7
|
.map(([k, v]) => {
|
|
6
8
|
if (k.startsWith('--')) return `${k}:${v}`
|
package/tsconfig.json
CHANGED
|
@@ -6,18 +6,18 @@
|
|
|
6
6
|
"allowJs": true,
|
|
7
7
|
"checkJs": true,
|
|
8
8
|
"declaration": true,
|
|
9
|
-
"emitDeclarationOnly":
|
|
10
|
-
"outDir": "./dist",
|
|
9
|
+
"emitDeclarationOnly": false,
|
|
10
|
+
"outDir": "./dist/temp",
|
|
11
11
|
"strict": false,
|
|
12
12
|
"noImplicitAny": false,
|
|
13
13
|
"skipLibCheck": true,
|
|
14
14
|
"forceConsistentCasingInFileNames": true,
|
|
15
15
|
"resolveJsonModule": true,
|
|
16
16
|
"isolatedModules": true,
|
|
17
|
-
"noEmit":
|
|
17
|
+
"noEmit": true,
|
|
18
18
|
"esModuleInterop": true,
|
|
19
19
|
"allowSyntheticDefaultImports": true
|
|
20
20
|
},
|
|
21
|
-
"include": ["
|
|
22
|
-
"exclude": ["node_modules", "**/*.test.js", "**/*.spec.js"]
|
|
23
|
-
}
|
|
21
|
+
"include": ["src/**/*"],
|
|
22
|
+
"exclude": ["node_modules", "**/*.test.js", "**/*.spec.js", "dist/**/*"]
|
|
23
|
+
}
|
package/tsup.config.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { defineConfig } from 'tsup'
|
|
2
|
+
|
|
3
|
+
export default defineConfig([
|
|
4
|
+
// ESM build
|
|
5
|
+
{
|
|
6
|
+
entry: 'src/**/*.js',
|
|
7
|
+
format: ['esm'],
|
|
8
|
+
outDir: 'dist/esm',
|
|
9
|
+
clean: true,
|
|
10
|
+
splitting: false,
|
|
11
|
+
sourcemap: false,
|
|
12
|
+
dts: false,
|
|
13
|
+
ignoreWatch: ['**/*.test.js', '**/*.spec.js'],
|
|
14
|
+
},
|
|
15
|
+
// CJS build
|
|
16
|
+
{
|
|
17
|
+
entry: 'src/**/*.js',
|
|
18
|
+
format: ['cjs'],
|
|
19
|
+
outDir: 'dist/cjs',
|
|
20
|
+
outExtension: () => ({ js: '.cjs' }),
|
|
21
|
+
clean: false,
|
|
22
|
+
splitting: false,
|
|
23
|
+
sourcemap: false,
|
|
24
|
+
dts: false,
|
|
25
|
+
ignoreWatch: ['**/*.test.js', '**/*.spec.js'],
|
|
26
|
+
},
|
|
27
|
+
// Types build
|
|
28
|
+
{
|
|
29
|
+
entry: 'src/**/*.js',
|
|
30
|
+
dts: {
|
|
31
|
+
only: true,
|
|
32
|
+
},
|
|
33
|
+
outDir: 'dist/types',
|
|
34
|
+
outExtension: () => ({ dts: '.d.cts' }),
|
|
35
|
+
clean: false,
|
|
36
|
+
ignoreWatch: ['**/*.test.js', '**/*.spec.js'],
|
|
37
|
+
},
|
|
38
|
+
])
|
package/tsup.config.mjs
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { glob } from 'glob'
|
|
2
|
+
import { defineConfig } from 'tsup'
|
|
3
|
+
|
|
4
|
+
function getEntryPoints() {
|
|
5
|
+
// Get all JS files except test files
|
|
6
|
+
return glob.sync('src/**/*.js', {
|
|
7
|
+
ignore: ['**/*.test.js', '**/*.spec.js'],
|
|
8
|
+
})
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default defineConfig([
|
|
12
|
+
// ESM build
|
|
13
|
+
{
|
|
14
|
+
entry: getEntryPoints(),
|
|
15
|
+
format: ['esm'],
|
|
16
|
+
outDir: 'dist/esm',
|
|
17
|
+
clean: true,
|
|
18
|
+
splitting: false,
|
|
19
|
+
sourcemap: false,
|
|
20
|
+
dts: false,
|
|
21
|
+
},
|
|
22
|
+
// CJS build
|
|
23
|
+
{
|
|
24
|
+
entry: getEntryPoints(),
|
|
25
|
+
format: ['cjs'],
|
|
26
|
+
outDir: 'dist/cjs',
|
|
27
|
+
outExtension: () => ({ js: '.cjs' }),
|
|
28
|
+
clean: false,
|
|
29
|
+
splitting: false,
|
|
30
|
+
sourcemap: false,
|
|
31
|
+
dts: false,
|
|
32
|
+
},
|
|
33
|
+
// Types build
|
|
34
|
+
{
|
|
35
|
+
entry: getEntryPoints(),
|
|
36
|
+
dts: {
|
|
37
|
+
only: true,
|
|
38
|
+
},
|
|
39
|
+
outDir: 'dist/types',
|
|
40
|
+
outExtension: () => ({ dts: '.d.cts' }),
|
|
41
|
+
clean: false,
|
|
42
|
+
},
|
|
43
|
+
])
|
package/dist/dom/cookie.d.ts
DELETED
package/dist/dom/css-vars.d.ts
DELETED
package/dist/dom/events.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export function addListeners(listeners: any): void;
|
|
2
|
-
export function removeListeners(listeners: any): void;
|
|
3
|
-
export function dispatchEvent(node: any, eventName: any, detail: any, options?: {}): void;
|
|
4
|
-
export function updateEvent(event: any, updates: any): CustomEvent<any>;
|
|
5
|
-
export function createListeners(listeners: any): {
|
|
6
|
-
readonly list: any;
|
|
7
|
-
add({ node, event, handler }: {
|
|
8
|
-
node: any;
|
|
9
|
-
event: any;
|
|
10
|
-
handler: any;
|
|
11
|
-
}): void;
|
|
12
|
-
remove({ node, event, handler }: {
|
|
13
|
-
node: any;
|
|
14
|
-
event: any;
|
|
15
|
-
handler: any;
|
|
16
|
-
}): void;
|
|
17
|
-
clear(): void;
|
|
18
|
-
};
|
package/dist/dom/font-size.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export function getUnit(value: any): any;
|
|
2
|
-
export function em(element?: HTMLElement, multiple?: number): number;
|
|
3
|
-
export function rem(multiple?: number): number;
|
|
4
|
-
export function lh(element?: HTMLElement, multiple?: number): number;
|
|
5
|
-
export function toPx(value: any, element?: any): number;
|
package/dist/dom/hash.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export function sha256Hash(string: any): Promise<string>;
|
package/dist/dom/index.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export * from "./accessibility.js";
|
|
2
|
-
export * from "./actions/index.js";
|
|
3
|
-
export * from "./bounding-box.js";
|
|
4
|
-
export * from "./clipboard.js";
|
|
5
|
-
export * from "./cookie.js";
|
|
6
|
-
export * from "./css-vars.js";
|
|
7
|
-
export * from "./events.js";
|
|
8
|
-
export * from "./focusable.js";
|
|
9
|
-
export * from "./font-size.js";
|
|
10
|
-
export * from "./get-element.js";
|
|
11
|
-
export * from "./hash.js";
|
|
12
|
-
export * from "./keyboard.js";
|
|
13
|
-
export * from "./local-store.js";
|
|
14
|
-
export * from "./media.js";
|
|
15
|
-
export * from "./observers/index.js";
|
|
16
|
-
export * from "./pkce.js";
|
|
17
|
-
export * from "./query-params.js";
|
|
18
|
-
export * from "./random-string.js";
|
|
19
|
-
export * from "./sanitize.js";
|
|
20
|
-
export * from "./session-store.js";
|
|
21
|
-
export * from "./trap-focus.js";
|
|
22
|
-
export * from "./ui/index.js";
|
package/dist/dom/media.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export function useObserverMethodOnTarget(target: any, observer: any, method?: string, options?: any): void;
|
package/dist/dom/ui/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export function findScrollContainer(element: any, direction?: string): any;
|