@o/helpers 0.0.0-bootstrap.0 → 0.16.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/assert.d.ts +5 -0
- package/dist/assert.d.ts.map +1 -0
- package/dist/assert.js +26 -0
- package/dist/assert.js.map +1 -0
- package/dist/async/abortable.d.ts +9 -0
- package/dist/async/abortable.d.ts.map +1 -0
- package/dist/async/abortable.js +45 -0
- package/dist/async/abortable.js.map +1 -0
- package/dist/async/sleep.d.ts +2 -0
- package/dist/async/sleep.d.ts.map +1 -0
- package/dist/async/sleep.js +8 -0
- package/dist/async/sleep.js.map +1 -0
- package/dist/async/useAsyncEffect.d.ts +11 -0
- package/dist/async/useAsyncEffect.d.ts.map +1 -0
- package/dist/async/useAsyncEffect.js +99 -0
- package/dist/async/useAsyncEffect.js.map +1 -0
- package/dist/browser/isActiveElementFormField.d.ts +2 -0
- package/dist/browser/isActiveElementFormField.d.ts.map +1 -0
- package/dist/browser/isActiveElementFormField.js +9 -0
- package/dist/browser/isActiveElementFormField.js.map +1 -0
- package/dist/browser/openPopup.d.ts +2 -0
- package/dist/browser/openPopup.d.ts.map +1 -0
- package/dist/browser/openPopup.js +21 -0
- package/dist/browser/openPopup.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +22 -0
- package/dist/constants.js.map +1 -0
- package/dist/emitter.d.ts +72 -0
- package/dist/emitter.d.ts.map +1 -0
- package/dist/emitter.js +273 -0
- package/dist/emitter.js.map +1 -0
- package/dist/error/errors.d.ts +23 -0
- package/dist/error/errors.d.ts.map +1 -0
- package/dist/error/errors.js +38 -0
- package/dist/error/errors.js.map +1 -0
- package/dist/global/globalValue.d.ts +23 -0
- package/dist/global/globalValue.d.ts.map +1 -0
- package/dist/global/globalValue.js +33 -0
- package/dist/global/globalValue.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/index.native.d.ts +3 -0
- package/dist/index.native.d.ts.map +1 -0
- package/dist/index.native.js +3 -0
- package/dist/index.native.js.map +1 -0
- package/dist/object/isEqualIdentity.d.ts +2 -0
- package/dist/object/isEqualIdentity.d.ts.map +1 -0
- package/dist/object/isEqualIdentity.js +2 -0
- package/dist/object/isEqualIdentity.js.map +1 -0
- package/dist/object/isEqualNever.d.ts +2 -0
- package/dist/object/isEqualNever.d.ts.map +1 -0
- package/dist/object/isEqualNever.js +2 -0
- package/dist/object/isEqualNever.js.map +1 -0
- package/dist/platform.d.ts +23 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +60 -0
- package/dist/platform.js.map +1 -0
- package/dist/platform.native.d.ts +25 -0
- package/dist/platform.native.d.ts.map +1 -0
- package/dist/platform.native.js +52 -0
- package/dist/platform.native.js.map +1 -0
- package/dist/react/createGlobalContext.d.ts +3 -0
- package/dist/react/createGlobalContext.d.ts.map +1 -0
- package/dist/react/createGlobalContext.js +8 -0
- package/dist/react/createGlobalContext.js.map +1 -0
- package/dist/react/getCurrentComponentStack.d.ts +2 -0
- package/dist/react/getCurrentComponentStack.d.ts.map +1 -0
- package/dist/react/getCurrentComponentStack.js +46 -0
- package/dist/react/getCurrentComponentStack.js.map +1 -0
- package/dist/shared.d.ts +17 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +16 -0
- package/dist/shared.js.map +1 -0
- package/dist/storage/createStorage.d.ts +58 -0
- package/dist/storage/createStorage.d.ts.map +1 -0
- package/dist/storage/createStorage.js +110 -0
- package/dist/storage/createStorage.js.map +1 -0
- package/dist/storage/driver.d.ts +5 -0
- package/dist/storage/driver.d.ts.map +1 -0
- package/dist/storage/driver.js +21 -0
- package/dist/storage/driver.js.map +1 -0
- package/dist/storage/types.d.ts +7 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/string/randomId.d.ts +2 -0
- package/dist/string/randomId.d.ts.map +1 -0
- package/dist/string/randomId.js +2 -0
- package/dist/string/randomId.js.map +1 -0
- package/dist/string/slugify.d.ts +2 -0
- package/dist/string/slugify.d.ts.map +1 -0
- package/dist/string/slugify.js +7 -0
- package/dist/string/slugify.js.map +1 -0
- package/dist/time/time.d.ts +28 -0
- package/dist/time/time.d.ts.map +1 -0
- package/dist/time/time.js +21 -0
- package/dist/time/time.js.map +1 -0
- package/package.json +39 -2
package/README.md
ADDED
package/dist/assert.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function assertExists<T>(value: T | undefined | null, msg?: string): T;
|
|
2
|
+
export declare function assert<T>(value: T, msg?: string): Exclude<T, null | undefined | false>;
|
|
3
|
+
export declare function assertError(val: unknown): Error;
|
|
4
|
+
export declare function assertString(val: unknown, name?: string): string;
|
|
5
|
+
//# sourceMappingURL=assert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,EAAE,GAAG,SAAK,GAAG,CAAC,CAKxE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,CAKlF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAK/C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,SAAc,GAAG,MAAM,CAKrE"}
|
package/dist/assert.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AbortError } from './error/errors.js';
|
|
2
|
+
export function assertExists(value, msg = '') {
|
|
3
|
+
if (value === undefined || value === null) {
|
|
4
|
+
throw new AbortError(`Invalid nullish value (${value}): ${msg}`);
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
export function assert(value, msg = '') {
|
|
9
|
+
if (!value) {
|
|
10
|
+
throw new AbortError(`Invalid falsy value (${value}): ${msg}`);
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
export function assertError(val) {
|
|
15
|
+
if (!(val instanceof Error)) {
|
|
16
|
+
throw val;
|
|
17
|
+
}
|
|
18
|
+
return val;
|
|
19
|
+
}
|
|
20
|
+
export function assertString(val, name = '(unnamed)') {
|
|
21
|
+
if (typeof val !== 'string') {
|
|
22
|
+
throw new AbortError(`No string ${name}`);
|
|
23
|
+
}
|
|
24
|
+
return val;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=assert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.js","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,MAAM,UAAU,YAAY,CAAI,KAA2B,EAAE,GAAG,GAAG,EAAE;IACnE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,UAAU,CAAC,0BAA0B,KAAK,MAAM,GAAG,EAAE,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,KAAQ,EAAE,GAAG,GAAG,EAAE;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,UAAU,CAAC,wBAAwB,KAAK,MAAM,GAAG,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,OAAO,KAA6C,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,CAAA;IACX,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY,EAAE,IAAI,GAAG,WAAW;IAC3D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,aAAa,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type AbortableOptions = {
|
|
2
|
+
message?: string;
|
|
3
|
+
};
|
|
4
|
+
export declare function abortable<T>(cb: () => T, options?: AbortableOptions): T | undefined;
|
|
5
|
+
export declare function abortable<T>(cb: () => Promise<T>, options?: AbortableOptions): Promise<T | undefined>;
|
|
6
|
+
export declare function didAbort(err: unknown, options?: AbortableOptions): boolean;
|
|
7
|
+
export declare function handleAbortError(error: any, debug?: boolean): void;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=abortable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable.d.ts","sourceRoot":"","sources":["../../src/async/abortable.ts"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5C,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,CAAC,GAAG,SAAS,CAAA;AACpF,wBAAgB,SAAS,CAAC,CAAC,EACzB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;AA0BzB,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAQ1E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAelE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AbortError, EnsureError } from '../error/errors.js';
|
|
2
|
+
export function abortable(cb, options) {
|
|
3
|
+
try {
|
|
4
|
+
const value = cb();
|
|
5
|
+
if (value instanceof Promise) {
|
|
6
|
+
return value.catch((err) => {
|
|
7
|
+
if (didAbort(err, options)) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
throw err;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
if (didAbort(err, options)) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
throw err;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function didAbort(err, options) {
|
|
23
|
+
if (err instanceof AbortError || err instanceof EnsureError) {
|
|
24
|
+
if (options?.message) {
|
|
25
|
+
console.warn(`Aborted: ${options.message}`);
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
export function handleAbortError(error, debug) {
|
|
32
|
+
if (error instanceof AbortError || error instanceof EnsureError) {
|
|
33
|
+
if (debug || process.env.DEBUG) {
|
|
34
|
+
console.info(`🐛 useAsyncEffect aborted: ${error.message}`);
|
|
35
|
+
}
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// js handles aborting a promise as an error. ignore them since they're
|
|
39
|
+
// a normal part of the expected async workflow
|
|
40
|
+
if (typeof error === 'object' && error.name === 'AbortError') {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=abortable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable.js","sourceRoot":"","sources":["../../src/async/abortable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAS5D,MAAM,UAAU,SAAS,CACvB,EAAwB,EACxB,OAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,EAAE,CAAA;QAElB,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBAClC,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC3B,OAAO,SAAS,CAAA;gBAClB,CAAC;gBACD,MAAM,GAAG,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY,EAAE,OAA0B;IAC/D,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;QAC5D,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAU,EAAE,KAAe;IAC1D,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QAChE,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,OAAM;IACR,CAAC;IAED,uEAAuE;IACvE,+CAA+C;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC7D,OAAM;IACR,CAAC;IAED,MAAM,KAAK,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/async/sleep.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,GAAU,IAAI,MAAM,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAK1E,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/async/sleep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,EAAU,EAAE,MAAoB,EAAiB,EAAE;IAC7E,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;IAC/C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,EAAE,CAAA;IACxB,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type Cleanup = () => void;
|
|
2
|
+
type AsyncEffectCallback = (signal: AbortSignal, ...deps: any[]) => Promise<Cleanup | void> | void;
|
|
3
|
+
type AsyncEffectOptions = {
|
|
4
|
+
circuitBreakAfter?: number;
|
|
5
|
+
circuitBreakPeriod?: number;
|
|
6
|
+
debug?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function useAsyncEffect(cb: AsyncEffectCallback, deps?: any[], options?: AsyncEffectOptions): void;
|
|
9
|
+
export declare function useAsyncLayoutEffect(cb: AsyncEffectCallback, deps?: any[], options?: AsyncEffectOptions): void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=useAsyncEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAsyncEffect.d.ts","sourceRoot":"","sources":["../../src/async/useAsyncEffect.ts"],"names":[],"mappings":"AAQA,KAAK,OAAO,GAAG,MAAM,IAAI,CAAA;AAEzB,KAAK,mBAAmB,GAAG,CACzB,MAAM,EAAE,WAAW,EACnB,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;AAEnC,KAAK,kBAAkB,GAAG;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,mBAAmB,EACvB,IAAI,GAAE,GAAG,EAAO,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,mBAAmB,EACvB,IAAI,GAAE,GAAG,EAAO,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI,CAEN"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// adopted from https://github.com/franciscop/use-async/blob/master/src/index.js
|
|
2
|
+
import { useEffect, useId, useLayoutEffect } from 'react';
|
|
3
|
+
import { EMPTY_OBJECT } from '../constants.js';
|
|
4
|
+
import { getCurrentComponentStack } from '../react/getCurrentComponentStack.js';
|
|
5
|
+
import { handleAbortError } from './abortable.js';
|
|
6
|
+
export function useAsyncEffect(cb, deps = [], options) {
|
|
7
|
+
useAsyncEffectImpl(false, cb, deps, options);
|
|
8
|
+
}
|
|
9
|
+
export function useAsyncLayoutEffect(cb, deps = [], options) {
|
|
10
|
+
useAsyncEffectImpl(true, cb, deps, options);
|
|
11
|
+
}
|
|
12
|
+
function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = EMPTY_OBJECT) {
|
|
13
|
+
const effectHook = isLayoutEffect ? useLayoutEffect : useEffect;
|
|
14
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
15
|
+
const effectId = process.env.NODE_ENV === 'development' ? useId() : '';
|
|
16
|
+
effectHook(() => {
|
|
17
|
+
// Generate a unique ID for this effect instance for loop detection
|
|
18
|
+
checkEffectLoop(effectId, cb, deps, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
19
|
+
const controller = new AbortController();
|
|
20
|
+
const signal = controller.signal;
|
|
21
|
+
// wrap in try in case its not async (for simple use cases)
|
|
22
|
+
try {
|
|
23
|
+
const value = cb(signal, ...deps);
|
|
24
|
+
Promise.resolve(value)
|
|
25
|
+
.then(async (res) => {
|
|
26
|
+
if (res && typeof res === 'function') {
|
|
27
|
+
if (signal.aborted)
|
|
28
|
+
return res();
|
|
29
|
+
signal.addEventListener('abort', res);
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
.catch(handleAbortError);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
handleAbortError(error, options.debug);
|
|
36
|
+
}
|
|
37
|
+
return () => {
|
|
38
|
+
if (signal.aborted)
|
|
39
|
+
return;
|
|
40
|
+
controller.abort();
|
|
41
|
+
};
|
|
42
|
+
}, deps);
|
|
43
|
+
}
|
|
44
|
+
// loop detection in dev mode
|
|
45
|
+
let effectRunCounts;
|
|
46
|
+
let checkEffectLoop;
|
|
47
|
+
function formatDeps(deps) {
|
|
48
|
+
try {
|
|
49
|
+
return JSON.stringify(deps, (_, v) => {
|
|
50
|
+
if (typeof v === 'function')
|
|
51
|
+
return `[Function: ${v.name || 'anonymous'}]`;
|
|
52
|
+
if (typeof v === 'symbol')
|
|
53
|
+
return v.toString();
|
|
54
|
+
if (v instanceof Error)
|
|
55
|
+
return `[Error: ${v.message}]`;
|
|
56
|
+
return v;
|
|
57
|
+
}, 2);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return `[${deps.length} deps - not serializable]`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (process.env.NODE_ENV === 'development') {
|
|
64
|
+
effectRunCounts = new Map();
|
|
65
|
+
checkEffectLoop = (effectId, cb, deps, circuitBreakAfter = 20, circuitBreakPeriod = 1000) => {
|
|
66
|
+
const now = Date.now();
|
|
67
|
+
const runs = effectRunCounts.get(effectId) || [];
|
|
68
|
+
runs.push(now);
|
|
69
|
+
// keep only runs from the specified period
|
|
70
|
+
const recentRuns = runs.filter((time) => now - time < circuitBreakPeriod);
|
|
71
|
+
effectRunCounts.set(effectId, recentRuns);
|
|
72
|
+
const runCount = recentRuns.length;
|
|
73
|
+
if (runCount > circuitBreakAfter) {
|
|
74
|
+
const message = `🚨 useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`;
|
|
75
|
+
if (process.env.NODE_ENV === 'development') {
|
|
76
|
+
console.error(message);
|
|
77
|
+
console.error('Effect function:', cb.toString().slice(0, 500));
|
|
78
|
+
console.error('Dependencies:', formatDeps(deps));
|
|
79
|
+
console.error('Stack:', getCurrentComponentStack());
|
|
80
|
+
// eslint-disable-next-line no-debugger
|
|
81
|
+
debugger;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
alert(message);
|
|
85
|
+
throw new Error(message);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (runCount > circuitBreakAfter / 2) {
|
|
89
|
+
console.warn(`⚠️ useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`);
|
|
90
|
+
console.warn('Effect function:', cb.toString().slice(0, 500));
|
|
91
|
+
console.warn('Dependencies:', formatDeps(deps));
|
|
92
|
+
console.warn('Stack:', getCurrentComponentStack());
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
checkEffectLoop = (_id, _cb, _deps, _after, _period) => { };
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=useAsyncEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAsyncEffect.js","sourceRoot":"","sources":["../../src/async/useAsyncEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isActiveElementFormField.d.ts","sourceRoot":"","sources":["../../src/browser/isActiveElementFormField.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,IAAI,OAAO,CASlD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function isActiveElementFormField() {
|
|
2
|
+
return (typeof document !== 'undefined' &&
|
|
3
|
+
document.activeElement !== null &&
|
|
4
|
+
(document.activeElement.tagName === 'INPUT' ||
|
|
5
|
+
document.activeElement.tagName === 'TEXTAREA' ||
|
|
6
|
+
document.activeElement.tagName === 'SELECT' ||
|
|
7
|
+
document.activeElement.tagName === 'FORM'));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=isActiveElementFormField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isActiveElementFormField.js","sourceRoot":"","sources":["../../src/browser/isActiveElementFormField.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB;IACtC,OAAO,CACL,OAAO,QAAQ,KAAK,WAAW;QAC/B,QAAQ,CAAC,aAAa,KAAK,IAAI;QAC/B,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,KAAK,OAAO;YACzC,QAAQ,CAAC,aAAa,CAAC,OAAO,KAAK,UAAU;YAC7C,QAAQ,CAAC,aAAa,CAAC,OAAO,KAAK,QAAQ;YAC3C,QAAQ,CAAC,aAAa,CAAC,OAAO,KAAK,MAAM,CAAC,CAC7C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openPopup.d.ts","sourceRoot":"","sources":["../../src/browser/openPopup.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAsBf"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// note safari enhanced privacy will break this as it reports screen height as smaller
|
|
2
|
+
export function openCenteredPopup(url, title, width, height) {
|
|
3
|
+
// availWidth/availHeight accounts for taskbars, docks, and other UI elements
|
|
4
|
+
const screenWidth = screen.availWidth || screen.width;
|
|
5
|
+
const screenHeight = screen.availHeight || screen.height;
|
|
6
|
+
const shouldGuess = screenHeight < height;
|
|
7
|
+
// if we are guessing, at least make it a bit more likely to be centered
|
|
8
|
+
// and not just touching the top which looks broken
|
|
9
|
+
const left = Math.max(0, (screenWidth - width) / 2) + (shouldGuess ? 100 : 0);
|
|
10
|
+
const top = Math.max(150, shouldGuess ? 150 : Math.max(0, (screenHeight - height) / 2));
|
|
11
|
+
const windowFeatures = `
|
|
12
|
+
width=${width},
|
|
13
|
+
height=${height},
|
|
14
|
+
left=${left},
|
|
15
|
+
top=${top},
|
|
16
|
+
scrollbars=yes,
|
|
17
|
+
resizable=yes
|
|
18
|
+
`;
|
|
19
|
+
return window.open(url, title, windowFeatures);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=openPopup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openPopup.js","sourceRoot":"","sources":["../../src/browser/openPopup.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,KAAa,EACb,KAAa,EACb,MAAc;IAEd,6EAA6E;IAC7E,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAA;IACrD,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAA;IAExD,MAAM,WAAW,GAAG,YAAY,GAAG,MAAM,CAAA;IAEzC,wEAAwE;IACxE,mDAAmD;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAEvF,MAAM,cAAc,GAAG;YACb,KAAK;aACJ,MAAM;WACR,IAAI;UACL,GAAG;;;GAGV,CAAA;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,CAAA;AAChD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const IS_TAURI: boolean;
|
|
2
|
+
export declare const IS_NATIVE: boolean;
|
|
3
|
+
export declare const IS_MAC_DESKTOP: boolean;
|
|
4
|
+
export declare const IS_SAFARI: boolean;
|
|
5
|
+
export * from './platform.js';
|
|
6
|
+
export declare const EMPTY_ARRAY: never;
|
|
7
|
+
export declare const EMPTY_OBJECT: never;
|
|
8
|
+
export declare const DEBUG_LEVEL: number;
|
|
9
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,EAAE,OAAgE,CAAA;AAEvF,eAAO,MAAM,SAAS,EAAE,OAA8B,CAAA;AAEtD,eAAO,MAAM,cAAc,EAAE,OACsD,CAAA;AAEnF,eAAO,MAAM,SAAS,EAAE,OAKwB,CAAA;AAEhD,cAAc,eAAe,CAAA;AAE7B,eAAO,MAAM,WAAW,EAAS,KAAK,CAAA;AACtC,eAAO,MAAM,YAAY,EAAS,KAAK,CAAA;AAQvC,eAAO,MAAM,WAAW,EAAE,MAEsD,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { IS_WEB } from './platform.js';
|
|
2
|
+
export const IS_TAURI = typeof window !== 'undefined' && '__TAURI__' in window;
|
|
3
|
+
export const IS_NATIVE = !IS_WEB && !IS_TAURI;
|
|
4
|
+
export const IS_MAC_DESKTOP = typeof navigator !== 'undefined' && /Macintosh|MacIntel/.test(navigator.platform);
|
|
5
|
+
export const IS_SAFARI = IS_TAURI ||
|
|
6
|
+
(typeof navigator !== 'undefined' &&
|
|
7
|
+
/Version\/[\d.]+.*Safari/.test(navigator.userAgent) &&
|
|
8
|
+
typeof navigator.vendor === 'string' &&
|
|
9
|
+
navigator.vendor.includes('Apple Computer'));
|
|
10
|
+
export * from './platform.js';
|
|
11
|
+
export const EMPTY_ARRAY = [];
|
|
12
|
+
export const EMPTY_OBJECT = {};
|
|
13
|
+
const getDebugLevelFromUrl = () => {
|
|
14
|
+
if (typeof window === 'undefined')
|
|
15
|
+
return null;
|
|
16
|
+
const match = window.location?.search?.match(/debug=(\d+)/);
|
|
17
|
+
return match?.[1] ? parseInt(match[1], 10) : null;
|
|
18
|
+
};
|
|
19
|
+
export const DEBUG_LEVEL = process.env.DEBUG_LEVEL
|
|
20
|
+
? +process.env.DEBUG_LEVEL
|
|
21
|
+
: (getDebugLevelFromUrl() ?? (process.env.NODE_ENV === 'development' ? 1 : 0));
|
|
22
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,MAAM,QAAQ,GAAY,OAAO,MAAM,KAAK,WAAW,IAAI,WAAW,IAAI,MAAM,CAAA;AAEvF,MAAM,CAAC,MAAM,SAAS,GAAY,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAA;AAEtD,MAAM,CAAC,MAAM,cAAc,GACzB,OAAO,SAAS,KAAK,WAAW,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;AAEnF,MAAM,CAAC,MAAM,SAAS,GACpB,QAAQ;IACR,CAAC,OAAO,SAAS,KAAK,WAAW;QAC/B,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QACnD,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;QACpC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAEhD,cAAc,eAAe,CAAA;AAE7B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAW,CAAA;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAW,CAAA;AAEvC,MAAM,oBAAoB,GAAG,GAAkB,EAAE;IAC/C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;IAC3D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAW,OAAO,CAAC,GAAG,CAAC,WAAW;IACxD,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW;IAC1B,CAAC,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { JSX, PropsWithChildren } from 'react';
|
|
2
|
+
type EmitterOptions<T> = CreateEmitterOpts<T> & {
|
|
3
|
+
name: string;
|
|
4
|
+
};
|
|
5
|
+
type CreateEmitterOpts<T> = {
|
|
6
|
+
silent?: boolean;
|
|
7
|
+
comparator?: (a: T, b: T) => boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare class Emitter<const T> {
|
|
10
|
+
private disposables;
|
|
11
|
+
value: T;
|
|
12
|
+
options?: EmitterOptions<T>;
|
|
13
|
+
constructor(value: T, options?: EmitterOptions<T>);
|
|
14
|
+
listen: (disposable: (cb: T) => void) => (() => void);
|
|
15
|
+
emit: (next: T) => void;
|
|
16
|
+
nextValue: () => Promise<T>;
|
|
17
|
+
}
|
|
18
|
+
export declare function createGlobalEmitter<T>(name: string, defaultValue: T, options?: CreateEmitterOpts<T>): Emitter<T>;
|
|
19
|
+
export declare function createEmitter<T>(name: string, defaultValue: T, options?: CreateEmitterOpts<T>): Emitter<T>;
|
|
20
|
+
export type EmitterType<E extends Emitter<any>> = E extends Emitter<infer Val> ? Val : never;
|
|
21
|
+
export declare const useEmitter: <E extends Emitter<any>>(emitter: E, cb: (cb: EmitterType<E>) => void, args?: any[]) => void;
|
|
22
|
+
export declare const useEmitterValue: <E extends Emitter<any>>(emitter: E, options?: {
|
|
23
|
+
disable?: boolean;
|
|
24
|
+
}) => EmitterType<E>;
|
|
25
|
+
/**
|
|
26
|
+
* By default selectors run every render, as well as when emitters update. This is a change
|
|
27
|
+
* from the previous behavior where they only ran when emitters changed value.
|
|
28
|
+
*
|
|
29
|
+
* The reason for this is because emitters capture the variables in scope of the component
|
|
30
|
+
* each render already by using "useGet" by default, which makes them easier to use - you
|
|
31
|
+
* don't need to pass an args[] array except for edge cases.
|
|
32
|
+
*
|
|
33
|
+
* Before explaining why we switched to the default, understand the different uses:
|
|
34
|
+
*
|
|
35
|
+
* - Default behavior - selector is updated every render, and ran every render, as well as
|
|
36
|
+
* when emitter value changes, so you basically are always up to date.
|
|
37
|
+
*
|
|
38
|
+
* - Set an args[] array as the fourth argument - this will stop the automatic capturing
|
|
39
|
+
* and instead update selector only when you change args[] yourself. This is good for when you
|
|
40
|
+
* want explicit control over re-selection and rendering.
|
|
41
|
+
*
|
|
42
|
+
* - With { lazy: true }, the selector only runs when the emitter value changes. If used with
|
|
43
|
+
* args[], you capture the context of the selector based on args[], if not, it's based on the
|
|
44
|
+
* current render.
|
|
45
|
+
*
|
|
46
|
+
* I made this change when we had 16 usages of useEmitterSelector and 100% of them are doing very
|
|
47
|
+
* cheap calculations, so this feels like the right pattern. For the rare case of a heavy selector,
|
|
48
|
+
* you have the option to control it.
|
|
49
|
+
*
|
|
50
|
+
*/
|
|
51
|
+
export declare const useEmitterSelector: <E extends Emitter<any>, T extends EmitterType<E>, R>(emitter: E, selector: (value: T) => R, options?: {
|
|
52
|
+
disable?: boolean;
|
|
53
|
+
lazy?: boolean;
|
|
54
|
+
}, args?: any[]) => R;
|
|
55
|
+
export declare const useEmittersSelector: <const E extends readonly Emitter<any>[], R>(emitters: E, selector: (values: { [K in keyof E]: EmitterType<E[K]>; }) => R, options?: {
|
|
56
|
+
disable?: boolean;
|
|
57
|
+
isEqual?: (a: R, b: R) => boolean;
|
|
58
|
+
}) => R;
|
|
59
|
+
export declare const createUseEmitter: <E extends Emitter<any>>(emitter: E) => ((cb: (val: EmitterType<E>) => void, args?: any[]) => void);
|
|
60
|
+
export declare const createUseSelector: <E extends Emitter<any>>(emitter: E) => (<R>(selector: (value: EmitterType<E>) => R, options?: {
|
|
61
|
+
disable?: boolean;
|
|
62
|
+
lazy?: boolean;
|
|
63
|
+
}, args?: any[]) => R);
|
|
64
|
+
export declare function createContextualEmitter<T>(name: string, defaultValue: T, defaultOptions?: Omit<EmitterOptions<T>, 'name'>): readonly [
|
|
65
|
+
() => Emitter<T>,
|
|
66
|
+
(props: PropsWithChildren<{
|
|
67
|
+
value?: T;
|
|
68
|
+
silent?: boolean;
|
|
69
|
+
}>) => JSX.Element
|
|
70
|
+
];
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../src/emitter.tsx"],"names":[],"mappings":"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"}
|