@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.
Files changed (124) hide show
  1. package/README.md +20 -17
  2. package/dist/core/ResourceFiber.d.ts +2 -2
  3. package/dist/core/ResourceFiber.d.ts.map +1 -1
  4. package/dist/core/ResourceFiber.js +11 -9
  5. package/dist/core/ResourceFiber.js.map +1 -1
  6. package/dist/core/createResourceRoot.d.ts +6 -0
  7. package/dist/core/createResourceRoot.d.ts.map +1 -0
  8. package/dist/core/createResourceRoot.js +32 -0
  9. package/dist/core/createResourceRoot.js.map +1 -0
  10. package/dist/core/helpers/callResourceFn.d.ts.map +1 -0
  11. package/dist/core/helpers/callResourceFn.js.map +1 -0
  12. package/dist/core/helpers/commit.d.ts +4 -0
  13. package/dist/core/helpers/commit.d.ts.map +1 -0
  14. package/dist/core/{commit.js → helpers/commit.js} +2 -2
  15. package/dist/core/helpers/commit.js.map +1 -0
  16. package/dist/core/helpers/env.d.ts.map +1 -0
  17. package/dist/core/helpers/env.js +3 -0
  18. package/dist/core/helpers/env.js.map +1 -0
  19. package/dist/core/{execution-context.d.ts → helpers/execution-context.d.ts} +1 -1
  20. package/dist/core/helpers/execution-context.d.ts.map +1 -0
  21. package/dist/core/helpers/execution-context.js.map +1 -0
  22. package/dist/core/helpers/root.d.ts +8 -0
  23. package/dist/core/helpers/root.d.ts.map +1 -0
  24. package/dist/core/helpers/root.js +52 -0
  25. package/dist/core/helpers/root.js.map +1 -0
  26. package/dist/core/resource.js +1 -1
  27. package/dist/core/resource.js.map +1 -1
  28. package/dist/core/scheduler.d.ts.map +1 -1
  29. package/dist/core/scheduler.js +12 -1
  30. package/dist/core/scheduler.js.map +1 -1
  31. package/dist/core/types.d.ts +25 -7
  32. package/dist/core/types.d.ts.map +1 -1
  33. package/dist/hooks/tap-effect-event.d.ts.map +1 -1
  34. package/dist/hooks/tap-effect-event.js +3 -2
  35. package/dist/hooks/tap-effect-event.js.map +1 -1
  36. package/dist/hooks/tap-memo.d.ts.map +1 -1
  37. package/dist/hooks/tap-memo.js +16 -17
  38. package/dist/hooks/tap-memo.js.map +1 -1
  39. package/dist/hooks/tap-reducer.d.ts +7 -0
  40. package/dist/hooks/tap-reducer.d.ts.map +1 -0
  41. package/dist/hooks/tap-reducer.js +87 -0
  42. package/dist/hooks/tap-reducer.js.map +1 -0
  43. package/dist/hooks/tap-resource.js +9 -9
  44. package/dist/hooks/tap-resource.js.map +1 -1
  45. package/dist/hooks/tap-resources.d.ts.map +1 -1
  46. package/dist/hooks/tap-resources.js +11 -11
  47. package/dist/hooks/tap-resources.js.map +1 -1
  48. package/dist/hooks/tap-state.d.ts.map +1 -1
  49. package/dist/hooks/tap-state.js +6 -63
  50. package/dist/hooks/tap-state.js.map +1 -1
  51. package/dist/hooks/utils/tapHook.d.ts +1 -1
  52. package/dist/hooks/utils/tapHook.d.ts.map +1 -1
  53. package/dist/hooks/utils/tapHook.js +2 -2
  54. package/dist/hooks/utils/tapHook.js.map +1 -1
  55. package/dist/index.d.ts +3 -3
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +3 -3
  58. package/dist/index.js.map +1 -1
  59. package/dist/react/use-resource.d.ts +1 -1
  60. package/dist/react/use-resource.d.ts.map +1 -1
  61. package/dist/react/use-resource.js +14 -8
  62. package/dist/react/use-resource.js.map +1 -1
  63. package/dist/{tapSubscribableResource.d.ts → tapResourceRoot.d.ts} +3 -3
  64. package/dist/tapResourceRoot.d.ts.map +1 -0
  65. package/dist/tapResourceRoot.js +80 -0
  66. package/dist/tapResourceRoot.js.map +1 -0
  67. package/package.json +1 -1
  68. package/src/__tests__/basic/resourceHandle.test.ts +17 -14
  69. package/src/__tests__/basic/tapReducer.basic.test.ts +200 -0
  70. package/src/__tests__/react/concurrent-mode.test.tsx +1 -4
  71. package/src/__tests__/strictmode/react-strictmode-behavior.test.tsx +215 -2
  72. package/src/__tests__/strictmode/react-strictmode-rerender-sources.test.tsx +77 -0
  73. package/src/__tests__/strictmode/strictmode.test.ts +82 -21
  74. package/src/__tests__/strictmode/tap-strictmode-rerender-sources.test.ts +67 -110
  75. package/src/__tests__/test-utils.ts +5 -1
  76. package/src/core/ResourceFiber.ts +22 -10
  77. package/src/core/createResourceRoot.ts +53 -0
  78. package/src/core/{callResourceFn.ts → helpers/callResourceFn.ts} +1 -1
  79. package/src/core/{commit.ts → helpers/commit.ts} +3 -3
  80. package/src/core/helpers/env.ts +3 -0
  81. package/src/core/{execution-context.ts → helpers/execution-context.ts} +1 -1
  82. package/src/core/helpers/root.ts +67 -0
  83. package/src/core/resource.ts +1 -1
  84. package/src/core/scheduler.ts +13 -1
  85. package/src/core/types.ts +27 -7
  86. package/src/hooks/tap-effect-event.ts +3 -2
  87. package/src/hooks/tap-memo.ts +24 -19
  88. package/src/hooks/tap-reducer.ts +148 -0
  89. package/src/hooks/tap-resource.ts +9 -9
  90. package/src/hooks/tap-resources.ts +23 -10
  91. package/src/hooks/tap-state.ts +11 -88
  92. package/src/hooks/utils/tapHook.ts +3 -3
  93. package/src/index.ts +3 -3
  94. package/src/react/use-resource.ts +24 -11
  95. package/src/tapResourceRoot.ts +131 -0
  96. package/dist/core/callResourceFn.d.ts.map +0 -1
  97. package/dist/core/callResourceFn.js.map +0 -1
  98. package/dist/core/commit.d.ts +0 -4
  99. package/dist/core/commit.d.ts.map +0 -1
  100. package/dist/core/commit.js.map +0 -1
  101. package/dist/core/createResource.d.ts +0 -15
  102. package/dist/core/createResource.d.ts.map +0 -1
  103. package/dist/core/createResource.js +0 -101
  104. package/dist/core/createResource.js.map +0 -1
  105. package/dist/core/env.d.ts.map +0 -1
  106. package/dist/core/env.js +0 -4
  107. package/dist/core/env.js.map +0 -1
  108. package/dist/core/execution-context.d.ts.map +0 -1
  109. package/dist/core/execution-context.js.map +0 -1
  110. package/dist/hooks/tap-inline-resource.d.ts +0 -3
  111. package/dist/hooks/tap-inline-resource.d.ts.map +0 -1
  112. package/dist/hooks/tap-inline-resource.js +0 -5
  113. package/dist/hooks/tap-inline-resource.js.map +0 -1
  114. package/dist/tapSubscribableResource.d.ts.map +0 -1
  115. package/dist/tapSubscribableResource.js +0 -60
  116. package/dist/tapSubscribableResource.js.map +0 -1
  117. package/src/core/createResource.ts +0 -155
  118. package/src/core/env.ts +0 -4
  119. package/src/hooks/tap-inline-resource.ts +0 -8
  120. package/src/tapSubscribableResource.ts +0 -101
  121. /package/dist/core/{callResourceFn.d.ts → helpers/callResourceFn.d.ts} +0 -0
  122. /package/dist/core/{callResourceFn.js → helpers/callResourceFn.js} +0 -0
  123. /package/dist/core/{env.d.ts → helpers/env.d.ts} +0 -0
  124. /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