@assistant-ui/tap 0.3.6 → 0.4.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 +24 -23
- package/dist/core/ResourceFiber.d.ts +1 -1
- package/dist/core/ResourceFiber.d.ts.map +1 -1
- package/dist/core/ResourceFiber.js +15 -8
- package/dist/core/ResourceFiber.js.map +1 -1
- package/dist/core/commit.d.ts +1 -1
- package/dist/core/commit.d.ts.map +1 -1
- package/dist/core/commit.js +30 -48
- package/dist/core/commit.js.map +1 -1
- package/dist/core/context.d.ts +2 -2
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +2 -2
- package/dist/core/context.js.map +1 -1
- package/dist/core/createResource.d.ts +3 -2
- package/dist/core/createResource.d.ts.map +1 -1
- package/dist/core/createResource.js +33 -19
- package/dist/core/createResource.js.map +1 -1
- package/dist/core/env.d.ts +2 -0
- package/dist/core/env.d.ts.map +1 -0
- package/dist/core/env.js +3 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/execution-context.d.ts +1 -0
- package/dist/core/execution-context.d.ts.map +1 -1
- package/dist/core/execution-context.js +8 -0
- package/dist/core/execution-context.js.map +1 -1
- package/dist/core/resource.d.ts +3 -3
- package/dist/core/resource.d.ts.map +1 -1
- package/dist/core/resource.js.map +1 -1
- package/dist/core/scheduler.d.ts +1 -1
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +1 -1
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/types.d.ts +22 -21
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/withKey.d.ts +3 -0
- package/dist/core/withKey.d.ts.map +1 -0
- package/dist/core/withKey.js +4 -0
- package/dist/core/withKey.js.map +1 -0
- package/dist/hooks/tap-callback.d.ts.map +1 -1
- package/dist/hooks/tap-callback.js +1 -0
- package/dist/hooks/tap-callback.js.map +1 -1
- package/dist/hooks/tap-const.d.ts +2 -0
- package/dist/hooks/tap-const.d.ts.map +1 -0
- package/dist/hooks/tap-const.js +6 -0
- package/dist/hooks/tap-const.js.map +1 -0
- package/dist/hooks/tap-effect-event.d.ts.map +1 -1
- package/dist/hooks/tap-effect-event.js +11 -0
- package/dist/hooks/tap-effect-event.js.map +1 -1
- package/dist/hooks/tap-effect.d.ts.map +1 -1
- package/dist/hooks/tap-effect.js +43 -31
- package/dist/hooks/tap-effect.js.map +1 -1
- package/dist/hooks/tap-inline-resource.d.ts +2 -2
- package/dist/hooks/tap-inline-resource.d.ts.map +1 -1
- package/dist/hooks/tap-memo.js +1 -1
- package/dist/hooks/tap-memo.js.map +1 -1
- package/dist/hooks/tap-resource.d.ts +3 -3
- package/dist/hooks/tap-resource.d.ts.map +1 -1
- package/dist/hooks/tap-resource.js +17 -9
- package/dist/hooks/tap-resource.js.map +1 -1
- package/dist/hooks/tap-resources.d.ts +2 -10
- package/dist/hooks/tap-resources.d.ts.map +1 -1
- package/dist/hooks/tap-resources.js +74 -43
- 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 +37 -24
- package/dist/hooks/tap-state.js.map +1 -1
- package/dist/hooks/utils/depsShallowEqual.d.ts.map +1 -0
- package/dist/hooks/utils/depsShallowEqual.js.map +1 -0
- package/dist/hooks/utils/tapHook.d.ts +6 -0
- package/dist/hooks/utils/tapHook.d.ts.map +1 -0
- package/dist/hooks/utils/tapHook.js +24 -0
- package/dist/hooks/utils/tapHook.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/react/use-resource.d.ts +2 -2
- package/dist/react/use-resource.d.ts.map +1 -1
- package/dist/react/use-resource.js +24 -10
- package/dist/react/use-resource.js.map +1 -1
- package/package.json +8 -1
- package/src/__tests__/basic/resourceHandle.test.ts +4 -4
- package/src/__tests__/basic/tapEffect.basic.test.ts +3 -2
- package/src/__tests__/basic/tapResources.basic.test.ts +84 -64
- package/src/__tests__/basic/tapState.basic.test.ts +8 -8
- package/src/__tests__/errors/errors.effect-errors.test.ts +8 -3
- package/src/__tests__/lifecycle/lifecycle.dependencies.test.ts +3 -2
- package/src/__tests__/lifecycle/lifecycle.mount-unmount.test.ts +2 -2
- package/src/__tests__/react/concurrent-mode.test.tsx +243 -0
- package/src/__tests__/strictmode/react-strictmode-behavior.test.tsx +709 -0
- package/src/__tests__/strictmode/react-strictmode-rerender-sources.test.tsx +392 -0
- package/src/__tests__/strictmode/strictmode.test.ts +270 -0
- package/src/__tests__/strictmode/tap-strictmode-rerender-sources.test.ts +723 -0
- package/src/__tests__/test-utils.ts +8 -6
- package/src/core/ResourceFiber.ts +21 -11
- package/src/core/commit.ts +29 -58
- package/src/core/context.ts +2 -2
- package/src/core/createResource.ts +46 -22
- package/src/core/env.ts +3 -0
- package/src/core/execution-context.ts +9 -0
- package/src/core/resource.ts +6 -3
- package/src/core/scheduler.ts +1 -1
- package/src/core/types.ts +25 -26
- package/src/core/withKey.ts +8 -0
- package/src/hooks/tap-callback.ts +1 -0
- package/src/hooks/tap-const.ts +6 -0
- package/src/hooks/tap-effect-event.ts +15 -0
- package/src/hooks/tap-effect.ts +48 -38
- package/src/hooks/tap-inline-resource.ts +2 -2
- package/src/hooks/tap-memo.ts +1 -1
- package/src/hooks/tap-resource.ts +24 -20
- package/src/hooks/tap-resources.ts +86 -63
- package/src/hooks/tap-state.ts +49 -26
- package/src/hooks/utils/tapHook.ts +35 -0
- package/src/index.ts +8 -3
- package/src/react/use-resource.ts +27 -16
- package/dist/hooks/depsShallowEqual.d.ts.map +0 -1
- package/dist/hooks/depsShallowEqual.js.map +0 -1
- /package/dist/hooks/{depsShallowEqual.d.ts → utils/depsShallowEqual.d.ts} +0 -0
- /package/dist/hooks/{depsShallowEqual.js → utils/depsShallowEqual.js} +0 -0
- /package/src/hooks/{depsShallowEqual.ts → utils/depsShallowEqual.ts} +0 -0
package/README.md
CHANGED
|
@@ -176,20 +176,18 @@ const Timer = resource(() => {
|
|
|
176
176
|
|
|
177
177
|
### `tapResources`
|
|
178
178
|
|
|
179
|
-
Renders multiple resources from
|
|
179
|
+
Renders multiple resources from an array, similar to React's list rendering. Returns an array with each resource's result.
|
|
180
180
|
|
|
181
181
|
```typescript
|
|
182
|
-
tapResources<
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
): Record<K, R>
|
|
182
|
+
tapResources<E extends ResourceElement<any, any>>(
|
|
183
|
+
getElements: () => readonly E[],
|
|
184
|
+
getElementsDeps: readonly any[]
|
|
185
|
+
): ExtractResourceReturnType<E>[]
|
|
187
186
|
```
|
|
188
187
|
|
|
189
188
|
**Parameters:**
|
|
190
|
-
- `
|
|
191
|
-
- `
|
|
192
|
-
- `getElementDeps`: Optional dependency array for memoizing the getElement function
|
|
189
|
+
- `getElements`: A function that returns an array of ResourceElements
|
|
190
|
+
- `getElementsDeps`: Dependency array for memoizing the getElements function
|
|
193
191
|
|
|
194
192
|
**Example:**
|
|
195
193
|
|
|
@@ -201,45 +199,48 @@ const TodoItem = resource((props: { text: string }) => {
|
|
|
201
199
|
|
|
202
200
|
const TodoList = resource(() => {
|
|
203
201
|
const todos = tapMemo(
|
|
204
|
-
() =>
|
|
205
|
-
"1"
|
|
206
|
-
"2"
|
|
207
|
-
|
|
202
|
+
() => [
|
|
203
|
+
{ id: "1", text: "Learn tap" },
|
|
204
|
+
{ id: "2", text: "Build something awesome" },
|
|
205
|
+
],
|
|
208
206
|
[],
|
|
209
207
|
);
|
|
210
208
|
|
|
211
|
-
// Returns
|
|
212
|
-
const todoItems = tapResources(
|
|
209
|
+
// Returns Array<{ text, completed, setCompleted }>
|
|
210
|
+
const todoItems = tapResources(
|
|
211
|
+
() => todos.map((todo) => TodoItem({ text: todo.text })),
|
|
212
|
+
[todos]
|
|
213
|
+
);
|
|
213
214
|
|
|
214
215
|
return todoItems;
|
|
215
216
|
});
|
|
216
217
|
```
|
|
217
218
|
|
|
218
219
|
**Key features:**
|
|
219
|
-
- Resource instances are preserved when keys remain the same
|
|
220
|
-
- Automatically cleans up resources when
|
|
220
|
+
- Resource instances are preserved when keys remain the same (use `withKey()` to provide stable keys)
|
|
221
|
+
- Automatically cleans up resources when removed from the array
|
|
221
222
|
- Handles resource type changes (recreates fiber if type changes)
|
|
222
223
|
|
|
223
|
-
### `
|
|
224
|
+
### `tap` and Context Support
|
|
224
225
|
|
|
225
226
|
Create and use context to pass values through resource boundaries without prop drilling.
|
|
226
227
|
|
|
227
228
|
```typescript
|
|
228
229
|
import {
|
|
229
|
-
|
|
230
|
-
|
|
230
|
+
createResourceContext,
|
|
231
|
+
tap,
|
|
231
232
|
withContextProvider,
|
|
232
233
|
} from "@assistant-ui/tap";
|
|
233
234
|
|
|
234
|
-
const MyContext =
|
|
235
|
+
const MyContext = createResourceContext(defaultValue);
|
|
235
236
|
|
|
236
237
|
// Provide context
|
|
237
238
|
withContextProvider(MyContext, value, () => {
|
|
238
|
-
// Inside this function,
|
|
239
|
+
// Inside this function, tap can access the value
|
|
239
240
|
});
|
|
240
241
|
|
|
241
242
|
// Access context in a resource
|
|
242
|
-
const value =
|
|
243
|
+
const value = tap(MyContext);
|
|
243
244
|
```
|
|
244
245
|
|
|
245
246
|
## Resource Management
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ResourceFiber, RenderResult, Resource } from "./types.js";
|
|
2
|
-
export declare function createResourceFiber<R, P>(
|
|
2
|
+
export declare function createResourceFiber<R, P>(type: Resource<R, P>, dispatchUpdate: (callback: () => boolean) => void, strictMode?: "root" | "child" | null): ResourceFiber<R, P>;
|
|
3
3
|
export declare function unmountResourceFiber<R, P>(fiber: ResourceFiber<R, P>): void;
|
|
4
4
|
export declare function renderResourceFiber<R, P>(fiber: ResourceFiber<R, P>, props: P): RenderResult;
|
|
5
5
|
export declare function commitResourceFiber<R, P>(fiber: ResourceFiber<R, P>, result: RenderResult): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceFiber.d.ts","sourceRoot":"","sources":["../../src/core/ResourceFiber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAgB;
|
|
1
|
+
{"version":3,"file":"ResourceFiber.d.ts","sourceRoot":"","sources":["../../src/core/ResourceFiber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAgB;AAMhE,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EACtC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,OAAO,KAAK,IAAI,EACjD,UAAU,GAAE,MAAM,GAAG,OAAO,GAAG,IAA8B,GAC5D,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAYrB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAM3E;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,CAAC,GACP,YAAY,CAiBd;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,YAAY,GACnB,IAAI,CAUN"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { commitRender, cleanupAllEffects } from "./commit.js";
|
|
2
|
-
import { withResourceFiber } from "./execution-context.js";
|
|
2
|
+
import { getDevStrictMode, withResourceFiber } from "./execution-context.js";
|
|
3
3
|
import { callResourceFn } from "./callResourceFn.js";
|
|
4
|
-
|
|
4
|
+
import { isDevelopment } from "./env.js";
|
|
5
|
+
export function createResourceFiber(type, dispatchUpdate, strictMode = getDevStrictMode(false)) {
|
|
5
6
|
return {
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
type,
|
|
8
|
+
dispatchUpdate,
|
|
9
|
+
devStrictMode: strictMode,
|
|
8
10
|
cells: [],
|
|
9
11
|
currentIndex: 0,
|
|
10
12
|
renderContext: undefined,
|
|
@@ -14,7 +16,8 @@ export function createResourceFiber(resource, scheduleRerender) {
|
|
|
14
16
|
};
|
|
15
17
|
}
|
|
16
18
|
export function unmountResourceFiber(fiber) {
|
|
17
|
-
|
|
19
|
+
if (!fiber.isMounted)
|
|
20
|
+
throw new Error("Tried to unmount a fiber that is already unmounted");
|
|
18
21
|
fiber.isMounted = false;
|
|
19
22
|
cleanupAllEffects(fiber);
|
|
20
23
|
}
|
|
@@ -22,12 +25,12 @@ export function renderResourceFiber(fiber, props) {
|
|
|
22
25
|
const result = {
|
|
23
26
|
commitTasks: [],
|
|
24
27
|
props,
|
|
25
|
-
|
|
28
|
+
output: undefined,
|
|
26
29
|
};
|
|
27
30
|
withResourceFiber(fiber, () => {
|
|
28
31
|
fiber.renderContext = result;
|
|
29
32
|
try {
|
|
30
|
-
result.
|
|
33
|
+
result.output = callResourceFn(fiber.type, props);
|
|
31
34
|
}
|
|
32
35
|
finally {
|
|
33
36
|
fiber.renderContext = undefined;
|
|
@@ -37,7 +40,11 @@ export function renderResourceFiber(fiber, props) {
|
|
|
37
40
|
}
|
|
38
41
|
export function commitResourceFiber(fiber, result) {
|
|
39
42
|
fiber.isMounted = true;
|
|
43
|
+
if (isDevelopment && fiber.isNeverMounted && fiber.devStrictMode === "root") {
|
|
44
|
+
commitRender(result);
|
|
45
|
+
cleanupAllEffects(fiber);
|
|
46
|
+
}
|
|
40
47
|
fiber.isNeverMounted = false;
|
|
41
|
-
commitRender(result
|
|
48
|
+
commitRender(result);
|
|
42
49
|
}
|
|
43
50
|
//# sourceMappingURL=ResourceFiber.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceFiber.js","sourceRoot":"","sources":["../../src/core/ResourceFiber.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAiB;AAC3D,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;
|
|
1
|
+
{"version":3,"file":"ResourceFiber.js","sourceRoot":"","sources":["../../src/core/ResourceFiber.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAiB;AAC3D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,+BAA4B;AAC1E,OAAO,EAAE,cAAc,EAAE,4BAAyB;AAClD,OAAO,EAAE,aAAa,EAAE,iBAAc;AAEtC,MAAM,UAAU,mBAAmB,CACjC,IAAoB,EACpB,cAAiD,EACjD,aAAsC,gBAAgB,CAAC,KAAK,CAAC;IAE7D,OAAO;QACL,IAAI;QACJ,cAAc;QACd,aAAa,EAAE,UAAU;QACzB,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,SAAS;QACxB,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAO,KAA0B;IACnE,IAAI,CAAC,KAAK,CAAC,SAAS;QAClB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAExE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IACxB,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAA0B,EAC1B,KAAQ;IAER,MAAM,MAAM,GAAG;QACb,WAAW,EAAE,EAAE;QACf,KAAK;QACL,MAAM,EAAE,SAA0B;KACnC,CAAC;IAEF,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE;QAC5B,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAA0B,EAC1B,MAAoB;IAEpB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;IAEvB,IAAI,aAAa,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QAC5E,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;IAC7B,YAAY,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/core/commit.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ResourceFiber, RenderResult } from "./types.js";
|
|
2
|
-
export declare function commitRender
|
|
2
|
+
export declare function commitRender(renderResult: RenderResult): void;
|
|
3
3
|
export declare function cleanupAllEffects<R, P>(executionContext: ResourceFiber<R, P>): void;
|
|
4
4
|
//# sourceMappingURL=commit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/core/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAgB;AAEtD,wBAAgB,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/core/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAgB;AAEtD,wBAAgB,YAAY,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAkB7D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,QAqB5E"}
|
package/dist/core/commit.js
CHANGED
|
@@ -1,63 +1,45 @@
|
|
|
1
|
-
export function commitRender(renderResult
|
|
2
|
-
|
|
3
|
-
renderResult.commitTasks
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (effectCell.type !== "effect") {
|
|
7
|
-
throw new Error("Cannot find effect cell");
|
|
1
|
+
export function commitRender(renderResult) {
|
|
2
|
+
const errors = [];
|
|
3
|
+
for (const task of renderResult.commitTasks) {
|
|
4
|
+
try {
|
|
5
|
+
task();
|
|
8
6
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (effectCell.deps !== undefined && task.deps !== undefined) {
|
|
12
|
-
shouldRunEffect =
|
|
13
|
-
effectCell.deps.length !== task.deps.length ||
|
|
14
|
-
effectCell.deps.some((dep, j) => !Object.is(dep, task.deps[j]));
|
|
7
|
+
catch (error) {
|
|
8
|
+
errors.push(error);
|
|
15
9
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (effectCell.mounted && effectCell.cleanup) {
|
|
24
|
-
effectCell.cleanup();
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
finally {
|
|
28
|
-
effectCell.mounted = false;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const cleanup = task.effect();
|
|
32
|
-
if (cleanup !== undefined && typeof cleanup !== "function") {
|
|
33
|
-
throw new Error("An effect function must either return a cleanup function or nothing. " +
|
|
34
|
-
`Received: ${typeof cleanup}`);
|
|
35
|
-
}
|
|
36
|
-
effectCell.mounted = true;
|
|
37
|
-
effectCell.cleanup = typeof cleanup === "function" ? cleanup : undefined;
|
|
38
|
-
effectCell.deps = task.deps;
|
|
10
|
+
}
|
|
11
|
+
if (errors.length > 0) {
|
|
12
|
+
if (errors.length === 1) {
|
|
13
|
+
throw errors[0];
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
throw new AggregateError(errors, "Errors during commit");
|
|
39
17
|
}
|
|
40
|
-
}
|
|
18
|
+
}
|
|
41
19
|
}
|
|
42
20
|
export function cleanupAllEffects(executionContext) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const cell = executionContext.cells[i];
|
|
47
|
-
if (cell?.type === "effect" && cell.mounted && cell.cleanup) {
|
|
21
|
+
const errors = [];
|
|
22
|
+
for (const cell of executionContext.cells) {
|
|
23
|
+
if (cell?.type === "effect" && cell.cleanup) {
|
|
48
24
|
try {
|
|
49
|
-
cell.cleanup();
|
|
25
|
+
cell.cleanup?.();
|
|
50
26
|
}
|
|
51
27
|
catch (e) {
|
|
52
|
-
|
|
53
|
-
firstError = e;
|
|
28
|
+
errors.push(e);
|
|
54
29
|
}
|
|
55
30
|
finally {
|
|
56
|
-
cell.
|
|
31
|
+
cell.cleanup = undefined;
|
|
32
|
+
cell.deps = null; // Reset deps so effect runs again on next mount
|
|
57
33
|
}
|
|
58
34
|
}
|
|
59
35
|
}
|
|
60
|
-
if (
|
|
61
|
-
|
|
36
|
+
if (errors.length > 0) {
|
|
37
|
+
if (errors.length === 1) {
|
|
38
|
+
throw errors[0];
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
throw new AggregateError(errors, "Errors during cleanup");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
62
44
|
}
|
|
63
45
|
//# sourceMappingURL=commit.js.map
|
package/dist/core/commit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/core/commit.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/core/commit.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,YAA0B;IACrD,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAO,gBAAqC;IAC3E,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,gDAAgD;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/core/context.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ declare const contextValue: unique symbol;
|
|
|
2
2
|
type Context<T> = {
|
|
3
3
|
[contextValue]: T;
|
|
4
4
|
};
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const createResourceContext: <T>(defaultValue: T) => Context<T>;
|
|
6
6
|
export declare const withContextProvider: <T, TResult>(context: Context<T>, value: T, fn: () => TResult) => TResult;
|
|
7
|
-
export declare const
|
|
7
|
+
export declare const tap: <T>(context: Context<T>) => T;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY,EAAE,OAAO,MAA8B,CAAC;AAC1D,KAAK,OAAO,CAAC,CAAC,IAAI;IAChB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY,EAAE,OAAO,MAA8B,CAAC;AAC1D,KAAK,OAAO,CAAC,CAAC,IAAI;IAChB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,cAAc,CAAC,KAAG,OAAO,CAAC,CAAC,CAInE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,OAAO,EAC5C,SAAS,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,CAAC,EACR,IAAI,MAAM,OAAO,YASlB,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,MAEzC,CAAC"}
|
package/dist/core/context.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const contextValue = Symbol("tap.Context");
|
|
2
|
-
export const
|
|
2
|
+
export const createResourceContext = (defaultValue) => {
|
|
3
3
|
return {
|
|
4
4
|
[contextValue]: defaultValue,
|
|
5
5
|
};
|
|
@@ -14,7 +14,7 @@ export const withContextProvider = (context, value, fn) => {
|
|
|
14
14
|
context[contextValue] = previousValue;
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
|
-
export const
|
|
17
|
+
export const tap = (context) => {
|
|
18
18
|
return context[contextValue];
|
|
19
19
|
};
|
|
20
20
|
//# sourceMappingURL=context.js.map
|
package/dist/core/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAkB,MAAM,CAAC,aAAa,CAAC,CAAC;AAK1D,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAkB,MAAM,CAAC,aAAa,CAAC,CAAC;AAK1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAI,YAAe,EAAc,EAAE;IACtE,OAAO;QACL,CAAC,YAAY,CAAC,EAAE,YAAY;KAC7B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAAmB,EACnB,KAAQ,EACR,EAAiB,EACjB,EAAE;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC;IACxC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAI,OAAmB,EAAE,EAAE;IAC5C,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;AAC/B,CAAC,CAAC"}
|
|
@@ -2,13 +2,14 @@ import { ResourceElement } from "./types.js";
|
|
|
2
2
|
export declare namespace createResource {
|
|
3
3
|
type Unsubscribe = () => void;
|
|
4
4
|
interface Handle<R, P> {
|
|
5
|
-
|
|
5
|
+
getValue(): R;
|
|
6
6
|
subscribe(callback: () => void): Unsubscribe;
|
|
7
7
|
render(element: ResourceElement<R, P>): void;
|
|
8
8
|
unmount(): void;
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
-
export declare const createResource: <R, P>(element: ResourceElement<R, P>, { mount }?: {
|
|
11
|
+
export declare const createResource: <R, P>(element: ResourceElement<R, P>, { mount, devStrictMode, }?: {
|
|
12
12
|
mount?: boolean;
|
|
13
|
+
devStrictMode?: boolean;
|
|
13
14
|
}) => createResource.Handle<R, P>;
|
|
14
15
|
//# sourceMappingURL=createResource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createResource.d.ts","sourceRoot":"","sources":["../../src/core/createResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAE,mBAAgB;
|
|
1
|
+
{"version":3,"file":"createResource.d.ts","sourceRoot":"","sources":["../../src/core/createResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAE,mBAAgB;AAkBxD,yBAAiB,cAAc,CAAC;IAC9B,KAAY,WAAW,GAAG,MAAM,IAAI,CAAC;IAErC,UAAiB,MAAM,CAAC,CAAC,EAAE,CAAC;QAC1B,QAAQ,IAAI,CAAC,CAAC;QACd,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;QAC7C,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;QAC7C,OAAO,IAAI,IAAI,CAAC;KACjB;CACF;AAgDD,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EACjC,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAC9B,4BAGG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,KACnD,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CA0D5B,CAAC"}
|
|
@@ -1,50 +1,57 @@
|
|
|
1
1
|
import { createResourceFiber, unmountResourceFiber, renderResourceFiber, commitResourceFiber, } from "./ResourceFiber.js";
|
|
2
|
-
import {
|
|
2
|
+
import { flushResourcesSync, UpdateScheduler } from "./scheduler.js";
|
|
3
3
|
import { tapRef } from "../hooks/tap-ref.js";
|
|
4
4
|
import { tapState } from "../hooks/tap-state.js";
|
|
5
5
|
import { tapMemo } from "../hooks/tap-memo.js";
|
|
6
6
|
import { tapEffect } from "../hooks/tap-effect.js";
|
|
7
7
|
import { resource } from "./resource.js";
|
|
8
8
|
import { tapResource } from "../hooks/tap-resource.js";
|
|
9
|
+
import { tapConst } from "../hooks/tap-const.js";
|
|
10
|
+
import { getDevStrictMode } from "./execution-context.js";
|
|
11
|
+
import { isDevelopment } from "./env.js";
|
|
9
12
|
const HandleWrapperResource = resource((state) => {
|
|
10
|
-
const [, setElement] = tapState(state.
|
|
11
|
-
const
|
|
12
|
-
const subscribers =
|
|
13
|
-
const valueRef = tapRef(
|
|
13
|
+
const [, setElement] = tapState(state.elementRef.current);
|
|
14
|
+
const output = tapResource(state.elementRef.current);
|
|
15
|
+
const subscribers = tapConst(() => new Set(), []);
|
|
16
|
+
const valueRef = tapRef(output);
|
|
14
17
|
tapEffect(() => {
|
|
15
|
-
if (
|
|
16
|
-
valueRef.current =
|
|
18
|
+
if (output !== valueRef.current) {
|
|
19
|
+
valueRef.current = output;
|
|
17
20
|
subscribers.forEach((callback) => callback());
|
|
18
21
|
}
|
|
19
22
|
});
|
|
20
23
|
const handle = tapMemo(() => ({
|
|
21
|
-
|
|
24
|
+
getValue: () => valueRef.current,
|
|
22
25
|
subscribe: (callback) => {
|
|
23
26
|
subscribers.add(callback);
|
|
24
27
|
return () => subscribers.delete(callback);
|
|
25
28
|
},
|
|
26
|
-
render: (
|
|
27
|
-
const changed = state.
|
|
28
|
-
state.
|
|
29
|
+
render: (el) => {
|
|
30
|
+
const changed = state.elementRef.current !== el;
|
|
31
|
+
state.elementRef.current = el;
|
|
29
32
|
if (state.onRender(changed)) {
|
|
30
|
-
setElement(
|
|
33
|
+
setElement(el);
|
|
31
34
|
}
|
|
32
35
|
},
|
|
33
36
|
unmount: state.onUnmount,
|
|
34
|
-
}), []);
|
|
37
|
+
}), [state]);
|
|
35
38
|
return handle;
|
|
36
39
|
});
|
|
37
|
-
export const createResource = (element, { mount = true } = {}) => {
|
|
40
|
+
export const createResource = (element, { mount = true, devStrictMode = false, } = {}) => {
|
|
38
41
|
let isMounted = mount;
|
|
39
42
|
let render;
|
|
40
43
|
const props = {
|
|
41
|
-
element,
|
|
44
|
+
elementRef: { current: element },
|
|
42
45
|
onRender: (changed) => {
|
|
43
46
|
if (isMounted)
|
|
44
47
|
return changed;
|
|
45
48
|
isMounted = true;
|
|
46
|
-
|
|
49
|
+
flushResourcesSync(() => {
|
|
47
50
|
if (changed) {
|
|
51
|
+
// In strict mode, render twice to detect side effects
|
|
52
|
+
if (isDevelopment && fiber.devStrictMode === "root") {
|
|
53
|
+
void renderResourceFiber(fiber, props);
|
|
54
|
+
}
|
|
48
55
|
render = renderResourceFiber(fiber, props);
|
|
49
56
|
}
|
|
50
57
|
if (scheduler.isDirty)
|
|
@@ -61,15 +68,22 @@ export const createResource = (element, { mount = true } = {}) => {
|
|
|
61
68
|
},
|
|
62
69
|
};
|
|
63
70
|
const scheduler = new UpdateScheduler(() => {
|
|
71
|
+
// In strict mode, render twice to detect side effects
|
|
72
|
+
if (isDevelopment && fiber.devStrictMode === "root") {
|
|
73
|
+
void renderResourceFiber(fiber, props);
|
|
74
|
+
}
|
|
64
75
|
render = renderResourceFiber(fiber, props);
|
|
65
76
|
if (scheduler.isDirty || !isMounted)
|
|
66
77
|
return;
|
|
67
78
|
commitResourceFiber(fiber, render);
|
|
68
79
|
});
|
|
69
|
-
const fiber = createResourceFiber((HandleWrapperResource), () =>
|
|
70
|
-
|
|
80
|
+
const fiber = createResourceFiber((HandleWrapperResource), (callback) => {
|
|
81
|
+
if (callback())
|
|
82
|
+
scheduler.markDirty();
|
|
83
|
+
}, getDevStrictMode(devStrictMode));
|
|
84
|
+
flushResourcesSync(() => {
|
|
71
85
|
scheduler.markDirty();
|
|
72
86
|
});
|
|
73
|
-
return render.
|
|
87
|
+
return render.output;
|
|
74
88
|
};
|
|
75
89
|
//# sourceMappingURL=createResource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createResource.js","sourceRoot":"","sources":["../../src/core/createResource.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,2BAAwB;AACzB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"createResource.js","sourceRoot":"","sources":["../../src/core/createResource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/core/env.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,SAEU,CAAC"}
|
package/dist/core/env.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/core/env.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GACxB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa;IACzC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ResourceFiber } from "./types.js";
|
|
2
2
|
export declare function withResourceFiber<R, P>(fiber: ResourceFiber<R, P>, fn: () => void): void;
|
|
3
3
|
export declare function getCurrentResourceFiber(): ResourceFiber<unknown, unknown>;
|
|
4
|
+
export declare function getDevStrictMode(enable: boolean): "root" | "child" | null;
|
|
4
5
|
//# sourceMappingURL=execution-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/core/execution-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/core/execution-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAgB;AAIxC,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EACpC,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,IAAI,GACb,IAAI,CAoBN;AACD,wBAAgB,uBAAuB,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAKzE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,2BAM/C"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDevelopment } from "./env.js";
|
|
1
2
|
let currentResourceFiber = null;
|
|
2
3
|
export function withResourceFiber(fiber, fn) {
|
|
3
4
|
fiber.currentIndex = 0;
|
|
@@ -22,4 +23,11 @@ export function getCurrentResourceFiber() {
|
|
|
22
23
|
}
|
|
23
24
|
return currentResourceFiber;
|
|
24
25
|
}
|
|
26
|
+
export function getDevStrictMode(enable) {
|
|
27
|
+
if (!isDevelopment)
|
|
28
|
+
return null;
|
|
29
|
+
if (currentResourceFiber?.devStrictMode)
|
|
30
|
+
return currentResourceFiber.isFirstRender ? "child" : "root";
|
|
31
|
+
return enable ? "root" : null;
|
|
32
|
+
}
|
|
25
33
|
//# sourceMappingURL=execution-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/core/execution-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/core/execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAc;AAGtC,IAAI,oBAAoB,GAAmC,IAAI,CAAC;AAEhE,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,EAAc;IAEd,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;IAEvB,MAAM,eAAe,GAAG,oBAAoB,CAAC;IAC7C,oBAAoB,GAAG,KAAK,CAAC;IAC7B,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;QAEL,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;QAE5B,4BAA4B;QAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,YAAY,KAAK,CAAC,YAAY,uBAAuB,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI;gBACzE,+DAA+D,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,oBAAoB,GAAG,eAAe,CAAC;IACzC,CAAC;AACH,CAAC;AACD,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,oBAAoB,EAAE,aAAa;QACrC,OAAO,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAE/D,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC"}
|
package/dist/core/resource.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function resource<R>(fn: () => R):
|
|
3
|
-
export declare function resource<R, P>(fn: (props: P) => R):
|
|
1
|
+
import { ResourceElement } from "./types.js";
|
|
2
|
+
export declare function resource<R>(fn: () => R): () => ResourceElement<R, undefined>;
|
|
3
|
+
export declare function resource<R, P>(fn: (props: P) => R): (props: P) => ResourceElement<R, P>;
|
|
4
4
|
//# sourceMappingURL=resource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/core/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/core/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAgB;AAG1C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC9E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAC3B,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAClB,CAAC,KAAK,EAAE,CAAC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/core/resource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,4BAAyB;
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/core/resource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,4BAAyB;AAM5C,MAAM,UAAU,QAAQ,CAAmB,EAAmB;IAC5D,MAAM,IAAI,GAAG,CAAC,KAAS,EAAE,EAAE;QACzB,OAAO;YACL,IAAI;YACJ,KAAK,EAAE,KAAM;SACkB,CAAC;IACpC,CAAC,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAEpB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/core/scheduler.d.ts
CHANGED
|
@@ -7,6 +7,6 @@ export declare class UpdateScheduler {
|
|
|
7
7
|
markDirty(): void;
|
|
8
8
|
runTask(): void;
|
|
9
9
|
}
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const flushResourcesSync: <T>(callback: () => T) => T;
|
|
11
11
|
export {};
|
|
12
12
|
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;AAavB,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,QAAQ,CAAS;gBAEI,KAAK,EAAE,IAAI;IAExC,IAAI,OAAO,YAEV;IAED,SAAS;IAOT,OAAO;CAIR;AA8CD,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;AAavB,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,QAAQ,CAAS;gBAEI,KAAK,EAAE,IAAI;IAExC,IAAI,OAAO,YAEV;IAED,SAAS;IAOT,OAAO;CAIR;AA8CD,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,UAAU,MAAM,CAAC,KAAG,CAezD,CAAC"}
|
package/dist/core/scheduler.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"AAOA,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,IAAI,UAAU,GAAqB;IACjC,UAAU,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;IACvB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,MAAM,OAAO,eAAe;IAGG;IAFrB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAA6B,KAAW;QAAX,UAAK,GAAL,KAAK,CAAM;IAAG,CAAC;IAE5C,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,aAAa,EAAE,CAAC;IAClB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF;AAED,MAAM,aAAa,GAAG,GAAG,EAAE;IACzB,IAAI,UAAU,CAAC,WAAW;QAAE,OAAO;IACnC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,cAAc,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,EAAE;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9C,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,SAAS;YAEjC,UAAU,EAAE,CAAC;YAEb,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,iEAAiE;oBAC/D,6CAA6C,CAChD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9B,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"AAOA,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,IAAI,UAAU,GAAqB;IACjC,UAAU,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;IACvB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,MAAM,OAAO,eAAe;IAGG;IAFrB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAA6B,KAAW;QAAX,UAAK,GAAL,KAAK,CAAM;IAAG,CAAC;IAE5C,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,aAAa,EAAE,CAAC;IAClB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF;AAED,MAAM,aAAa,GAAG,GAAG,EAAE;IACzB,IAAI,UAAU,CAAC,WAAW;QAAE,OAAO;IACnC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,cAAc,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,EAAE;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9C,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,SAAS;YAEjC,UAAU,EAAE,CAAC;YAEb,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,iEAAiE;oBAC/D,6CAA6C,CAChD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9B,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAI,QAAiB,EAAK,EAAE;IAC5D,MAAM,IAAI,GAAG,UAAU,CAAC;IACxB,UAAU,GAAG;QACX,UAAU,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;QACvB,WAAW,EAAE,IAAI;KAClB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC1B,cAAc,EAAE,CAAC;QAEjB,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC,CAAC"}
|