@assistant-ui/tap 0.3.4 → 0.3.5

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 (107) hide show
  1. package/dist/core/ResourceFiber.d.ts +1 -1
  2. package/dist/core/ResourceFiber.d.ts.map +1 -1
  3. package/dist/core/ResourceFiber.js +35 -40
  4. package/dist/core/ResourceFiber.js.map +1 -1
  5. package/dist/core/callResourceFn.js +15 -12
  6. package/dist/core/callResourceFn.js.map +1 -1
  7. package/dist/core/commit.d.ts +1 -1
  8. package/dist/core/commit.d.ts.map +1 -1
  9. package/dist/core/commit.js +57 -54
  10. package/dist/core/commit.js.map +1 -1
  11. package/dist/core/context.js +16 -21
  12. package/dist/core/context.js.map +1 -1
  13. package/dist/core/createResource.d.ts +1 -1
  14. package/dist/core/createResource.d.ts.map +1 -1
  15. package/dist/core/createResource.js +54 -67
  16. package/dist/core/createResource.js.map +1 -1
  17. package/dist/core/execution-context.d.ts +1 -1
  18. package/dist/core/execution-context.d.ts.map +1 -1
  19. package/dist/core/execution-context.js +21 -25
  20. package/dist/core/execution-context.js.map +1 -1
  21. package/dist/core/resource.d.ts +1 -1
  22. package/dist/core/resource.d.ts.map +1 -1
  23. package/dist/core/resource.js +8 -12
  24. package/dist/core/resource.js.map +1 -1
  25. package/dist/core/scheduler.js +73 -72
  26. package/dist/core/scheduler.js.map +1 -1
  27. package/dist/core/types.d.ts +3 -3
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/core/types.js +1 -0
  30. package/dist/core/types.js.map +1 -1
  31. package/dist/hooks/depsShallowEqual.js +8 -10
  32. package/dist/hooks/depsShallowEqual.js.map +1 -1
  33. package/dist/hooks/tap-callback.js +2 -6
  34. package/dist/hooks/tap-callback.js.map +1 -1
  35. package/dist/hooks/tap-effect-event.js +21 -10
  36. package/dist/hooks/tap-effect-event.js.map +1 -1
  37. package/dist/hooks/tap-effect.js +30 -31
  38. package/dist/hooks/tap-effect.js.map +1 -1
  39. package/dist/hooks/tap-inline-resource.d.ts +1 -1
  40. package/dist/hooks/tap-inline-resource.d.ts.map +1 -1
  41. package/dist/hooks/tap-inline-resource.js +2 -6
  42. package/dist/hooks/tap-inline-resource.js.map +1 -1
  43. package/dist/hooks/tap-memo.js +10 -14
  44. package/dist/hooks/tap-memo.js.map +1 -1
  45. package/dist/hooks/tap-ref.js +5 -9
  46. package/dist/hooks/tap-ref.js.map +1 -1
  47. package/dist/hooks/tap-resource.d.ts +1 -1
  48. package/dist/hooks/tap-resource.d.ts.map +1 -1
  49. package/dist/hooks/tap-resource.js +13 -28
  50. package/dist/hooks/tap-resource.js.map +1 -1
  51. package/dist/hooks/tap-resources.d.ts +1 -1
  52. package/dist/hooks/tap-resources.d.ts.map +1 -1
  53. package/dist/hooks/tap-resources.js +63 -64
  54. package/dist/hooks/tap-resources.js.map +1 -1
  55. package/dist/hooks/tap-state.js +47 -44
  56. package/dist/hooks/tap-state.js.map +1 -1
  57. package/dist/index.d.ts +14 -14
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +18 -31
  60. package/dist/index.js.map +1 -1
  61. package/dist/react/index.d.ts +1 -1
  62. package/dist/react/index.d.ts.map +1 -1
  63. package/dist/react/index.js +1 -5
  64. package/dist/react/index.js.map +1 -1
  65. package/dist/react/use-resource.d.ts +1 -1
  66. package/dist/react/use-resource.d.ts.map +1 -1
  67. package/dist/react/use-resource.js +16 -26
  68. package/dist/react/use-resource.js.map +1 -1
  69. package/package.json +44 -30
  70. package/react/package.json +5 -0
  71. package/src/__tests__/basic/resourceHandle.test.ts +56 -0
  72. package/src/__tests__/basic/tapEffect.basic.test.ts +247 -0
  73. package/src/__tests__/basic/tapResources.basic.test.ts +222 -0
  74. package/src/__tests__/basic/tapState.basic.test.ts +240 -0
  75. package/src/__tests__/errors/errors.effect-errors.test.ts +222 -0
  76. package/src/__tests__/errors/errors.render-errors.test.ts +190 -0
  77. package/src/__tests__/lifecycle/lifecycle.dependencies.test.ts +241 -0
  78. package/src/__tests__/lifecycle/lifecycle.mount-unmount.test.ts +211 -0
  79. package/src/__tests__/rules/rules.hook-count.test.ts +200 -0
  80. package/src/__tests__/rules/rules.hook-order.test.ts +192 -0
  81. package/src/__tests__/test-utils.ts +219 -0
  82. package/src/core/ResourceFiber.ts +58 -0
  83. package/src/core/callResourceFn.ts +21 -0
  84. package/src/core/commit.ts +73 -0
  85. package/src/core/context.ts +28 -0
  86. package/src/core/createResource.ts +116 -0
  87. package/src/core/execution-context.ts +34 -0
  88. package/src/core/resource.ts +16 -0
  89. package/src/core/scheduler.ts +95 -0
  90. package/src/core/types.ts +59 -0
  91. package/src/hooks/depsShallowEqual.ts +10 -0
  92. package/src/hooks/tap-callback.ts +8 -0
  93. package/src/hooks/tap-effect-event.ts +29 -0
  94. package/src/hooks/tap-effect.ts +59 -0
  95. package/src/hooks/tap-inline-resource.ts +8 -0
  96. package/src/hooks/tap-memo.ts +16 -0
  97. package/src/hooks/tap-ref.ts +16 -0
  98. package/src/hooks/tap-resource.ts +44 -0
  99. package/src/hooks/tap-resources.ts +112 -0
  100. package/src/hooks/tap-state.ts +83 -0
  101. package/src/index.ts +31 -0
  102. package/src/react/index.ts +1 -0
  103. package/src/react/use-resource.ts +35 -0
  104. package/dist/__tests__/test-utils.d.ts +0 -79
  105. package/dist/__tests__/test-utils.d.ts.map +0 -1
  106. package/dist/__tests__/test-utils.js +0 -138
  107. package/dist/__tests__/test-utils.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { ExtractResourceOutput, RenderResult, ResourceElement, ResourceFiber } from "../core/types";
