prostgles-client 4.0.265 → 4.0.266

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.
Files changed (41) hide show
  1. package/dist/getDbHandler.d.ts.map +1 -1
  2. package/dist/getDbHandler.js +5 -4
  3. package/dist/hooks/reactImports.d.ts +1 -0
  4. package/dist/hooks/reactImports.d.ts.map +1 -1
  5. package/dist/hooks/reactImports.js +3 -1
  6. package/dist/hooks/useAsyncEffectQueue.d.ts +8 -0
  7. package/dist/hooks/useAsyncEffectQueue.d.ts.map +1 -0
  8. package/dist/hooks/useAsyncEffectQueue.js +57 -0
  9. package/dist/hooks/useEffectAsync.d.ts +2 -0
  10. package/dist/hooks/useEffectAsync.d.ts.map +1 -0
  11. package/dist/hooks/useEffectAsync.js +30 -0
  12. package/dist/hooks/useEffectDeep.d.ts +5 -0
  13. package/dist/hooks/useEffectDeep.d.ts.map +1 -0
  14. package/dist/hooks/useEffectDeep.js +21 -0
  15. package/dist/hooks/useFetch.d.ts +7 -0
  16. package/dist/hooks/useFetch.d.ts.map +1 -0
  17. package/dist/hooks/useFetch.js +30 -0
  18. package/dist/hooks/useIsMounted.d.ts +2 -0
  19. package/dist/hooks/useIsMounted.d.ts.map +1 -0
  20. package/dist/hooks/useIsMounted.js +17 -0
  21. package/dist/hooks/usePromise.d.ts +5 -0
  22. package/dist/hooks/usePromise.d.ts.map +1 -0
  23. package/dist/hooks/usePromise.js +67 -0
  24. package/dist/hooks/useProstglesClient.d.ts +1 -0
  25. package/dist/hooks/useProstglesClient.d.ts.map +1 -1
  26. package/dist/hooks/useProstglesClient.js +18 -5
  27. package/dist/hooks/useSubscribe.d.ts +1 -1
  28. package/dist/hooks/useSubscribe.d.ts.map +1 -1
  29. package/dist/hooks/useSubscribe.js +4 -3
  30. package/dist/hooks/useSync.d.ts +20 -0
  31. package/dist/hooks/useSync.d.ts.map +1 -0
  32. package/dist/hooks/useSync.js +34 -0
  33. package/dist/index.js +1 -1
  34. package/dist/index.no-sync.js +1 -1
  35. package/dist/prostgles.d.ts +1 -1
  36. package/dist/prostgles.d.ts.map +1 -1
  37. package/dist/prostgles.js +1 -1
  38. package/package.json +1 -1
  39. package/dist/hooks/react-hooks.d.ts +0 -43
  40. package/dist/hooks/react-hooks.d.ts.map +0 -1
  41. package/dist/hooks/react-hooks.js +0 -237
