@roko-app/instant-react-common 0.0.0-stage → 1.0.67-roko.2

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 (77) hide show
  1. package/.tshy/build.json +8 -0
  2. package/.tshy/commonjs.json +16 -0
  3. package/.tshy/esm.json +15 -0
  4. package/LICENSE +202 -0
  5. package/README.md +59 -2
  6. package/dist/commonjs/InstantReactAbstractDatabase.d.ts +283 -0
  7. package/dist/commonjs/InstantReactAbstractDatabase.d.ts.map +1 -0
  8. package/dist/commonjs/InstantReactAbstractDatabase.js +390 -0
  9. package/dist/commonjs/InstantReactAbstractDatabase.js.map +1 -0
  10. package/dist/commonjs/InstantReactRoom.d.ts +183 -0
  11. package/dist/commonjs/InstantReactRoom.d.ts.map +1 -0
  12. package/dist/commonjs/InstantReactRoom.js +290 -0
  13. package/dist/commonjs/InstantReactRoom.js.map +1 -0
  14. package/dist/commonjs/index.d.ts +5 -0
  15. package/dist/commonjs/index.d.ts.map +1 -0
  16. package/dist/commonjs/index.js +11 -0
  17. package/dist/commonjs/index.js.map +1 -0
  18. package/dist/commonjs/package.json +3 -0
  19. package/dist/commonjs/useInfiniteQuerySubscription.d.ts +28 -0
  20. package/dist/commonjs/useInfiniteQuerySubscription.d.ts.map +1 -0
  21. package/dist/commonjs/useInfiniteQuerySubscription.js +57 -0
  22. package/dist/commonjs/useInfiniteQuerySubscription.js.map +1 -0
  23. package/dist/commonjs/useQuery.d.ts +7 -0
  24. package/dist/commonjs/useQuery.d.ts.map +1 -0
  25. package/dist/commonjs/useQuery.js +79 -0
  26. package/dist/commonjs/useQuery.js.map +1 -0
  27. package/dist/commonjs/useTimeout.d.ts +5 -0
  28. package/dist/commonjs/useTimeout.d.ts.map +1 -0
  29. package/dist/commonjs/useTimeout.js +21 -0
  30. package/dist/commonjs/useTimeout.js.map +1 -0
  31. package/dist/commonjs/version.d.ts +3 -0
  32. package/dist/commonjs/version.d.ts.map +1 -0
  33. package/dist/commonjs/version.js +5 -0
  34. package/dist/commonjs/version.js.map +1 -0
  35. package/dist/esm/InstantReactAbstractDatabase.d.ts +283 -0
  36. package/dist/esm/InstantReactAbstractDatabase.d.ts.map +1 -0
  37. package/dist/esm/InstantReactAbstractDatabase.js +387 -0
  38. package/dist/esm/InstantReactAbstractDatabase.js.map +1 -0
  39. package/dist/esm/InstantReactRoom.d.ts +183 -0
  40. package/dist/esm/InstantReactRoom.d.ts.map +1 -0
  41. package/dist/esm/InstantReactRoom.js +281 -0
  42. package/dist/esm/InstantReactRoom.js.map +1 -0
  43. package/dist/esm/index.d.ts +5 -0
  44. package/dist/esm/index.d.ts.map +1 -0
  45. package/dist/esm/index.js +4 -0
  46. package/dist/esm/index.js.map +1 -0
  47. package/dist/esm/package.json +3 -0
  48. package/dist/esm/useInfiniteQuerySubscription.d.ts +28 -0
  49. package/dist/esm/useInfiniteQuerySubscription.d.ts.map +1 -0
  50. package/dist/esm/useInfiniteQuerySubscription.js +54 -0
  51. package/dist/esm/useInfiniteQuerySubscription.js.map +1 -0
  52. package/dist/esm/useQuery.d.ts +7 -0
  53. package/dist/esm/useQuery.d.ts.map +1 -0
  54. package/dist/esm/useQuery.js +76 -0
  55. package/dist/esm/useQuery.js.map +1 -0
  56. package/dist/esm/useTimeout.d.ts +5 -0
  57. package/dist/esm/useTimeout.d.ts.map +1 -0
  58. package/dist/esm/useTimeout.js +18 -0
  59. package/dist/esm/useTimeout.js.map +1 -0
  60. package/dist/esm/version.d.ts +3 -0
  61. package/dist/esm/version.d.ts.map +1 -0
  62. package/dist/esm/version.js +3 -0
  63. package/dist/esm/version.js.map +1 -0
  64. package/dist/standalone/index.js +8718 -0
  65. package/dist/standalone/index.umd.cjs +36 -0
  66. package/package.json +43 -3
  67. package/src/InstantReactAbstractDatabase.tsx +510 -0
  68. package/src/InstantReactRoom.ts +451 -0
  69. package/src/index.ts +9 -0
  70. package/src/useInfiniteQuerySubscription.ts +128 -0
  71. package/src/useQuery.ts +124 -0
  72. package/src/useTimeout.ts +22 -0
  73. package/src/version.ts +3 -0
  74. package/tsconfig.cjs.dev.json +15 -0
  75. package/tsconfig.dev.json +14 -0
  76. package/tsconfig.json +12 -0
  77. package/vite.config.ts +35 -0
