@take-out/helpers 0.0.28
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/LICENSE +21 -0
- package/README.md +90 -0
- package/dist/cjs/array/fuzzy.cjs +51 -0
- package/dist/cjs/array/fuzzy.js +43 -0
- package/dist/cjs/array/fuzzy.js.map +6 -0
- package/dist/cjs/array/fuzzy.native.js +57 -0
- package/dist/cjs/array/fuzzy.native.js.map +6 -0
- package/dist/cjs/array/getRandomItem.cjs +30 -0
- package/dist/cjs/array/getRandomItem.js +25 -0
- package/dist/cjs/array/getRandomItem.js.map +6 -0
- package/dist/cjs/array/getRandomItem.native.js +31 -0
- package/dist/cjs/array/getRandomItem.native.js.map +6 -0
- package/dist/cjs/array/takeLast.cjs +26 -0
- package/dist/cjs/array/takeLast.js +21 -0
- package/dist/cjs/array/takeLast.js.map +6 -0
- package/dist/cjs/array/takeLast.native.js +28 -0
- package/dist/cjs/array/takeLast.native.js.map +6 -0
- package/dist/cjs/array/uniqBy.cjs +33 -0
- package/dist/cjs/array/uniqBy.js +28 -0
- package/dist/cjs/array/uniqBy.js.map +6 -0
- package/dist/cjs/array/uniqBy.native.js +44 -0
- package/dist/cjs/array/uniqBy.native.js.map +6 -0
- package/dist/cjs/assert.cjs +45 -0
- package/dist/cjs/assert.js +44 -0
- package/dist/cjs/assert.js.map +6 -0
- package/dist/cjs/assert.native.js +58 -0
- package/dist/cjs/assert.native.js.map +6 -0
- package/dist/cjs/async/abortable.cjs +49 -0
- package/dist/cjs/async/abortable.js +47 -0
- package/dist/cjs/async/abortable.js.map +6 -0
- package/dist/cjs/async/abortable.native.js +61 -0
- package/dist/cjs/async/abortable.native.js.map +6 -0
- package/dist/cjs/async/asyncContext.cjs +108 -0
- package/dist/cjs/async/asyncContext.js +104 -0
- package/dist/cjs/async/asyncContext.js.map +6 -0
- package/dist/cjs/async/asyncContext.native.js +108 -0
- package/dist/cjs/async/asyncContext.native.js.map +6 -0
- package/dist/cjs/async/idle.cjs +47 -0
- package/dist/cjs/async/idle.js +36 -0
- package/dist/cjs/async/idle.js.map +6 -0
- package/dist/cjs/async/idle.native.js +58 -0
- package/dist/cjs/async/idle.native.js.map +6 -0
- package/dist/cjs/async/interval.cjs +29 -0
- package/dist/cjs/async/interval.js +25 -0
- package/dist/cjs/async/interval.js.map +6 -0
- package/dist/cjs/async/interval.native.js +29 -0
- package/dist/cjs/async/interval.native.js.map +6 -0
- package/dist/cjs/async/isAborted.cjs +26 -0
- package/dist/cjs/async/isAborted.js +21 -0
- package/dist/cjs/async/isAborted.js.map +6 -0
- package/dist/cjs/async/isAborted.native.js +28 -0
- package/dist/cjs/async/isAborted.native.js.map +6 -0
- package/dist/cjs/async/sleep.cjs +29 -0
- package/dist/cjs/async/sleep.js +25 -0
- package/dist/cjs/async/sleep.js.map +6 -0
- package/dist/cjs/async/sleep.native.js +31 -0
- package/dist/cjs/async/sleep.native.js.map +6 -0
- package/dist/cjs/async/useAsync.cjs +44 -0
- package/dist/cjs/async/useAsync.js +37 -0
- package/dist/cjs/async/useAsync.js.map +6 -0
- package/dist/cjs/async/useAsync.native.js +50 -0
- package/dist/cjs/async/useAsync.native.js.map +6 -0
- package/dist/cjs/async/useAsyncEffect.cjs +74 -0
- package/dist/cjs/async/useAsyncEffect.js +68 -0
- package/dist/cjs/async/useAsyncEffect.js.map +6 -0
- package/dist/cjs/async/useAsyncEffect.native.js +76 -0
- package/dist/cjs/async/useAsyncEffect.native.js.map +6 -0
- package/dist/cjs/async/useLazyMount.cjs +45 -0
- package/dist/cjs/async/useLazyMount.js +38 -0
- package/dist/cjs/async/useLazyMount.js.map +6 -0
- package/dist/cjs/async/useLazyMount.native.js +40 -0
- package/dist/cjs/async/useLazyMount.native.js.map +6 -0
- package/dist/cjs/async/useLazyValue.cjs +39 -0
- package/dist/cjs/async/useLazyValue.js +35 -0
- package/dist/cjs/async/useLazyValue.js.map +6 -0
- package/dist/cjs/async/useLazyValue.native.js +35 -0
- package/dist/cjs/async/useLazyValue.native.js.map +6 -0
- package/dist/cjs/browser/clearIndexedDB.cjs +34 -0
- package/dist/cjs/browser/clearIndexedDB.js +31 -0
- package/dist/cjs/browser/clearIndexedDB.js.map +6 -0
- package/dist/cjs/browser/clearIndexedDB.native.js +42 -0
- package/dist/cjs/browser/clearIndexedDB.native.js.map +6 -0
- package/dist/cjs/browser/isActiveElementFormField.cjs +28 -0
- package/dist/cjs/browser/isActiveElementFormField.js +23 -0
- package/dist/cjs/browser/isActiveElementFormField.js.map +6 -0
- package/dist/cjs/browser/isActiveElementFormField.native.js +28 -0
- package/dist/cjs/browser/isActiveElementFormField.native.js.map +6 -0
- package/dist/cjs/browser/localStorage.cjs +200 -0
- package/dist/cjs/browser/localStorage.js +185 -0
- package/dist/cjs/browser/localStorage.js.map +6 -0
- package/dist/cjs/browser/localStorage.native.js +205 -0
- package/dist/cjs/browser/localStorage.native.js.map +6 -0
- package/dist/cjs/browser/openPopup.cjs +41 -0
- package/dist/cjs/browser/openPopup.js +31 -0
- package/dist/cjs/browser/openPopup.js.map +6 -0
- package/dist/cjs/browser/openPopup.native.js +36 -0
- package/dist/cjs/browser/openPopup.native.js.map +6 -0
- package/dist/cjs/client-only.cjs +1 -0
- package/dist/cjs/client-only.js +2 -0
- package/dist/cjs/client-only.js.map +6 -0
- package/dist/cjs/client-only.native.js +3 -0
- package/dist/cjs/client-only.native.js.map +6 -0
- package/dist/cjs/constants.cjs +52 -0
- package/dist/cjs/constants.js +38 -0
- package/dist/cjs/constants.js.map +6 -0
- package/dist/cjs/constants.native.js +54 -0
- package/dist/cjs/constants.native.js.map +6 -0
- package/dist/cjs/debug/debugLog.cjs +29 -0
- package/dist/cjs/debug/debugLog.js +24 -0
- package/dist/cjs/debug/debugLog.js.map +6 -0
- package/dist/cjs/debug/debugLog.native.js +29 -0
- package/dist/cjs/debug/debugLog.native.js.map +6 -0
- package/dist/cjs/debug/debugUseState.cjs +44 -0
- package/dist/cjs/debug/debugUseState.js +41 -0
- package/dist/cjs/debug/debugUseState.js.map +6 -0
- package/dist/cjs/debug/debugUseState.native.js +49 -0
- package/dist/cjs/debug/debugUseState.native.js.map +6 -0
- package/dist/cjs/emitter.cjs +209 -0
- package/dist/cjs/emitter.js +183 -0
- package/dist/cjs/emitter.js.map +6 -0
- package/dist/cjs/emitter.native.js +275 -0
- package/dist/cjs/emitter.native.js.map +6 -0
- package/dist/cjs/ensure/ensure.cjs +41 -0
- package/dist/cjs/ensure/ensure.js +40 -0
- package/dist/cjs/ensure/ensure.js.map +6 -0
- package/dist/cjs/ensure/ensure.native.js +54 -0
- package/dist/cjs/ensure/ensure.native.js.map +6 -0
- package/dist/cjs/ensure/ensureOne.cjs +33 -0
- package/dist/cjs/ensure/ensureOne.js +27 -0
- package/dist/cjs/ensure/ensureOne.js.map +6 -0
- package/dist/cjs/ensure/ensureOne.native.js +35 -0
- package/dist/cjs/ensure/ensureOne.native.js.map +6 -0
- package/dist/cjs/error/errors.cjs +36 -0
- package/dist/cjs/error/errors.js +31 -0
- package/dist/cjs/error/errors.js.map +6 -0
- package/dist/cjs/error/errors.native.js +137 -0
- package/dist/cjs/error/errors.native.js.map +6 -0
- package/dist/cjs/function/emptyFn.cjs +26 -0
- package/dist/cjs/function/emptyFn.js +22 -0
- package/dist/cjs/function/emptyFn.js.map +6 -0
- package/dist/cjs/function/emptyFn.native.js +27 -0
- package/dist/cjs/function/emptyFn.native.js.map +6 -0
- package/dist/cjs/function/identityFn.cjs +26 -0
- package/dist/cjs/function/identityFn.js +21 -0
- package/dist/cjs/function/identityFn.js.map +6 -0
- package/dist/cjs/function/identityFn.native.js +28 -0
- package/dist/cjs/function/identityFn.native.js.map +6 -0
- package/dist/cjs/function/throttle.cjs +45 -0
- package/dist/cjs/function/throttle.js +36 -0
- package/dist/cjs/function/throttle.js.map +6 -0
- package/dist/cjs/function/throttle.native.js +41 -0
- package/dist/cjs/function/throttle.native.js.map +6 -0
- package/dist/cjs/global/globalEffect.cjs +32 -0
- package/dist/cjs/global/globalEffect.js +26 -0
- package/dist/cjs/global/globalEffect.js.map +6 -0
- package/dist/cjs/global/globalEffect.native.js +34 -0
- package/dist/cjs/global/globalEffect.native.js.map +6 -0
- package/dist/cjs/global/globalValue.cjs +30 -0
- package/dist/cjs/global/globalValue.js +24 -0
- package/dist/cjs/global/globalValue.js.map +6 -0
- package/dist/cjs/global/globalValue.native.js +29 -0
- package/dist/cjs/global/globalValue.native.js.map +6 -0
- package/dist/cjs/index.cjs +88 -0
- package/dist/cjs/index.js +82 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/index.native.js +148 -0
- package/dist/cjs/index.native.js.map +6 -0
- package/dist/cjs/number/formatNumber.cjs +55 -0
- package/dist/cjs/number/formatNumber.js +48 -0
- package/dist/cjs/number/formatNumber.js.map +6 -0
- package/dist/cjs/number/formatNumber.native.js +52 -0
- package/dist/cjs/number/formatNumber.native.js.map +6 -0
- package/dist/cjs/object/decorateObject.cjs +30 -0
- package/dist/cjs/object/decorateObject.js +26 -0
- package/dist/cjs/object/decorateObject.js.map +6 -0
- package/dist/cjs/object/decorateObject.native.js +44 -0
- package/dist/cjs/object/decorateObject.native.js.map +6 -0
- package/dist/cjs/object/isEqualDeep.cjs +30 -0
- package/dist/cjs/object/isEqualDeep.js +23 -0
- package/dist/cjs/object/isEqualDeep.js.map +6 -0
- package/dist/cjs/object/isEqualDeep.native.js +28 -0
- package/dist/cjs/object/isEqualDeep.native.js.map +6 -0
- package/dist/cjs/object/isEqualIdentity.cjs +26 -0
- package/dist/cjs/object/isEqualIdentity.js +21 -0
- package/dist/cjs/object/isEqualIdentity.js.map +6 -0
- package/dist/cjs/object/isEqualIdentity.native.js +28 -0
- package/dist/cjs/object/isEqualIdentity.native.js.map +6 -0
- package/dist/cjs/object/isEqualJSON.cjs +26 -0
- package/dist/cjs/object/isEqualJSON.js +21 -0
- package/dist/cjs/object/isEqualJSON.js.map +6 -0
- package/dist/cjs/object/isEqualJSON.native.js +28 -0
- package/dist/cjs/object/isEqualJSON.native.js.map +6 -0
- package/dist/cjs/object/isEqualNever.cjs +26 -0
- package/dist/cjs/object/isEqualNever.js +21 -0
- package/dist/cjs/object/isEqualNever.js.map +6 -0
- package/dist/cjs/object/isEqualNever.native.js +28 -0
- package/dist/cjs/object/isEqualNever.native.js.map +6 -0
- package/dist/cjs/object/mapObject.cjs +30 -0
- package/dist/cjs/object/mapObject.js +26 -0
- package/dist/cjs/object/mapObject.js.map +6 -0
- package/dist/cjs/object/mapObject.native.js +31 -0
- package/dist/cjs/object/mapObject.native.js.map +6 -0
- package/dist/cjs/object/object.cjs +40 -0
- package/dist/cjs/object/object.js +37 -0
- package/dist/cjs/object/object.js.map +6 -0
- package/dist/cjs/object/object.native.js +49 -0
- package/dist/cjs/object/object.native.js.map +6 -0
- package/dist/cjs/object/objectUniqueKey.cjs +30 -0
- package/dist/cjs/object/objectUniqueKey.js +24 -0
- package/dist/cjs/object/objectUniqueKey.js.map +6 -0
- package/dist/cjs/object/objectUniqueKey.native.js +32 -0
- package/dist/cjs/object/objectUniqueKey.native.js.map +6 -0
- package/dist/cjs/react/createGlobalContext.cjs +30 -0
- package/dist/cjs/react/createGlobalContext.js +24 -0
- package/dist/cjs/react/createGlobalContext.js.map +6 -0
- package/dist/cjs/react/createGlobalContext.native.js +31 -0
- package/dist/cjs/react/createGlobalContext.native.js.map +6 -0
- package/dist/cjs/react/getCurrentComponentStack.cjs +62 -0
- package/dist/cjs/react/getCurrentComponentStack.js +54 -0
- package/dist/cjs/react/getCurrentComponentStack.js.map +6 -0
- package/dist/cjs/react/getCurrentComponentStack.native.js +69 -0
- package/dist/cjs/react/getCurrentComponentStack.native.js.map +6 -0
- package/dist/cjs/server/ensureEnv.cjs +32 -0
- package/dist/cjs/server/ensureEnv.js +31 -0
- package/dist/cjs/server/ensureEnv.js.map +6 -0
- package/dist/cjs/server/ensureEnv.native.js +36 -0
- package/dist/cjs/server/ensureEnv.native.js.map +6 -0
- package/dist/cjs/server/getHeaders.cjs +31 -0
- package/dist/cjs/server/getHeaders.js +26 -0
- package/dist/cjs/server/getHeaders.js.map +6 -0
- package/dist/cjs/server/getHeaders.native.js +31 -0
- package/dist/cjs/server/getHeaders.native.js.map +6 -0
- package/dist/cjs/server/prettyPrintRequest.cjs +28 -0
- package/dist/cjs/server/prettyPrintRequest.js +23 -0
- package/dist/cjs/server/prettyPrintRequest.js.map +6 -0
- package/dist/cjs/server/prettyPrintRequest.native.js +28 -0
- package/dist/cjs/server/prettyPrintRequest.native.js.map +6 -0
- package/dist/cjs/server/prettyPrintResponse.cjs +37 -0
- package/dist/cjs/server/prettyPrintResponse.js +30 -0
- package/dist/cjs/server/prettyPrintResponse.js.map +6 -0
- package/dist/cjs/server/prettyPrintResponse.native.js +35 -0
- package/dist/cjs/server/prettyPrintResponse.native.js.map +6 -0
- package/dist/cjs/server/streamToString.cjs +47 -0
- package/dist/cjs/server/streamToString.js +36 -0
- package/dist/cjs/server/streamToString.js.map +6 -0
- package/dist/cjs/server/streamToString.native.js +42 -0
- package/dist/cjs/server/streamToString.native.js.map +6 -0
- package/dist/cjs/server-only.cjs +1 -0
- package/dist/cjs/server-only.js +3 -0
- package/dist/cjs/server-only.js.map +6 -0
- package/dist/cjs/server-only.native.js +4 -0
- package/dist/cjs/server-only.native.js.map +6 -0
- package/dist/cjs/string/dedent.cjs +38 -0
- package/dist/cjs/string/dedent.js +33 -0
- package/dist/cjs/string/dedent.js.map +6 -0
- package/dist/cjs/string/dedent.native.js +48 -0
- package/dist/cjs/string/dedent.native.js.map +6 -0
- package/dist/cjs/string/ellipsis.cjs +29 -0
- package/dist/cjs/string/ellipsis.js +24 -0
- package/dist/cjs/string/ellipsis.js.map +6 -0
- package/dist/cjs/string/ellipsis.native.js +29 -0
- package/dist/cjs/string/ellipsis.native.js.map +6 -0
- package/dist/cjs/string/hash.cjs +32 -0
- package/dist/cjs/string/hash.js +27 -0
- package/dist/cjs/string/hash.js.map +6 -0
- package/dist/cjs/string/hash.native.js +38 -0
- package/dist/cjs/string/hash.native.js.map +6 -0
- package/dist/cjs/string/insertAtIndex.cjs +29 -0
- package/dist/cjs/string/insertAtIndex.js +25 -0
- package/dist/cjs/string/insertAtIndex.js.map +6 -0
- package/dist/cjs/string/insertAtIndex.native.js +30 -0
- package/dist/cjs/string/insertAtIndex.native.js.map +6 -0
- package/dist/cjs/string/pickLast.cjs +28 -0
- package/dist/cjs/string/pickLast.js +24 -0
- package/dist/cjs/string/pickLast.js.map +6 -0
- package/dist/cjs/string/pickLast.native.js +29 -0
- package/dist/cjs/string/pickLast.native.js.map +6 -0
- package/dist/cjs/string/pluralize.cjs +41 -0
- package/dist/cjs/string/pluralize.js +38 -0
- package/dist/cjs/string/pluralize.js.map +6 -0
- package/dist/cjs/string/pluralize.native.js +28 -0
- package/dist/cjs/string/pluralize.native.js.map +6 -0
- package/dist/cjs/string/randomId.cjs +26 -0
- package/dist/cjs/string/randomId.js +21 -0
- package/dist/cjs/string/randomId.js.map +6 -0
- package/dist/cjs/string/randomId.native.js +28 -0
- package/dist/cjs/string/randomId.native.js.map +6 -0
- package/dist/cjs/string/slugify.cjs +26 -0
- package/dist/cjs/string/slugify.js +21 -0
- package/dist/cjs/string/slugify.js.map +6 -0
- package/dist/cjs/string/slugify.native.js +28 -0
- package/dist/cjs/string/slugify.native.js.map +6 -0
- package/dist/cjs/string/truncateList.cjs +31 -0
- package/dist/cjs/string/truncateList.js +26 -0
- package/dist/cjs/string/truncateList.js.map +6 -0
- package/dist/cjs/string/truncateList.native.js +32 -0
- package/dist/cjs/string/truncateList.native.js.map +6 -0
- package/dist/cjs/time/formatDate.cjs +47 -0
- package/dist/cjs/time/formatDate.js +51 -0
- package/dist/cjs/time/formatDate.js.map +6 -0
- package/dist/cjs/time/formatDate.native.js +63 -0
- package/dist/cjs/time/formatDate.native.js.map +6 -0
- package/dist/cjs/time/formatDateRelative.cjs +55 -0
- package/dist/cjs/time/formatDateRelative.js +48 -0
- package/dist/cjs/time/formatDateRelative.js.map +6 -0
- package/dist/cjs/time/formatDateRelative.native.js +53 -0
- package/dist/cjs/time/formatDateRelative.native.js.map +6 -0
- package/dist/cjs/time/time.cjs +45 -0
- package/dist/cjs/time/time.js +40 -0
- package/dist/cjs/time/time.js.map +6 -0
- package/dist/cjs/time/time.native.js +75 -0
- package/dist/cjs/time/time.native.js.map +6 -0
- package/dist/cjs/types/NullToOptional.cjs +16 -0
- package/dist/cjs/types/NullToOptional.js +14 -0
- package/dist/cjs/types/NullToOptional.js.map +6 -0
- package/dist/cjs/types/NullToOptional.native.js +15 -0
- package/dist/cjs/types/NullToOptional.native.js.map +6 -0
- package/dist/cjs/types/object.cjs +16 -0
- package/dist/cjs/types/object.js +14 -0
- package/dist/cjs/types/object.js.map +6 -0
- package/dist/cjs/types/object.native.js +15 -0
- package/dist/cjs/types/object.native.js.map +6 -0
- package/dist/cjs/types/react.cjs +16 -0
- package/dist/cjs/types/react.js +14 -0
- package/dist/cjs/types/react.js.map +6 -0
- package/dist/cjs/types/react.native.js +15 -0
- package/dist/cjs/types/react.native.js.map +6 -0
- package/dist/cjs/types/timer.cjs +16 -0
- package/dist/cjs/types/timer.js +14 -0
- package/dist/cjs/types/timer.js.map +6 -0
- package/dist/cjs/types/timer.native.js +15 -0
- package/dist/cjs/types/timer.native.js.map +6 -0
- package/dist/cjs/types/tuple.cjs +16 -0
- package/dist/cjs/types/tuple.js +14 -0
- package/dist/cjs/types/tuple.js.map +6 -0
- package/dist/cjs/types/tuple.native.js +15 -0
- package/dist/cjs/types/tuple.native.js.map +6 -0
- package/dist/cjs/url/urlSanitize.cjs +35 -0
- package/dist/cjs/url/urlSanitize.js +31 -0
- package/dist/cjs/url/urlSanitize.js.map +6 -0
- package/dist/cjs/url/urlSanitize.native.js +42 -0
- package/dist/cjs/url/urlSanitize.native.js.map +6 -0
- package/dist/cjs/url/urlValidate.cjs +29 -0
- package/dist/cjs/url/urlValidate.js +26 -0
- package/dist/cjs/url/urlValidate.js.map +6 -0
- package/dist/cjs/url/urlValidate.native.js +29 -0
- package/dist/cjs/url/urlValidate.native.js.map +6 -0
- package/dist/esm/array/fuzzy.js +19 -0
- package/dist/esm/array/fuzzy.js.map +6 -0
- package/dist/esm/array/fuzzy.mjs +17 -0
- package/dist/esm/array/fuzzy.mjs.map +1 -0
- package/dist/esm/array/fuzzy.native.js +25 -0
- package/dist/esm/array/fuzzy.native.js.map +1 -0
- package/dist/esm/array/getRandomItem.js +9 -0
- package/dist/esm/array/getRandomItem.js.map +6 -0
- package/dist/esm/array/getRandomItem.mjs +7 -0
- package/dist/esm/array/getRandomItem.mjs.map +1 -0
- package/dist/esm/array/getRandomItem.native.js +8 -0
- package/dist/esm/array/getRandomItem.native.js.map +1 -0
- package/dist/esm/array/takeLast.js +5 -0
- package/dist/esm/array/takeLast.js.map +6 -0
- package/dist/esm/array/takeLast.mjs +3 -0
- package/dist/esm/array/takeLast.mjs.map +1 -0
- package/dist/esm/array/takeLast.native.js +5 -0
- package/dist/esm/array/takeLast.native.js.map +1 -0
- package/dist/esm/array/uniqBy.js +12 -0
- package/dist/esm/array/uniqBy.js.map +6 -0
- package/dist/esm/array/uniqBy.mjs +10 -0
- package/dist/esm/array/uniqBy.mjs.map +1 -0
- package/dist/esm/array/uniqBy.native.js +24 -0
- package/dist/esm/array/uniqBy.native.js.map +1 -0
- package/dist/esm/assert.js +28 -0
- package/dist/esm/assert.js.map +6 -0
- package/dist/esm/assert.mjs +19 -0
- package/dist/esm/assert.mjs.map +1 -0
- package/dist/esm/assert.native.js +25 -0
- package/dist/esm/assert.native.js.map +1 -0
- package/dist/esm/async/abortable.js +31 -0
- package/dist/esm/async/abortable.js.map +6 -0
- package/dist/esm/async/abortable.mjs +24 -0
- package/dist/esm/async/abortable.mjs.map +1 -0
- package/dist/esm/async/abortable.native.js +32 -0
- package/dist/esm/async/abortable.native.js.map +1 -0
- package/dist/esm/async/asyncContext.js +80 -0
- package/dist/esm/async/asyncContext.js.map +6 -0
- package/dist/esm/async/asyncContext.mjs +74 -0
- package/dist/esm/async/asyncContext.mjs.map +1 -0
- package/dist/esm/async/asyncContext.native.js +77 -0
- package/dist/esm/async/asyncContext.native.js.map +1 -0
- package/dist/esm/async/idle.js +21 -0
- package/dist/esm/async/idle.js.map +6 -0
- package/dist/esm/async/idle.mjs +24 -0
- package/dist/esm/async/idle.mjs.map +1 -0
- package/dist/esm/async/idle.native.js +31 -0
- package/dist/esm/async/idle.native.js.map +1 -0
- package/dist/esm/async/interval.js +9 -0
- package/dist/esm/async/interval.js.map +6 -0
- package/dist/esm/async/interval.mjs +6 -0
- package/dist/esm/async/interval.mjs.map +1 -0
- package/dist/esm/async/interval.native.js +6 -0
- package/dist/esm/async/interval.native.js.map +1 -0
- package/dist/esm/async/isAborted.js +5 -0
- package/dist/esm/async/isAborted.js.map +6 -0
- package/dist/esm/async/isAborted.mjs +3 -0
- package/dist/esm/async/isAborted.mjs.map +1 -0
- package/dist/esm/async/isAborted.native.js +5 -0
- package/dist/esm/async/isAborted.native.js.map +1 -0
- package/dist/esm/async/sleep.js +9 -0
- package/dist/esm/async/sleep.js.map +6 -0
- package/dist/esm/async/sleep.mjs +6 -0
- package/dist/esm/async/sleep.mjs.map +1 -0
- package/dist/esm/async/sleep.native.js +8 -0
- package/dist/esm/async/sleep.native.js.map +1 -0
- package/dist/esm/async/useAsync.js +21 -0
- package/dist/esm/async/useAsync.js.map +6 -0
- package/dist/esm/async/useAsync.mjs +21 -0
- package/dist/esm/async/useAsync.mjs.map +1 -0
- package/dist/esm/async/useAsync.native.js +24 -0
- package/dist/esm/async/useAsync.native.js.map +1 -0
- package/dist/esm/async/useAsyncEffect.js +54 -0
- package/dist/esm/async/useAsyncEffect.js.map +6 -0
- package/dist/esm/async/useAsyncEffect.mjs +50 -0
- package/dist/esm/async/useAsyncEffect.mjs.map +1 -0
- package/dist/esm/async/useAsyncEffect.native.js +60 -0
- package/dist/esm/async/useAsyncEffect.native.js.map +1 -0
- package/dist/esm/async/useLazyMount.js +24 -0
- package/dist/esm/async/useLazyMount.js.map +6 -0
- package/dist/esm/async/useLazyMount.mjs +21 -0
- package/dist/esm/async/useLazyMount.mjs.map +1 -0
- package/dist/esm/async/useLazyMount.native.js +24 -0
- package/dist/esm/async/useLazyMount.native.js.map +1 -0
- package/dist/esm/async/useLazyValue.js +21 -0
- package/dist/esm/async/useLazyValue.js.map +6 -0
- package/dist/esm/async/useLazyValue.mjs +16 -0
- package/dist/esm/async/useLazyValue.mjs.map +1 -0
- package/dist/esm/async/useLazyValue.native.js +17 -0
- package/dist/esm/async/useLazyValue.native.js.map +1 -0
- package/dist/esm/browser/clearIndexedDB.js +15 -0
- package/dist/esm/browser/clearIndexedDB.js.map +6 -0
- package/dist/esm/browser/clearIndexedDB.mjs +11 -0
- package/dist/esm/browser/clearIndexedDB.mjs.map +1 -0
- package/dist/esm/browser/clearIndexedDB.native.js +19 -0
- package/dist/esm/browser/clearIndexedDB.native.js.map +1 -0
- package/dist/esm/browser/isActiveElementFormField.js +7 -0
- package/dist/esm/browser/isActiveElementFormField.js.map +6 -0
- package/dist/esm/browser/isActiveElementFormField.mjs +5 -0
- package/dist/esm/browser/isActiveElementFormField.mjs.map +1 -0
- package/dist/esm/browser/isActiveElementFormField.native.js +5 -0
- package/dist/esm/browser/isActiveElementFormField.native.js.map +1 -0
- package/dist/esm/browser/localStorage.js +169 -0
- package/dist/esm/browser/localStorage.js.map +6 -0
- package/dist/esm/browser/localStorage.mjs +176 -0
- package/dist/esm/browser/localStorage.mjs.map +1 -0
- package/dist/esm/browser/localStorage.native.js +192 -0
- package/dist/esm/browser/localStorage.native.js.map +1 -0
- package/dist/esm/browser/openPopup.js +15 -0
- package/dist/esm/browser/openPopup.js.map +6 -0
- package/dist/esm/browser/openPopup.mjs +18 -0
- package/dist/esm/browser/openPopup.mjs.map +1 -0
- package/dist/esm/browser/openPopup.native.js +18 -0
- package/dist/esm/browser/openPopup.native.js.map +1 -0
- package/dist/esm/client-only.js +2 -0
- package/dist/esm/client-only.js.map +6 -0
- package/dist/esm/client-only.mjs +2 -0
- package/dist/esm/client-only.mjs.map +1 -0
- package/dist/esm/client-only.native.js +2 -0
- package/dist/esm/client-only.native.js.map +1 -0
- package/dist/esm/constants.js +23 -0
- package/dist/esm/constants.js.map +6 -0
- package/dist/esm/constants.mjs +18 -0
- package/dist/esm/constants.mjs.map +1 -0
- package/dist/esm/constants.native.js +20 -0
- package/dist/esm/constants.native.js.map +1 -0
- package/dist/esm/debug/debugLog.js +8 -0
- package/dist/esm/debug/debugLog.js.map +6 -0
- package/dist/esm/debug/debugLog.mjs +6 -0
- package/dist/esm/debug/debugLog.mjs.map +1 -0
- package/dist/esm/debug/debugLog.native.js +6 -0
- package/dist/esm/debug/debugLog.native.js.map +1 -0
- package/dist/esm/debug/debugUseState.js +25 -0
- package/dist/esm/debug/debugUseState.js.map +6 -0
- package/dist/esm/debug/debugUseState.mjs +21 -0
- package/dist/esm/debug/debugUseState.mjs.map +1 -0
- package/dist/esm/debug/debugUseState.native.js +21 -0
- package/dist/esm/debug/debugUseState.native.js.map +1 -0
- package/dist/esm/emitter.js +167 -0
- package/dist/esm/emitter.js.map +6 -0
- package/dist/esm/emitter.mjs +166 -0
- package/dist/esm/emitter.mjs.map +1 -0
- package/dist/esm/emitter.native.js +229 -0
- package/dist/esm/emitter.native.js.map +1 -0
- package/dist/esm/ensure/ensure.js +24 -0
- package/dist/esm/ensure/ensure.js.map +6 -0
- package/dist/esm/ensure/ensure.mjs +15 -0
- package/dist/esm/ensure/ensure.mjs.map +1 -0
- package/dist/esm/ensure/ensure.native.js +21 -0
- package/dist/esm/ensure/ensure.native.js.map +1 -0
- package/dist/esm/ensure/ensureOne.js +11 -0
- package/dist/esm/ensure/ensureOne.js.map +6 -0
- package/dist/esm/ensure/ensureOne.mjs +10 -0
- package/dist/esm/ensure/ensureOne.mjs.map +1 -0
- package/dist/esm/ensure/ensureOne.native.js +13 -0
- package/dist/esm/ensure/ensureOne.native.js.map +1 -0
- package/dist/esm/error/errors.js +15 -0
- package/dist/esm/error/errors.js.map +6 -0
- package/dist/esm/error/errors.mjs +12 -0
- package/dist/esm/error/errors.mjs.map +1 -0
- package/dist/esm/error/errors.native.js +105 -0
- package/dist/esm/error/errors.native.js.map +1 -0
- package/dist/esm/function/emptyFn.js +6 -0
- package/dist/esm/function/emptyFn.js.map +6 -0
- package/dist/esm/function/emptyFn.mjs +3 -0
- package/dist/esm/function/emptyFn.mjs.map +1 -0
- package/dist/esm/function/emptyFn.native.js +3 -0
- package/dist/esm/function/emptyFn.native.js.map +1 -0
- package/dist/esm/function/identityFn.js +5 -0
- package/dist/esm/function/identityFn.js.map +6 -0
- package/dist/esm/function/identityFn.mjs +3 -0
- package/dist/esm/function/identityFn.mjs.map +1 -0
- package/dist/esm/function/identityFn.native.js +5 -0
- package/dist/esm/function/identityFn.native.js.map +1 -0
- package/dist/esm/function/throttle.js +20 -0
- package/dist/esm/function/throttle.js.map +6 -0
- package/dist/esm/function/throttle.mjs +22 -0
- package/dist/esm/function/throttle.mjs.map +1 -0
- package/dist/esm/function/throttle.native.js +26 -0
- package/dist/esm/function/throttle.native.js.map +1 -0
- package/dist/esm/global/globalEffect.js +10 -0
- package/dist/esm/global/globalEffect.js.map +6 -0
- package/dist/esm/global/globalEffect.mjs +9 -0
- package/dist/esm/global/globalEffect.mjs.map +1 -0
- package/dist/esm/global/globalEffect.native.js +12 -0
- package/dist/esm/global/globalEffect.native.js.map +1 -0
- package/dist/esm/global/globalValue.js +8 -0
- package/dist/esm/global/globalValue.js.map +6 -0
- package/dist/esm/global/globalValue.mjs +7 -0
- package/dist/esm/global/globalValue.mjs.map +1 -0
- package/dist/esm/global/globalValue.native.js +7 -0
- package/dist/esm/global/globalValue.native.js.map +1 -0
- package/dist/esm/index.js +66 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/index.mjs +64 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +64 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/number/formatNumber.js +32 -0
- package/dist/esm/number/formatNumber.js.map +6 -0
- package/dist/esm/number/formatNumber.mjs +30 -0
- package/dist/esm/number/formatNumber.mjs.map +1 -0
- package/dist/esm/number/formatNumber.native.js +31 -0
- package/dist/esm/number/formatNumber.native.js.map +1 -0
- package/dist/esm/object/decorateObject.js +10 -0
- package/dist/esm/object/decorateObject.js.map +6 -0
- package/dist/esm/object/decorateObject.mjs +7 -0
- package/dist/esm/object/decorateObject.mjs.map +1 -0
- package/dist/esm/object/decorateObject.native.js +23 -0
- package/dist/esm/object/decorateObject.native.js.map +1 -0
- package/dist/esm/object/isEqualDeep.js +8 -0
- package/dist/esm/object/isEqualDeep.js.map +6 -0
- package/dist/esm/object/isEqualDeep.mjs +6 -0
- package/dist/esm/object/isEqualDeep.mjs.map +1 -0
- package/dist/esm/object/isEqualDeep.native.js +6 -0
- package/dist/esm/object/isEqualDeep.native.js.map +1 -0
- package/dist/esm/object/isEqualIdentity.js +5 -0
- package/dist/esm/object/isEqualIdentity.js.map +6 -0
- package/dist/esm/object/isEqualIdentity.mjs +3 -0
- package/dist/esm/object/isEqualIdentity.mjs.map +1 -0
- package/dist/esm/object/isEqualIdentity.native.js +5 -0
- package/dist/esm/object/isEqualIdentity.native.js.map +1 -0
- package/dist/esm/object/isEqualJSON.js +5 -0
- package/dist/esm/object/isEqualJSON.js.map +6 -0
- package/dist/esm/object/isEqualJSON.mjs +3 -0
- package/dist/esm/object/isEqualJSON.mjs.map +1 -0
- package/dist/esm/object/isEqualJSON.native.js +5 -0
- package/dist/esm/object/isEqualJSON.native.js.map +1 -0
- package/dist/esm/object/isEqualNever.js +5 -0
- package/dist/esm/object/isEqualNever.js.map +6 -0
- package/dist/esm/object/isEqualNever.mjs +3 -0
- package/dist/esm/object/isEqualNever.mjs.map +1 -0
- package/dist/esm/object/isEqualNever.native.js +5 -0
- package/dist/esm/object/isEqualNever.native.js.map +1 -0
- package/dist/esm/object/mapObject.js +10 -0
- package/dist/esm/object/mapObject.js.map +6 -0
- package/dist/esm/object/mapObject.mjs +7 -0
- package/dist/esm/object/mapObject.mjs.map +1 -0
- package/dist/esm/object/mapObject.native.js +7 -0
- package/dist/esm/object/mapObject.native.js.map +1 -0
- package/dist/esm/object/object.js +21 -0
- package/dist/esm/object/object.js.map +6 -0
- package/dist/esm/object/object.mjs +14 -0
- package/dist/esm/object/object.mjs.map +1 -0
- package/dist/esm/object/object.native.js +17 -0
- package/dist/esm/object/object.native.js.map +1 -0
- package/dist/esm/object/objectUniqueKey.js +8 -0
- package/dist/esm/object/objectUniqueKey.js.map +6 -0
- package/dist/esm/object/objectUniqueKey.mjs +7 -0
- package/dist/esm/object/objectUniqueKey.mjs.map +1 -0
- package/dist/esm/object/objectUniqueKey.native.js +10 -0
- package/dist/esm/object/objectUniqueKey.native.js.map +1 -0
- package/dist/esm/react/createGlobalContext.js +9 -0
- package/dist/esm/react/createGlobalContext.js.map +6 -0
- package/dist/esm/react/createGlobalContext.mjs +7 -0
- package/dist/esm/react/createGlobalContext.mjs.map +1 -0
- package/dist/esm/react/createGlobalContext.native.js +9 -0
- package/dist/esm/react/createGlobalContext.native.js.map +1 -0
- package/dist/esm/react/getCurrentComponentStack.js +30 -0
- package/dist/esm/react/getCurrentComponentStack.js.map +6 -0
- package/dist/esm/react/getCurrentComponentStack.mjs +28 -0
- package/dist/esm/react/getCurrentComponentStack.mjs.map +1 -0
- package/dist/esm/react/getCurrentComponentStack.native.js +42 -0
- package/dist/esm/react/getCurrentComponentStack.native.js.map +1 -0
- package/dist/esm/server/ensureEnv.js +15 -0
- package/dist/esm/server/ensureEnv.js.map +6 -0
- package/dist/esm/server/ensureEnv.mjs +9 -0
- package/dist/esm/server/ensureEnv.mjs.map +1 -0
- package/dist/esm/server/ensureEnv.native.js +9 -0
- package/dist/esm/server/ensureEnv.native.js.map +1 -0
- package/dist/esm/server/getHeaders.js +10 -0
- package/dist/esm/server/getHeaders.js.map +6 -0
- package/dist/esm/server/getHeaders.mjs +8 -0
- package/dist/esm/server/getHeaders.mjs.map +1 -0
- package/dist/esm/server/getHeaders.native.js +8 -0
- package/dist/esm/server/getHeaders.native.js.map +1 -0
- package/dist/esm/server/prettyPrintRequest.js +7 -0
- package/dist/esm/server/prettyPrintRequest.js.map +6 -0
- package/dist/esm/server/prettyPrintRequest.mjs +5 -0
- package/dist/esm/server/prettyPrintRequest.mjs.map +1 -0
- package/dist/esm/server/prettyPrintRequest.native.js +5 -0
- package/dist/esm/server/prettyPrintRequest.native.js.map +1 -0
- package/dist/esm/server/prettyPrintResponse.js +15 -0
- package/dist/esm/server/prettyPrintResponse.js.map +6 -0
- package/dist/esm/server/prettyPrintResponse.mjs +14 -0
- package/dist/esm/server/prettyPrintResponse.mjs.map +1 -0
- package/dist/esm/server/prettyPrintResponse.native.js +14 -0
- package/dist/esm/server/prettyPrintResponse.native.js.map +1 -0
- package/dist/esm/server/streamToString.js +20 -0
- package/dist/esm/server/streamToString.js.map +6 -0
- package/dist/esm/server/streamToString.mjs +24 -0
- package/dist/esm/server/streamToString.mjs.map +1 -0
- package/dist/esm/server/streamToString.native.js +24 -0
- package/dist/esm/server/streamToString.native.js.map +1 -0
- package/dist/esm/server-only.js +3 -0
- package/dist/esm/server-only.js.map +6 -0
- package/dist/esm/server-only.mjs +2 -0
- package/dist/esm/server-only.mjs.map +1 -0
- package/dist/esm/server-only.native.js +2 -0
- package/dist/esm/server-only.native.js.map +1 -0
- package/dist/esm/string/dedent.js +17 -0
- package/dist/esm/string/dedent.js.map +6 -0
- package/dist/esm/string/dedent.mjs +15 -0
- package/dist/esm/string/dedent.mjs.map +1 -0
- package/dist/esm/string/dedent.native.js +25 -0
- package/dist/esm/string/dedent.native.js.map +1 -0
- package/dist/esm/string/ellipsis.js +8 -0
- package/dist/esm/string/ellipsis.js.map +6 -0
- package/dist/esm/string/ellipsis.mjs +6 -0
- package/dist/esm/string/ellipsis.mjs.map +1 -0
- package/dist/esm/string/ellipsis.native.js +7 -0
- package/dist/esm/string/ellipsis.native.js.map +1 -0
- package/dist/esm/string/hash.js +11 -0
- package/dist/esm/string/hash.js.map +6 -0
- package/dist/esm/string/hash.mjs +8 -0
- package/dist/esm/string/hash.mjs.map +1 -0
- package/dist/esm/string/hash.native.js +13 -0
- package/dist/esm/string/hash.native.js.map +1 -0
- package/dist/esm/string/insertAtIndex.js +9 -0
- package/dist/esm/string/insertAtIndex.js.map +6 -0
- package/dist/esm/string/insertAtIndex.mjs +6 -0
- package/dist/esm/string/insertAtIndex.mjs.map +1 -0
- package/dist/esm/string/insertAtIndex.native.js +6 -0
- package/dist/esm/string/insertAtIndex.native.js.map +1 -0
- package/dist/esm/string/pickLast.js +8 -0
- package/dist/esm/string/pickLast.js.map +6 -0
- package/dist/esm/string/pickLast.mjs +5 -0
- package/dist/esm/string/pickLast.mjs.map +1 -0
- package/dist/esm/string/pickLast.native.js +5 -0
- package/dist/esm/string/pickLast.native.js.map +1 -0
- package/dist/esm/string/pluralize.js +22 -0
- package/dist/esm/string/pluralize.js.map +6 -0
- package/dist/esm/string/pluralize.mjs +17 -0
- package/dist/esm/string/pluralize.mjs.map +1 -0
- package/dist/esm/string/pluralize.native.js +5 -0
- package/dist/esm/string/pluralize.native.js.map +1 -0
- package/dist/esm/string/randomId.js +5 -0
- package/dist/esm/string/randomId.js.map +6 -0
- package/dist/esm/string/randomId.mjs +3 -0
- package/dist/esm/string/randomId.mjs.map +1 -0
- package/dist/esm/string/randomId.native.js +5 -0
- package/dist/esm/string/randomId.native.js.map +1 -0
- package/dist/esm/string/slugify.js +5 -0
- package/dist/esm/string/slugify.js.map +6 -0
- package/dist/esm/string/slugify.mjs +3 -0
- package/dist/esm/string/slugify.mjs.map +1 -0
- package/dist/esm/string/slugify.native.js +5 -0
- package/dist/esm/string/slugify.native.js.map +1 -0
- package/dist/esm/string/truncateList.js +10 -0
- package/dist/esm/string/truncateList.js.map +6 -0
- package/dist/esm/string/truncateList.mjs +8 -0
- package/dist/esm/string/truncateList.mjs.map +1 -0
- package/dist/esm/string/truncateList.native.js +9 -0
- package/dist/esm/string/truncateList.native.js.map +1 -0
- package/dist/esm/time/formatDate.js +35 -0
- package/dist/esm/time/formatDate.js.map +6 -0
- package/dist/esm/time/formatDate.mjs +24 -0
- package/dist/esm/time/formatDate.mjs.map +1 -0
- package/dist/esm/time/formatDate.native.js +24 -0
- package/dist/esm/time/formatDate.native.js.map +1 -0
- package/dist/esm/time/formatDateRelative.js +32 -0
- package/dist/esm/time/formatDateRelative.js.map +6 -0
- package/dist/esm/time/formatDateRelative.mjs +32 -0
- package/dist/esm/time/formatDateRelative.mjs.map +1 -0
- package/dist/esm/time/formatDateRelative.native.js +34 -0
- package/dist/esm/time/formatDateRelative.native.js.map +1 -0
- package/dist/esm/time/time.js +24 -0
- package/dist/esm/time/time.js.map +6 -0
- package/dist/esm/time/time.mjs +22 -0
- package/dist/esm/time/time.mjs.map +1 -0
- package/dist/esm/time/time.native.js +52 -0
- package/dist/esm/time/time.native.js.map +1 -0
- package/dist/esm/types/NullToOptional.js +1 -0
- package/dist/esm/types/NullToOptional.js.map +6 -0
- package/dist/esm/types/NullToOptional.mjs +2 -0
- package/dist/esm/types/NullToOptional.mjs.map +1 -0
- package/dist/esm/types/NullToOptional.native.js +2 -0
- package/dist/esm/types/NullToOptional.native.js.map +1 -0
- package/dist/esm/types/object.js +1 -0
- package/dist/esm/types/object.js.map +6 -0
- package/dist/esm/types/object.mjs +2 -0
- package/dist/esm/types/object.mjs.map +1 -0
- package/dist/esm/types/object.native.js +2 -0
- package/dist/esm/types/object.native.js.map +1 -0
- package/dist/esm/types/react.js +1 -0
- package/dist/esm/types/react.js.map +6 -0
- package/dist/esm/types/react.mjs +2 -0
- package/dist/esm/types/react.mjs.map +1 -0
- package/dist/esm/types/react.native.js +2 -0
- package/dist/esm/types/react.native.js.map +1 -0
- package/dist/esm/types/timer.js +1 -0
- package/dist/esm/types/timer.js.map +6 -0
- package/dist/esm/types/timer.mjs +2 -0
- package/dist/esm/types/timer.mjs.map +1 -0
- package/dist/esm/types/timer.native.js +2 -0
- package/dist/esm/types/timer.native.js.map +1 -0
- package/dist/esm/types/tuple.js +1 -0
- package/dist/esm/types/tuple.js.map +6 -0
- package/dist/esm/types/tuple.mjs +2 -0
- package/dist/esm/types/tuple.mjs.map +1 -0
- package/dist/esm/types/tuple.native.js +2 -0
- package/dist/esm/types/tuple.native.js.map +1 -0
- package/dist/esm/url/urlSanitize.js +15 -0
- package/dist/esm/url/urlSanitize.js.map +6 -0
- package/dist/esm/url/urlSanitize.mjs +12 -0
- package/dist/esm/url/urlSanitize.mjs.map +1 -0
- package/dist/esm/url/urlSanitize.native.js +12 -0
- package/dist/esm/url/urlSanitize.native.js.map +1 -0
- package/dist/esm/url/urlValidate.js +10 -0
- package/dist/esm/url/urlValidate.js.map +6 -0
- package/dist/esm/url/urlValidate.mjs +6 -0
- package/dist/esm/url/urlValidate.mjs.map +1 -0
- package/dist/esm/url/urlValidate.native.js +6 -0
- package/dist/esm/url/urlValidate.native.js.map +1 -0
- package/package.json +77 -0
- package/src/array/fuzzy.ts +39 -0
- package/src/array/getRandomItem.ts +5 -0
- package/src/array/takeLast.ts +3 -0
- package/src/array/uniqBy.ts +19 -0
- package/src/assert.ts +29 -0
- package/src/async/abortable.ts +60 -0
- package/src/async/asyncContext.ts +144 -0
- package/src/async/idle.ts +68 -0
- package/src/async/interval.ts +12 -0
- package/src/async/isAborted.ts +2 -0
- package/src/async/sleep.ts +8 -0
- package/src/async/useAsync.ts +38 -0
- package/src/async/useAsyncEffect.ts +120 -0
- package/src/async/useLazyMount.ts +32 -0
- package/src/async/useLazyValue.ts +30 -0
- package/src/browser/clearIndexedDB.ts +18 -0
- package/src/browser/isActiveElementFormField.ts +10 -0
- package/src/browser/localStorage.ts +311 -0
- package/src/browser/openPopup.ts +30 -0
- package/src/client-only.ts +3 -0
- package/src/constants.ts +34 -0
- package/src/debug/debugLog.ts +13 -0
- package/src/debug/debugUseState.ts +35 -0
- package/src/emitter.tsx +377 -0
- package/src/ensure/ensure.ts +31 -0
- package/src/ensure/ensureOne.ts +17 -0
- package/src/error/errors.ts +13 -0
- package/src/function/emptyFn.ts +1 -0
- package/src/function/identityFn.ts +1 -0
- package/src/function/throttle.ts +73 -0
- package/src/global/globalEffect.ts +14 -0
- package/src/global/globalValue.ts +40 -0
- package/src/index.ts +103 -0
- package/src/number/formatNumber.ts +40 -0
- package/src/object/decorateObject.ts +16 -0
- package/src/object/isEqualDeep.ts +7 -0
- package/src/object/isEqualIdentity.ts +1 -0
- package/src/object/isEqualJSON.ts +2 -0
- package/src/object/isEqualNever.ts +1 -0
- package/src/object/mapObject.ts +14 -0
- package/src/object/object.ts +33 -0
- package/src/object/objectUniqueKey.ts +12 -0
- package/src/react/createGlobalContext.ts +9 -0
- package/src/react/getCurrentComponentStack.ts +56 -0
- package/src/server/ensureEnv.ts +18 -0
- package/src/server/getHeaders.ts +7 -0
- package/src/server/prettyPrintRequest.ts +16 -0
- package/src/server/prettyPrintResponse.ts +15 -0
- package/src/server/streamToString.ts +19 -0
- package/src/server-only.ts +3 -0
- package/src/string/dedent.ts +30 -0
- package/src/string/ellipsis.ts +9 -0
- package/src/string/hash.ts +19 -0
- package/src/string/insertAtIndex.ts +7 -0
- package/src/string/pickLast.ts +10 -0
- package/src/string/pluralize.native.ts +6 -0
- package/src/string/pluralize.ts +21 -0
- package/src/string/randomId.ts +1 -0
- package/src/string/slugify.ts +7 -0
- package/src/string/truncateList.ts +28 -0
- package/src/time/formatDate.tsx +47 -0
- package/src/time/formatDateRelative.ts +72 -0
- package/src/time/time.ts +51 -0
- package/src/types/NullToOptional.d.ts.map +1 -0
- package/src/types/NullToOptional.ts +5 -0
- package/src/types/object.d.ts.map +1 -0
- package/src/types/object.ts +38 -0
- package/src/types/react.d.ts.map +1 -0
- package/src/types/react.ts +1 -0
- package/src/types/timer.d.ts.map +1 -0
- package/src/types/timer.ts +1 -0
- package/src/types/tuple.d.ts.map +1 -0
- package/src/types/tuple.ts +1 -0
- package/src/url/urlSanitize.ts +20 -0
- package/src/url/urlValidate.ts +11 -0
- package/types/array/fuzzy.d.ts +10 -0
- package/types/array/fuzzy.d.ts.map +16 -0
- package/types/array/getRandomItem.d.ts +3 -0
- package/types/array/getRandomItem.d.ts.map +13 -0
- package/types/array/takeLast.d.ts +3 -0
- package/types/array/takeLast.d.ts.map +14 -0
- package/types/array/uniqBy.d.ts +12 -0
- package/types/array/uniqBy.d.ts.map +15 -0
- package/types/assert.d.ts +6 -0
- package/types/assert.d.ts.map +15 -0
- package/types/async/abortable.d.ts +10 -0
- package/types/async/abortable.d.ts.map +18 -0
- package/types/async/asyncContext.d.ts +8 -0
- package/types/async/asyncContext.d.ts.map +14 -0
- package/types/async/idle.d.ts +8 -0
- package/types/async/idle.d.ts.map +14 -0
- package/types/async/interval.d.ts +3 -0
- package/types/async/interval.d.ts.map +15 -0
- package/types/async/isAborted.d.ts +3 -0
- package/types/async/isAborted.d.ts.map +13 -0
- package/types/async/sleep.d.ts +3 -0
- package/types/async/sleep.d.ts.map +14 -0
- package/types/async/useAsync.d.ts +3 -0
- package/types/async/useAsync.d.ts.map +14 -0
- package/types/async/useAsyncEffect.d.ts +12 -0
- package/types/async/useAsyncEffect.d.ts.map +16 -0
- package/types/async/useLazyMount.d.ts +9 -0
- package/types/async/useLazyMount.d.ts.map +13 -0
- package/types/async/useLazyValue.d.ts +6 -0
- package/types/async/useLazyValue.d.ts.map +13 -0
- package/types/browser/clearIndexedDB.d.ts +3 -0
- package/types/browser/clearIndexedDB.d.ts.map +11 -0
- package/types/browser/isActiveElementFormField.d.ts +3 -0
- package/types/browser/isActiveElementFormField.d.ts.map +11 -0
- package/types/browser/localStorage.d.ts +31 -0
- package/types/browser/localStorage.d.ts.map +22 -0
- package/types/browser/openPopup.d.ts +4 -0
- package/types/browser/openPopup.d.ts.map +16 -0
- package/types/client-only.d.ts +2 -0
- package/types/client-only.d.ts.map +11 -0
- package/types/constants.d.ts +11 -0
- package/types/constants.d.ts.map +17 -0
- package/types/debug/debugLog.d.ts +11 -0
- package/types/debug/debugLog.d.ts.map +14 -0
- package/types/debug/debugUseState.d.ts +3 -0
- package/types/debug/debugUseState.d.ts.map +13 -0
- package/types/emitter.d.ts +78 -0
- package/types/emitter.d.ts.map +43 -0
- package/types/ensure/catchEnsureErrors.d.ts +3 -0
- package/types/ensure/catchEnsureErrors.d.ts.map +13 -0
- package/types/ensure/ensure.d.ts +6 -0
- package/types/ensure/ensure.d.ts.map +15 -0
- package/types/ensure/ensureOne.d.ts +3 -0
- package/types/ensure/ensureOne.d.ts.map +15 -0
- package/types/ensure/ensureSingleton.d.ts +7 -0
- package/types/ensure/ensureSingleton.d.ts.map +14 -0
- package/types/error/errors.d.ts +8 -0
- package/types/error/errors.d.ts.map +13 -0
- package/types/files/download.d.ts +4 -0
- package/types/files/download.d.ts.map +16 -0
- package/types/function/emptyFn.d.ts +3 -0
- package/types/function/emptyFn.d.ts.map +11 -0
- package/types/function/identityFn.d.ts +3 -0
- package/types/function/identityFn.d.ts.map +13 -0
- package/types/function/throttle.d.ts +22 -0
- package/types/function/throttle.d.ts.map +13 -0
- package/types/global/globalContext.d.ts +6 -0
- package/types/global/globalContext.d.ts.map +14 -0
- package/types/global/globalEffect.d.ts +3 -0
- package/types/global/globalEffect.d.ts.map +14 -0
- package/types/global/globalValue.d.ts +24 -0
- package/types/global/globalValue.d.ts.map +15 -0
- package/types/index.d.ts +87 -0
- package/types/index.d.ts.map +11 -0
- package/types/number/formatNumber.d.ts +11 -0
- package/types/number/formatNumber.d.ts.map +14 -0
- package/types/object/decorateObject.d.ts +3 -0
- package/types/object/decorateObject.d.ts.map +15 -0
- package/types/object/isEqualDeep.d.ts +6 -0
- package/types/object/isEqualDeep.d.ts.map +14 -0
- package/types/object/isEqualIdentity.d.ts +3 -0
- package/types/object/isEqualIdentity.d.ts.map +14 -0
- package/types/object/isEqualJSON.d.ts +3 -0
- package/types/object/isEqualJSON.d.ts.map +14 -0
- package/types/object/isEqualNever.d.ts +3 -0
- package/types/object/isEqualNever.d.ts.map +14 -0
- package/types/object/mapObject.d.ts +6 -0
- package/types/object/mapObject.d.ts.map +16 -0
- package/types/object/object.d.ts +12 -0
- package/types/object/object.d.ts.map +17 -0
- package/types/object/objectUniqueKey.d.ts +3 -0
- package/types/object/objectUniqueKey.d.ts.map +13 -0
- package/types/react/createGlobalContext.d.ts +6 -0
- package/types/react/createGlobalContext.d.ts.map +14 -0
- package/types/react/getCurrentComponentStack.d.ts +3 -0
- package/types/react/getCurrentComponentStack.d.ts.map +13 -0
- package/types/server/ensureEnv.d.ts +4 -0
- package/types/server/ensureEnv.d.ts.map +14 -0
- package/types/server/getHeaders.d.ts +3 -0
- package/types/server/getHeaders.d.ts.map +13 -0
- package/types/server/prettyPrintRequest.d.ts +5 -0
- package/types/server/prettyPrintRequest.d.ts.map +13 -0
- package/types/server/prettyPrintResponse.d.ts +3 -0
- package/types/server/prettyPrintResponse.d.ts.map +13 -0
- package/types/server/streamToString.d.ts +3 -0
- package/types/server/streamToString.d.ts.map +13 -0
- package/types/server-only.d.ts +2 -0
- package/types/server-only.d.ts.map +11 -0
- package/types/string/dedent.d.ts +3 -0
- package/types/string/dedent.d.ts.map +13 -0
- package/types/string/ellipsis.d.ts +3 -0
- package/types/string/ellipsis.d.ts.map +14 -0
- package/types/string/hash.d.ts +5 -0
- package/types/string/hash.d.ts.map +14 -0
- package/types/string/insertAtIndex.d.ts +3 -0
- package/types/string/insertAtIndex.d.ts.map +15 -0
- package/types/string/pickLast.d.ts +3 -0
- package/types/string/pickLast.d.ts.map +14 -0
- package/types/string/pluralize.d.ts +5 -0
- package/types/string/pluralize.d.ts.map +16 -0
- package/types/string/pluralize.native.d.ts +4 -0
- package/types/string/pluralize.native.d.ts.map +13 -0
- package/types/string/randomId.d.ts +3 -0
- package/types/string/randomId.d.ts.map +11 -0
- package/types/string/slugify.d.ts +3 -0
- package/types/string/slugify.d.ts.map +13 -0
- package/types/string/truncateList.d.ts +17 -0
- package/types/string/truncateList.d.ts.map +15 -0
- package/types/time/formatDate.d.ts +5 -0
- package/types/time/formatDate.d.ts.map +14 -0
- package/types/time/formatDateRelative.d.ts +3 -0
- package/types/time/formatDateRelative.d.ts.map +13 -0
- package/types/time/time.d.ts +29 -0
- package/types/time/time.d.ts.map +14 -0
- package/types/types/NullToOptional.d.ts +3 -0
- package/types/types/NullToOptional.d.ts.map +11 -0
- package/types/types/object.d.ts +18 -0
- package/types/types/object.d.ts.map +14 -0
- package/types/types/react.d.ts +3 -0
- package/types/types/react.d.ts.map +11 -0
- package/types/types/timer.d.ts +3 -0
- package/types/types/timer.d.ts.map +11 -0
- package/types/types/tuple.d.ts +3 -0
- package/types/types/tuple.d.ts.map +11 -0
- package/types/url/urlSanitize.d.ts +3 -0
- package/types/url/urlSanitize.d.ts.map +13 -0
- package/types/url/urlValidate.d.ts +3 -0
- package/types/url/urlValidate.d.ts.map +13 -0
package/src/constants.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { isWeb } from '@tamagui/constants'
|
|
2
|
+
|
|
3
|
+
export const isTauri: boolean =
|
|
4
|
+
typeof window !== 'undefined' &&
|
|
5
|
+
// @ts-expect-error
|
|
6
|
+
window['__TAURI__'] !== undefined
|
|
7
|
+
|
|
8
|
+
export const isNative: boolean = !isWeb && !isTauri
|
|
9
|
+
|
|
10
|
+
// TODO move to probably ~/interface/constants
|
|
11
|
+
|
|
12
|
+
export const IS_MAC_DESKTOP: boolean =
|
|
13
|
+
typeof navigator !== 'undefined' && /Macintosh|MacIntel/.test(navigator.platform)
|
|
14
|
+
|
|
15
|
+
export const IS_SAFARI: boolean =
|
|
16
|
+
isTauri ||
|
|
17
|
+
(typeof navigator !== 'undefined' &&
|
|
18
|
+
/Version\/[\d.]+.*Safari/.test(navigator.userAgent) &&
|
|
19
|
+
/Apple Computer/.test(navigator.vendor))
|
|
20
|
+
|
|
21
|
+
export { isAndroid, isClient, isIos, isServer, isWeb } from '@tamagui/constants'
|
|
22
|
+
|
|
23
|
+
export const EMPTY_ARRAY = [] as never
|
|
24
|
+
export const EMPTY_OBJECT = {} as never
|
|
25
|
+
|
|
26
|
+
const getDebugLevelFromUrl = (): number | null => {
|
|
27
|
+
if (typeof window === 'undefined') return null
|
|
28
|
+
const match = window.location?.search?.match(/debug=(\d+)/)
|
|
29
|
+
return match?.[1] ? parseInt(match[1], 10) : null
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const DEBUG_LEVEL: number = process.env.DEBUG_LEVEL
|
|
33
|
+
? +process.env.DEBUG_LEVEL
|
|
34
|
+
: (getDebugLevelFromUrl() ?? (process.env.NODE_ENV === 'development' ? 1 : 0))
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug utility that logs a value and passes it through unchanged.
|
|
3
|
+
* Useful for debugging chains of operations without breaking the flow.
|
|
4
|
+
*
|
|
5
|
+
* @param value - The value to log and pass through
|
|
6
|
+
* @param label - Optional label to prefix the log output
|
|
7
|
+
* @returns The original value unchanged
|
|
8
|
+
*/
|
|
9
|
+
export function debugLog<T>(value: T, label?: string): T {
|
|
10
|
+
const output = label ? `[${label}]` : '[DEBUG]'
|
|
11
|
+
console.info(output, value)
|
|
12
|
+
return value
|
|
13
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useCallback } from 'react'
|
|
2
|
+
|
|
3
|
+
export function debugUseState<T>(
|
|
4
|
+
useState: [T, React.Dispatch<React.SetStateAction<T>>]
|
|
5
|
+
): [T, React.Dispatch<React.SetStateAction<T>>] {
|
|
6
|
+
const [state, setState] = useState
|
|
7
|
+
|
|
8
|
+
const wrappedSetState = useCallback(
|
|
9
|
+
(newValue: T | ((prevState: T) => T)) => {
|
|
10
|
+
if (typeof newValue === 'function') {
|
|
11
|
+
// Handle callback style
|
|
12
|
+
setState((prevState: T) => {
|
|
13
|
+
const nextState = (newValue as (prevState: T) => T)(prevState)
|
|
14
|
+
console.trace('State update (callback):', {
|
|
15
|
+
prevState,
|
|
16
|
+
nextState,
|
|
17
|
+
stack: new Error().stack,
|
|
18
|
+
})
|
|
19
|
+
return nextState
|
|
20
|
+
})
|
|
21
|
+
} else {
|
|
22
|
+
// Handle direct value style
|
|
23
|
+
console.trace('State update (direct):', {
|
|
24
|
+
prevState: state,
|
|
25
|
+
nextState: newValue,
|
|
26
|
+
stack: new Error().stack,
|
|
27
|
+
})
|
|
28
|
+
setState(newValue)
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
[setState, state]
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
return [state, wrappedSetState]
|
|
35
|
+
}
|
package/src/emitter.tsx
ADDED
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { dequal } from 'dequal'
|
|
2
|
+
import type { JSX, PropsWithChildren } from 'react'
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import { use, useLayoutEffect, useState } from 'react'
|
|
5
|
+
import { handleAbortError } from './async/abortable'
|
|
6
|
+
import { DEBUG_LEVEL, EMPTY_ARRAY } from './constants'
|
|
7
|
+
import { AbortError } from './error/errors'
|
|
8
|
+
import { createGlobalContext } from './react/createGlobalContext'
|
|
9
|
+
import { globalValue } from './global/globalValue'
|
|
10
|
+
|
|
11
|
+
// keeps a reference to the current value easily
|
|
12
|
+
|
|
13
|
+
// TODO can replace with useEffectEvent
|
|
14
|
+
function useGet<A>(
|
|
15
|
+
currentValue: A,
|
|
16
|
+
initialValue?: any,
|
|
17
|
+
forwardToFunction?: boolean
|
|
18
|
+
): () => A {
|
|
19
|
+
const curRef = React.useRef<any>(initialValue ?? currentValue)
|
|
20
|
+
|
|
21
|
+
useLayoutEffect(() => {
|
|
22
|
+
curRef.current = currentValue
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
return React.useCallback(
|
|
26
|
+
forwardToFunction
|
|
27
|
+
? (...args) => curRef.current?.apply(null, args)
|
|
28
|
+
: () => curRef.current,
|
|
29
|
+
[]
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type EmitterOptions<T> = CreateEmitterOpts<T> & {
|
|
34
|
+
name: string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
type CreateEmitterOpts<T> = {
|
|
38
|
+
silent?: boolean
|
|
39
|
+
comparator?: (a: T, b: T) => boolean
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export class Emitter<const T> {
|
|
43
|
+
private disposables = new Set<(cb: any) => void>()
|
|
44
|
+
value: T
|
|
45
|
+
options?: EmitterOptions<T>
|
|
46
|
+
|
|
47
|
+
constructor(value: T, options?: EmitterOptions<T>) {
|
|
48
|
+
this.value = value
|
|
49
|
+
this.options = options
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
listen = (disposable: (cb: T) => void): (() => void) => {
|
|
53
|
+
this.disposables.add(disposable)
|
|
54
|
+
return (): void => {
|
|
55
|
+
this.disposables.delete(disposable)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
emit = (next: T): void => {
|
|
60
|
+
if (process.env.NODE_ENV === 'development') {
|
|
61
|
+
setCache(this, next)
|
|
62
|
+
}
|
|
63
|
+
const compare = this.options?.comparator
|
|
64
|
+
if (compare) {
|
|
65
|
+
if (this.value && compare(this.value, next)) {
|
|
66
|
+
return
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
if (this.value === next) {
|
|
70
|
+
if (process.env.NODE_ENV === 'development') {
|
|
71
|
+
console.warn(
|
|
72
|
+
`[emitter] ${this.options?.name} no comparator option but received same value!
|
|
73
|
+
|
|
74
|
+
this will emit the same value again, which can be desirable, but we warn to ensure it's not unintended:
|
|
75
|
+
|
|
76
|
+
- if you want this behavior, add { comparator: isEqualNever }
|
|
77
|
+
- if you want only non-equal values: { comparator: isEqualIdentity }
|
|
78
|
+
- if you want only deeply non-equal values: { comparator: isEqualDeep }`
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
this.value = next
|
|
84
|
+
if (DEBUG_LEVEL > 1) {
|
|
85
|
+
if (!this.options?.silent) {
|
|
86
|
+
const name = this.options?.name
|
|
87
|
+
console.groupCollapsed(`📣 ${name}`)
|
|
88
|
+
console.info(next)
|
|
89
|
+
console.trace(`trace >`)
|
|
90
|
+
console.groupEnd()
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
this.disposables.forEach((cb) => cb(next))
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
nextValue = (): Promise<T> => {
|
|
97
|
+
return new Promise<T>((res) => {
|
|
98
|
+
const dispose = this.listen((val) => {
|
|
99
|
+
dispose()
|
|
100
|
+
res(val)
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// just createEmitter but ensures it doesn't mess up on HMR
|
|
107
|
+
export function createGlobalEmitter<T>(
|
|
108
|
+
name: string,
|
|
109
|
+
defaultValue: T,
|
|
110
|
+
options?: CreateEmitterOpts<T>
|
|
111
|
+
): Emitter<T> {
|
|
112
|
+
return globalValue(name, () => createEmitter(name, defaultValue, options))
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function createEmitter<T>(
|
|
116
|
+
name: string,
|
|
117
|
+
defaultValue: T,
|
|
118
|
+
options?: CreateEmitterOpts<T>
|
|
119
|
+
): Emitter<T> {
|
|
120
|
+
const existing = createOrUpdateCache(name, defaultValue) as T
|
|
121
|
+
return new Emitter<T>(existing || defaultValue, { name, ...options })
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export type EmitterType<E extends Emitter<any>> = E extends Emitter<infer Val>
|
|
125
|
+
? Val
|
|
126
|
+
: never
|
|
127
|
+
|
|
128
|
+
export const useEmitter = <E extends Emitter<any>>(
|
|
129
|
+
emitter: E,
|
|
130
|
+
cb: (cb: EmitterType<E>) => void,
|
|
131
|
+
args?: any[]
|
|
132
|
+
): void => {
|
|
133
|
+
const getCallback = useGet(cb)
|
|
134
|
+
|
|
135
|
+
useLayoutEffect(() => {
|
|
136
|
+
return emitter.listen((val) => {
|
|
137
|
+
try {
|
|
138
|
+
getCallback()(val)
|
|
139
|
+
} catch (err) {
|
|
140
|
+
handleAbortError(err)
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
}, [emitter, getCallback])
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export const useEmitterValue = <E extends Emitter<any>>(
|
|
147
|
+
emitter: E,
|
|
148
|
+
options?: { disable?: boolean }
|
|
149
|
+
): EmitterType<E> => {
|
|
150
|
+
const [state, setState] = useState<EmitterType<E>>(emitter.value)
|
|
151
|
+
const disabled = options?.disable
|
|
152
|
+
|
|
153
|
+
useLayoutEffect(() => {
|
|
154
|
+
if (disabled) return
|
|
155
|
+
if (emitter.value !== state) {
|
|
156
|
+
setState(emitter.value)
|
|
157
|
+
}
|
|
158
|
+
return emitter.listen(setState)
|
|
159
|
+
}, [disabled, emitter, state])
|
|
160
|
+
|
|
161
|
+
return state
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* By default selectors run every render, as well as when emitters update. This is a change
|
|
166
|
+
* from the previous behavior where they only ran when emitters changed value.
|
|
167
|
+
*
|
|
168
|
+
* The reason for this is because emitters capture the variables in scope of the component
|
|
169
|
+
* each render already by using "useGet" by default, which makes them easier to use - you
|
|
170
|
+
* don't need to pass an args[] array except for edge cases.
|
|
171
|
+
*
|
|
172
|
+
* Before explaining why we switched to the default, understand the different uses:
|
|
173
|
+
*
|
|
174
|
+
* - Default behavior - selector is updated every render, and ran every render, as well as
|
|
175
|
+
* when emitter value changes, so you basically are always up to date.
|
|
176
|
+
*
|
|
177
|
+
* - Set an args[] array as the fourth argument - this will stop the automatic capturing
|
|
178
|
+
* and instead update selector only when you change args[] yourself. This is good for when you
|
|
179
|
+
* want explicit control over re-selection and rendering.
|
|
180
|
+
*
|
|
181
|
+
* - With { lazy: true }, the selector only runs when the emitter value changes. If used with
|
|
182
|
+
* args[], you capture the context of the selector based on args[], if not, it's based on the
|
|
183
|
+
* current render.
|
|
184
|
+
*
|
|
185
|
+
* I made this change when we had 16 usages of useEmitterSelector and 100% of them are doing very
|
|
186
|
+
* cheap calculations, so this feels like the right pattern. For the rare case of a heavy selector,
|
|
187
|
+
* you have the option to control it.
|
|
188
|
+
*
|
|
189
|
+
*/
|
|
190
|
+
export const useEmitterSelector = <E extends Emitter<any>, T extends EmitterType<E>, R>(
|
|
191
|
+
emitter: E,
|
|
192
|
+
selector: (value: T) => R,
|
|
193
|
+
options?: {
|
|
194
|
+
disable?: boolean
|
|
195
|
+
lazy?: boolean
|
|
196
|
+
},
|
|
197
|
+
args: any[] = EMPTY_ARRAY
|
|
198
|
+
): R => {
|
|
199
|
+
const [state, setState] = useState<R>(() => selector(emitter.value))
|
|
200
|
+
const disabled = options?.disable
|
|
201
|
+
const getSelector = useGet(selector)
|
|
202
|
+
|
|
203
|
+
if (options?.lazy !== true) {
|
|
204
|
+
const next = selector(emitter.value)
|
|
205
|
+
if (next !== state) {
|
|
206
|
+
setState(next)
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: we are using args fine
|
|
211
|
+
useLayoutEffect(() => {
|
|
212
|
+
if (disabled) return
|
|
213
|
+
return emitter.listen((val) => {
|
|
214
|
+
try {
|
|
215
|
+
const selectorFn = args !== EMPTY_ARRAY ? selector : getSelector()
|
|
216
|
+
const next = selectorFn(val)
|
|
217
|
+
setState(next)
|
|
218
|
+
} catch (error) {
|
|
219
|
+
if (error instanceof AbortError) {
|
|
220
|
+
return
|
|
221
|
+
}
|
|
222
|
+
throw error
|
|
223
|
+
}
|
|
224
|
+
})
|
|
225
|
+
}, [disabled, emitter, getSelector, ...args])
|
|
226
|
+
|
|
227
|
+
return state
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export const useEmittersSelector = <const E extends readonly Emitter<any>[], R>(
|
|
231
|
+
emitters: E,
|
|
232
|
+
selector: (values: { [K in keyof E]: EmitterType<E[K]> }) => R,
|
|
233
|
+
options?: { disable?: boolean; isEqual?: (a: R, b: R) => boolean }
|
|
234
|
+
): R => {
|
|
235
|
+
const getSelector = useGet(selector)
|
|
236
|
+
const disabled = options?.disable
|
|
237
|
+
|
|
238
|
+
const [state, setState] = useState<R>(() => {
|
|
239
|
+
const values = emitters.map((e) => e.value) as { [K in keyof E]: EmitterType<E[K]> }
|
|
240
|
+
return getSelector()(values)
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: ignore
|
|
244
|
+
useLayoutEffect(() => {
|
|
245
|
+
if (disabled) {
|
|
246
|
+
return
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const handler = () => {
|
|
250
|
+
const values = emitters.map((e) => e.value) as {
|
|
251
|
+
[K in keyof E]: EmitterType<E[K]>
|
|
252
|
+
}
|
|
253
|
+
try {
|
|
254
|
+
const next = getSelector()(values)
|
|
255
|
+
setState((prev) => {
|
|
256
|
+
if (options?.isEqual?.(prev, next)) {
|
|
257
|
+
return prev
|
|
258
|
+
}
|
|
259
|
+
if (dequal(prev, next)) {
|
|
260
|
+
return prev
|
|
261
|
+
}
|
|
262
|
+
return next
|
|
263
|
+
})
|
|
264
|
+
} catch (error) {
|
|
265
|
+
if (error instanceof AbortError) {
|
|
266
|
+
return
|
|
267
|
+
}
|
|
268
|
+
throw error
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const disposals = emitters.map((emitter) => emitter.listen(handler))
|
|
273
|
+
|
|
274
|
+
return () => {
|
|
275
|
+
disposals.forEach((d) => d())
|
|
276
|
+
}
|
|
277
|
+
}, [disabled, getSelector, ...emitters])
|
|
278
|
+
|
|
279
|
+
return state
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export const createUseEmitter = <E extends Emitter<any>>(
|
|
283
|
+
emitter: E
|
|
284
|
+
): ((cb: (val: EmitterType<E>) => void, args?: any[]) => void) => {
|
|
285
|
+
return (cb: (val: EmitterType<E>) => void, args?: any[]) =>
|
|
286
|
+
useEmitter(emitter, cb, args)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
export const createUseSelector = <E extends Emitter<any>>(
|
|
290
|
+
emitter: E
|
|
291
|
+
): (<R>(
|
|
292
|
+
selector: (value: EmitterType<E>) => R,
|
|
293
|
+
options?: { disable?: boolean; lazy?: boolean },
|
|
294
|
+
args?: any[]
|
|
295
|
+
) => R) => {
|
|
296
|
+
return <R,>(
|
|
297
|
+
selector: (value: EmitterType<E>) => R,
|
|
298
|
+
options?: { disable?: boolean; lazy?: boolean },
|
|
299
|
+
args?: any[]
|
|
300
|
+
): R => {
|
|
301
|
+
return useEmitterSelector(emitter, selector, options, args)
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export function createContextualEmitter<T>(
|
|
306
|
+
name: string,
|
|
307
|
+
defaultValue: T,
|
|
308
|
+
defaultOptions?: Omit<EmitterOptions<T>, 'name'>
|
|
309
|
+
): readonly [
|
|
310
|
+
() => Emitter<T>,
|
|
311
|
+
(props: PropsWithChildren<{ value?: T; silent?: boolean }>) => JSX.Element,
|
|
312
|
+
] {
|
|
313
|
+
const id = Math.random().toString(36)
|
|
314
|
+
const EmitterContext = createGlobalContext<Emitter<T> | null>(
|
|
315
|
+
`contextual-emitter/${id}`,
|
|
316
|
+
null
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
const useContextEmitter = () => {
|
|
320
|
+
const emitter = use(EmitterContext)
|
|
321
|
+
if (!emitter) {
|
|
322
|
+
throw new Error('useContextEmitter must be used within an EmitterProvider')
|
|
323
|
+
}
|
|
324
|
+
return emitter
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
type ProvideEmitterProps = PropsWithChildren<{
|
|
328
|
+
value?: T
|
|
329
|
+
silent?: boolean
|
|
330
|
+
}>
|
|
331
|
+
|
|
332
|
+
const ProvideEmitter = (props: ProvideEmitterProps) => {
|
|
333
|
+
const { children, value, silent } = props
|
|
334
|
+
const [emitter] = useState(
|
|
335
|
+
() => new Emitter<T>(value ?? defaultValue, { name, silent, ...defaultOptions })
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
useLayoutEffect(() => {
|
|
339
|
+
if (value !== undefined && value !== emitter.value) {
|
|
340
|
+
emitter.emit(value)
|
|
341
|
+
}
|
|
342
|
+
}, [value, emitter])
|
|
343
|
+
|
|
344
|
+
return <EmitterContext.Provider value={emitter}>{children}</EmitterContext.Provider>
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return [useContextEmitter, ProvideEmitter] as const
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
const HMRCache =
|
|
351
|
+
process.env.NODE_ENV === 'development'
|
|
352
|
+
? new Map<string, { originalDefaultValue: unknown; currentValue: unknown }>()
|
|
353
|
+
: null
|
|
354
|
+
|
|
355
|
+
function setCache(emitter: Emitter<any>, value: unknown) {
|
|
356
|
+
const name = emitter.options?.name
|
|
357
|
+
if (!name) return
|
|
358
|
+
const cache = HMRCache?.get(name)
|
|
359
|
+
if (!cache) return
|
|
360
|
+
cache.currentValue = value
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
function createOrUpdateCache(name: string, defaultValueProp: unknown) {
|
|
364
|
+
const existing = HMRCache?.get(name)
|
|
365
|
+
const defaultValue = dequal(existing?.originalDefaultValue, defaultValueProp)
|
|
366
|
+
? existing?.currentValue
|
|
367
|
+
: defaultValueProp
|
|
368
|
+
|
|
369
|
+
if (!existing) {
|
|
370
|
+
HMRCache?.set(name, {
|
|
371
|
+
originalDefaultValue: defaultValueProp,
|
|
372
|
+
currentValue: defaultValue,
|
|
373
|
+
})
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
return defaultValue
|
|
377
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { EnsureError } from '../error/errors'
|
|
2
|
+
|
|
3
|
+
export function ensureExists<T>(
|
|
4
|
+
value: T | undefined | null,
|
|
5
|
+
msg = ''
|
|
6
|
+
): asserts value is T {
|
|
7
|
+
if (value === undefined || value === null) {
|
|
8
|
+
throw new EnsureError(`Invalid nullish value (${value}): ${msg}`)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function ensure<T>(
|
|
13
|
+
value: T,
|
|
14
|
+
msg = ''
|
|
15
|
+
): asserts value is Exclude<T, null | undefined | false> {
|
|
16
|
+
if (!value) {
|
|
17
|
+
throw new EnsureError(`ensure() invalid: (${value}): ${msg} ${new Error().stack}`)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function ensureError(val: unknown): asserts val is Error {
|
|
22
|
+
if (!(val instanceof Error)) {
|
|
23
|
+
throw val
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function ensureString(val: unknown, name = '(unnamed)'): asserts val is string {
|
|
28
|
+
if (typeof val !== 'string') {
|
|
29
|
+
throw new EnsureError(`No string ${name}`)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Ensures only one instance ever exists, but replaces it every time it's called
|
|
2
|
+
|
|
3
|
+
const Controllers = new WeakMap<symbol, AbortController>()
|
|
4
|
+
|
|
5
|
+
export function ensureOne<T>(key: string, factory: (signal: AbortSignal) => T): T {
|
|
6
|
+
const symbolKey = Symbol.for(key)
|
|
7
|
+
const g = globalThis as Record<symbol, unknown>
|
|
8
|
+
|
|
9
|
+
if (g[symbolKey]) {
|
|
10
|
+
Controllers.get(symbolKey)?.abort()
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const controller = new AbortController()
|
|
14
|
+
g[symbolKey] = factory(controller.signal)
|
|
15
|
+
|
|
16
|
+
return g[symbolKey] as T
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class AbortError extends Error {
|
|
2
|
+
constructor(message = '') {
|
|
3
|
+
super(message)
|
|
4
|
+
this.name = 'AbortError'
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export class EnsureError extends Error {
|
|
9
|
+
constructor(message: string) {
|
|
10
|
+
super(message)
|
|
11
|
+
this.name = 'EnsureError'
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const emptyFn = (): void => {}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const identityFn = <A>(item: A): A => item
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// via @github/mini-throttle https://raw.githubusercontent.com/github/mini-throttle/refs/heads/main/index.ts
|
|
2
|
+
|
|
3
|
+
import type { Timer } from '../types/timer'
|
|
4
|
+
|
|
5
|
+
export interface ThrottleOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Fire immediately on the first call.
|
|
8
|
+
*/
|
|
9
|
+
start?: boolean
|
|
10
|
+
/**
|
|
11
|
+
* Fire as soon as `wait` has passed.
|
|
12
|
+
*/
|
|
13
|
+
middle?: boolean
|
|
14
|
+
/**
|
|
15
|
+
* Cancel after the first successful call.
|
|
16
|
+
*/
|
|
17
|
+
once?: boolean
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface Throttler<T extends unknown[]> {
|
|
21
|
+
(...args: T): void
|
|
22
|
+
cancel(): void
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function throttle<T extends unknown[]>(
|
|
26
|
+
callback: (...args: T) => unknown,
|
|
27
|
+
wait = 0,
|
|
28
|
+
{ start = true, middle = true, once = false }: ThrottleOptions = {}
|
|
29
|
+
): Throttler<T> {
|
|
30
|
+
let innerStart = start
|
|
31
|
+
let last = 0
|
|
32
|
+
let timer: Timer
|
|
33
|
+
let cancelled = false
|
|
34
|
+
function fn(this: unknown, ...args: T) {
|
|
35
|
+
if (cancelled) return
|
|
36
|
+
const delta = Date.now() - last
|
|
37
|
+
last = Date.now()
|
|
38
|
+
|
|
39
|
+
if (start && middle && delta >= wait) {
|
|
40
|
+
innerStart = true
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (innerStart) {
|
|
44
|
+
innerStart = false
|
|
45
|
+
callback.apply(this, args)
|
|
46
|
+
if (once) fn.cancel()
|
|
47
|
+
} else if ((middle && delta < wait) || !middle) {
|
|
48
|
+
clearTimeout(timer)
|
|
49
|
+
timer = setTimeout(
|
|
50
|
+
() => {
|
|
51
|
+
last = Date.now()
|
|
52
|
+
callback.apply(this, args)
|
|
53
|
+
if (once) fn.cancel()
|
|
54
|
+
},
|
|
55
|
+
!middle ? wait : wait - delta
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
fn.cancel = () => {
|
|
60
|
+
clearTimeout(timer)
|
|
61
|
+
cancelled = true
|
|
62
|
+
}
|
|
63
|
+
return fn
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// we have debounce from tamagui already
|
|
67
|
+
// export function debounce<T extends unknown[]>(
|
|
68
|
+
// callback: (...args: T) => unknown,
|
|
69
|
+
// wait = 0,
|
|
70
|
+
// { start = false, middle = false, once = false }: ThrottleOptions = {}
|
|
71
|
+
// ): Throttler<T> {
|
|
72
|
+
// return throttle(callback, wait, { start, middle, once })
|
|
73
|
+
// }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function globalEffect(key: string, factory: () => void | (() => void)): void {
|
|
2
|
+
const disposeKey = Symbol.for(key)
|
|
3
|
+
const g = globalThis as Record<symbol, () => void>
|
|
4
|
+
|
|
5
|
+
if (g[disposeKey]) {
|
|
6
|
+
g[disposeKey]?.()
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const dispose = factory()
|
|
10
|
+
|
|
11
|
+
if (dispose) {
|
|
12
|
+
g[disposeKey] = dispose
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper to store a value that's not duplicated within the global context Uses
|
|
3
|
+
* a symbol stored on `globalThis` to achieve it.
|
|
4
|
+
*
|
|
5
|
+
* There's two main uses for this (for us, so far):
|
|
6
|
+
*
|
|
7
|
+
* - in dev mode, HMR re-runs files, but you may want to preserve globals
|
|
8
|
+
*
|
|
9
|
+
* - in published node modules, sometimes Vite or other bundlers can cause
|
|
10
|
+
* duplicate dependencies either through bad setup or heuristics, they may
|
|
11
|
+
* compile a module but then another code path doesn't compile it, so you
|
|
12
|
+
* have duplicate modules. in this case it can be good to just use a
|
|
13
|
+
* globalValue and warn the end-user. because you can't account for ever
|
|
14
|
+
* possible weird configuration, and often fixing that config can be a
|
|
15
|
+
* massive pain in the ass, it's better to retain functionality while
|
|
16
|
+
* warning them so they can fix it at their own pace. this often happens
|
|
17
|
+
* with WeakMaps.
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export function globalValue<T>(
|
|
22
|
+
key: string,
|
|
23
|
+
factory: () => T,
|
|
24
|
+
opts?: {
|
|
25
|
+
warnMessage?: string
|
|
26
|
+
}
|
|
27
|
+
): T {
|
|
28
|
+
const symbolKey = Symbol.for(key)
|
|
29
|
+
const g = globalThis as Record<symbol, unknown>
|
|
30
|
+
|
|
31
|
+
if (!g[symbolKey]) {
|
|
32
|
+
g[symbolKey] = factory()
|
|
33
|
+
} else {
|
|
34
|
+
if (opts?.warnMessage) {
|
|
35
|
+
console.warn(`[globalValue] ${opts.warnMessage}`)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return g[symbolKey] as T
|
|
40
|
+
}
|