signalium 1.0.2 → 1.1.1
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/.turbo/turbo-build.log +3 -3
- package/CHANGELOG.md +18 -0
- package/dist/cjs/config.d.ts +2 -2
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/hooks.d.ts.map +1 -1
- package/dist/cjs/hooks.js +14 -2
- package/dist/cjs/hooks.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internals/async.d.ts +1 -1
- package/dist/cjs/internals/async.d.ts.map +1 -1
- package/dist/cjs/internals/async.js +20 -15
- package/dist/cjs/internals/async.js.map +1 -1
- package/dist/cjs/internals/connect.d.ts.map +1 -1
- package/dist/cjs/internals/connect.js +6 -0
- package/dist/cjs/internals/connect.js.map +1 -1
- package/dist/cjs/internals/contexts.d.ts +9 -2
- package/dist/cjs/internals/contexts.d.ts.map +1 -1
- package/dist/cjs/internals/contexts.js +37 -3
- package/dist/cjs/internals/contexts.js.map +1 -1
- package/dist/cjs/internals/derived.d.ts +15 -5
- package/dist/cjs/internals/derived.d.ts.map +1 -1
- package/dist/cjs/internals/derived.js +11 -11
- package/dist/cjs/internals/derived.js.map +1 -1
- package/dist/cjs/internals/get.js +2 -2
- package/dist/cjs/internals/get.js.map +1 -1
- package/dist/cjs/internals/scheduling.d.ts +2 -0
- package/dist/cjs/internals/scheduling.d.ts.map +1 -1
- package/dist/cjs/internals/scheduling.js +16 -1
- package/dist/cjs/internals/scheduling.js.map +1 -1
- package/dist/cjs/internals/state.d.ts +2 -2
- package/dist/cjs/internals/state.d.ts.map +1 -1
- package/dist/cjs/internals/utils/equals.d.ts +2 -0
- package/dist/cjs/internals/utils/equals.d.ts.map +1 -1
- package/dist/cjs/internals/utils/equals.js +5 -3
- package/dist/cjs/internals/utils/equals.js.map +1 -1
- package/dist/cjs/react/context.d.ts.map +1 -1
- package/dist/cjs/react/context.js +5 -0
- package/dist/cjs/react/context.js.map +1 -1
- package/dist/cjs/react/provider.d.ts +2 -3
- package/dist/cjs/react/provider.d.ts.map +1 -1
- package/dist/cjs/react/provider.js +2 -6
- package/dist/cjs/react/provider.js.map +1 -1
- package/dist/cjs/react/rendering.d.ts +2 -0
- package/dist/cjs/react/rendering.d.ts.map +1 -0
- package/dist/cjs/react/rendering.js +25 -0
- package/dist/cjs/react/rendering.js.map +1 -0
- package/dist/cjs/react/signal-value.d.ts +1 -1
- package/dist/cjs/react/signal-value.d.ts.map +1 -1
- package/dist/cjs/react/signal-value.js +4 -53
- package/dist/cjs/react/signal-value.js.map +1 -1
- package/dist/cjs/react/state.d.ts +2 -2
- package/dist/cjs/react/state.d.ts.map +1 -1
- package/dist/cjs/react/state.js.map +1 -1
- package/dist/cjs/types.d.ts +13 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/config.d.ts +2 -2
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/hooks.d.ts.map +1 -1
- package/dist/esm/hooks.js +14 -2
- package/dist/esm/hooks.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internals/async.d.ts +1 -1
- package/dist/esm/internals/async.d.ts.map +1 -1
- package/dist/esm/internals/async.js +21 -16
- package/dist/esm/internals/async.js.map +1 -1
- package/dist/esm/internals/connect.d.ts.map +1 -1
- package/dist/esm/internals/connect.js +6 -0
- package/dist/esm/internals/connect.js.map +1 -1
- package/dist/esm/internals/contexts.d.ts +9 -2
- package/dist/esm/internals/contexts.d.ts.map +1 -1
- package/dist/esm/internals/contexts.js +35 -3
- package/dist/esm/internals/contexts.js.map +1 -1
- package/dist/esm/internals/derived.d.ts +15 -5
- package/dist/esm/internals/derived.d.ts.map +1 -1
- package/dist/esm/internals/derived.js +11 -11
- package/dist/esm/internals/derived.js.map +1 -1
- package/dist/esm/internals/get.js +2 -2
- package/dist/esm/internals/get.js.map +1 -1
- package/dist/esm/internals/scheduling.d.ts +2 -0
- package/dist/esm/internals/scheduling.d.ts.map +1 -1
- package/dist/esm/internals/scheduling.js +14 -0
- package/dist/esm/internals/scheduling.js.map +1 -1
- package/dist/esm/internals/state.d.ts +2 -2
- package/dist/esm/internals/state.d.ts.map +1 -1
- package/dist/esm/internals/utils/equals.d.ts +2 -0
- package/dist/esm/internals/utils/equals.d.ts.map +1 -1
- package/dist/esm/internals/utils/equals.js +2 -2
- package/dist/esm/internals/utils/equals.js.map +1 -1
- package/dist/esm/react/context.d.ts.map +1 -1
- package/dist/esm/react/context.js +5 -0
- package/dist/esm/react/context.js.map +1 -1
- package/dist/esm/react/provider.d.ts +2 -3
- package/dist/esm/react/provider.d.ts.map +1 -1
- package/dist/esm/react/provider.js +3 -7
- package/dist/esm/react/provider.js.map +1 -1
- package/dist/esm/react/rendering.d.ts +2 -0
- package/dist/esm/react/rendering.d.ts.map +1 -0
- package/dist/esm/react/rendering.js +19 -0
- package/dist/esm/react/rendering.js.map +1 -0
- package/dist/esm/react/signal-value.d.ts +1 -1
- package/dist/esm/react/signal-value.d.ts.map +1 -1
- package/dist/esm/react/signal-value.js +2 -18
- package/dist/esm/react/signal-value.js.map +1 -1
- package/dist/esm/react/state.d.ts +2 -2
- package/dist/esm/react/state.d.ts.map +1 -1
- package/dist/esm/react/state.js.map +1 -1
- package/dist/esm/types.d.ts +13 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/context.test.ts +103 -1
- package/src/__tests__/gc.test.ts +256 -0
- package/src/__tests__/utils/instrumented-hooks.ts +8 -11
- package/src/config.ts +5 -3
- package/src/hooks.ts +17 -3
- package/src/index.ts +8 -1
- package/src/internals/async.ts +13 -8
- package/src/internals/connect.ts +8 -0
- package/src/internals/contexts.ts +45 -5
- package/src/internals/derived.ts +25 -16
- package/src/internals/get.ts +2 -2
- package/src/internals/scheduling.ts +20 -0
- package/src/internals/state.ts +3 -3
- package/src/internals/utils/equals.ts +2 -2
- package/src/react/__tests__/contexts.test.tsx +84 -2
- package/src/react/context.ts +6 -0
- package/src/react/provider.tsx +4 -12
- package/src/react/rendering.ts +25 -0
- package/src/react/signal-value.ts +3 -26
- package/src/react/state.ts +3 -3
- package/src/types.ts +15 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scheduling.js","sourceRoot":"","sources":["../../../src/internals/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"scheduling.js","sourceRoot":"","sources":["../../../src/internals/scheduling.ts"],"names":[],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import { SignalEquals, SignalListener, SignalOptions,
|
2
|
-
export declare class StateSignal<T> implements
|
1
|
+
import { SignalEquals, SignalListener, SignalOptions, StateSignal as IStateSignal } from '../types.js';
|
2
|
+
export declare class StateSignal<T> implements IStateSignal<T> {
|
3
3
|
private _value;
|
4
4
|
private _equals;
|
5
5
|
private _subs;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/internals/state.ts"],"names":[],"mappings":"AACA,OAAO,
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/internals/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AASvG,qBAAa,WAAW,CAAC,CAAC,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,KAAK,CAAiE;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,UAAU,CAAoC;gBAE1C,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,YAAY,CAAC,CAAC,CAAqB,EAAE,IAAI,GAAE,MAAgB;IAOzF,GAAG,IAAI,CAAC;IAmBR,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;IAI1B,IAAI,IAAI,CAAC;IAIT,GAAG,CAAC,KAAK,EAAE,CAAC;IAuBZ,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI;CAWlD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,QAUpD;AAID,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,YAAY,EAAE,CAAC,EACf,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,GACnD,WAAW,CAAC,CAAC,CAAC,CAIhB"}
|
@@ -1,3 +1,5 @@
|
|
1
1
|
import { SignalEquals } from '../../types.js';
|
2
|
+
export declare const DEFAULT_EQUALS: SignalEquals<unknown>;
|
3
|
+
export declare const FALSE_EQUALS: SignalEquals<unknown>;
|
2
4
|
export declare const equalsFrom: <T>(equals: SignalEquals<T> | false | undefined) => SignalEquals<T>;
|
3
5
|
//# sourceMappingURL=equals.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../../../src/internals/utils/equals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
1
|
+
{"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../../../src/internals/utils/equals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,cAAc,EAAE,YAAY,CAAC,OAAO,CAAqB,CAAC;AACvE,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,OAAO,CAAe,CAAC;AAE/D,eAAO,MAAM,UAAU,GAAI,CAAC,UAAU,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,SAAS,KAAG,YAAY,CAAC,CAAC,CAMzF,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../../src/internals/utils/equals.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../../src/internals/utils/equals.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,YAAY,GAA0B,GAAG,EAAE,CAAC,KAAK,CAAC;AAE/D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,MAA2C,EAAmB,EAAE;IAC5F,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,IAAI,cAAc,CAAC;AAClC,CAAC,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/react/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/react/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,eAAO,MAAM,YAAY,kDAAoD,CAAC;AAE9E,wBAAgB,QAAQ,4BAOvB"}
|
@@ -1,6 +1,11 @@
|
|
1
1
|
import { createContext, useContext } from 'react';
|
2
|
+
import { isRendering } from './rendering.js';
|
2
3
|
export const ScopeContext = createContext(undefined);
|
3
4
|
export function useScope() {
|
5
|
+
if (!isRendering()) {
|
6
|
+
return undefined;
|
7
|
+
}
|
8
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
4
9
|
return useContext(ScopeContext);
|
5
10
|
}
|
6
11
|
//# sourceMappingURL=context.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/react/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/react/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA0B,SAAS,CAAC,CAAC;AAE9E,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sDAAsD;IACtD,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC"}
|
@@ -1,8 +1,7 @@
|
|
1
1
|
import { ContextPair } from '../internals/contexts.js';
|
2
|
-
export declare function ContextProvider<C extends unknown[]>({ children, contexts, inherit,
|
2
|
+
export declare function ContextProvider<C extends unknown[]>({ children, contexts, inherit, }: {
|
3
3
|
children: React.ReactNode;
|
4
|
-
contexts
|
4
|
+
contexts?: [...ContextPair<C>] | [];
|
5
5
|
inherit?: boolean;
|
6
|
-
root?: boolean;
|
7
6
|
}): import("react/jsx-runtime").JSX.Element;
|
8
7
|
//# sourceMappingURL=provider.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/react/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAe,WAAW,
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/react/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAe,WAAW,EAA2B,MAAM,0BAA0B,CAAC;AAE7F,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,EACnD,QAAQ,EACR,QAAa,EACb,OAAc,GACf,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,2CAKA"}
|
@@ -1,13 +1,9 @@
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
2
2
|
import { useContext } from 'react';
|
3
3
|
import { ScopeContext } from './context.js';
|
4
|
-
import { SignalScope } from '../internals/contexts.js';
|
5
|
-
export function ContextProvider({ children, contexts
|
6
|
-
|
7
|
-
// useEffect(() => )
|
8
|
-
// return <ScopeContext.Provider value={scope}>{children}</ScopeContext.Provider>;
|
9
|
-
// }
|
10
|
-
const parentScope = useContext(ScopeContext);
|
4
|
+
import { ROOT_SCOPE, SignalScope } from '../internals/contexts.js';
|
5
|
+
export function ContextProvider({ children, contexts = [], inherit = true, }) {
|
6
|
+
const parentScope = useContext(ScopeContext) ?? ROOT_SCOPE;
|
11
7
|
const scope = new SignalScope(contexts, inherit ? parentScope : undefined);
|
12
8
|
return _jsx(ScopeContext.Provider, { value: scope, children: children });
|
13
9
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/react/provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAA4B,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/react/provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAA4B,UAAU,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE7F,MAAM,UAAU,eAAe,CAAsB,EACnD,QAAQ,EACR,QAAQ,GAAG,EAAE,EACb,OAAO,GAAG,IAAI,GAKf;IACC,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,QAA6C,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEhH,OAAO,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAyB,CAAC;AACjF,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"rendering.d.ts","sourceRoot":"","sources":["../../../src/react/rendering.ts"],"names":[],"mappings":"AAcA,wBAAgB,WAAW,YAU1B"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
// This is a private React internal that we need to access to check if we are rendering.
|
3
|
+
// There is no other consistent way to check if we are rendering in both development
|
4
|
+
// and production, and it doesn't appear that the React team wants to add one. This
|
5
|
+
// should be checked on every major React version upgrade.
|
6
|
+
const REACT_INTERNALS = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ||
|
7
|
+
React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE ||
|
8
|
+
React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
|
9
|
+
const IS_REACT_18 = !!REACT_INTERNALS.ReactCurrentDispatcher;
|
10
|
+
const ReactCurrentDispatcher = REACT_INTERNALS.ReactCurrentDispatcher || REACT_INTERNALS;
|
11
|
+
export function isRendering() {
|
12
|
+
const dispatcher = IS_REACT_18 ? ReactCurrentDispatcher.current : ReactCurrentDispatcher.H;
|
13
|
+
return (!!dispatcher &&
|
14
|
+
// dispatcher can be in a state where it's defined, but all hooks are invalid to call.
|
15
|
+
// Only way we can tell is that if they are invalid, they will all be equal to each other
|
16
|
+
// (e.g. because it's the function that throws an error)
|
17
|
+
dispatcher.useState !== dispatcher.useEffect);
|
18
|
+
}
|
19
|
+
//# sourceMappingURL=rendering.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"rendering.js","sourceRoot":"","sources":["../../../src/react/rendering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,wFAAwF;AACxF,oFAAoF;AACpF,mFAAmF;AACnF,0DAA0D;AAC1D,MAAM,eAAe,GAClB,KAAa,CAAC,kDAAkD;IAChE,KAAa,CAAC,+DAA+D;IAC7E,KAAa,CAAC,+DAA+D,CAAC;AAEjF,MAAM,WAAW,GAAG,CAAC,CAAC,eAAe,CAAC,sBAAsB,CAAC;AAC7D,MAAM,sBAAsB,GAAG,eAAe,CAAC,sBAAsB,IAAI,eAAe,CAAC;AAEzF,MAAM,UAAU,WAAW;IACzB,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE3F,OAAO,CACL,CAAC,CAAC,UAAU;QACZ,sFAAsF;QACtF,yFAAyF;QACzF,wDAAwD;QACxD,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,SAAS,CAC7C,CAAC;AACJ,CAAC"}
|
@@ -2,5 +2,5 @@ import type { DerivedSignal } from '../internals/derived.js';
|
|
2
2
|
import type { StateSignal } from '../internals/state.js';
|
3
3
|
import type { ReactiveValue } from '../types.js';
|
4
4
|
export declare function useStateSignal<T>(signal: StateSignal<T>): T;
|
5
|
-
export declare function useDerivedSignal<T>(signal: DerivedSignal<T,
|
5
|
+
export declare function useDerivedSignal<T, Args extends unknown[]>(signal: DerivedSignal<T, Args>): ReactiveValue<T>;
|
6
6
|
//# sourceMappingURL=signal-value.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signal-value.d.ts","sourceRoot":"","sources":["../../../src/react/signal-value.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
1
|
+
{"version":3,"file":"signal-value.d.ts","sourceRoot":"","sources":["../../../src/react/signal-value.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAU3D;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CA4B5G"}
|
@@ -1,24 +1,8 @@
|
|
1
1
|
/* eslint-disable react-hooks/rules-of-hooks */
|
2
|
-
import
|
2
|
+
import { useCallback, useSyncExternalStore } from 'react';
|
3
3
|
import { isReactivePromise } from '../internals/utils/type-utils.js';
|
4
4
|
import { isReactiveSubscription } from '../internals/async.js';
|
5
|
-
|
6
|
-
// There is no other consistent way to check if we are rendering in both development
|
7
|
-
// and production, and it doesn't appear that the React team wants to add one. This
|
8
|
-
// should be checked on every major React version upgrade.
|
9
|
-
const REACT_INTERNALS = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ||
|
10
|
-
React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE ||
|
11
|
-
React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
|
12
|
-
const IS_REACT_18 = !!REACT_INTERNALS.ReactCurrentDispatcher;
|
13
|
-
const ReactCurrentDispatcher = REACT_INTERNALS.ReactCurrentDispatcher || REACT_INTERNALS;
|
14
|
-
function isRendering() {
|
15
|
-
const dispatcher = IS_REACT_18 ? ReactCurrentDispatcher.current : ReactCurrentDispatcher.H;
|
16
|
-
return (!!dispatcher &&
|
17
|
-
// dispatcher can be in a state where it's defined, but all hooks are invalid to call.
|
18
|
-
// Only way we can tell is that if they are invalid, they will all be equal to each other
|
19
|
-
// (e.g. because it's the function that throws an error)
|
20
|
-
dispatcher.useState !== dispatcher.useEffect);
|
21
|
-
}
|
5
|
+
import { isRendering } from './rendering.js';
|
22
6
|
export function useStateSignal(signal) {
|
23
7
|
if (!isRendering()) {
|
24
8
|
return signal.peek();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signal-value.js","sourceRoot":"","sources":["../../../src/react/signal-value.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,
|
1
|
+
{"version":3,"file":"signal-value.js","sourceRoot":"","sources":["../../../src/react/signal-value.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAI1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,UAAU,cAAc,CAAI,MAAsB;IACtD,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,oBAAoB,CACzB,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EACzE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EACnB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAA4B,MAA8B;IACxF,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,oBAAoB,CAChC,MAAM,CAAC,eAAe,EAAE,EACxB,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAClB,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CACnB,CAAC;IAEF,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,yBAAyB;IACzB,EAAE;IACF,4EAA4E;IAC5E,2EAA2E;IAC3E,qCAAqC;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5E,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAkC,CAAC,CAAC;QACtE,CAAC;QAED,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,KAAyB,CAAC;AACnC,CAAC"}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import { SignalOptions,
|
2
|
-
export declare function useStateSignal<T>(value: T, opts?: SignalOptions<T, unknown[]>):
|
1
|
+
import { SignalOptions, StateSignal } from '../types.js';
|
2
|
+
export declare function useStateSignal<T>(value: T, opts?: SignalOptions<T, unknown[]>): StateSignal<T>;
|
3
3
|
//# sourceMappingURL=state.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/react/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/react/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAQ9F"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/react/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,UAAU,cAAc,CAAI,KAAQ,EAAE,IAAkC;IAC5E,MAAM,GAAG,GAAG,MAAM,
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/react/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,UAAU,cAAc,CAAI,KAAQ,EAAE,IAAkC;IAC5E,MAAM,GAAG,GAAG,MAAM,CAA6B,SAAS,CAAC,CAAC;IAE1D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC"}
|
package/dist/esm/types.d.ts
CHANGED
@@ -3,9 +3,15 @@ export interface Signal<T = unknown> {
|
|
3
3
|
get(): T;
|
4
4
|
addListener(listener: SignalListener): () => void;
|
5
5
|
}
|
6
|
-
export interface
|
6
|
+
export interface StateSignal<T> extends Signal<T> {
|
7
7
|
set(value: T): void;
|
8
|
+
peek(): T;
|
9
|
+
update(updater: (value: T) => T): void;
|
8
10
|
}
|
11
|
+
/**
|
12
|
+
* @deprecated Use `StateSignal` instead.
|
13
|
+
*/
|
14
|
+
export type WriteableSignal<T> = StateSignal<T>;
|
9
15
|
export type SignalEquals<T> = (prev: T, next: T) => boolean;
|
10
16
|
export type SignalListener = () => void;
|
11
17
|
export type SignalSubscription = {
|
@@ -24,6 +30,12 @@ export interface SignalOptions<T, Args extends unknown[]> {
|
|
24
30
|
desc?: string;
|
25
31
|
scope?: SignalScope;
|
26
32
|
paramKey?: (...args: Args) => string;
|
33
|
+
/**
|
34
|
+
* Called when signal's watchCount reaches 0.
|
35
|
+
* Return `true` to allow GC, `false` to prevent it.
|
36
|
+
* If not provided, defaults to always allowing GC.
|
37
|
+
*/
|
38
|
+
shouldGC?: (signal: object, value: T, args: Args) => boolean;
|
27
39
|
}
|
28
40
|
export interface SignalOptionsWithInit<T, Args extends unknown[]> extends SignalOptions<T, Args> {
|
29
41
|
initValue: T extends Promise<infer U> ? U : T extends Generator<any, infer U, any> ? U : T;
|
package/dist/esm/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,OAAO;IACjC,GAAG,IAAI,CAAC,CAAC;IACT,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,OAAO;IACjC,GAAG,IAAI,CAAC,CAAC;IACT,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC/C,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,IAAI,IAAI,CAAC,CAAC;IACV,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAEhD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,IAAI,IAAI,CAAC;IAChB,WAAW,CAAC,IAAI,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAC/B,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,KACxB,kBAAkB,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAE7D,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,IAAI,SAAS,OAAO,EAAE;IACtD,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IAErC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,EAAE,IAAI,SAAS,OAAO,EAAE,CAAE,SAAQ,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC;IAC9F,SAAS,EAAE,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC5F;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IACrF,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACxD,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IAEf,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IAEjB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAE,SAAQ,mBAAmB,CAAC,CAAC,CAAC;IACvE,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,CAAE,SAAQ,mBAAmB,CAAC,CAAC,CAAC;IACrE,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAErF,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,SAAS,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG;IACzF,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAExE,MAAM,MAAM,aAAa,CAAC,CAAC,IAEzB,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,GACvC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GACrB,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GACxB,eAAe,CAAC,CAAC,CAAC,GAClB,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAC/B,eAAe,CAAC,CAAC,CAAC,GAClB,CAAC,CAAC;AAKZ,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC9B,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,GACvC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GACrB,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GACxB,oBAAoB,CAAC,CAAC,CAAC,GACvB,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAC/B,oBAAoB,CAAC,CAAC,CAAC,GACvB,CAAC,CAAC"}
|
package/package.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { describe, expect, test } from 'vitest';
|
2
|
-
import { createContext, useContext, withContexts, state } from '../index.js';
|
2
|
+
import { createContext, useContext, withContexts, state, setRootContexts } from '../index.js';
|
3
3
|
import { permute } from './utils/permute.js';
|
4
4
|
import { nextTick } from './utils/async.js';
|
5
5
|
import { reactive } from './utils/instrumented-hooks.js';
|
@@ -11,6 +11,108 @@ describe('contexts', () => {
|
|
11
11
|
}).toThrow('useContext must be used within a signal hook');
|
12
12
|
});
|
13
13
|
|
14
|
+
test('setRootContexts sets contexts at the root level', () => {
|
15
|
+
const value = state('Hello');
|
16
|
+
const context = createContext(value);
|
17
|
+
const override = state('Hey');
|
18
|
+
|
19
|
+
// Create a reactive function that uses the context
|
20
|
+
const derived = reactive(() => `${useContext(context).get()}, World`);
|
21
|
+
|
22
|
+
// Initially should use default value
|
23
|
+
expect(derived()).toBe('Hello, World');
|
24
|
+
|
25
|
+
// Set root contexts
|
26
|
+
setRootContexts([[context, override]]);
|
27
|
+
|
28
|
+
// Should now use the override value
|
29
|
+
expect(derived()).toBe('Hey, World');
|
30
|
+
|
31
|
+
// Changes to override should be reflected
|
32
|
+
override.set('Hi');
|
33
|
+
expect(derived()).toBe('Hi, World');
|
34
|
+
});
|
35
|
+
|
36
|
+
test('setRootContexts with multiple contexts', () => {
|
37
|
+
const value1 = state('Hello');
|
38
|
+
const value2 = state('World');
|
39
|
+
const context1 = createContext(value1);
|
40
|
+
const context2 = createContext(value2);
|
41
|
+
const override1 = state('Hey');
|
42
|
+
const override2 = state('There');
|
43
|
+
|
44
|
+
const derived = reactive(() => `${useContext(context1).get()}, ${useContext(context2).get()}`);
|
45
|
+
|
46
|
+
// Initially should use default values
|
47
|
+
expect(derived()).toBe('Hello, World');
|
48
|
+
|
49
|
+
// Set multiple root contexts
|
50
|
+
setRootContexts([
|
51
|
+
[context1, override1],
|
52
|
+
[context2, override2],
|
53
|
+
]);
|
54
|
+
|
55
|
+
expect(derived()).toBe('Hey, There');
|
56
|
+
|
57
|
+
// Changes to overrides should be reflected
|
58
|
+
override1.set('Hi');
|
59
|
+
override2.set('Everyone');
|
60
|
+
expect(derived()).toBe('Hi, Everyone');
|
61
|
+
|
62
|
+
// Changes to original values should not affect the result
|
63
|
+
value1.set('Bye');
|
64
|
+
value2.set('Earth');
|
65
|
+
expect(derived()).toBe('Hi, Everyone');
|
66
|
+
});
|
67
|
+
|
68
|
+
test('withContexts inherits from root scope', () => {
|
69
|
+
const defaultValue1 = state('default1');
|
70
|
+
const defaultValue2 = state('default2');
|
71
|
+
const ctx1 = createContext(defaultValue1);
|
72
|
+
const ctx2 = createContext(defaultValue2);
|
73
|
+
const rootOverride1 = state('root1');
|
74
|
+
const rootOverride2 = state('root2');
|
75
|
+
|
76
|
+
// Set root contexts
|
77
|
+
setRootContexts([
|
78
|
+
[ctx1, rootOverride1],
|
79
|
+
[ctx2, rootOverride2],
|
80
|
+
]);
|
81
|
+
|
82
|
+
// Create a reactive function that uses both contexts
|
83
|
+
const derived = reactive(() => `${useContext(ctx1).get()}-${useContext(ctx2).get()}`);
|
84
|
+
|
85
|
+
// Should inherit from root scope when no local overrides
|
86
|
+
const result1 = withContexts([], () => derived());
|
87
|
+
expect(result1).toBe('root1-root2');
|
88
|
+
|
89
|
+
// Should inherit from root scope for unoverridden contexts
|
90
|
+
const localOverride1 = state('local1');
|
91
|
+
const result2 = withContexts([[ctx1, localOverride1]], () => derived());
|
92
|
+
expect(result2).toBe('local1-root2');
|
93
|
+
|
94
|
+
// Should use local overrides when provided
|
95
|
+
const localOverride2 = state('local2');
|
96
|
+
const result3 = withContexts(
|
97
|
+
[
|
98
|
+
[ctx1, localOverride1],
|
99
|
+
[ctx2, localOverride2],
|
100
|
+
],
|
101
|
+
() => derived(),
|
102
|
+
);
|
103
|
+
expect(result3).toBe('local1-local2');
|
104
|
+
|
105
|
+
// Changes to root contexts should be reflected in inherited contexts
|
106
|
+
rootOverride1.set('updated-root1');
|
107
|
+
rootOverride2.set('updated-root2');
|
108
|
+
|
109
|
+
const result4 = withContexts([], () => derived());
|
110
|
+
expect(result4).toBe('updated-root1-updated-root2');
|
111
|
+
|
112
|
+
const result5 = withContexts([[ctx1, localOverride1]], () => derived());
|
113
|
+
expect(result5).toBe('local1-updated-root2');
|
114
|
+
});
|
115
|
+
|
14
116
|
test('async computed maintains context ownership across await boundaries', async () => {
|
15
117
|
const ctx = createContext('default');
|
16
118
|
|