@@ -0,0 +1,54 @@
1
+ import { weakHash, getInfiniteQueryInitialSnapshot, } from '@instantdb/core';
2
+ import { useCallback, useRef, useSyncExternalStore } from 'react';
3
+ const defaultState = {
4
+ error: undefined,
5
+ data: undefined,
6
+ isLoading: true,
7
+ canLoadNextPage: false,
8
+ };
9
+ export function useInfiniteQuerySubscription({ core, query, opts, }) {
10
+ const subRef = useRef(null);
11
+ const queryHash = weakHash(query);
12
+ const optsHash = weakHash(opts);
13
+ const snapshot = getInfiniteQueryInitialSnapshot(core, query, opts);
14
+ const stateCacheRef = useRef({
15
+ ...snapshot,
16
+ isLoading: !snapshot.data && !snapshot.error,
17
+ });
18
+ const subscribe = useCallback((cb) => {
19
+ subRef.current = null;
20
+ const nextSnapshot = getInfiniteQueryInitialSnapshot(core, query, opts);
21
+ stateCacheRef.current = {
22
+ ...nextSnapshot,
23
+ isLoading: !nextSnapshot.data && !nextSnapshot.error,
24
+ };
25
+ cb();
26
+ if (!query) {
27
+ return () => { };
28
+ }
29
+ const sub = core.subscribeInfiniteQuery(query, (resp) => {
30
+ stateCacheRef.current = {
31
+ ...resp,
32
+ isLoading: false,
33
+ };
34
+ cb();
35
+ }, opts);
36
+ subRef.current = sub;
37
+ return () => {
38
+ sub.unsubscribe();
39
+ if (subRef.current === sub) {
40
+ subRef.current = null;
41
+ }
42
+ };
43
+ }, [queryHash, optsHash]);
44
+ const state = useSyncExternalStore(subscribe, () => stateCacheRef.current, () => defaultState);
45
+ const loadNextPage = () => {
46
+ subRef.current?.loadNextPage();
47
+ };
48
+ // @ts-expect-error union type
49
+ return {
50
+ ...state,
51
+ loadNextPage,
52
+ };
53
+ }
54
+ //# sourceMappingURL=useInfiniteQuerySubscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInfiniteQuerySubscription.js","sourceRoot":"","sources":["../../src/useInfiniteQuerySubscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,QAAQ,EACR,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AA6BlE,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAI1C,EACA,IAAI,EACJ,KAAK,EACL,IAAI,GAKL;IACC,MAAM,MAAM,GAAG,MAAM,CAAmC,IAAI,CAAC,CAAC;IAE9D,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,+BAA+B,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,MAAM,CAE1B;QACA,GAAG,QAAQ;QACX,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;KAC7C,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,EAAc,EAAE,EAAE;QACjB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAEtB,MAAM,YAAY,GAAG,+BAA+B,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACxE,aAAa,CAAC,OAAO,GAAG;YACtB,GAAG,YAAY;YACf,SAAS,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK;SACrD,CAAC;QAEF,EAAE,EAAE,CAAC;QAEL,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CACrC,KAAK,EACL,CAAC,IAAI,EAAE,EAAE;YACP,aAAa,CAAC,OAAO,GAAG;gBACtB,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;aACjB,CAAC;YACF,EAAE,EAAE,CAAC;QACP,CAAC,EACD,IAAI,CACL,CAAC;QAEF,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;QAErB,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,WAAW,EAAE,CAAC;YAClB,IAAI,MAAM,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;gBAC3B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EACD,CAAC,SAAS,EAAE,QAAQ,CAAC,CACtB,CAAC;IAEF,MAAM,KAAK,GAAG,oBAAoB,CAChC,SAAS,EACT,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAC3B,GAAG,EAAE,CAAC,YAAY,CACnB,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IACjC,CAAC,CAAC;IAEF,8BAA8B;IAC9B,OAAO;QACL,GAAG,KAAK;QACR,YAAY;KACb,CAAC;AACJ,CAAC","sourcesContent":["import {\n type InfiniteQuerySubscription,\n type InstantCoreDatabase,\n type InstantSchemaDef,\n type InstaQLOptions,\n InstaQLResponse,\n ValidQuery,\n weakHash,\n getInfiniteQueryInitialSnapshot,\n} from '@instantdb/core';\nimport { useCallback, useRef, useSyncExternalStore } from 'react';\n\nexport type InfiniteQueryResult<\n Schema extends InstantSchemaDef<any, any, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> =\n | {\n error: { message: string };\n data: undefined;\n isLoading: false;\n canLoadNextPage: boolean;\n loadNextPage: () => void;\n }\n | {\n error: undefined;\n data: undefined;\n isLoading: true;\n canLoadNextPage: boolean;\n loadNextPage: () => void;\n }\n | {\n error: undefined;\n data: InstaQLResponse<Schema, Q, UseDates>;\n isLoading: false;\n canLoadNextPage: boolean;\n loadNextPage: () => void;\n };\n\nconst defaultState = {\n error: undefined,\n data: undefined,\n isLoading: true,\n canLoadNextPage: false,\n};\n\nexport function useInfiniteQuerySubscription<\n Schema extends InstantSchemaDef<any, any, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n>({\n core,\n query,\n opts,\n}: {\n core: InstantCoreDatabase<Schema, UseDates>;\n query: Q | null;\n opts?: InstaQLOptions;\n}): InfiniteQueryResult<Schema, Q, UseDates> {\n const subRef = useRef<InfiniteQuerySubscription | null>(null);\n\n const queryHash = weakHash(query);\n const optsHash = weakHash(opts);\n const snapshot = getInfiniteQueryInitialSnapshot(core, query, opts);\n\n const stateCacheRef = useRef<\n Omit<InfiniteQueryResult<Schema, Q, UseDates>, 'loadNextPage'>\n >({\n ...snapshot,\n isLoading: !snapshot.data && !snapshot.error,\n });\n\n const subscribe = useCallback(\n (cb: () => void) => {\n subRef.current = null;\n\n const nextSnapshot = getInfiniteQueryInitialSnapshot(core, query, opts);\n stateCacheRef.current = {\n ...nextSnapshot,\n isLoading: !nextSnapshot.data && !nextSnapshot.error,\n };\n\n cb();\n\n if (!query) {\n return () => {};\n }\n\n const sub = core.subscribeInfiniteQuery(\n query,\n (resp) => {\n stateCacheRef.current = {\n ...resp,\n isLoading: false,\n };\n cb();\n },\n opts,\n );\n\n subRef.current = sub;\n\n return () => {\n sub.unsubscribe();\n if (subRef.current === sub) {\n subRef.current = null;\n }\n };\n },\n [queryHash, optsHash],\n );\n\n const state = useSyncExternalStore(\n subscribe,\n () => stateCacheRef.current,\n () => defaultState,\n );\n\n const loadNextPage = () => {\n subRef.current?.loadNextPage();\n };\n\n // @ts-expect-error union type\n return {\n ...state,\n loadNextPage,\n };\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { type InstaQLOptions, InstantCoreDatabase, InstaQLLifecycleState, InstantSchemaDef, ValidQuery } from '@instantdb/core';
2
+ export declare function useQueryInternal<Q extends ValidQuery<Q, Schema>, Schema extends InstantSchemaDef<any, any, any>, UseDates extends boolean>(_core: InstantCoreDatabase<Schema, UseDates>, _query: null | Q, _opts?: InstaQLOptions, serverSnapshot?: () => InstaQLLifecycleState<Schema, Q, UseDates> | undefined): {
3
+ state: InstaQLLifecycleState<Schema, Q, UseDates>;
4
+ query: any;
5
+ queryHash: string;
6
+ };
7
+ //# sourceMappingURL=useQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../src/useQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACX,MAAM,iBAAiB,CAAC;AAoBzB,wBAAgB,gBAAgB,CAC9B,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,MAAM,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9C,QAAQ,SAAS,OAAO,EAExB,KAAK,EAAE,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC5C,MAAM,EAAE,IAAI,GAAG,CAAC,EAChB,KAAK,CAAC,EAAE,cAAc,EACtB,cAAc,CAAC,EAAE,MAAM,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,SAAS,GAC5E;IACD,KAAK,EAAE,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClD,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAgFA"}
@@ -0,0 +1,76 @@
1
+ 'use client';
2
+ import { weakHash, coerceQuery, } from '@instantdb/core';
3
+ import { useCallback, useRef, useSyncExternalStore } from 'react';
4
+ const defaultState = {
5
+ isLoading: true,
6
+ data: undefined,
7
+ pageInfo: undefined,
8
+ error: undefined,
9
+ };
10
+ function stateForResult(result) {
11
+ return {
12
+ isLoading: !Boolean(result),
13
+ data: undefined,
14
+ pageInfo: undefined,
15
+ error: undefined,
16
+ ...(result ? result : {}),
17
+ };
18
+ }
19
+ export function useQueryInternal(_core, _query, _opts, serverSnapshot) {
20
+ if (_query && _opts && 'ruleParams' in _opts) {
21
+ _query = { $$ruleParams: _opts['ruleParams'], ..._query };
22
+ }
23
+ const query = _query ? coerceQuery(_query) : null;
24
+ const queryHash = weakHash(query);
25
+ // We use a ref to store the result of the query.
26
+ // This is becuase `useSyncExternalStore` uses `Object.is`
27
+ // to compare the previous and next state.
28
+ // If we don't use a ref, the state will always be considered different, so
29
+ // the component will always re-render.
30
+ const resultCacheRef = useRef(stateForResult(_core._reactor.getPreviousResult(query)));
31
+ // Cache the server snapshot to satisfy useSyncExternalStore's requirement
32
+ // that getServerSnapshot returns the same reference across calls.
33
+ const serverSnapshotCacheRef = useRef(defaultState);
34
+ // Similar to `resultCacheRef`, `useSyncExternalStore` will unsubscribe
35
+ // if `subscribe` changes, so we use `useCallback` to memoize the function.
36
+ const subscribe = useCallback((cb) => {
37
+ // Update the ref when the query changes to avoid showing stale data
38
+ resultCacheRef.current = stateForResult(_core._reactor.getPreviousResult(query));
39
+ // before the subscribeQuery is connected and calls it's own callback,
40
+ // we might have data in the store via SSR, we need to notify useSyncExternalStore that
41
+ // the data has changed.
42
+ cb();
43
+ // Don't subscribe if query is null
44
+ if (!query) {
45
+ const unsubscribe = () => { };
46
+ return unsubscribe;
47
+ }
48
+ const unsubscribe = _core.subscribeQuery(query, (result) => {
49
+ resultCacheRef.current = {
50
+ isLoading: !Boolean(result),
51
+ // @ts-expect-error: ts thinks this will always be overwritten
52
+ data: undefined,
53
+ // @ts-expect-error: ts thinks this will always be overwritten
54
+ pageInfo: undefined,
55
+ // @ts-expect-error: ts thinks this will always be overwritten
56
+ error: undefined,
57
+ ...result,
58
+ };
59
+ cb();
60
+ });
61
+ return unsubscribe;
62
+ },
63
+ // Build a new subscribe function if the query changes
64
+ [queryHash]);
65
+ const state = useSyncExternalStore(subscribe, () => resultCacheRef.current, () => {
66
+ if (serverSnapshot && serverSnapshotCacheRef.current === defaultState) {
67
+ const result = serverSnapshot();
68
+ if (result) {
69
+ serverSnapshotCacheRef.current = result;
70
+ }
71
+ }
72
+ return serverSnapshotCacheRef.current;
73
+ });
74
+ return { state, query, queryHash };
75
+ }
76
+ //# sourceMappingURL=useQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/useQuery.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {\n weakHash,\n coerceQuery,\n type InstaQLOptions,\n InstantCoreDatabase,\n InstaQLLifecycleState,\n InstantSchemaDef,\n ValidQuery,\n} from '@instantdb/core';\nimport { useCallback, useRef, useSyncExternalStore } from 'react';\n\nconst defaultState = {\n isLoading: true,\n data: undefined,\n pageInfo: undefined,\n error: undefined,\n} as const;\n\nfunction stateForResult(result: any) {\n return {\n isLoading: !Boolean(result),\n data: undefined,\n pageInfo: undefined,\n error: undefined,\n ...(result ? result : {}),\n };\n}\n\nexport function useQueryInternal<\n Q extends ValidQuery<Q, Schema>,\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n>(\n _core: InstantCoreDatabase<Schema, UseDates>,\n _query: null | Q,\n _opts?: InstaQLOptions,\n serverSnapshot?: () => InstaQLLifecycleState<Schema, Q, UseDates> | undefined,\n): {\n state: InstaQLLifecycleState<Schema, Q, UseDates>;\n query: any;\n queryHash: string;\n} {\n if (_query && _opts && 'ruleParams' in _opts) {\n _query = { $$ruleParams: _opts['ruleParams'], ..._query };\n }\n const query = _query ? coerceQuery(_query) : null;\n const queryHash = weakHash(query);\n\n // We use a ref to store the result of the query.\n // This is becuase `useSyncExternalStore` uses `Object.is`\n // to compare the previous and next state.\n // If we don't use a ref, the state will always be considered different, so\n // the component will always re-render.\n const resultCacheRef = useRef<InstaQLLifecycleState<Schema, Q, UseDates>>(\n stateForResult(_core._reactor.getPreviousResult(query)),\n );\n\n // Cache the server snapshot to satisfy useSyncExternalStore's requirement\n // that getServerSnapshot returns the same reference across calls.\n const serverSnapshotCacheRef = useRef<\n InstaQLLifecycleState<Schema, Q, UseDates>\n >(defaultState as any);\n\n // Similar to `resultCacheRef`, `useSyncExternalStore` will unsubscribe\n // if `subscribe` changes, so we use `useCallback` to memoize the function.\n const subscribe = useCallback(\n (cb) => {\n // Update the ref when the query changes to avoid showing stale data\n resultCacheRef.current = stateForResult(\n _core._reactor.getPreviousResult(query),\n );\n // before the subscribeQuery is connected and calls it's own callback,\n // we might have data in the store via SSR, we need to notify useSyncExternalStore that\n // the data has changed.\n cb();\n\n // Don't subscribe if query is null\n if (!query) {\n const unsubscribe = () => {};\n return unsubscribe;\n }\n\n const unsubscribe = _core.subscribeQuery<Q, UseDates>(query, (result) => {\n resultCacheRef.current = {\n isLoading: !Boolean(result),\n // @ts-expect-error: ts thinks this will always be overwritten\n data: undefined,\n // @ts-expect-error: ts thinks this will always be overwritten\n pageInfo: undefined,\n // @ts-expect-error: ts thinks this will always be overwritten\n error: undefined,\n ...result,\n };\n\n cb();\n });\n\n return unsubscribe;\n },\n // Build a new subscribe function if the query changes\n [queryHash],\n );\n\n const state = useSyncExternalStore<\n InstaQLLifecycleState<Schema, Q, UseDates>\n >(\n subscribe,\n () => resultCacheRef.current,\n () => {\n if (serverSnapshot && serverSnapshotCacheRef.current === defaultState) {\n const result = serverSnapshot();\n if (result) {\n serverSnapshotCacheRef.current = result;\n }\n }\n\n return serverSnapshotCacheRef.current;\n },\n );\n\n return { state, query, queryHash };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function useTimeout(): {
2
+ set: (delay: number, fn: () => void) => void;
3
+ clear: () => void;
4
+ };
5
+ //# sourceMappingURL=useTimeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTimeout.d.ts","sourceRoot":"","sources":["../../src/useTimeout.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU;iBAOJ,MAAM,MAAM,MAAM,IAAI;;EAY3C"}
@@ -0,0 +1,18 @@
1
+ import { useEffect, useRef } from 'react';
2
+ export function useTimeout() {
3
+ const timeoutRef = useRef(null);
4
+ useEffect(() => {
5
+ clear();
6
+ }, []);
7
+ function set(delay, fn) {
8
+ clear();
9
+ timeoutRef.current = setTimeout(fn, delay);
10
+ }
11
+ function clear() {
12
+ if (timeoutRef.current) {
13
+ clearTimeout(timeoutRef.current);
14
+ }
15
+ }
16
+ return { set, clear };
17
+ }
18
+ //# sourceMappingURL=useTimeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTimeout.js","sourceRoot":"","sources":["../../src/useTimeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAEtE,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,EAAE,CAAC;IACV,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,GAAG,CAAC,KAAa,EAAE,EAAc;QACxC,KAAK,EAAE,CAAC;QACR,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC","sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport function useTimeout() {\n const timeoutRef = useRef<null | ReturnType<typeof setTimeout>>(null);\n\n useEffect(() => {\n clear();\n }, []);\n\n function set(delay: number, fn: () => void) {\n clear();\n timeoutRef.current = setTimeout(fn, delay);\n }\n\n function clear() {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n }\n\n return { set, clear };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { version } from '@instantdb/version';
2
+ export default version;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,eAAe,OAAO,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { version } from '@instantdb/version';
2
+ export default version;
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,eAAe,OAAO,CAAC","sourcesContent":["import { version } from '@instantdb/version';\n\nexport default version;\n"]}