@assistant-ui/tap 0.4.5 → 0.5.0
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 +20 -17
- package/dist/core/ResourceFiber.d.ts +2 -2
- package/dist/core/ResourceFiber.d.ts.map +1 -1
- package/dist/core/ResourceFiber.js +11 -9
- package/dist/core/ResourceFiber.js.map +1 -1
- package/dist/core/createResourceRoot.d.ts +6 -0
- package/dist/core/createResourceRoot.d.ts.map +1 -0
- package/dist/core/createResourceRoot.js +32 -0
- package/dist/core/createResourceRoot.js.map +1 -0
- package/dist/core/helpers/callResourceFn.d.ts.map +1 -0
- package/dist/core/helpers/callResourceFn.js.map +1 -0
- package/dist/core/helpers/commit.d.ts +4 -0
- package/dist/core/helpers/commit.d.ts.map +1 -0
- package/dist/core/{commit.js → helpers/commit.js} +2 -2
- package/dist/core/helpers/commit.js.map +1 -0
- package/dist/core/helpers/env.d.ts.map +1 -0
- package/dist/core/helpers/env.js +3 -0
- package/dist/core/helpers/env.js.map +1 -0
- package/dist/core/{execution-context.d.ts → helpers/execution-context.d.ts} +1 -1
- package/dist/core/helpers/execution-context.d.ts.map +1 -0
- package/dist/core/helpers/execution-context.js.map +1 -0
- package/dist/core/helpers/root.d.ts +8 -0
- package/dist/core/helpers/root.d.ts.map +1 -0
- package/dist/core/helpers/root.js +52 -0
- package/dist/core/helpers/root.js.map +1 -0
- package/dist/core/resource.js +1 -1
- package/dist/core/resource.js.map +1 -1
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +12 -1
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/types.d.ts +25 -7
- package/dist/core/types.d.ts.map +1 -1
- package/dist/hooks/tap-effect-event.d.ts.map +1 -1
- package/dist/hooks/tap-effect-event.js +3 -2
- package/dist/hooks/tap-effect-event.js.map +1 -1
- package/dist/hooks/tap-memo.d.ts.map +1 -1
- package/dist/hooks/tap-memo.js +16 -17
- package/dist/hooks/tap-memo.js.map +1 -1
- package/dist/hooks/tap-reducer.d.ts +7 -0
- package/dist/hooks/tap-reducer.d.ts.map +1 -0
- package/dist/hooks/tap-reducer.js +87 -0
- package/dist/hooks/tap-reducer.js.map +1 -0
- package/dist/hooks/tap-resource.js +9 -9
- package/dist/hooks/tap-resource.js.map +1 -1
- package/dist/hooks/tap-resources.d.ts.map +1 -1
- package/dist/hooks/tap-resources.js +11 -11
- package/dist/hooks/tap-resources.js.map +1 -1
- package/dist/hooks/tap-state.d.ts.map +1 -1
- package/dist/hooks/tap-state.js +6 -63
- package/dist/hooks/tap-state.js.map +1 -1
- package/dist/hooks/utils/tapHook.d.ts +1 -1
- package/dist/hooks/utils/tapHook.d.ts.map +1 -1
- package/dist/hooks/utils/tapHook.js +2 -2
- package/dist/hooks/utils/tapHook.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/react/use-resource.d.ts +1 -1
- package/dist/react/use-resource.d.ts.map +1 -1
- package/dist/react/use-resource.js +14 -8
- package/dist/react/use-resource.js.map +1 -1
- package/dist/{tapSubscribableResource.d.ts → tapResourceRoot.d.ts} +3 -3
- package/dist/tapResourceRoot.d.ts.map +1 -0
- package/dist/tapResourceRoot.js +80 -0
- package/dist/tapResourceRoot.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/basic/resourceHandle.test.ts +17 -14
- package/src/__tests__/basic/tapReducer.basic.test.ts +200 -0
- package/src/__tests__/react/concurrent-mode.test.tsx +1 -4
- package/src/__tests__/strictmode/react-strictmode-behavior.test.tsx +215 -2
- package/src/__tests__/strictmode/react-strictmode-rerender-sources.test.tsx +77 -0
- package/src/__tests__/strictmode/strictmode.test.ts +82 -21
- package/src/__tests__/strictmode/tap-strictmode-rerender-sources.test.ts +67 -110
- package/src/__tests__/test-utils.ts +5 -1
- package/src/core/ResourceFiber.ts +22 -10
- package/src/core/createResourceRoot.ts +53 -0
- package/src/core/{callResourceFn.ts → helpers/callResourceFn.ts} +1 -1
- package/src/core/{commit.ts → helpers/commit.ts} +3 -3
- package/src/core/helpers/env.ts +3 -0
- package/src/core/{execution-context.ts → helpers/execution-context.ts} +1 -1
- package/src/core/helpers/root.ts +67 -0
- package/src/core/resource.ts +1 -1
- package/src/core/scheduler.ts +13 -1
- package/src/core/types.ts +27 -7
- package/src/hooks/tap-effect-event.ts +3 -2
- package/src/hooks/tap-memo.ts +24 -19
- package/src/hooks/tap-reducer.ts +148 -0
- package/src/hooks/tap-resource.ts +9 -9
- package/src/hooks/tap-resources.ts +23 -10
- package/src/hooks/tap-state.ts +11 -88
- package/src/hooks/utils/tapHook.ts +3 -3
- package/src/index.ts +3 -3
- package/src/react/use-resource.ts +24 -11
- package/src/tapResourceRoot.ts +131 -0
- package/dist/core/callResourceFn.d.ts.map +0 -1
- package/dist/core/callResourceFn.js.map +0 -1
- package/dist/core/commit.d.ts +0 -4
- package/dist/core/commit.d.ts.map +0 -1
- package/dist/core/commit.js.map +0 -1
- package/dist/core/createResource.d.ts +0 -15
- package/dist/core/createResource.d.ts.map +0 -1
- package/dist/core/createResource.js +0 -101
- package/dist/core/createResource.js.map +0 -1
- package/dist/core/env.d.ts.map +0 -1
- package/dist/core/env.js +0 -4
- package/dist/core/env.js.map +0 -1
- package/dist/core/execution-context.d.ts.map +0 -1
- package/dist/core/execution-context.js.map +0 -1
- package/dist/hooks/tap-inline-resource.d.ts +0 -3
- package/dist/hooks/tap-inline-resource.d.ts.map +0 -1
- package/dist/hooks/tap-inline-resource.js +0 -5
- package/dist/hooks/tap-inline-resource.js.map +0 -1
- package/dist/tapSubscribableResource.d.ts.map +0 -1
- package/dist/tapSubscribableResource.js +0 -60
- package/dist/tapSubscribableResource.js.map +0 -1
- package/src/core/createResource.ts +0 -155
- package/src/core/env.ts +0 -4
- package/src/hooks/tap-inline-resource.ts +0 -8
- package/src/tapSubscribableResource.ts +0 -101
- /package/dist/core/{callResourceFn.d.ts → helpers/callResourceFn.d.ts} +0 -0
- /package/dist/core/{callResourceFn.js → helpers/callResourceFn.js} +0 -0
- /package/dist/core/{env.d.ts → helpers/env.d.ts} +0 -0
- /package/dist/core/{execution-context.js → helpers/execution-context.js} +0 -0
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
commitResourceFiber,
|
|
3
|
-
createResourceFiber,
|
|
4
|
-
renderResourceFiber,
|
|
5
|
-
unmountResourceFiber,
|
|
6
|
-
} from "./core/ResourceFiber";
|
|
7
|
-
import { flushResourcesSync, UpdateScheduler } from "./core/scheduler";
|
|
8
|
-
import { tapConst } from "./hooks/tap-const";
|
|
9
|
-
import { tapMemo } from "./hooks/tap-memo";
|
|
10
|
-
import { tapEffect } from "./hooks/tap-effect";
|
|
11
|
-
import { tapEffectEvent } from "./hooks/tap-effect-event";
|
|
12
|
-
import { tapRef } from "./hooks/tap-ref";
|
|
13
|
-
import { RenderResult, ResourceElement } from "./core/types";
|
|
14
|
-
|
|
15
|
-
export namespace tapSubscribableResource {
|
|
16
|
-
export type Unsubscribe = () => void;
|
|
17
|
-
|
|
18
|
-
export interface SubscribableResource<TState> {
|
|
19
|
-
/**
|
|
20
|
-
* Get the current state of the store.
|
|
21
|
-
*/
|
|
22
|
-
getValue(): TState;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Subscribe to the store.
|
|
26
|
-
*/
|
|
27
|
-
subscribe(listener: () => void): Unsubscribe;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const tapSubscribableResource = <TState>(
|
|
32
|
-
element: ResourceElement<TState>,
|
|
33
|
-
): tapSubscribableResource.SubscribableResource<TState> => {
|
|
34
|
-
const scheduler = tapConst(
|
|
35
|
-
() =>
|
|
36
|
-
new UpdateScheduler(() => {
|
|
37
|
-
lastRenderRef.current = null;
|
|
38
|
-
handleUpdate();
|
|
39
|
-
}),
|
|
40
|
-
[],
|
|
41
|
-
);
|
|
42
|
-
const fiber = tapMemo(() => {
|
|
43
|
-
void element.key;
|
|
44
|
-
|
|
45
|
-
return createResourceFiber(element.type, (callback) => {
|
|
46
|
-
if (callback()) {
|
|
47
|
-
scheduler.markDirty();
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}, [element.type, element.key]);
|
|
51
|
-
|
|
52
|
-
const lastRenderRef = tapRef<RenderResult | null>(null);
|
|
53
|
-
lastRenderRef.current = renderResourceFiber(fiber, element.props);
|
|
54
|
-
|
|
55
|
-
const isMountedRef = tapRef(false);
|
|
56
|
-
const committedPropsRef = tapRef(element.props);
|
|
57
|
-
const valueRef = tapRef<TState>(lastRenderRef.current.output);
|
|
58
|
-
const subscribers = tapConst(() => new Set<() => void>(), []);
|
|
59
|
-
const handleUpdate = tapEffectEvent(() => {
|
|
60
|
-
if (!isMountedRef.current) return; // skip update if not mounted
|
|
61
|
-
|
|
62
|
-
if (lastRenderRef.current === null) {
|
|
63
|
-
lastRenderRef.current = renderResourceFiber(
|
|
64
|
-
fiber,
|
|
65
|
-
committedPropsRef.current,
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (scheduler.isDirty) return;
|
|
70
|
-
committedPropsRef.current = lastRenderRef.current.props;
|
|
71
|
-
commitResourceFiber(fiber, lastRenderRef.current);
|
|
72
|
-
|
|
73
|
-
if (scheduler.isDirty || valueRef.current === lastRenderRef.current.output)
|
|
74
|
-
return;
|
|
75
|
-
valueRef.current = lastRenderRef.current.output;
|
|
76
|
-
subscribers.forEach((callback) => callback());
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
tapEffect(() => {
|
|
80
|
-
isMountedRef.current = true;
|
|
81
|
-
return () => {
|
|
82
|
-
isMountedRef.current = false;
|
|
83
|
-
unmountResourceFiber(fiber);
|
|
84
|
-
};
|
|
85
|
-
}, [fiber]);
|
|
86
|
-
|
|
87
|
-
tapEffect(() => {
|
|
88
|
-
flushResourcesSync(handleUpdate);
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
return tapMemo(
|
|
92
|
-
() => ({
|
|
93
|
-
getValue: () => valueRef.current,
|
|
94
|
-
subscribe: (listener: () => void) => {
|
|
95
|
-
subscribers.add(listener);
|
|
96
|
-
return () => subscribers.delete(listener);
|
|
97
|
-
},
|
|
98
|
-
}),
|
|
99
|
-
[],
|
|
100
|
-
);
|
|
101
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|