@livestore/livestore 0.0.21 → 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 +14 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/react/fixture.d.ts.map +1 -1
- package/dist/__tests__/react/fixture.js +0 -2
- package/dist/__tests__/react/fixture.js.map +1 -1
- package/dist/__tests__/react/useQuery.test.js +1 -1
- package/dist/__tests__/react/useQuery.test.js.map +1 -1
- 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 +13 -1
- package/dist/__tests__/reactive.test.js.map +1 -1
- package/dist/__tests__/reactiveQueries/sql.test.js +3 -3
- package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -1
- package/dist/inMemoryDatabase.d.ts +2 -1
- package/dist/inMemoryDatabase.d.ts.map +1 -1
- package/dist/inMemoryDatabase.js +3 -2
- package/dist/inMemoryDatabase.js.map +1 -1
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/useComponentState.d.ts.map +1 -1
- package/dist/react/useComponentState.js +19 -27
- package/dist/react/useComponentState.js.map +1 -1
- package/dist/react/useQuery.d.ts.map +1 -1
- package/dist/react/useQuery.js +46 -26
- package/dist/react/useQuery.js.map +1 -1
- package/dist/react/useTemporaryQuery.d.ts.map +1 -1
- package/dist/react/useTemporaryQuery.js +2 -0
- package/dist/react/useTemporaryQuery.js.map +1 -1
- 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 +33 -43
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +66 -255
- package/dist/reactive.js.map +1 -1
- package/dist/reactiveQueries/base-class.d.ts +15 -13
- package/dist/reactiveQueries/base-class.d.ts.map +1 -1
- package/dist/reactiveQueries/base-class.js +5 -8
- package/dist/reactiveQueries/base-class.js.map +1 -1
- package/dist/reactiveQueries/graphql.d.ts +4 -3
- package/dist/reactiveQueries/graphql.d.ts.map +1 -1
- package/dist/reactiveQueries/graphql.js +29 -34
- package/dist/reactiveQueries/graphql.js.map +1 -1
- package/dist/reactiveQueries/js.d.ts +2 -1
- package/dist/reactiveQueries/js.d.ts.map +1 -1
- package/dist/reactiveQueries/js.js +8 -9
- package/dist/reactiveQueries/js.js.map +1 -1
- package/dist/reactiveQueries/sql.d.ts +11 -5
- package/dist/reactiveQueries/sql.d.ts.map +1 -1
- package/dist/reactiveQueries/sql.js +31 -34
- package/dist/reactiveQueries/sql.js.map +1 -1
- package/dist/store.d.ts +26 -12
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +41 -255
- package/dist/store.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/react/fixture.tsx +0 -3
- package/src/__tests__/react/useQuery.test.tsx +1 -1
- package/src/__tests__/react/utils/{extractStackInfoFromStackTrace.test.ts → stack-info.test.ts} +25 -20
- package/src/__tests__/reactive.test.ts +20 -1
- package/src/__tests__/reactiveQueries/sql.test.ts +3 -3
- package/src/inMemoryDatabase.ts +9 -6
- package/src/react/index.ts +1 -0
- package/src/react/useComponentState.ts +25 -30
- package/src/react/useQuery.ts +66 -34
- package/src/react/useTemporaryQuery.ts +2 -0
- package/src/react/utils/{extractStackInfoFromStackTrace.ts → stack-info.ts} +21 -5
- package/src/reactive.ts +148 -339
- package/src/reactiveQueries/base-class.ts +23 -22
- package/src/reactiveQueries/graphql.ts +34 -36
- package/src/reactiveQueries/js.ts +14 -10
- package/src/reactiveQueries/sql.ts +55 -48
- package/src/store.ts +70 -305
package/dist/react/useQuery.js
CHANGED
|
@@ -1,42 +1,62 @@
|
|
|
1
|
+
import * as otel from '@opentelemetry/api';
|
|
1
2
|
import { isEqual } from 'lodash-es';
|
|
2
3
|
import React from 'react';
|
|
3
4
|
import { useStore } from './LiveStoreContext.js';
|
|
4
|
-
import { extractStackInfoFromStackTrace, originalStackLimit } from './utils/
|
|
5
|
+
import { extractStackInfoFromStackTrace, originalStackLimit } from './utils/stack-info.js';
|
|
5
6
|
import { useStateRefWithReactiveInput } from './utils/useStateRefWithReactiveInput.js';
|
|
7
|
+
/**
|
|
8
|
+
* This is needed because the `React.useMemo` call below, can sometimes be called multiple times 🤷,
|
|
9
|
+
* so we need to "cache" the fact that we've already started a span for this component.
|
|
10
|
+
* The map entry is being removed again in the `React.useEffect` call below.
|
|
11
|
+
*/
|
|
12
|
+
const spanAlreadyStartedCache = new Map();
|
|
6
13
|
export const useQuery = (query) => {
|
|
7
14
|
const { store } = useStore();
|
|
8
|
-
|
|
9
|
-
const initialResult = React.useMemo(() => query.run(), [query]);
|
|
10
|
-
// We know the query has a result by the time we use it; so we can synchronously populate a default state
|
|
11
|
-
const [valueRef, setValue] = useStateRefWithReactiveInput(initialResult);
|
|
12
|
-
const subscriptionInfo = React.useMemo(() => {
|
|
15
|
+
const stackInfo = React.useMemo(() => {
|
|
13
16
|
Error.stackTraceLimit = 10;
|
|
14
17
|
// eslint-disable-next-line unicorn/error-message
|
|
15
18
|
const stack = new Error().stack;
|
|
16
19
|
Error.stackTraceLimit = originalStackLimit;
|
|
17
|
-
return
|
|
20
|
+
return extractStackInfoFromStackTrace(stack);
|
|
18
21
|
}, []);
|
|
22
|
+
// The following `React.useMemo` and `React.useEffect` calls are used to start and end a span for the lifetime of this component.
|
|
23
|
+
const { span, otelContext } = React.useMemo(() => {
|
|
24
|
+
const existingSpan = spanAlreadyStartedCache.get(query);
|
|
25
|
+
if (existingSpan !== undefined)
|
|
26
|
+
return existingSpan;
|
|
27
|
+
const span = store.otel.tracer.startSpan(`LiveStore:useQuery:${query.label}`, { attributes: { label: query.label, stackInfo: JSON.stringify(stackInfo) } }, store.otel.queriesSpanContext);
|
|
28
|
+
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
29
|
+
spanAlreadyStartedCache.set(query, { span, otelContext });
|
|
30
|
+
return { span, otelContext };
|
|
31
|
+
}, [query, stackInfo, store.otel.queriesSpanContext, store.otel.tracer]);
|
|
32
|
+
const initialResult = React.useMemo(() => query.run(otelContext, {
|
|
33
|
+
_tag: 'react',
|
|
34
|
+
api: 'useQuery',
|
|
35
|
+
label: query.label,
|
|
36
|
+
stackInfo,
|
|
37
|
+
}), [otelContext, query, stackInfo]);
|
|
38
|
+
// We know the query has a result by the time we use it; so we can synchronously populate a default state
|
|
39
|
+
const [valueRef, setValue] = useStateRefWithReactiveInput(initialResult);
|
|
40
|
+
React.useEffect(() => () => {
|
|
41
|
+
spanAlreadyStartedCache.delete(query);
|
|
42
|
+
span.end();
|
|
43
|
+
}, [query, span]);
|
|
19
44
|
// Subscribe to future updates for this query
|
|
20
45
|
React.useEffect(() => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
unsub();
|
|
36
|
-
span.end();
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
}, [subscriptionInfo, query, setValue, store, valueRef]);
|
|
46
|
+
query.activeSubscriptions.add(stackInfo);
|
|
47
|
+
const unsub = store.subscribe(query, (newValue) => {
|
|
48
|
+
// NOTE: we return a reference to the result object within LiveStore;
|
|
49
|
+
// this implies that app code must not mutate the results, or else
|
|
50
|
+
// there may be weird reactivity bugs.
|
|
51
|
+
if (isEqual(newValue, valueRef.current) === false) {
|
|
52
|
+
setValue(newValue);
|
|
53
|
+
}
|
|
54
|
+
}, undefined, { label: query.label, otelContext });
|
|
55
|
+
return () => {
|
|
56
|
+
query.activeSubscriptions.delete(stackInfo);
|
|
57
|
+
unsub();
|
|
58
|
+
};
|
|
59
|
+
}, [stackInfo, query, setValue, store, valueRef, otelContext, span]);
|
|
40
60
|
return valueRef.current;
|
|
41
61
|
};
|
|
42
62
|
//# sourceMappingURL=useQuery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/react/useQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/react/useQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTemporaryQuery.d.ts","sourceRoot":"","sources":["../../src/react/useTemporaryQuery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAGvE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"useTemporaryQuery.d.ts","sourceRoot":"","sources":["../../src/react/useTemporaryQuery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAGvE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,iEAY7B,CAAA"}
|
|
@@ -6,6 +6,8 @@ import { useQuery } from './useQuery.js';
|
|
|
6
6
|
* Make sure `makeQuery` is a memoized function.
|
|
7
7
|
*/
|
|
8
8
|
export const useTemporaryQuery = (makeQuery) => {
|
|
9
|
+
// TODO cache the query outside of the `useMemo` since `useMemo` might be called multiple times
|
|
10
|
+
// also need to update the `useEffect` below https://stackoverflow.com/questions/66446642/react-usememo-memory-clean/77457605#77457605
|
|
9
11
|
const query = React.useMemo(() => makeQuery(), [makeQuery]);
|
|
10
12
|
React.useEffect(() => {
|
|
11
13
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTemporaryQuery.js","sourceRoot":"","sources":["../../src/react/useTemporaryQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAU,SAAyC,EAAW,EAAE;IAC/F,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAE3D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,OAAO,EAAE,CAAA;QACjB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"useTemporaryQuery.js","sourceRoot":"","sources":["../../src/react/useTemporaryQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAU,SAAyC,EAAW,EAAE;IAC/F,+FAA+F;IAC/F,sIAAsI;IACtI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAE3D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,OAAO,EAAE,CAAA;QACjB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxB,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
|
@@ -3,30 +3,28 @@ import type * as otel from '@opentelemetry/api';
|
|
|
3
3
|
import { BoundArray } from './bounded-collections.js';
|
|
4
4
|
export declare const NOT_REFRESHED_YET: unique symbol;
|
|
5
5
|
export type NOT_REFRESHED_YET = typeof NOT_REFRESHED_YET;
|
|
6
|
-
export type GetAtom = <T>(atom: Atom<T, any>, otelContext?: otel.Context) => T;
|
|
7
|
-
export type Ref<T> = {
|
|
6
|
+
export type GetAtom = <T>(atom: Atom<T, any, any>, otelContext?: otel.Context) => T;
|
|
7
|
+
export type Ref<T, TContext, TDebugRefreshReason extends Taggable> = {
|
|
8
8
|
_tag: 'ref';
|
|
9
9
|
id: string;
|
|
10
10
|
isDirty: false;
|
|
11
11
|
previousResult: T;
|
|
12
|
-
height: 0;
|
|
13
12
|
computeResult: () => T;
|
|
14
|
-
sub: Set<Atom<any,
|
|
15
|
-
super: Set<Atom<any,
|
|
13
|
+
sub: Set<Atom<any, TContext, TDebugRefreshReason>>;
|
|
14
|
+
super: Set<Atom<any, TContext, TDebugRefreshReason> | Effect>;
|
|
16
15
|
label?: string;
|
|
17
16
|
/** Container for meta information (e.g. the LiveStore Store) */
|
|
18
17
|
meta?: any;
|
|
19
18
|
equal: (a: T, b: T) => boolean;
|
|
20
19
|
};
|
|
21
|
-
type
|
|
20
|
+
export type Thunk<TResult, TContext, TDebugRefreshReason extends Taggable> = {
|
|
22
21
|
_tag: 'thunk';
|
|
23
22
|
id: string;
|
|
24
23
|
isDirty: boolean;
|
|
25
|
-
|
|
26
|
-
computeResult: (otelContext?: otel.Context) => TResult;
|
|
24
|
+
computeResult: (otelContext?: otel.Context, debugRefreshReason?: RefreshReasonWithGenericReasons<TDebugRefreshReason>) => TResult;
|
|
27
25
|
previousResult: TResult | NOT_REFRESHED_YET;
|
|
28
|
-
sub: Set<Atom<any, TContext>>;
|
|
29
|
-
super: Set<Atom<any, TContext> | Effect>;
|
|
26
|
+
sub: Set<Atom<any, TContext, TDebugRefreshReason>>;
|
|
27
|
+
super: Set<Atom<any, TContext, TDebugRefreshReason> | Effect>;
|
|
30
28
|
label?: string;
|
|
31
29
|
/** Container for meta information (e.g. the LiveStore Store) */
|
|
32
30
|
meta?: any;
|
|
@@ -34,27 +32,30 @@ type BaseThunk<TResult, TContext> = {
|
|
|
34
32
|
recomputations: number;
|
|
35
33
|
__getResult: any;
|
|
36
34
|
};
|
|
37
|
-
export type
|
|
38
|
-
export type Atom<T, TContext> = Ref<T> | Thunk<T, TContext>;
|
|
35
|
+
export type Atom<T, TContext, TDebugRefreshReason extends Taggable> = Ref<T, TContext, TDebugRefreshReason> | Thunk<T, TContext, TDebugRefreshReason>;
|
|
39
36
|
export type Effect = {
|
|
40
37
|
_tag: 'effect';
|
|
41
38
|
id: string;
|
|
42
39
|
doEffect: (otelContext?: otel.Context) => void;
|
|
43
|
-
sub: Set<Atom<any, TODO>>;
|
|
40
|
+
sub: Set<Atom<any, TODO, TODO>>;
|
|
41
|
+
label?: string;
|
|
44
42
|
};
|
|
45
43
|
export type Taggable<T extends string = string> = {
|
|
46
44
|
_tag: T;
|
|
47
45
|
};
|
|
46
|
+
export type DebugThunkInfo<T extends string = string> = {
|
|
47
|
+
_tag: T;
|
|
48
|
+
durationMs: number;
|
|
49
|
+
};
|
|
48
50
|
export type ReactiveGraphOptions = {
|
|
49
51
|
effectsWrapper?: (runEffects: () => void) => void;
|
|
50
52
|
};
|
|
51
|
-
export type AtomDebugInfo<TDebugThunkInfo extends
|
|
53
|
+
export type AtomDebugInfo<TDebugThunkInfo extends DebugThunkInfo> = {
|
|
52
54
|
atom: SerializedAtom;
|
|
53
55
|
resultChanged: boolean;
|
|
54
|
-
durationMs: number;
|
|
55
56
|
debugInfo: TDebugThunkInfo;
|
|
56
57
|
};
|
|
57
|
-
export type RefreshDebugInfo<TDebugRefreshReason extends Taggable, TDebugThunkInfo extends
|
|
58
|
+
export type RefreshDebugInfo<TDebugRefreshReason extends Taggable, TDebugThunkInfo extends DebugThunkInfo> = {
|
|
58
59
|
/** Currently only used for easier handling in React (e.g. as key) */
|
|
59
60
|
id: string;
|
|
60
61
|
reason: TDebugRefreshReason;
|
|
@@ -68,16 +69,13 @@ export type RefreshDebugInfo<TDebugRefreshReason extends Taggable, TDebugThunkIn
|
|
|
68
69
|
export type RefreshReasonWithGenericReasons<T extends Taggable> = T | {
|
|
69
70
|
_tag: 'makeThunk';
|
|
70
71
|
label?: string;
|
|
71
|
-
} | {
|
|
72
|
-
_tag: 'makeEffect';
|
|
73
|
-
label?: string;
|
|
74
72
|
} | {
|
|
75
73
|
_tag: 'unknown';
|
|
76
74
|
};
|
|
77
75
|
export declare const unknownRefreshReason: () => {
|
|
78
76
|
_tag: "unknown";
|
|
79
77
|
};
|
|
80
|
-
export type SerializedAtom = Readonly<PrettifyFlat<Pick<Atom<unknown,
|
|
78
|
+
export type SerializedAtom = Readonly<PrettifyFlat<Pick<Atom<unknown, unknown, any>, '_tag' | 'id' | 'label' | 'meta'> & {
|
|
81
79
|
sub: string[];
|
|
82
80
|
super: string[];
|
|
83
81
|
}>>;
|
|
@@ -85,50 +83,42 @@ export type SerializedEffect = Readonly<PrettifyFlat<Pick<Effect, '_tag' | 'id'>
|
|
|
85
83
|
type ReactiveGraphSnapshot = {
|
|
86
84
|
readonly atoms: SerializedAtom[];
|
|
87
85
|
};
|
|
88
|
-
export declare class ReactiveGraph<TDebugRefreshReason extends Taggable, TDebugThunkInfo extends
|
|
89
|
-
readonly atoms: Set<Atom<any, TContext>>;
|
|
86
|
+
export declare class ReactiveGraph<TDebugRefreshReason extends Taggable, TDebugThunkInfo extends DebugThunkInfo, TContext = {}> {
|
|
87
|
+
readonly atoms: Set<Atom<any, TContext, TDebugRefreshReason>>;
|
|
90
88
|
effectsWrapper: (runEffects: () => void) => void;
|
|
91
89
|
context: TContext | undefined;
|
|
92
90
|
debugRefreshInfos: BoundArray<RefreshDebugInfo<RefreshReasonWithGenericReasons<TDebugRefreshReason>, TDebugThunkInfo>>;
|
|
91
|
+
currentDebugRefresh: {
|
|
92
|
+
refreshedAtoms: AtomDebugInfo<TDebugThunkInfo>[];
|
|
93
|
+
startMs: DOMHighResTimeStamp;
|
|
94
|
+
} | undefined;
|
|
93
95
|
constructor(options: ReactiveGraphOptions);
|
|
94
96
|
makeRef<T>(val: T, options?: {
|
|
95
97
|
label?: string;
|
|
96
98
|
meta?: unknown;
|
|
97
99
|
equal?: (a: T, b: T) => boolean;
|
|
98
|
-
}): Ref<T>;
|
|
99
|
-
makeThunk<T>(
|
|
100
|
+
}): Ref<T, TContext, TDebugRefreshReason>;
|
|
101
|
+
makeThunk<T>(getResult: (get: GetAtom, setDebugInfo: (debugInfo: TDebugThunkInfo) => void, ctx: TContext, otelContext: otel.Context | undefined) => T, options?: {
|
|
100
102
|
label?: string;
|
|
101
103
|
meta?: any;
|
|
102
104
|
equal?: (a: T, b: T) => boolean;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
} | undefined): Thunk<T, TContext>;
|
|
106
|
-
destroy(node: Atom<any, TContext> | Effect): void;
|
|
105
|
+
} | undefined): Thunk<T, TContext, TDebugRefreshReason>;
|
|
106
|
+
destroy(node: Atom<any, TContext, TDebugRefreshReason> | Effect): void;
|
|
107
107
|
makeEffect(doEffect: (get: GetAtom, otelContext?: otel.Context) => void, options?: {
|
|
108
108
|
label?: string;
|
|
109
|
-
debugRefreshReason?: RefreshReasonWithGenericReasons<TDebugRefreshReason>;
|
|
110
109
|
} | undefined): Effect;
|
|
111
|
-
setRef<T>(ref: Ref<T>, val: T, options?: {
|
|
110
|
+
setRef<T>(ref: Ref<T, TContext, TDebugRefreshReason>, val: T, options?: {
|
|
112
111
|
debugRefreshReason?: TDebugRefreshReason;
|
|
113
112
|
otelContext?: otel.Context;
|
|
114
113
|
} | undefined): void;
|
|
115
|
-
setRefs<T>(refs: [Ref<T>, T][], options?: {
|
|
114
|
+
setRefs<T>(refs: [Ref<T, TContext, TDebugRefreshReason>, T][], options?: {
|
|
116
115
|
debugRefreshReason?: TDebugRefreshReason;
|
|
117
116
|
otelContext?: otel.Context;
|
|
118
117
|
} | undefined): void;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
* At the end of the refresh, we run any effects that were scheduled.
|
|
123
|
-
*
|
|
124
|
-
* @param roots Root atoms to start the refresh from
|
|
125
|
-
*/
|
|
126
|
-
label(atom: Atom<any, TContext> | Effect): string;
|
|
127
|
-
addEdge(superComp: Atom<any, TContext> | Effect, subComp: Atom<any, TContext>): void;
|
|
128
|
-
removeEdge(superComp: Atom<any, TContext> | Effect, subComp: Atom<any, TContext>): void;
|
|
129
|
-
updateAtomHeight(atom: Atom<any, TContext> | Effect): 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;
|
|
130
121
|
private getSnapshot;
|
|
131
|
-
get atomsCount(): number;
|
|
132
122
|
}
|
|
133
123
|
export {};
|
|
134
124
|
//# sourceMappingURL=reactive.d.ts.map
|
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;AAGrD,eAAO,MAAM,iBAAiB,eAAkC,CAAA;AAChE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAA;AAExD,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
|