1
+ import { ExtractResourceOutput, RenderResult, ResourceElement, ResourceFiber } from "../core/types.js";
2
2
  export type TapResourcesRenderResult<R, K extends string | number | symbol> = {
3
3
  add: [K, ResourceFiber<R, any>][];
4
4
  remove: K[];
@@ -1 +1 @@
1
- {"version":3,"file":"tap-resources.d.ts","sourceRoot":"","sources":["../../src/hooks/tap-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,aAAa,EACd,MAAM,eAAe,CAAC;AAYvB,MAAM,MAAM,wBAAwB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC5E,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACtB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAC/C,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAEnC,GAAG,EAAE,CAAC,EACN,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAC9C,cAAc,EAAE,GAAG,EAAE,GACpB;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;CAAE,CAgF9C"}
1
+ {"version":3,"file":"tap-resources.d.ts","sourceRoot":"","sources":["../../src/hooks/tap-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,aAAa,EACd,yBAAsB;AAYvB,MAAM,MAAM,wBAAwB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC5E,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACtB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAC/C,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAEnC,GAAG,EAAE,CAAC,EACN,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAC9C,cAAc,EAAE,GAAG,EAAE,GACpB;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;CAAE,CAgF9C"}
@@ -1,71 +1,70 @@
1
- // src/hooks/tap-resources.ts
2
1
  import { tapEffect } from "./tap-effect.js";
3
2
  import { tapMemo } from "./tap-memo.js";
4
3
  import { tapState } from "./tap-state.js";
5
4
  import { tapCallback } from "./tap-callback.js";
6
- import {
7
- createResourceFiber,
8
- unmountResourceFiber,
9
- renderResourceFiber,
10
- commitResourceFiber
11
- } from "../core/ResourceFiber.js";
12
- function tapResources(map, getElement, getElementDeps) {
13
- const [version, setVersion] = tapState(0);
14
- const rerender = tapCallback(() => setVersion((v) => v + 1), []);
15
- const [fibers] = tapState(() => /* @__PURE__ */ new Map());
16
- const getElementMemo = tapMemo(() => getElement, getElementDeps);
17
- const results = tapMemo(() => {
18
- const results2 = {
19
- remove: [],
20
- add: [],
21
- commit: [],
22
- return: {}
23
- };
24
- for (const key in map) {
25
- const value = map[key];
26
- const element = getElementMemo(value, key);
27
- let fiber = fibers.get(key);
28
- if (!fiber || fiber.resource !== element.type) {
29
- if (fiber) results2.remove.push(key);
30
- fiber = createResourceFiber(element.type, rerender);
31
- results2.add.push([key, fiber]);
32
- }
33
- const renderResult = renderResourceFiber(fiber, element.props);
34
- results2.commit.push([key, renderResult]);
35
- results2.return[key] = renderResult.state;
36
- }
37
- if (fibers.size > results2.commit.length - results2.add.length + results2.remove.length) {
38
- for (const key of fibers.keys()) {
39
- if (!(key in map)) {
40
- results2.remove.push(key);
5
+ import { createResourceFiber, unmountResourceFiber, renderResourceFiber, commitResourceFiber, } from "../core/ResourceFiber.js";
6
+ export function tapResources(map, getElement, getElementDeps) {
7
+ const [version, setVersion] = tapState(0);
8
+ const rerender = tapCallback(() => setVersion((v) => v + 1), []);
9
+ const [fibers] = tapState(() => new Map());
10
+ const getElementMemo = tapMemo(() => getElement, getElementDeps);
11
+ // Process each element
12
+ const results = tapMemo(() => {
13
+ const results = {
14
+ remove: [],
15
+ add: [],
16
+ commit: [],
17
+ return: {},
18
+ };
19
+ // Create/update fibers and render
20
+ for (const key in map) {
21
+ const value = map[key];
22
+ const element = getElementMemo(value, key);
23
+ let fiber = fibers.get(key);
24
+ // Create new fiber if needed or type changed
25
+ if (!fiber || fiber.resource !== element.type) {
26
+ if (fiber)
27
+ results.remove.push(key);
28
+ fiber = createResourceFiber(element.type, rerender);
29
+ results.add.push([key, fiber]);
30
+ }
31
+ // Render with current props
32
+ const renderResult = renderResourceFiber(fiber, element.props);
33
+ results.commit.push([key, renderResult]);
34
+ results.return[key] = renderResult.state;
41
35
  }
42
- }
43
- }
44
- return results2;
45
- }, [map, getElementMemo, version]);
46
- tapEffect(() => {
47
- return () => {
48
- for (const key of fibers.keys()) {
49
- unmountResourceFiber(fibers.get(key));
50
- fibers.delete(key);
51
- }
52
- };
53
- }, []);
54
- tapEffect(() => {
55
- for (const key of results.remove) {
56
- unmountResourceFiber(fibers.get(key));
57
- fibers.delete(key);
58
- }
59
- for (const [key, fiber] of results.add) {
60
- fibers.set(key, fiber);
61
- }
62
- for (const [key, result] of results.commit) {
63
- commitResourceFiber(fibers.get(key), result);
64
- }
65
- }, [results]);
66
- return results.return;
36
+ // Clean up removed fibers (only if there might be stale ones)
37
+ if (fibers.size >
38
+ results.commit.length - results.add.length + results.remove.length) {
39
+ for (const key of fibers.keys()) {
40
+ if (!(key in map)) {
41
+ results.remove.push(key);
42
+ }
43
+ }
44
+ }
45
+ return results;
46
+ }, [map, getElementMemo, version]);
47
+ // Cleanup on unmount
48
+ tapEffect(() => {
49
+ return () => {
50
+ for (const key of fibers.keys()) {
51
+ unmountResourceFiber(fibers.get(key));
52
+ fibers.delete(key);
53
+ }
54
+ };
55
+ }, []);
56
+ tapEffect(() => {
57
+ for (const key of results.remove) {
58
+ unmountResourceFiber(fibers.get(key));
59
+ fibers.delete(key);
60
+ }
61
+ for (const [key, fiber] of results.add) {
62
+ fibers.set(key, fiber);
63
+ }
64
+ for (const [key, result] of results.commit) {
65
+ commitResourceFiber(fibers.get(key), result);
66
+ }
67
+ }, [results]);
68
+ return results.return;
67
69
  }
68
- export {
69
- tapResources
70
- };
71
70
  //# sourceMappingURL=tap-resources.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-resources.ts"],"sourcesContent":["import {\n ExtractResourceOutput,\n RenderResult,\n ResourceElement,\n ResourceFiber,\n} from \"../core/types\";\nimport { tapEffect } from \"./tap-effect\";\nimport { tapMemo } from \"./tap-memo\";\nimport { tapState } from \"./tap-state\";\nimport { tapCallback } from \"./tap-callback\";\nimport {\n createResourceFiber,\n unmountResourceFiber,\n renderResourceFiber,\n commitResourceFiber,\n} from \"../core/ResourceFiber\";\n\nexport type TapResourcesRenderResult<R, K extends string | number | symbol> = {\n add: [K, ResourceFiber<R, any>][];\n remove: K[];\n commit: [K, RenderResult][];\n return: Record<K, R>;\n};\n\nexport function tapResources<\n M extends Record<string | number | symbol, any>,\n E extends ResourceElement<any, any>,\n>(\n map: M,\n getElement: (t: M[keyof M], key: keyof M) => E,\n getElementDeps: any[],\n): { [K in keyof M]: ExtractResourceOutput<E> } {\n type R = ExtractResourceOutput<E>;\n const [version, setVersion] = tapState(0);\n const rerender = tapCallback(() => setVersion((v) => v + 1), []);\n\n type K = keyof M;\n const [fibers] = tapState(() => new Map<K, ResourceFiber<R, any>>());\n\n const getElementMemo = tapMemo(() => getElement, getElementDeps);\n\n // Process each element\n\n const results = tapMemo(() => {\n const results: TapResourcesRenderResult<R, K> = {\n remove: [],\n add: [],\n commit: [],\n return: {} as Record<K, R>,\n };\n\n // Create/update fibers and render\n for (const key in map) {\n const value = map[key as K];\n const element = getElementMemo(value, key);\n\n let fiber = fibers.get(key);\n\n // Create new fiber if needed or type changed\n if (!fiber || fiber.resource !== element.type) {\n if (fiber) results.remove.push(key);\n fiber = createResourceFiber(element.type, rerender);\n results.add.push([key, fiber]);\n }\n\n // Render with current props\n const renderResult = renderResourceFiber(fiber, element.props);\n results.commit.push([key, renderResult]);\n\n results.return[key] = renderResult.state;\n }\n\n // Clean up removed fibers (only if there might be stale ones)\n if (\n fibers.size >\n results.commit.length - results.add.length + results.remove.length\n ) {\n for (const key of fibers.keys()) {\n if (!(key in map)) {\n results.remove.push(key);\n }\n }\n }\n\n return results;\n }, [map, getElementMemo, version]);\n\n // Cleanup on unmount\n tapEffect(() => {\n return () => {\n for (const key of fibers.keys()) {\n unmountResourceFiber(fibers.get(key)!);\n fibers.delete(key);\n }\n };\n }, []);\n\n tapEffect(() => {\n for (const key of results.remove) {\n unmountResourceFiber(fibers.get(key)!);\n fibers.delete(key);\n }\n for (const [key, fiber] of results.add) {\n fibers.set(key, fiber);\n }\n for (const [key, result] of results.commit) {\n commitResourceFiber(fibers.get(key)!, result);\n }\n }, [results]);\n\n return results.return;\n}\n"],"mappings":";AAMA,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASA,SAAS,aAId,KACA,YACA,gBAC8C;AAE9C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,CAAC;AACxC,QAAM,WAAW,YAAY,MAAM,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;AAG/D,QAAM,CAAC,MAAM,IAAI,SAAS,MAAM,oBAAI,IAA8B,CAAC;AAEnE,QAAM,iBAAiB,QAAQ,MAAM,YAAY,cAAc;AAI/D,QAAM,UAAU,QAAQ,MAAM;AAC5B,UAAMA,WAA0C;AAAA,MAC9C,QAAQ,CAAC;AAAA,MACT,KAAK,CAAC;AAAA,MACN,QAAQ,CAAC;AAAA,MACT,QAAQ,CAAC;AAAA,IACX;AAGA,eAAW,OAAO,KAAK;AACrB,YAAM,QAAQ,IAAI,GAAQ;AAC1B,YAAM,UAAU,eAAe,OAAO,GAAG;AAEzC,UAAI,QAAQ,OAAO,IAAI,GAAG;AAG1B,UAAI,CAAC,SAAS,MAAM,aAAa,QAAQ,MAAM;AAC7C,YAAI,MAAO,CAAAA,SAAQ,OAAO,KAAK,GAAG;AAClC,gBAAQ,oBAAoB,QAAQ,MAAM,QAAQ;AAClD,QAAAA,SAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,MAC/B;AAGA,YAAM,eAAe,oBAAoB,OAAO,QAAQ,KAAK;AAC7D,MAAAA,SAAQ,OAAO,KAAK,CAAC,KAAK,YAAY,CAAC;AAEvC,MAAAA,SAAQ,OAAO,GAAG,IAAI,aAAa;AAAA,IACrC;AAGA,QACE,OAAO,OACPA,SAAQ,OAAO,SAASA,SAAQ,IAAI,SAASA,SAAQ,OAAO,QAC5D;AACA,iBAAW,OAAO,OAAO,KAAK,GAAG;AAC/B,YAAI,EAAE,OAAO,MAAM;AACjB,UAAAA,SAAQ,OAAO,KAAK,GAAG;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,WAAOA;AAAA,EACT,GAAG,CAAC,KAAK,gBAAgB,OAAO,CAAC;AAGjC,YAAU,MAAM;AACd,WAAO,MAAM;AACX,iBAAW,OAAO,OAAO,KAAK,GAAG;AAC/B,6BAAqB,OAAO,IAAI,GAAG,CAAE;AACrC,eAAO,OAAO,GAAG;AAAA,MACnB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,eAAW,OAAO,QAAQ,QAAQ;AAChC,2BAAqB,OAAO,IAAI,GAAG,CAAE;AACrC,aAAO,OAAO,GAAG;AAAA,IACnB;AACA,eAAW,CAAC,KAAK,KAAK,KAAK,QAAQ,KAAK;AACtC,aAAO,IAAI,KAAK,KAAK;AAAA,IACvB;AACA,eAAW,CAAC,KAAK,MAAM,KAAK,QAAQ,QAAQ;AAC1C,0BAAoB,OAAO,IAAI,GAAG,GAAI,MAAM;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO,QAAQ;AACjB;","names":["results"]}
1
+ {"version":3,"file":"tap-resources.js","sourceRoot":"","sources":["../../src/hooks/tap-resources.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,53 @@
1
- // src/hooks/tap-state.ts
2
1
  import { getCurrentResourceFiber } from "../core/execution-context.js";
3
- var rerender = (fiber) => {
4
- if (fiber.renderContext) {
5
- throw new Error("Resource updated during render");
6
- }
7
- if (fiber.isMounted) {
8
- fiber.scheduleRerender();
9
- } else if (fiber.isNeverMounted) {
10
- throw new Error("Resource updated before mount");
11
- }
2
+ const rerender = (fiber) => {
3
+ if (fiber.renderContext) {
4
+ throw new Error("Resource updated during render");
5
+ }
6
+ if (fiber.isMounted) {
7
+ // Only schedule rerender if currently mounted
8
+ fiber.scheduleRerender();
9
+ }
10
+ else if (fiber.isNeverMounted) {
11
+ throw new Error("Resource updated before mount");
12
+ }
12
13
  };
13
14
  function getStateCell(initialValue) {
14
- const fiber = getCurrentResourceFiber();
15
- const index = fiber.currentIndex++;
16
- if (!fiber.isFirstRender && index >= fiber.cells.length) {
17
- throw new Error(
18
- "Rendered more hooks than during the previous render. Hooks must be called in the exact same order in every render."
19
- );
20
- }
21
- if (!fiber.cells[index]) {
22
- const value = typeof initialValue === "function" ? initialValue() : initialValue;
23
- const cell2 = {
24
- type: "state",
25
- value,
26
- set: (updater) => {
27
- const currentValue = cell2.value;
28
- const nextValue = typeof updater === "function" ? updater(currentValue) : updater;
29
- if (!Object.is(currentValue, nextValue)) {
30
- cell2.value = nextValue;
31
- rerender(fiber);
32
- }
33
- }
34
- };
35
- fiber.cells[index] = cell2;
36
- }
37
- const cell = fiber.cells[index];
38
- if (cell.type !== "state") {
39
- throw new Error("Hook order changed between renders");
40
- }
41
- return cell;
15
+ const fiber = getCurrentResourceFiber();
16
+ const index = fiber.currentIndex++;
17
+ // Check if we're trying to use more hooks than in previous renders
18
+ if (!fiber.isFirstRender && index >= fiber.cells.length) {
19
+ throw new Error("Rendered more hooks than during the previous render. " +
20
+ "Hooks must be called in the exact same order in every render.");
21
+ }
22
+ if (!fiber.cells[index]) {
23
+ // Initialize the value immediately
24
+ const value = typeof initialValue === "function"
25
+ ? initialValue()
26
+ : initialValue;
27
+ const cell = {
28
+ type: "state",
29
+ value,
30
+ set: (updater) => {
31
+ const currentValue = cell.value;
32
+ const nextValue = typeof updater === "function"
33
+ ? updater(currentValue)
34
+ : updater;
35
+ if (!Object.is(currentValue, nextValue)) {
36
+ cell.value = nextValue;
37
+ rerender(fiber);
38
+ }
39
+ },
40
+ };
41
+ fiber.cells[index] = cell;
42
+ }
43
+ const cell = fiber.cells[index];
44
+ if (cell.type !== "state") {
45
+ throw new Error("Hook order changed between renders");
46
+ }
47
+ return cell;
42
48
  }
43
- function tapState(initial) {
44
- const cell = getStateCell(initial);
45
- return [cell.value, cell.set];
49
+ export function tapState(initial) {
50
+ const cell = getStateCell(initial);
51
+ return [cell.value, cell.set];
46
52
  }
47
- export {
48
- tapState
49
- };
50
53
  //# sourceMappingURL=tap-state.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-state.ts"],"sourcesContent":["import { getCurrentResourceFiber } from \"../core/execution-context\";\nimport { Cell, ResourceFiber } from \"../core/types\";\n\nexport namespace tapState {\n export type StateUpdater<S> = S | ((prev: S) => S);\n}\n\nconst rerender = (fiber: ResourceFiber<any, any>) => {\n if (fiber.renderContext) {\n throw new Error(\"Resource updated during render\");\n }\n\n if (fiber.isMounted) {\n // Only schedule rerender if currently mounted\n fiber.scheduleRerender();\n } else if (fiber.isNeverMounted) {\n throw new Error(\"Resource updated before mount\");\n }\n};\n\nfunction getStateCell<T>(\n initialValue: T | (() => T),\n): Cell & { type: \"state\" } {\n const fiber = getCurrentResourceFiber();\n const index = fiber.currentIndex++;\n\n // Check if we're trying to use more hooks than in previous renders\n if (!fiber.isFirstRender && index >= fiber.cells.length) {\n throw new Error(\n \"Rendered more hooks than during the previous render. \" +\n \"Hooks must be called in the exact same order in every render.\",\n );\n }\n\n if (!fiber.cells[index]) {\n // Initialize the value immediately\n const value =\n typeof initialValue === \"function\"\n ? (initialValue as () => T)()\n : initialValue;\n\n const cell: Cell & { type: \"state\" } = {\n type: \"state\",\n value,\n set: (updater: tapState.StateUpdater<T>) => {\n const currentValue = cell.value;\n const nextValue =\n typeof updater === \"function\"\n ? (updater as (prev: T) => T)(currentValue)\n : updater;\n\n if (!Object.is(currentValue, nextValue)) {\n cell.value = nextValue;\n rerender(fiber);\n }\n },\n };\n\n fiber.cells[index] = cell;\n }\n\n const cell = fiber.cells[index];\n if (cell.type !== \"state\") {\n throw new Error(\"Hook order changed between renders\");\n }\n\n return cell as Cell & { type: \"state\" };\n}\n\nexport function tapState<S = undefined>(): [\n S | undefined,\n (updater: tapState.StateUpdater<S>) => void,\n];\nexport function tapState<S>(\n initial: S | (() => S),\n): [S, (updater: tapState.StateUpdater<S>) => void];\nexport function tapState<S>(\n initial?: S | (() => S),\n): [S | undefined, (updater: tapState.StateUpdater<S>) => void] {\n const cell = getStateCell(initial as S | (() => S));\n\n return [cell.value, cell.set];\n}\n"],"mappings":";AAAA,SAAS,+BAA+B;AAOxC,IAAM,WAAW,CAAC,UAAmC;AACnD,MAAI,MAAM,eAAe;AACvB,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,MAAI,MAAM,WAAW;AAEnB,UAAM,iBAAiB;AAAA,EACzB,WAAW,MAAM,gBAAgB;AAC/B,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACF;AAEA,SAAS,aACP,cAC0B;AAC1B,QAAM,QAAQ,wBAAwB;AACtC,QAAM,QAAQ,MAAM;AAGpB,MAAI,CAAC,MAAM,iBAAiB,SAAS,MAAM,MAAM,QAAQ;AACvD,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AAEA,MAAI,CAAC,MAAM,MAAM,KAAK,GAAG;AAEvB,UAAM,QACJ,OAAO,iBAAiB,aACnB,aAAyB,IAC1B;AAEN,UAAMA,QAAiC;AAAA,MACrC,MAAM;AAAA,MACN;AAAA,MACA,KAAK,CAAC,YAAsC;AAC1C,cAAM,eAAeA,MAAK;AAC1B,cAAM,YACJ,OAAO,YAAY,aACd,QAA2B,YAAY,IACxC;AAEN,YAAI,CAAC,OAAO,GAAG,cAAc,SAAS,GAAG;AACvC,UAAAA,MAAK,QAAQ;AACb,mBAAS,KAAK;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,KAAK,IAAIA;AAAA,EACvB;AAEA,QAAM,OAAO,MAAM,MAAM,KAAK;AAC9B,MAAI,KAAK,SAAS,SAAS;AACzB,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAEA,SAAO;AACT;AASO,SAAS,SACd,SAC8D;AAC9D,QAAM,OAAO,aAAa,OAAwB;AAElD,SAAO,CAAC,KAAK,OAAO,KAAK,GAAG;AAC9B;","names":["cell"]}
1
+ {"version":3,"file":"tap-state.js","sourceRoot":"","sources":["../../src/hooks/tap-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,qCAAkC;AAOpE,MAAM,QAAQ,GAAG,CAAC,KAA8B,EAAE,EAAE;IAClD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,8CAA8C;QAC9C,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAC3B,CAAC;SAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,YAAY,CACnB,YAA2B;IAE3B,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAEnC,mEAAmE;IACnE,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,uDAAuD;YACrD,+DAA+D,CAClE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,mCAAmC;QACnC,MAAM,KAAK,GACT,OAAO,YAAY,KAAK,UAAU;YAChC,CAAC,CAAE,YAAwB,EAAE;YAC7B,CAAC,CAAC,YAAY,CAAC;QAEnB,MAAM,IAAI,GAA6B;YACrC,IAAI,EAAE,OAAO;YACb,KAAK;YACL,GAAG,EAAE,CAAC,OAAiC,EAAE,EAAE;gBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;gBAChC,MAAM,SAAS,GACb,OAAO,OAAO,KAAK,UAAU;oBAC3B,CAAC,CAAE,OAA0B,CAAC,YAAY,CAAC;oBAC3C,CAAC,CAAC,OAAO,CAAC;gBAEd,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;oBACvB,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;SACF,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,IAAgC,CAAC;AAC1C,CAAC;AASD,MAAM,UAAU,QAAQ,CACtB,OAAuB;IAEvB,MAAM,IAAI,GAAG,YAAY,CAAC,OAAwB,CAAC,CAAC;IAEpD,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,15 +1,15 @@
1
- export { resource } from "./core/resource";
2
- export { tapState } from "./hooks/tap-state";
3
- export { tapEffect } from "./hooks/tap-effect";
4
- export { tapRef } from "./hooks/tap-ref";
5
- export { tapMemo } from "./hooks/tap-memo";
6
- export { tapCallback } from "./hooks/tap-callback";
7
- export { tapEffectEvent } from "./hooks/tap-effect-event";
8
- export { tapResource } from "./hooks/tap-resource";
9
- export { tapInlineResource } from "./hooks/tap-inline-resource";
10
- export { tapResources } from "./hooks/tap-resources";
11
- export { createResource } from "./core/createResource";
12
- export { flushSync } from "./core/scheduler";
13
- export { createContext, tapContext, withContextProvider } from "./core/context";
14
- export type { Resource, ContravariantResource, ResourceElement, ExtractResourceOutput, } from "./core/types";
1
+ export { resource } from "./core/resource.js";
2
+ export { tapState } from "./hooks/tap-state.js";
3
+ export { tapEffect } from "./hooks/tap-effect.js";
4
+ export { tapRef } from "./hooks/tap-ref.js";
5
+ export { tapMemo } from "./hooks/tap-memo.js";
6
+ export { tapCallback } from "./hooks/tap-callback.js";
7
+ export { tapEffectEvent } from "./hooks/tap-effect-event.js";
8
+ export { tapResource } from "./hooks/tap-resource.js";
9
+ export { tapInlineResource } from "./hooks/tap-inline-resource.js";
10
+ export { tapResources } from "./hooks/tap-resources.js";
11
+ export { createResource } from "./core/createResource.js";
12
+ export { flushSync } from "./core/scheduler.js";
13
+ export { createContext, tapContext, withContextProvider } from "./core/context.js";
14
+ export type { Resource, ContravariantResource, ResourceElement, ExtractResourceOutput, } from "./core/types.js";
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGhF,YAAY,EACV,QAAQ,EACR,qBAAqB,EACrB,eAAe,EACf,qBAAqB,GACtB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,2BAAwB;AAG3C,OAAO,EAAE,QAAQ,EAAE,6BAA0B;AAC7C,OAAO,EAAE,SAAS,EAAE,8BAA2B;AAG/C,OAAO,EAAE,MAAM,EAAE,2BAAwB;AACzC,OAAO,EAAE,OAAO,EAAE,4BAAyB;AAC3C,OAAO,EAAE,WAAW,EAAE,gCAA6B;AACnD,OAAO,EAAE,cAAc,EAAE,oCAAiC;AAG1D,OAAO,EAAE,WAAW,EAAE,gCAA6B;AACnD,OAAO,EAAE,iBAAiB,EAAE,uCAAoC;AAChE,OAAO,EAAE,YAAY,EAAE,iCAA8B;AAGrD,OAAO,EAAE,cAAc,EAAE,iCAA8B;AACvD,OAAO,EAAE,SAAS,EAAE,4BAAyB;AAG7C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAAuB;AAGhF,YAAY,EACV,QAAQ,EACR,qBAAqB,EACrB,eAAe,EACf,qBAAqB,GACtB,wBAAqB"}
package/dist/index.js CHANGED
@@ -1,32 +1,19 @@
1
- // src/index.ts
2
- import { resource } from "./core/resource.js";
3
- import { tapState } from "./hooks/tap-state.js";
4
- import { tapEffect } from "./hooks/tap-effect.js";
5
- import { tapRef } from "./hooks/tap-ref.js";
6
- import { tapMemo } from "./hooks/tap-memo.js";
7
- import { tapCallback } from "./hooks/tap-callback.js";
8
- import { tapEffectEvent } from "./hooks/tap-effect-event.js";
9
- import { tapResource } from "./hooks/tap-resource.js";
10
- import { tapInlineResource } from "./hooks/tap-inline-resource.js";
11
- import { tapResources } from "./hooks/tap-resources.js";
12
- import { createResource } from "./core/createResource.js";
13
- import { flushSync } from "./core/scheduler.js";
14
- import { createContext, tapContext, withContextProvider } from "./core/context.js";
15
- export {
16
- createContext,
17
- createResource,
18
- flushSync,
19
- resource,
20
- tapCallback,
21
- tapContext,
22
- tapEffect,
23
- tapEffectEvent,
24
- tapInlineResource,
25
- tapMemo,
26
- tapRef,
27
- tapResource,
28
- tapResources,
29
- tapState,
30
- withContextProvider
31
- };
1
+ export { resource } from "./core/resource.js";
2
+ // primitive hooks
3
+ export { tapState } from "./hooks/tap-state.js";
4
+ export { tapEffect } from "./hooks/tap-effect.js";
5
+ // utility hooks
6
+ export { tapRef } from "./hooks/tap-ref.js";
7
+ export { tapMemo } from "./hooks/tap-memo.js";
8
+ export { tapCallback } from "./hooks/tap-callback.js";
9
+ export { tapEffectEvent } from "./hooks/tap-effect-event.js";
10
+ // resources
11
+ export { tapResource } from "./hooks/tap-resource.js";
12
+ export { tapInlineResource } from "./hooks/tap-inline-resource.js";
13
+ export { tapResources } from "./hooks/tap-resources.js";
14
+ // imperative
15
+ export { createResource } from "./core/createResource.js";
16
+ export { flushSync } from "./core/scheduler.js";
17
+ // context
18
+ export { createContext, tapContext, withContextProvider } from "./core/context.js";
32
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { resource } from \"./core/resource\";\n\n// primitive hooks\nexport { tapState } from \"./hooks/tap-state\";\nexport { tapEffect } from \"./hooks/tap-effect\";\n\n// utility hooks\nexport { tapRef } from \"./hooks/tap-ref\";\nexport { tapMemo } from \"./hooks/tap-memo\";\nexport { tapCallback } from \"./hooks/tap-callback\";\nexport { tapEffectEvent } from \"./hooks/tap-effect-event\";\n\n// resources\nexport { tapResource } from \"./hooks/tap-resource\";\nexport { tapInlineResource } from \"./hooks/tap-inline-resource\";\nexport { tapResources } from \"./hooks/tap-resources\";\n\n// imperative\nexport { createResource } from \"./core/createResource\";\nexport { flushSync } from \"./core/scheduler\";\n\n// context\nexport { createContext, tapContext, withContextProvider } from \"./core/context\";\n\n// types\nexport type {\n Resource,\n ContravariantResource,\n ResourceElement,\n ExtractResourceOutput,\n} from \"./core/types\";\n"],"mappings":";AAAA,SAAS,gBAAgB;AAGzB,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAG1B,SAAS,cAAc;AACvB,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAG/B,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC,SAAS,oBAAoB;AAG7B,SAAS,sBAAsB;AAC/B,SAAS,iBAAiB;AAG1B,SAAS,eAAe,YAAY,2BAA2B;","names":[]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,2BAAwB;AAE3C,kBAAkB;AAClB,OAAO,EAAE,QAAQ,EAAE,6BAA0B;AAC7C,OAAO,EAAE,SAAS,EAAE,8BAA2B;AAE/C,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAE,2BAAwB;AACzC,OAAO,EAAE,OAAO,EAAE,4BAAyB;AAC3C,OAAO,EAAE,WAAW,EAAE,gCAA6B;AACnD,OAAO,EAAE,cAAc,EAAE,oCAAiC;AAE1D,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,gCAA6B;AACnD,OAAO,EAAE,iBAAiB,EAAE,uCAAoC;AAChE,OAAO,EAAE,YAAY,EAAE,iCAA8B;AAErD,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,iCAA8B;AACvD,OAAO,EAAE,SAAS,EAAE,4BAAyB;AAE7C,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAAuB"}
@@ -1,2 +1,2 @@
1
- export { useResource } from "./use-resource";
1
+ export { useResource } from "./use-resource.js";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,0BAAuB"}
@@ -1,6 +1,2 @@
1
- // src/react/index.ts
2
- import { useResource } from "./use-resource.js";
3
- export {
4
- useResource
5
- };
1
+ export { useResource } from "./use-resource.js";
6
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/index.ts"],"sourcesContent":["export { useResource } from \"./use-resource\";\n"],"mappings":";AAAA,SAAS,mBAAmB;","names":[]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,0BAAuB"}
@@ -1,3 +1,3 @@
1
- import { ExtractResourceOutput, ResourceElement } from "../core/types";
1
+ import { ExtractResourceOutput, ResourceElement } from "../core/types.js";
2
2
  export declare function useResource<E extends ResourceElement<any, any>>(element: E): ExtractResourceOutput<E>;
3
3
  //# sourceMappingURL=use-resource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-resource.d.ts","sourceRoot":"","sources":["../../src/react/use-resource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAevE,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7D,OAAO,EAAE,CAAC,GACT,qBAAqB,CAAC,CAAC,CAAC,CAgB1B"}
1
+ {"version":3,"file":"use-resource.d.ts","sourceRoot":"","sources":["../../src/react/use-resource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,yBAAsB;AAevE,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7D,OAAO,EAAE,CAAC,GACT,qBAAqB,CAAC,CAAC,CAAC,CAgB1B"}
@@ -1,29 +1,19 @@
1
- // src/react/use-resource.ts
2
1
  import { useEffect, useLayoutEffect, useMemo, useState } from "react";
3
- import {
4
- createResourceFiber,
5
- unmountResourceFiber,
6
- renderResourceFiber,
7
- commitResourceFiber
8
- } from "../core/ResourceFiber.js";
9
- var shouldAvoidLayoutEffect = globalThis.__ASSISTANT_UI_DISABLE_LAYOUT_EFFECT__ === true;
10
- var useIsomorphicLayoutEffect = shouldAvoidLayoutEffect ? useEffect : useLayoutEffect;
11
- function useResource(element) {
12
- const [, rerender] = useState({});
13
- const fiber = useMemo(
14
- () => createResourceFiber(element.type, () => rerender({})),
15
- [element.type]
16
- );
17
- const result = renderResourceFiber(fiber, element.props);
18
- useIsomorphicLayoutEffect(() => {
19
- return () => unmountResourceFiber(fiber);
20
- }, [fiber]);
21
- useIsomorphicLayoutEffect(() => {
22
- commitResourceFiber(fiber, result);
23
- });
24
- return result.state;
2
+ import { createResourceFiber, unmountResourceFiber, renderResourceFiber, commitResourceFiber, } from "../core/ResourceFiber.js";
3
+ const shouldAvoidLayoutEffect = globalThis.__ASSISTANT_UI_DISABLE_LAYOUT_EFFECT__ === true;
4
+ const useIsomorphicLayoutEffect = shouldAvoidLayoutEffect
5
+ ? useEffect
6
+ : useLayoutEffect;
7
+ export function useResource(element) {
8
+ const [, rerender] = useState({});
9
+ const fiber = useMemo(() => createResourceFiber(element.type, () => rerender({})), [element.type]);
10
+ const result = renderResourceFiber(fiber, element.props);
11
+ useIsomorphicLayoutEffect(() => {
12
+ return () => unmountResourceFiber(fiber);
13
+ }, [fiber]);
14
+ useIsomorphicLayoutEffect(() => {
15
+ commitResourceFiber(fiber, result);
16
+ });
17
+ return result.state;
25
18
  }
26
- export {
27
- useResource
28
- };
29
19
  //# sourceMappingURL=use-resource.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/use-resource.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useMemo, useState } from \"react\";\nimport { ExtractResourceOutput, ResourceElement } from \"../core/types\";\nimport {\n createResourceFiber,\n unmountResourceFiber,\n renderResourceFiber,\n commitResourceFiber,\n} from \"../core/ResourceFiber\";\n\nconst shouldAvoidLayoutEffect =\n (globalThis as any).__ASSISTANT_UI_DISABLE_LAYOUT_EFFECT__ === true;\n\nconst useIsomorphicLayoutEffect = shouldAvoidLayoutEffect\n ? useEffect\n : useLayoutEffect;\n\nexport function useResource<E extends ResourceElement<any, any>>(\n element: E,\n): ExtractResourceOutput<E> {\n const [, rerender] = useState({});\n const fiber = useMemo(\n () => createResourceFiber(element.type, () => rerender({})),\n [element.type],\n );\n\n const result = renderResourceFiber(fiber, element.props);\n useIsomorphicLayoutEffect(() => {\n return () => unmountResourceFiber(fiber);\n }, [fiber]);\n useIsomorphicLayoutEffect(() => {\n commitResourceFiber(fiber, result);\n });\n\n return result.state;\n}\n"],"mappings":";AAAA,SAAS,WAAW,iBAAiB,SAAS,gBAAgB;AAE9D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,IAAM,0BACH,WAAmB,2CAA2C;AAEjE,IAAM,4BAA4B,0BAC9B,YACA;AAEG,SAAS,YACd,SAC0B;AAC1B,QAAM,CAAC,EAAE,QAAQ,IAAI,SAAS,CAAC,CAAC;AAChC,QAAM,QAAQ;AAAA,IACZ,MAAM,oBAAoB,QAAQ,MAAM,MAAM,SAAS,CAAC,CAAC,CAAC;AAAA,IAC1D,CAAC,QAAQ,IAAI;AAAA,EACf;AAEA,QAAM,SAAS,oBAAoB,OAAO,QAAQ,KAAK;AACvD,4BAA0B,MAAM;AAC9B,WAAO,MAAM,qBAAqB,KAAK;AAAA,EACzC,GAAG,CAAC,KAAK,CAAC;AACV,4BAA0B,MAAM;AAC9B,wBAAoB,OAAO,MAAM;AAAA,EACnC,CAAC;AAED,SAAO,OAAO;AAChB;","names":[]}
1
+ {"version":3,"file":"use-resource.js","sourceRoot":"","sources":["../../src/react/use-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,iCAA8B;AAE/B,MAAM,uBAAuB,GAC1B,UAAkB,CAAC,sCAAsC,KAAK,IAAI,CAAC;AAEtE,MAAM,yBAAyB,GAAG,uBAAuB;IACvD,CAAC,CAAC,SAAS;IACX,CAAC,CAAC,eAAe,CAAC;AAEpB,MAAM,UAAU,WAAW,CACzB,OAAU;IAEV,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,OAAO,CAAC,IAAI,CAAC,CACf,CAAC;IAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACzD,yBAAyB,CAAC,GAAG,EAAE;QAC7B,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,yBAAyB,CAAC,GAAG,EAAE;QAC7B,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,58 +1,72 @@
1
1
  {
2
2
  "name": "@assistant-ui/tap",
3
- "version": "0.3.4",
4
- "type": "module",
3
+ "version": "0.3.5",
5
4
  "description": "Zero-dependency reactive state management inspired by React hooks",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "sideEffects": false,
5
+ "keywords": [
6
+ "state-management",
7
+ "reactive",
8
+ "hooks",
9
+ "signals",
10
+ "tap"
11
+ ],
9
12
  "author": "AgentbaseAI Inc.",
10
13
  "license": "MIT",
11
- "dependencies": {},
14
+ "type": "module",
15
+ "exports": {
16
+ ".": {
17
+ "aui-source": "./src/index.ts",
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./react": {
22
+ "aui-source": "./src/react/index.ts",
23
+ "types": "./dist/react/index.d.ts",
24
+ "default": "./dist/react/index.js"
25
+ }
26
+ },
27
+ "main": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "files": [
30
+ "dist",
31
+ "src",
32
+ "react",
33
+ "README.md"
34
+ ],
35
+ "sideEffects": false,
12
36
  "peerDependencies": {
13
- "react": "*"
37
+ "@types/react": "*",
38
+ "react": "^18 || ^19"
14
39
  },
15
40
  "peerDependenciesMeta": {
41
+ "@types/react": {
42
+ "optional": true
43
+ },
16
44
  "react": {
17
45
  "optional": true
18
46
  }
19
47
  },
20
48
  "devDependencies": {
21
- "@types/node": "^25.0.0",
22
- "@types/react": "*",
23
- "@vitest/ui": "^4.0.15",
24
- "tsx": "^4.21.0",
25
- "typescript": "^5.9.3",
26
- "vitest": "^4.0.15",
49
+ "@types/react": "^19.2.7",
50
+ "@vitest/ui": "^4.0.16",
51
+ "vitest": "^4.0.16",
27
52
  "@assistant-ui/x-buildutils": "0.0.1"
28
53
  },
29
- "exports": {
30
- ".": {
31
- "import": "./dist/index.js",
32
- "types": "./dist/index.d.ts"
33
- },
34
- "./react": {
35
- "import": "./dist/react/index.js",
36
- "types": "./dist/react/index.d.ts"
37
- }
38
- },
39
- "files": [
40
- "dist"
41
- ],
42
54
  "publishConfig": {
43
55
  "access": "public",
44
56
  "provenance": true
45
57
  },
58
+ "homepage": "https://www.assistant-ui.com/",
46
59
  "repository": {
47
60
  "type": "git",
48
- "url": "https://github.com/assistant-ui/assistant-ui/tree/main/packages/tap"
61
+ "url": "git+https://github.com/assistant-ui/assistant-ui.git",
62
+ "directory": "packages/tap"
49
63
  },
50
64
  "bugs": {
51
65
  "url": "https://github.com/assistant-ui/assistant-ui/issues"
52
66
  },
53
67
  "scripts": {
54
- "build": "tsx build.mts",
55
- "test": "vitest",
56
- "test:run": "vitest run"
68
+ "build": "aui-build",
69
+ "test": "vitest run",
70
+ "test:watch": "vitest"
57
71
  }
58
72
  }
@@ -0,0 +1,5 @@
1
+ {
2
+ "type": "module",
3
+ "main": "../dist/react/index.js",
4
+ "types": "../dist/react/index.d.ts"
5
+ }