@@ -1 +1 @@
1
- {"version":3,"file":"getDbHandler.d.ts","sourceRoot":"","sources":["../lib/getDbHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAMlB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,WAAW,EAIjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,WAAW,EAGjB,MAAM,2BAA2B,CAAC;AAGnC,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,oBAAoB,CAAC;IAC7B,WAAW,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAO,WAAW,GAAG,SAAS,CAAC;IAC5C,WAAW,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAC/C,mBAAmB,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;CAChE,CAAC;AAIF,eAAO,MAAM,MAAM,6FAQhB,IAAI;;CAwNN,CAAC"}
1
+ {"version":3,"file":"getDbHandler.d.ts","sourceRoot":"","sources":["../lib/getDbHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAMlB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,WAAW,EAGjB,MAAM,2BAA2B,CAAC;AAKnC,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,oBAAoB,CAAC;IAC7B,WAAW,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAO,WAAW,GAAG,SAAS,CAAC;IAC5C,WAAW,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAC/C,mBAAmB,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;CAChE,CAAC;AAIF,eAAO,MAAM,MAAM,6FAQhB,IAAI;;CAwNN,CAAC"}
@@ -2,9 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getDBO = void 0;
4
4
  const prostgles_types_1 = require("prostgles-types");
5
- const prostgles_1 = require("./prostgles");
6
5
  const SyncedTable_1 = require("./SyncedTable/SyncedTable");
7
6
  const useSubscribe_1 = require("./hooks/useSubscribe");
7
+ const useSync_1 = require("./hooks/useSync");
8
+ const useFetch_1 = require("./hooks/useFetch");
8
9
  const preffix = prostgles_types_1.CHANNELS._preffix;
9
10
  const getDBO = ({ schema, tableSchema, onDebug, syncedTable, syncHandler, subscriptionHandler, socket, }) => {
10
11
  /* Building DBO object */
@@ -84,10 +85,10 @@ const getDBO = ({ schema, tableSchema, onDebug, syncedTable, syncHandler, subscr
84
85
  dboTable.syncOne = syncOne;
85
86
  dboTable.useSync = (basicFilter, options, hookOptions) =>
86
87
  // eslint-disable-next-line react-hooks/rules-of-hooks
87
- (0, prostgles_1.useSync)(sync, basicFilter, options, hookOptions);
88
+ (0, useSync_1.useSync)(sync, basicFilter, options, hookOptions);
88
89
  dboTable.useSyncOne = (basicFilter, options, hookOptions) =>
89
90
  // eslint-disable-next-line react-hooks/rules-of-hooks
90
- (0, prostgles_1.useSync)(syncOne, basicFilter, options, hookOptions);
91
+ (0, useSync_1.useSync)(syncOne, basicFilter, options, hookOptions);
91
92
  }
92
93
  dboTable._sync = async function (param1, param2, syncHandles) {
93
94
  await (onDebug === null || onDebug === void 0 ? void 0 : onDebug({
@@ -173,7 +174,7 @@ const getDBO = ({ schema, tableSchema, onDebug, syncedTable, syncHandler, subscr
173
174
  if (methodName) {
174
175
  dboTable[methodName] = (param1, param2, hookOptions) =>
175
176
  // eslint-disable-next-line react-hooks/rules-of-hooks
176
- (0, prostgles_1.useFetch)(method, [param1, param2], hookOptions);
177
+ (0, useFetch_1.useFetch)(method, [param1, param2], hookOptions);
177
178
  }
178
179
  }
179
180
  });
@@ -4,4 +4,5 @@ declare let React: ReactT;
4
4
  export declare const getReact: (throwError?: boolean) => ReactT;
5
5
  declare const useEffect: typeof import("react").useEffect, useCallback: typeof import("react").useCallback, useRef: typeof import("react").useRef, useState: typeof import("react").useState;
6
6
  export { useEffect, useCallback, useRef, useState, React };
7
+ export declare const __prglReactInstalled: () => boolean;
7
8
  //# sourceMappingURL=reactImports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactImports.d.ts","sourceRoot":"","sources":["../../lib/hooks/reactImports.ts"],"names":[],"mappings":";AAAA,MAAM,MAAM,MAAM,GAAG,cAAc,OAAO,CAAC,CAAC;AAC5C,QAAA,IAAI,KAAK,EAAE,MAAM,CAAC;AAQlB,eAAO,MAAM,QAAQ,gBAAiB,OAAO,KAAG,MAQ/C,CAAC;AAEF,QAAA,MACE,SAAS,oCACT,WAAW,sCACX,MAAM,iCACN,QAAQ,iCAEM,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"reactImports.d.ts","sourceRoot":"","sources":["../../lib/hooks/reactImports.ts"],"names":[],"mappings":";AAAA,MAAM,MAAM,MAAM,GAAG,cAAc,OAAO,CAAC,CAAC;AAC5C,QAAA,IAAI,KAAK,EAAE,MAAM,CAAC;AAQlB,eAAO,MAAM,QAAQ,gBAAiB,OAAO,KAAG,MAQ/C,CAAC;AAEF,QAAA,MACE,SAAS,oCACT,WAAW,sCACX,MAAM,iCACN,QAAQ,iCAEM,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAE3D,eAAO,MAAM,oBAAoB,eAA0C,CAAC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.React = exports.useState = exports.useRef = exports.useCallback = exports.useEffect = exports.getReact = void 0;
4
+ exports.__prglReactInstalled = exports.React = exports.useState = exports.useRef = exports.useCallback = exports.useEffect = exports.getReact = void 0;
5
5
  let React;
6
6
  const alertNoReact = (...args) => {
7
7
  throw "Must install react";
@@ -29,3 +29,5 @@ exports.useEffect = useEffect;
29
29
  exports.useCallback = useCallback;
30
30
  exports.useRef = useRef;
31
31
  exports.useState = useState;
32
+ const __prglReactInstalled = () => Boolean(React && useRef);
33
+ exports.__prglReactInstalled = __prglReactInstalled;
@@ -0,0 +1,8 @@
1
+ type EffectFunc = () => Promise<void | (() => void)>;
2
+ /**
3
+ * Debounce with execute first
4
+ * Used to ensure subscriptions are always cleaned up
5
+ */
6
+ export declare const useAsyncEffectQueue: (effect: EffectFunc, deps: any[]) => void;
7
+ export {};
8
+ //# sourceMappingURL=useAsyncEffectQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncEffectQueue.d.ts","sourceRoot":"","sources":["../../lib/hooks/useAsyncEffectQueue.ts"],"names":[],"mappings":"AAKA,KAAK,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAOrD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,WAAY,UAAU,QAAQ,GAAG,EAAE,SAgDlE,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAsyncEffectQueue = void 0;
4
+ const useEffectDeep_1 = require("./useEffectDeep");
5
+ const reactImports_1 = require("./reactImports");
6
+ /**
7
+ * Debounce with execute first
8
+ * Used to ensure subscriptions are always cleaned up
9
+ */
10
+ const useAsyncEffectQueue = (effect, deps) => {
11
+ const newEffect = (0, reactImports_1.useRef)();
12
+ const activeEffect = (0, reactImports_1.useRef)();
13
+ const onRender = async () => {
14
+ var _a;
15
+ /**
16
+ * Await and cleanup previous effect
17
+ * */
18
+ if (((_a = activeEffect.current) === null || _a === void 0 ? void 0 : _a.state) === "resolved") {
19
+ const { cleanup, effect } = activeEffect.current;
20
+ activeEffect.current = { state: "cleaning", effect };
21
+ await cleanup().catch(console.error);
22
+ activeEffect.current = undefined;
23
+ }
24
+ /**
25
+ * Start new effect
26
+ */
27
+ if (newEffect.current && !activeEffect.current) {
28
+ const currentEffect = newEffect.current;
29
+ const { effect } = currentEffect;
30
+ activeEffect.current = { state: "resolving", effect };
31
+ const cleanup = await effect()
32
+ .then((run) => {
33
+ /* Wrapped in a promise to ensure cleanup is awaited */
34
+ return async () => {
35
+ await (run === null || run === void 0 ? void 0 : run());
36
+ };
37
+ })
38
+ .catch((e) => {
39
+ console.error(e);
40
+ return async () => { };
41
+ });
42
+ activeEffect.current = { state: "resolved", effect, cleanup };
43
+ if (currentEffect !== newEffect.current) {
44
+ onRender();
45
+ }
46
+ }
47
+ };
48
+ (0, useEffectDeep_1.useEffectDeep)(() => {
49
+ newEffect.current = { effect, deps };
50
+ onRender();
51
+ return () => {
52
+ newEffect.current = undefined;
53
+ onRender();
54
+ };
55
+ }, deps);
56
+ };
57
+ exports.useAsyncEffectQueue = useAsyncEffectQueue;
@@ -0,0 +1,2 @@
1
+ export declare const useEffectAsync: (effect: () => Promise<void | (() => void)>, inputs: any[]) => void;
2
+ //# sourceMappingURL=useEffectAsync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEffectAsync.d.ts","sourceRoot":"","sources":["../../lib/hooks/useEffectAsync.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,WAAY,MAAM,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,GAAG,EAAE,SAsBvF,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEffectAsync = void 0;
4
+ const reactImports_1 = require("./reactImports");
5
+ const useEffectDeep_1 = require("./useEffectDeep");
6
+ const useEffectAsync = (effect, inputs) => {
7
+ const onCleanup = (0, reactImports_1.useRef)({
8
+ cleanup: undefined,
9
+ effect,
10
+ cleanupEffect: undefined,
11
+ });
12
+ onCleanup.current.effect = effect;
13
+ (0, useEffectDeep_1.useEffectDeep)(() => {
14
+ effect().then((result) => {
15
+ if (typeof result === "function") {
16
+ onCleanup.current.cleanup = result;
17
+ if (onCleanup.current.cleanupEffect === effect) {
18
+ result();
19
+ }
20
+ }
21
+ });
22
+ return () => {
23
+ var _a, _b;
24
+ onCleanup.current.cleanupEffect = effect;
25
+ (_b = (_a = onCleanup.current).cleanup) === null || _b === void 0 ? void 0 : _b.call(_a);
26
+ };
27
+ // eslint-disable-next-line react-hooks/exhaustive-deps
28
+ }, inputs);
29
+ };
30
+ exports.useEffectAsync = useEffectAsync;
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare const useDeepCompareMemoize: (value: unknown) => unknown;
3
+ export declare const useMemoDeep: typeof import("react").useMemo;
4
+ export declare const useEffectDeep: typeof import("react").useEffect;
5
+ //# sourceMappingURL=useEffectDeep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEffectDeep.d.ts","sourceRoot":"","sources":["../../lib/hooks/useEffectDeep.ts"],"names":[],"mappings":";AAGA,eAAO,MAAM,qBAAqB,UAAW,OAAO,YAQnD,CAAC;AAEF,eAAO,MAAM,WAAW,gCAGD,CAAC;AAExB,eAAO,MAAM,aAAa,kCAGD,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEffectDeep = exports.useMemoDeep = exports.useDeepCompareMemoize = void 0;
4
+ const prostgles_types_1 = require("prostgles-types");
5
+ const reactImports_1 = require("./reactImports");
6
+ const useDeepCompareMemoize = (value) => {
7
+ const ref = (0, reactImports_1.useRef)();
8
+ if (!(0, prostgles_types_1.isEqual)(value, ref.current)) {
9
+ ref.current = value;
10
+ }
11
+ return ref.current;
12
+ };
13
+ exports.useDeepCompareMemoize = useDeepCompareMemoize;
14
+ exports.useMemoDeep = ((callback, deps) => {
15
+ // eslint-disable-next-line react-hooks/exhaustive-deps
16
+ return reactImports_1.React.useMemo(callback, deps === null || deps === void 0 ? void 0 : deps.map(exports.useDeepCompareMemoize));
17
+ });
18
+ exports.useEffectDeep = ((callback, deps) => {
19
+ // eslint-disable-next-line react-hooks/exhaustive-deps
20
+ (0, reactImports_1.useEffect)(callback, deps === null || deps === void 0 ? void 0 : deps.map(exports.useDeepCompareMemoize));
21
+ });
@@ -0,0 +1,7 @@
1
+ import type { HookOptions } from "../prostgles";
2
+ export declare const useFetch: (fetchFunc: (...args: any) => Promise<any>, args?: any[], hookOptions?: HookOptions) => {
3
+ data: any;
4
+ error: any;
5
+ isLoading: boolean;
6
+ };
7
+ //# sourceMappingURL=useFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFetch.d.ts","sourceRoot":"","sources":["../../lib/hooks/useFetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,eAAO,MAAM,QAAQ,wBACE,GAAG,KAAK,QAAQ,GAAG,CAAC,SACnC,GAAG,EAAE,gBACG,WAAW;;;;CAoB1B,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useFetch = void 0;
4
+ const reactImports_1 = require("./reactImports");
5
+ const useAsyncEffectQueue_1 = require("./useAsyncEffectQueue");
6
+ const useIsMounted_1 = require("./useIsMounted");
7
+ const useFetch = (fetchFunc, args = [], hookOptions) => {
8
+ const { skip, deps = [] } = hookOptions !== null && hookOptions !== void 0 ? hookOptions : {};
9
+ const defaultLoadingResult = { data: undefined, error: undefined, isLoading: true };
10
+ const [{ data, error, isLoading }, setResult] = (0, reactImports_1.useState)(defaultLoadingResult);
11
+ const getIsMounted = (0, useIsMounted_1.useIsMounted)();
12
+ (0, useAsyncEffectQueue_1.useAsyncEffectQueue)(async () => {
13
+ if (!getIsMounted() || skip)
14
+ return;
15
+ setResult(defaultLoadingResult);
16
+ try {
17
+ const newData = await fetchFunc(...args);
18
+ if (!getIsMounted())
19
+ return;
20
+ setResult({ data: newData, error: undefined, isLoading: false });
21
+ }
22
+ catch (error) {
23
+ if (!getIsMounted())
24
+ return;
25
+ setResult({ data: undefined, error, isLoading: false });
26
+ }
27
+ }, [fetchFunc, ...args, ...deps]);
28
+ return { data, error, isLoading };
29
+ };
30
+ exports.useFetch = useFetch;
@@ -0,0 +1,2 @@
1
+ export declare const useIsMounted: () => () => boolean;
2
+ //# sourceMappingURL=useIsMounted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsMounted.d.ts","sourceRoot":"","sources":["../../lib/hooks/useIsMounted.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,qBAaxB,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useIsMounted = void 0;
4
+ const reactImports_1 = require("./reactImports");
5
+ const useIsMounted = () => {
6
+ const isMountedRef = (0, reactImports_1.useRef)(true);
7
+ const isMounted = (0, reactImports_1.useCallback)(() => isMountedRef.current, []);
8
+ (0, reactImports_1.useEffect)(() => {
9
+ /** React 18 Strict Mode fix (new strict mode restores the previous state on the second mount) */
10
+ isMountedRef.current = true;
11
+ return () => {
12
+ isMountedRef.current = false;
13
+ };
14
+ }, []);
15
+ return isMounted;
16
+ };
17
+ exports.useIsMounted = useIsMounted;
@@ -0,0 +1,5 @@
1
+ type PromiseFunc = () => Promise<any>;
2
+ type NamedResult = Record<string, PromiseFunc>;
3
+ export declare const usePromise: <F extends PromiseFunc | NamedResult>(f: F, deps?: any[]) => F extends NamedResult ? { [key in keyof F]: Awaited<ReturnType<F[key]>>; } : F extends PromiseFunc ? Awaited<ReturnType<F>> | undefined : undefined;
4
+ export {};
5
+ //# sourceMappingURL=usePromise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePromise.d.ts","sourceRoot":"","sources":["../../lib/hooks/usePromise.ts"],"names":[],"mappings":"AAKA,KAAK,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AACtC,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAE/C,eAAO,MAAM,UAAU,qDAEf,GAAG,EAAE,wJA2DZ,CAAC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.usePromise = void 0;
4
+ const prostgles_types_1 = require("prostgles-types");
5
+ const reactImports_1 = require("./reactImports");
6
+ const useAsyncEffectQueue_1 = require("./useAsyncEffectQueue");
7
+ const useIsMounted_1 = require("./useIsMounted");
8
+ const usePromise = (f, deps = []) => {
9
+ const isPromiseFunc = (val) => {
10
+ try {
11
+ return typeof val === "function" || val instanceof Promise;
12
+ }
13
+ catch (e) {
14
+ console.error(e);
15
+ }
16
+ return false;
17
+ };
18
+ const isNamedObj = (val) => {
19
+ try {
20
+ return (0, prostgles_types_1.isObject)(val) && !isPromiseFunc(val);
21
+ }
22
+ catch (e) {
23
+ console.error(e);
24
+ }
25
+ return false;
26
+ };
27
+ const getNamedObjResults = async (val) => {
28
+ const data = {};
29
+ const keys = (0, prostgles_types_1.getKeys)(val);
30
+ for await (const key of keys) {
31
+ const prop = val[key];
32
+ try {
33
+ data[key] = typeof prop === "function" ? await prop() : await prop;
34
+ }
35
+ catch (e) {
36
+ console.error(e);
37
+ }
38
+ }
39
+ return data;
40
+ };
41
+ const [result, setResult] = (0, reactImports_1.useState)(isNamedObj(f) ? {} : undefined);
42
+ const getIsMounted = (0, useIsMounted_1.useIsMounted)();
43
+ (0, useAsyncEffectQueue_1.useAsyncEffectQueue)(async () => {
44
+ let promiseResult;
45
+ try {
46
+ if (isNamedObj(f)) {
47
+ promiseResult = await getNamedObjResults(f);
48
+ }
49
+ else {
50
+ const funcRes = await f();
51
+ const isNObj = isNamedObj(funcRes);
52
+ promiseResult =
53
+ isNObj ? await getNamedObjResults(funcRes)
54
+ : isPromiseFunc(funcRes) ? await funcRes()
55
+ : funcRes;
56
+ }
57
+ }
58
+ catch (e) {
59
+ console.error(e);
60
+ }
61
+ if (!getIsMounted())
62
+ return;
63
+ setResult(promiseResult);
64
+ }, deps);
65
+ return result;
66
+ };
67
+ exports.usePromise = usePromise;
@@ -2,6 +2,7 @@ import { type DBSchema, type DBSchemaTable, type MethodHandler, type UserLike }
2
2
  import type { ManagerOptions, Socket, SocketOptions } from "socket.io-client";
3
3
  import type { AuthHandler } from "../getAuthHandler";
4
4
  import { type DBHandlerClient, type InitOptions } from "../prostgles";
5
+ export declare const getIO: (throwError?: boolean) => typeof import("socket.io-client").io;
5
6
  export type OnReadyParams<DBSchema, U extends UserLike = UserLike> = {
6
7
  dbo: DBHandlerClient<DBSchema>;
7
8
  methods: MethodHandler | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"useProstglesClient.d.ts","sourceRoot":"","sources":["../../lib/hooks/useProstglesClient.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAa,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAIjF,MAAM,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAAI;IACnE,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IACzC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,mBAAmB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjG,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG;IACxF;;OAEG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,oBAAoB,CAAC,GAAG,IAChC;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAC5D,CAAC;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,GAAG,CAAC,GACjE;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzD,eAAO,MAAM,kBAAkB,0GAI5B,uBAAuB,uDA2DzB,CAAC"}
1
+ {"version":3,"file":"useProstglesClient.d.ts","sourceRoot":"","sources":["../../lib/hooks/useProstglesClient.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAa,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAMjF,eAAO,MAAM,KAAK,gEAQjB,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAAI;IACnE,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IACzC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,mBAAmB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjG,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG;IACxF;;OAEG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,oBAAoB,CAAC,GAAG,IAChC;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAC5D,CAAC;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,GAAG,CAAC,GACjE;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzD,eAAO,MAAM,kBAAkB,0GAI5B,uBAAuB,uDA2DzB,CAAC"}
@@ -4,25 +4,38 @@
4
4
  * Licensed under the MIT License. See LICENSE in the project root for license information.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.useProstglesClient = void 0;
7
+ exports.useProstglesClient = exports.getIO = void 0;
8
8
  const prostgles_types_1 = require("prostgles-types");
9
9
  const SyncedTable_1 = require("../SyncedTable/SyncedTable");
10
10
  const prostgles_1 = require("../prostgles");
11
- const react_hooks_1 = require("./react-hooks");
12
11
  const reactImports_1 = require("./reactImports");
12
+ const useIsMounted_1 = require("./useIsMounted");
13
+ const useAsyncEffectQueue_1 = require("./useAsyncEffectQueue");
14
+ const getIO = (throwError = false) => {
15
+ try {
16
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
17
+ const io = require("socket.io-client");
18
+ return io;
19
+ }
20
+ catch (err) { }
21
+ if (throwError)
22
+ throw new Error("Must install socket.io-client");
23
+ return {};
24
+ };
25
+ exports.getIO = getIO;
13
26
  const useProstglesClient = ({ skip, socketOptions: socketPathOrOptions, ...initOpts } = {}) => {
14
27
  const { useRef, useState } = (0, reactImports_1.getReact)(true);
15
28
  const [onReadyArgs, setOnReadyArgs] = useState({
16
29
  isLoading: true,
17
30
  });
18
- const getIsMounted = (0, react_hooks_1.useIsMounted)();
31
+ const getIsMounted = (0, useIsMounted_1.useIsMounted)();
19
32
  const socketRef = useRef();
20
- (0, react_hooks_1.useAsyncEffectQueue)(async () => {
33
+ (0, useAsyncEffectQueue_1.useAsyncEffectQueue)(async () => {
21
34
  var _a;
22
35
  if (skip)
23
36
  return undefined;
24
37
  (_a = socketRef.current) === null || _a === void 0 ? void 0 : _a.disconnect();
25
- const io = (0, react_hooks_1.getIO)();
38
+ const io = (0, exports.getIO)();
26
39
  const socketOptions = typeof socketPathOrOptions === "string" ? { path: socketPathOrOptions } : socketPathOrOptions;
27
40
  const opts = {
28
41
  reconnectionDelay: 1000,
@@ -1,5 +1,5 @@
1
1
  import type { HookOptions } from "../prostgles";
2
- import { type DataFetchHookResult } from "./react-hooks";
3
2
  import { type SubscriptionHandler } from "prostgles-types";
3
+ import type { DataFetchHookResult } from "./useSync";
4
4
  export declare const useSubscribe: (subFunc: (filter: any, options: any, onData: any, onError: any) => Promise<SubscriptionHandler>, expectsOne: boolean, filter: any, options: any, hookOptions?: HookOptions) => DataFetchHookResult;
5
5
  //# sourceMappingURL=useSubscribe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSubscribe.d.ts","sourceRoot":"","sources":["../../lib/hooks/useSubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAqC,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAW,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGpE,eAAO,MAAM,YAAY,qBACL,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,QAAQ,mBAAmB,CAAC,cACnF,OAAO,UACX,GAAG,WACF,GAAG,gBACE,WAAW,wBAyC1B,CAAC"}
1
+ {"version":3,"file":"useSubscribe.d.ts","sourceRoot":"","sources":["../../lib/hooks/useSubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAW,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAIrD,eAAO,MAAM,YAAY,qBACL,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,QAAQ,mBAAmB,CAAC,cACnF,OAAO,UACX,GAAG,WACF,GAAG,gBACE,WAAW,wBAyC1B,CAAC"}
@@ -1,17 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useSubscribe = void 0;
4
- const react_hooks_1 = require("./react-hooks");
5
4
  const prostgles_types_1 = require("prostgles-types");
6
5
  const reactImports_1 = require("./reactImports");
6
+ const useIsMounted_1 = require("./useIsMounted");
7
+ const useAsyncEffectQueue_1 = require("./useAsyncEffectQueue");
7
8
  const useSubscribe = (subFunc, expectsOne, filter, options, hookOptions) => {
8
9
  const { skip } = hookOptions !== null && hookOptions !== void 0 ? hookOptions : {};
9
10
  const defaultLoadingResult = { data: undefined, error: undefined, isLoading: true };
10
11
  const [hookResult, setHookResult] = (0, reactImports_1.useState)(defaultLoadingResult);
11
12
  const hookResultRef = (0, reactImports_1.useRef)(hookResult);
12
13
  hookResultRef.current = hookResult;
13
- const getIsMounted = (0, react_hooks_1.useIsMounted)();
14
- (0, react_hooks_1.useAsyncEffectQueue)(async () => {
14
+ const getIsMounted = (0, useIsMounted_1.useIsMounted)();
15
+ (0, useAsyncEffectQueue_1.useAsyncEffectQueue)(async () => {
15
16
  if (!getIsMounted() || skip)
16
17
  return;
17
18
  if (!(0, prostgles_types_1.isEqual)(hookResultRef.current, defaultLoadingResult)) {
@@ -0,0 +1,20 @@
1
+ import type { HookOptions, TableHandlerClient } from "../prostgles";
2
+ export type DataFetchHookResult = {
3
+ data: any;
4
+ error?: undefined;
5
+ isLoading: false;
6
+ } | {
7
+ data?: undefined;
8
+ error: any;
9
+ isLoading: false;
10
+ } | {
11
+ data?: undefined;
12
+ error?: undefined;
13
+ isLoading: true;
14
+ };
15
+ export declare const useSync: (syncFunc: Required<TableHandlerClient>["sync"] | Required<TableHandlerClient>["syncOne"], basicFilter: Parameters<Required<TableHandlerClient>["sync"]>[0], syncOptions: Parameters<Required<TableHandlerClient>["sync"]>[1], hookOptions?: HookOptions) => {
16
+ data: any;
17
+ error: any;
18
+ isLoading: boolean;
19
+ };
20
+ //# sourceMappingURL=useSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSync.d.ts","sourceRoot":"","sources":["../../lib/hooks/useSync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKpE,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,KAAK,CAAA;CAAE,GAClD;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,KAAK,CAAA;CAAE,GAClD;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC;AAE7D,eAAO,MAAM,OAAO,aACR,SAAS,kBAAkB,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,kBAAkB,CAAC,CAAC,SAAS,CAAC,eAC3E,WAAW,SAAS,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,eACnD,WAAW,SAAS,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,gBAClD,WAAW;;;;CA6B1B,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSync = void 0;
4
+ const reactImports_1 = require("./reactImports");
5
+ const useAsyncEffectQueue_1 = require("./useAsyncEffectQueue");
6
+ const useIsMounted_1 = require("./useIsMounted");
7
+ const useSync = (syncFunc, basicFilter, syncOptions, hookOptions) => {
8
+ const { skip } = hookOptions !== null && hookOptions !== void 0 ? hookOptions : {};
9
+ const defaultLoadingResult = { data: undefined, error: undefined, isLoading: true };
10
+ const [{ data, error, isLoading }, setResult] = (0, reactImports_1.useState)(defaultLoadingResult);
11
+ const getIsMounted = (0, useIsMounted_1.useIsMounted)();
12
+ (0, useAsyncEffectQueue_1.useAsyncEffectQueue)(async () => {
13
+ if (!getIsMounted() || skip)
14
+ return;
15
+ const setError = (newError) => {
16
+ if (!getIsMounted())
17
+ return;
18
+ setResult({ data: undefined, error: newError, isLoading: false });
19
+ };
20
+ try {
21
+ const syncHandlers = await syncFunc(basicFilter, syncOptions, (newData) => {
22
+ if (!getIsMounted())
23
+ return;
24
+ setResult({ data: newData, error: undefined, isLoading: false });
25
+ }, setError);
26
+ return syncHandlers.$unsync;
27
+ }
28
+ catch (error) {
29
+ setError(error);
30
+ }
31
+ }, [syncFunc, basicFilter, syncOptions, skip]);
32
+ return { data, error, isLoading };
33
+ };
34
+ exports.useSync = useSync;