@livestore/livestore 0.0.19 → 0.0.22
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 +29 -22
- package/dist/.tsbuildinfo +1 -1
- package/dist/QueryCache.d.ts +1 -1
- package/dist/QueryCache.d.ts.map +1 -1
- package/dist/QueryCache.js.map +1 -1
- package/dist/__tests__/react/fixture.d.ts +5 -4
- package/dist/__tests__/react/fixture.d.ts.map +1 -1
- package/dist/__tests__/react/fixture.js +3 -5
- package/dist/__tests__/react/fixture.js.map +1 -1
- package/dist/__tests__/react/useComponentState.test.d.ts +2 -0
- package/dist/__tests__/react/useComponentState.test.d.ts.map +1 -0
- package/dist/__tests__/react/useComponentState.test.js +68 -0
- package/dist/__tests__/react/useComponentState.test.js.map +1 -0
- package/dist/__tests__/react/useLQuery.test.d.ts +2 -0
- package/dist/__tests__/react/useLQuery.test.d.ts.map +1 -0
- package/dist/__tests__/react/useLQuery.test.js +38 -0
- package/dist/__tests__/react/useLQuery.test.js.map +1 -0
- package/dist/__tests__/react/useLiveStoreComponent.test.js +4 -9
- package/dist/__tests__/react/useLiveStoreComponent.test.js.map +1 -1
- package/dist/__tests__/react/useQuery.test.d.ts +2 -0
- package/dist/__tests__/react/useQuery.test.d.ts.map +1 -0
- package/dist/__tests__/react/useQuery.test.js +33 -0
- package/dist/__tests__/react/useQuery.test.js.map +1 -0
- package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts +2 -0
- package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts.map +1 -0
- package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js +38 -0
- package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js.map +1 -0
- package/dist/__tests__/react/utils/stack-info.test.d.ts +2 -0
- package/dist/__tests__/react/utils/stack-info.test.d.ts.map +1 -0
- package/dist/__tests__/react/utils/stack-info.test.js +43 -0
- package/dist/__tests__/react/utils/stack-info.test.js.map +1 -0
- package/dist/__tests__/reactive.test.js +179 -93
- package/dist/__tests__/reactive.test.js.map +1 -1
- package/dist/__tests__/reactiveQueries/sql.test.d.ts +2 -0
- package/dist/__tests__/reactiveQueries/sql.test.d.ts.map +1 -0
- package/dist/__tests__/reactiveQueries/sql.test.js +337 -0
- package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -0
- package/dist/inMemoryDatabase.d.ts +4 -3
- package/dist/inMemoryDatabase.d.ts.map +1 -1
- package/dist/inMemoryDatabase.js +3 -2
- package/dist/inMemoryDatabase.js.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +4 -3
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +3 -2
- package/dist/react/index.js.map +1 -1
- package/dist/react/useComponentState.d.ts +50 -0
- package/dist/react/useComponentState.d.ts.map +1 -0
- package/dist/react/useComponentState.js +240 -0
- package/dist/react/useComponentState.js.map +1 -0
- package/dist/react/useGlobalQuery.d.ts +3 -0
- package/dist/react/useGlobalQuery.d.ts.map +1 -0
- package/dist/react/useGlobalQuery.js +26 -0
- package/dist/react/useGlobalQuery.js.map +1 -0
- package/dist/react/useGraphQL.d.ts +3 -3
- package/dist/react/useGraphQL.d.ts.map +1 -1
- package/dist/react/useGraphQL.js +10 -8
- package/dist/react/useGraphQL.js.map +1 -1
- package/dist/react/useLiveStoreComponent.d.ts +6 -6
- package/dist/react/useLiveStoreComponent.d.ts.map +1 -1
- package/dist/react/useLiveStoreComponent.js +143 -99
- package/dist/react/useLiveStoreComponent.js.map +1 -1
- package/dist/react/useQuery.d.ts +2 -2
- package/dist/react/useQuery.d.ts.map +1 -1
- package/dist/react/useQuery.js +54 -30
- package/dist/react/useQuery.js.map +1 -1
- package/dist/react/useTemporaryQuery.d.ts +8 -0
- package/dist/react/useTemporaryQuery.d.ts.map +1 -0
- package/dist/react/useTemporaryQuery.js +19 -0
- package/dist/react/useTemporaryQuery.js.map +1 -0
- package/dist/react/utils/extractNamesFromStackTrace.d.ts +3 -0
- package/dist/react/utils/extractNamesFromStackTrace.d.ts.map +1 -0
- package/dist/react/utils/extractNamesFromStackTrace.js +40 -0
- package/dist/react/utils/extractNamesFromStackTrace.js.map +1 -0
- package/dist/react/utils/extractStackInfoFromStackTrace.d.ts +7 -0
- package/dist/react/utils/extractStackInfoFromStackTrace.d.ts.map +1 -0
- package/dist/react/utils/extractStackInfoFromStackTrace.js +40 -0
- package/dist/react/utils/extractStackInfoFromStackTrace.js.map +1 -0
- package/dist/react/utils/stack-info.d.ts +11 -0
- package/dist/react/utils/stack-info.d.ts.map +1 -0
- package/dist/react/utils/stack-info.js +49 -0
- package/dist/react/utils/stack-info.js.map +1 -0
- package/dist/reactive.d.ts +51 -67
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +138 -220
- package/dist/reactive.js.map +1 -1
- package/dist/reactiveQueries/base-class.d.ts +28 -21
- package/dist/reactiveQueries/base-class.d.ts.map +1 -1
- package/dist/reactiveQueries/base-class.js +22 -18
- package/dist/reactiveQueries/base-class.js.map +1 -1
- package/dist/reactiveQueries/graph.d.ts +10 -0
- package/dist/reactiveQueries/graph.d.ts.map +1 -0
- package/dist/reactiveQueries/graph.js +6 -0
- package/dist/reactiveQueries/graph.js.map +1 -0
- package/dist/reactiveQueries/graphql.d.ts +35 -17
- package/dist/reactiveQueries/graphql.d.ts.map +1 -1
- package/dist/reactiveQueries/graphql.js +86 -10
- package/dist/reactiveQueries/graphql.js.map +1 -1
- package/dist/reactiveQueries/js.d.ts +17 -12
- package/dist/reactiveQueries/js.d.ts.map +1 -1
- package/dist/reactiveQueries/js.js +30 -8
- package/dist/reactiveQueries/js.js.map +1 -1
- package/dist/reactiveQueries/sql.d.ts +28 -18
- package/dist/reactiveQueries/sql.d.ts.map +1 -1
- package/dist/reactiveQueries/sql.js +79 -16
- package/dist/reactiveQueries/sql.js.map +1 -1
- package/dist/store.d.ts +35 -61
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +77 -272
- package/dist/store.js.map +1 -1
- package/package.json +4 -3
- package/src/QueryCache.ts +1 -1
- package/src/__tests__/react/fixture.tsx +10 -8
- package/src/__tests__/react/{useLiveStoreComponent.test.tsx → useComponentState.test.tsx} +9 -20
- package/src/__tests__/react/useQuery.test.tsx +48 -0
- package/src/__tests__/react/utils/stack-info.test.ts +45 -0
- package/src/__tests__/reactive.test.ts +212 -140
- package/src/__tests__/reactiveQueries/sql.test.ts +372 -0
- package/src/inMemoryDatabase.ts +11 -8
- package/src/index.ts +7 -11
- package/src/react/index.ts +4 -7
- package/src/react/{useLiveStoreComponent.ts → useComponentState.ts} +90 -253
- package/src/react/useQuery.ts +74 -40
- package/src/react/useTemporaryQuery.ts +23 -0
- package/src/react/utils/stack-info.ts +63 -0
- package/src/reactive.ts +234 -308
- package/src/reactiveQueries/base-class.ts +59 -42
- package/src/reactiveQueries/graph.ts +15 -0
- package/src/reactiveQueries/graphql.ts +143 -29
- package/src/reactiveQueries/js.ts +57 -20
- package/src/reactiveQueries/sql.ts +136 -36
- package/src/store.ts +121 -426
- package/src/react/useGraphQL.ts +0 -138
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const originalStackLimit = Error.stackTraceLimit;
|
|
2
|
+
/*
|
|
3
|
+
Example stack trace:
|
|
4
|
+
|
|
5
|
+
Error
|
|
6
|
+
at https://localhost:8081/@fs/Users/schickling/Code/overtone/submodules/livestore/packages/@livestore/livestore/dist/react/useQuery.js?t=1699550216884:18:23
|
|
7
|
+
at mountMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:12817:27)
|
|
8
|
+
at Object.useMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:13141:24)
|
|
9
|
+
at Object.useMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-4WADDZ2G.js?v=3eb66ed6:1094:29)
|
|
10
|
+
at useQuery (https://localhost:8081/@fs/Users/schickling/Code/overtone/submodules/livestore/packages/@livestore/livestore/dist/react/useQuery.js?t=1699550216884:13:33)
|
|
11
|
+
at useAppState (https://localhost:8081/src/db/AppState.ts?t=1699550216884:17:34)
|
|
12
|
+
at useRoute (https://localhost:8081/src/db/AppState.ts?t=1699550216884:74:22)
|
|
13
|
+
at RouteLink (https://localhost:8081/src/components/Link.tsx?t=1699550216884:36:7)
|
|
14
|
+
at renderWithHooks (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:12171:26)
|
|
15
|
+
at mountIndeterminateComponent (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:14921:21)
|
|
16
|
+
|
|
17
|
+
Approach:
|
|
18
|
+
- Start filtering at `at useQuery` (including)
|
|
19
|
+
- Stop filtering at `at renderWithHooks` (excluding)
|
|
20
|
+
*/
|
|
21
|
+
export const extractStackInfoFromStackTrace = (stackTrace) => {
|
|
22
|
+
const namePattern = /at (\S+) \((.+)\)/g;
|
|
23
|
+
let match;
|
|
24
|
+
const stackInfoArr = [];
|
|
25
|
+
let hasReachedStart = false;
|
|
26
|
+
while ((match = namePattern.exec(stackTrace)) !== null) {
|
|
27
|
+
const [, name, filePath] = match;
|
|
28
|
+
if (name.startsWith('use')) {
|
|
29
|
+
hasReachedStart = true;
|
|
30
|
+
stackInfoArr.unshift({ name, filePath });
|
|
31
|
+
}
|
|
32
|
+
else if (hasReachedStart) {
|
|
33
|
+
// We've reached the end of the `use*` functions, so we're adding the component name and stop
|
|
34
|
+
stackInfoArr.unshift({ name, filePath });
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return stackInfoArr;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=extractStackInfoFromStackTrace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractStackInfoFromStackTrace.js","sourceRoot":"","sources":["../../../src/react/utils/extractStackInfoFromStackTrace.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,eAAe,CAAA;AAOvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,UAAkB,EAAe,EAAE;IAChF,MAAM,WAAW,GAAG,oBAAoB,CAAA;IACxC,IAAI,KAA6B,CAAA;IACjC,MAAM,YAAY,GAAgB,EAAE,CAAA;IACpC,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAwC,CAAA;QACnE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAC1B,eAAe,GAAG,IAAI,CAAA;YAEtB,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;SACzC;aAAM,IAAI,eAAe,EAAE;YAC1B,6FAA6F;YAC7F,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;YACxC,MAAK;SACN;KACF;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const originalStackLimit: number;
|
|
2
|
+
export type StackInfo = {
|
|
3
|
+
frames: StackFrame[];
|
|
4
|
+
};
|
|
5
|
+
export type StackFrame = {
|
|
6
|
+
name: string;
|
|
7
|
+
filePath: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const extractStackInfoFromStackTrace: (stackTrace: string) => StackInfo;
|
|
10
|
+
export declare const useStackInfo: () => StackInfo;
|
|
11
|
+
//# sourceMappingURL=stack-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-info.d.ts","sourceRoot":"","sources":["../../../src/react/utils/stack-info.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,QAAwB,CAAA;AAEvD,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAqBD,eAAO,MAAM,8BAA8B,eAAgB,MAAM,KAAG,SAoBnE,CAAA;AAED,eAAO,MAAM,YAAY,QAAO,SAQxB,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const originalStackLimit = Error.stackTraceLimit;
|
|
3
|
+
/*
|
|
4
|
+
Example stack trace:
|
|
5
|
+
|
|
6
|
+
Error
|
|
7
|
+
at https://localhost:8081/@fs/Users/schickling/Code/overtone/submodules/livestore/packages/@livestore/livestore/dist/react/useQuery.js?t=1699550216884:18:23
|
|
8
|
+
at mountMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:12817:27)
|
|
9
|
+
at Object.useMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:13141:24)
|
|
10
|
+
at Object.useMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-4WADDZ2G.js?v=3eb66ed6:1094:29)
|
|
11
|
+
at useQuery (https://localhost:8081/@fs/Users/schickling/Code/overtone/submodules/livestore/packages/@livestore/livestore/dist/react/useQuery.js?t=1699550216884:13:33)
|
|
12
|
+
at useAppState (https://localhost:8081/src/db/AppState.ts?t=1699550216884:17:34)
|
|
13
|
+
at useRoute (https://localhost:8081/src/db/AppState.ts?t=1699550216884:74:22)
|
|
14
|
+
at RouteLink (https://localhost:8081/src/components/Link.tsx?t=1699550216884:36:7)
|
|
15
|
+
at renderWithHooks (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:12171:26)
|
|
16
|
+
at mountIndeterminateComponent (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:14921:21)
|
|
17
|
+
|
|
18
|
+
Approach:
|
|
19
|
+
- Start filtering at `at useQuery` (including)
|
|
20
|
+
- Stop filtering at `at renderWithHooks` (excluding)
|
|
21
|
+
*/
|
|
22
|
+
export const extractStackInfoFromStackTrace = (stackTrace) => {
|
|
23
|
+
const namePattern = /at (\S+) \((.+)\)/g;
|
|
24
|
+
let match;
|
|
25
|
+
const frames = [];
|
|
26
|
+
let hasReachedStart = false;
|
|
27
|
+
while ((match = namePattern.exec(stackTrace)) !== null) {
|
|
28
|
+
const [, name, filePath] = match;
|
|
29
|
+
if (name.startsWith('use')) {
|
|
30
|
+
hasReachedStart = true;
|
|
31
|
+
frames.unshift({ name, filePath });
|
|
32
|
+
}
|
|
33
|
+
else if (hasReachedStart) {
|
|
34
|
+
// We've reached the end of the `use*` functions, so we're adding the component name and stop
|
|
35
|
+
frames.unshift({ name, filePath });
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { frames };
|
|
40
|
+
};
|
|
41
|
+
export const useStackInfo = () => React.useMemo(() => {
|
|
42
|
+
Error.stackTraceLimit = 10;
|
|
43
|
+
// eslint-disable-next-line unicorn/error-message
|
|
44
|
+
const stack = new Error().stack;
|
|
45
|
+
console.log('stack', stack);
|
|
46
|
+
Error.stackTraceLimit = originalStackLimit;
|
|
47
|
+
return extractStackInfoFromStackTrace(stack);
|
|
48
|
+
}, []);
|
|
49
|
+
//# sourceMappingURL=stack-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-info.js","sourceRoot":"","sources":["../../../src/react/utils/stack-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,eAAe,CAAA;AAWvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,UAAkB,EAAa,EAAE;IAC9E,MAAM,WAAW,GAAG,oBAAoB,CAAA;IACxC,IAAI,KAA6B,CAAA;IACjC,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAwC,CAAA;QACnE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAC1B,eAAe,GAAG,IAAI,CAAA;YAEtB,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;SACnC;aAAM,IAAI,eAAe,EAAE;YAC1B,6FAA6F;YAC7F,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;YAClC,MAAK;SACN;KACF;IAED,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,GAAc,EAAE,CAC1C,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;IACjB,KAAK,CAAC,eAAe,GAAG,EAAE,CAAA;IAC1B,iDAAiD;IACjD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAM,CAAA;IAChC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC3B,KAAK,CAAC,eAAe,GAAG,kBAAkB,CAAA;IAC1C,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC,EAAE,EAAE,CAAC,CAAA"}
|
package/dist/reactive.d.ts
CHANGED
|
@@ -1,56 +1,61 @@
|
|
|
1
1
|
import type { PrettifyFlat } from '@livestore/utils';
|
|
2
2
|
import type * as otel from '@opentelemetry/api';
|
|
3
3
|
import { BoundArray } from './bounded-collections.js';
|
|
4
|
-
export
|
|
5
|
-
export type
|
|
4
|
+
export declare const NOT_REFRESHED_YET: unique symbol;
|
|
5
|
+
export type NOT_REFRESHED_YET = typeof NOT_REFRESHED_YET;
|
|
6
|
+
export type GetAtom = <T>(atom: Atom<T, any, any>, otelContext?: otel.Context) => T;
|
|
7
|
+
export type Ref<T, TContext, TDebugRefreshReason extends Taggable> = {
|
|
6
8
|
_tag: 'ref';
|
|
7
9
|
id: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
sub: Set<Atom<any>>;
|
|
12
|
-
super: Set<Atom<any> | Effect>;
|
|
10
|
+
isDirty: false;
|
|
11
|
+
previousResult: T;
|
|
12
|
+
computeResult: () => T;
|
|
13
|
+
sub: Set<Atom<any, TContext, TDebugRefreshReason>>;
|
|
14
|
+
super: Set<Atom<any, TContext, TDebugRefreshReason> | Effect>;
|
|
13
15
|
label?: string;
|
|
14
16
|
/** Container for meta information (e.g. the LiveStore Store) */
|
|
15
17
|
meta?: any;
|
|
16
18
|
equal: (a: T, b: T) => boolean;
|
|
17
19
|
};
|
|
18
|
-
type
|
|
20
|
+
export type Thunk<TResult, TContext, TDebugRefreshReason extends Taggable> = {
|
|
19
21
|
_tag: 'thunk';
|
|
20
22
|
id: string;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
isDirty: boolean;
|
|
24
|
+
computeResult: (otelContext?: otel.Context, debugRefreshReason?: RefreshReasonWithGenericReasons<TDebugRefreshReason>) => TResult;
|
|
25
|
+
previousResult: TResult | NOT_REFRESHED_YET;
|
|
26
|
+
sub: Set<Atom<any, TContext, TDebugRefreshReason>>;
|
|
27
|
+
super: Set<Atom<any, TContext, TDebugRefreshReason> | Effect>;
|
|
25
28
|
label?: string;
|
|
26
29
|
/** Container for meta information (e.g. the LiveStore Store) */
|
|
27
30
|
meta?: any;
|
|
28
|
-
equal: (a:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
result: T;
|
|
31
|
+
equal: (a: TResult, b: TResult) => boolean;
|
|
32
|
+
recomputations: number;
|
|
33
|
+
__getResult: any;
|
|
32
34
|
};
|
|
33
|
-
export type Atom<T> = Ref<T> | Thunk<T>;
|
|
35
|
+
export type Atom<T, TContext, TDebugRefreshReason extends Taggable> = Ref<T, TContext, TDebugRefreshReason> | Thunk<T, TContext, TDebugRefreshReason>;
|
|
34
36
|
export type Effect = {
|
|
35
37
|
_tag: 'effect';
|
|
36
38
|
id: string;
|
|
37
|
-
doEffect: (
|
|
38
|
-
sub: Set<Atom<any>>;
|
|
39
|
+
doEffect: (otelContext?: otel.Context) => void;
|
|
40
|
+
sub: Set<Atom<any, TODO, TODO>>;
|
|
41
|
+
label?: string;
|
|
39
42
|
};
|
|
40
43
|
export type Taggable<T extends string = string> = {
|
|
41
44
|
_tag: T;
|
|
42
45
|
};
|
|
46
|
+
export type DebugThunkInfo<T extends string = string> = {
|
|
47
|
+
_tag: T;
|
|
48
|
+
durationMs: number;
|
|
49
|
+
};
|
|
43
50
|
export type ReactiveGraphOptions = {
|
|
44
51
|
effectsWrapper?: (runEffects: () => void) => void;
|
|
45
|
-
otelTracer: otel.Tracer;
|
|
46
52
|
};
|
|
47
|
-
export type AtomDebugInfo<TDebugThunkInfo extends
|
|
53
|
+
export type AtomDebugInfo<TDebugThunkInfo extends DebugThunkInfo> = {
|
|
48
54
|
atom: SerializedAtom;
|
|
49
55
|
resultChanged: boolean;
|
|
50
|
-
durationMs: number;
|
|
51
56
|
debugInfo: TDebugThunkInfo;
|
|
52
57
|
};
|
|
53
|
-
export type RefreshDebugInfo<TDebugRefreshReason extends Taggable, TDebugThunkInfo extends
|
|
58
|
+
export type RefreshDebugInfo<TDebugRefreshReason extends Taggable, TDebugThunkInfo extends DebugThunkInfo> = {
|
|
54
59
|
/** Currently only used for easier handling in React (e.g. as key) */
|
|
55
60
|
id: string;
|
|
56
61
|
reason: TDebugRefreshReason;
|
|
@@ -64,76 +69,55 @@ export type RefreshDebugInfo<TDebugRefreshReason extends Taggable, TDebugThunkIn
|
|
|
64
69
|
export type RefreshReasonWithGenericReasons<T extends Taggable> = T | {
|
|
65
70
|
_tag: 'makeThunk';
|
|
66
71
|
label?: string;
|
|
67
|
-
} | {
|
|
68
|
-
_tag: 'makeEffect';
|
|
69
|
-
label?: string;
|
|
70
72
|
} | {
|
|
71
73
|
_tag: 'unknown';
|
|
72
74
|
};
|
|
73
75
|
export declare const unknownRefreshReason: () => {
|
|
74
76
|
_tag: "unknown";
|
|
75
77
|
};
|
|
76
|
-
export type SerializedAtom = Readonly<PrettifyFlat<Pick<Atom<unknown>, '_tag' | '
|
|
78
|
+
export type SerializedAtom = Readonly<PrettifyFlat<Pick<Atom<unknown, unknown, any>, '_tag' | 'id' | 'label' | 'meta'> & {
|
|
77
79
|
sub: string[];
|
|
78
80
|
super: string[];
|
|
79
81
|
}>>;
|
|
80
82
|
export type SerializedEffect = Readonly<PrettifyFlat<Pick<Effect, '_tag' | 'id'>>>;
|
|
81
83
|
type ReactiveGraphSnapshot = {
|
|
82
84
|
readonly atoms: SerializedAtom[];
|
|
83
|
-
readonly effects: SerializedEffect[];
|
|
84
|
-
/** IDs of atoms and effects that are dirty */
|
|
85
|
-
readonly dirtyNodes: string[];
|
|
86
85
|
};
|
|
87
|
-
export declare class ReactiveGraph<TDebugRefreshReason extends Taggable, TDebugThunkInfo extends
|
|
88
|
-
|
|
89
|
-
private effects;
|
|
90
|
-
private otelTracer;
|
|
91
|
-
readonly dirtyNodes: Set<Atom<any> | Effect>;
|
|
86
|
+
export declare class ReactiveGraph<TDebugRefreshReason extends Taggable, TDebugThunkInfo extends DebugThunkInfo, TContext = {}> {
|
|
87
|
+
readonly atoms: Set<Atom<any, TContext, TDebugRefreshReason>>;
|
|
92
88
|
effectsWrapper: (runEffects: () => void) => void;
|
|
89
|
+
context: TContext | undefined;
|
|
93
90
|
debugRefreshInfos: BoundArray<RefreshDebugInfo<RefreshReasonWithGenericReasons<TDebugRefreshReason>, TDebugThunkInfo>>;
|
|
91
|
+
currentDebugRefresh: {
|
|
92
|
+
refreshedAtoms: AtomDebugInfo<TDebugThunkInfo>[];
|
|
93
|
+
startMs: DOMHighResTimeStamp;
|
|
94
|
+
} | undefined;
|
|
94
95
|
constructor(options: ReactiveGraphOptions);
|
|
95
96
|
makeRef<T>(val: T, options?: {
|
|
96
97
|
label?: string;
|
|
97
98
|
meta?: unknown;
|
|
98
99
|
equal?: (a: T, b: T) => boolean;
|
|
99
|
-
}): Ref<T>;
|
|
100
|
-
makeThunk<T>(getResult: (get: GetAtom,
|
|
100
|
+
}): Ref<T, TContext, TDebugRefreshReason>;
|
|
101
|
+
makeThunk<T>(getResult: (get: GetAtom, setDebugInfo: (debugInfo: TDebugThunkInfo) => void, ctx: TContext, otelContext: otel.Context | undefined) => T, options?: {
|
|
101
102
|
label?: string;
|
|
102
103
|
meta?: any;
|
|
103
104
|
equal?: (a: T, b: T) => boolean;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
destroy(node: Atom<any> | Effect): void;
|
|
108
|
-
makeEffect(doEffect: (get: GetAtom) => void, options: {
|
|
105
|
+
} | undefined): Thunk<T, TContext, TDebugRefreshReason>;
|
|
106
|
+
destroy(node: Atom<any, TContext, TDebugRefreshReason> | Effect): void;
|
|
107
|
+
makeEffect(doEffect: (get: GetAtom, otelContext?: otel.Context) => void, options?: {
|
|
109
108
|
label?: string;
|
|
110
|
-
} | undefined
|
|
111
|
-
setRef<T>(ref: Ref<T>, val: T, options
|
|
112
|
-
otelHint?: string;
|
|
113
|
-
skipRefresh?: boolean;
|
|
109
|
+
} | undefined): Effect;
|
|
110
|
+
setRef<T>(ref: Ref<T, TContext, TDebugRefreshReason>, val: T, options?: {
|
|
114
111
|
debugRefreshReason?: TDebugRefreshReason;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
skipRefresh?: boolean;
|
|
112
|
+
otelContext?: otel.Context;
|
|
113
|
+
} | undefined): void;
|
|
114
|
+
setRefs<T>(refs: [Ref<T, TContext, TDebugRefreshReason>, T][], options?: {
|
|
119
115
|
debugRefreshReason?: TDebugRefreshReason;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
* At the end of the refresh, we run any effects that were scheduled.
|
|
126
|
-
*
|
|
127
|
-
* @param roots Root atoms to start the refresh from
|
|
128
|
-
*/
|
|
129
|
-
refresh(options: {
|
|
130
|
-
otelHint?: string;
|
|
131
|
-
debugRefreshReason?: RefreshReasonWithGenericReasons<TDebugRefreshReason>;
|
|
132
|
-
} | undefined, otelContext: otel.Context): void;
|
|
133
|
-
label(atom: Atom<any> | Effect): string;
|
|
134
|
-
addEdge(superComp: Atom<any> | Effect, subComp: Atom<any>): void;
|
|
135
|
-
removeEdge(superComp: Atom<any> | Effect, subComp: Atom<any>): void;
|
|
136
|
-
updateAtomHeight(atom: Atom<any> | Effect): void;
|
|
116
|
+
otelContext?: otel.Context;
|
|
117
|
+
} | undefined): void;
|
|
118
|
+
private runEffects;
|
|
119
|
+
addEdge(superComp: Atom<any, TContext, TDebugRefreshReason> | Effect, subComp: Atom<any, TContext, TDebugRefreshReason>): void;
|
|
120
|
+
removeEdge(superComp: Atom<any, TContext, TDebugRefreshReason> | Effect, subComp: Atom<any, TContext, TDebugRefreshReason>): void;
|
|
137
121
|
private getSnapshot;
|
|
138
122
|
}
|
|
139
123
|
export {};
|
package/dist/reactive.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
|