@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 +1 @@
1
- {"version":3,"sources":["../../src/core/execution-context.ts"],"sourcesContent":["import { ResourceFiber } from \"./types\";\n\nlet currentResourceFiber: ResourceFiber<any, any> | null = null;\n\nexport function withResourceFiber<R, P>(\n fiber: ResourceFiber<R, P>,\n fn: () => void,\n): void {\n fiber.currentIndex = 0;\n\n const previousContext = currentResourceFiber;\n currentResourceFiber = fiber;\n try {\n fn();\n\n fiber.isFirstRender = false;\n\n // ensure hook count matches\n if (fiber.cells.length !== fiber.currentIndex) {\n throw new Error(\n `Rendered ${fiber.currentIndex} hooks but expected ${fiber.cells.length}. ` +\n \"Hooks must be called in the exact same order in every render.\",\n );\n }\n } finally {\n currentResourceFiber = previousContext;\n }\n}\nexport function getCurrentResourceFiber(): ResourceFiber<unknown, unknown> {\n if (!currentResourceFiber) {\n throw new Error(\"No resource fiber available\");\n }\n return currentResourceFiber;\n}\n"],"mappings":";AAEA,IAAI,uBAAuD;AAEpD,SAAS,kBACd,OACA,IACM;AACN,QAAM,eAAe;AAErB,QAAM,kBAAkB;AACxB,yBAAuB;AACvB,MAAI;AACF,OAAG;AAEH,UAAM,gBAAgB;AAGtB,QAAI,MAAM,MAAM,WAAW,MAAM,cAAc;AAC7C,YAAM,IAAI;AAAA,QACR,YAAY,MAAM,YAAY,uBAAuB,MAAM,MAAM,MAAM;AAAA,MAEzE;AAAA,IACF;AAAA,EACF,UAAE;AACA,2BAAuB;AAAA,EACzB;AACF;AACO,SAAS,0BAA2D;AACzE,MAAI,CAAC,sBAAsB;AACzB,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/core/execution-context.ts"],"names":[],"mappings":"AAEA,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"}
@@ -1,4 +1,4 @@
1
- import { Resource } from "./types";
1
+ import { Resource } from "./types.js";
2
2
  export declare function resource<R>(fn: () => R): Resource<R, undefined>;
3
3
  export declare function resource<R, P>(fn: (props: P) => R): Resource<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,QAAQ,EAAmB,MAAM,SAAS,CAAC;AAEpD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACjE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/core/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAmB,mBAAgB;AAEpD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACjE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -1,16 +1,12 @@
1
- // src/core/resource.ts
2
1
  import { fnSymbol } from "./callResourceFn.js";
3
- function resource(fn) {
4
- const type = (props) => {
5
- return {
6
- type,
7
- props
2
+ export function resource(fn) {
3
+ const type = (props) => {
4
+ return {
5
+ type,
6
+ props: props,
7
+ };
8
8
  };
9
- };
10
- type[fnSymbol] = fn;
11
- return type;
9
+ type[fnSymbol] = fn;
10
+ return type;
12
11
  }
13
- export {
14
- resource
15
- };
16
12
  //# sourceMappingURL=resource.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/resource.ts"],"sourcesContent":["import { Resource, ResourceElement } from \"./types\";\nimport { fnSymbol } from \"./callResourceFn\";\nexport function resource<R>(fn: () => R): Resource<R, undefined>;\nexport function resource<R, P>(fn: (props: P) => R): Resource<R, P>;\nexport function resource<R, P = undefined>(fn: (props: P) => R) {\n const type = (props?: P) => {\n return {\n type,\n props: props!,\n } satisfies ResourceElement<R, P>;\n };\n\n type[fnSymbol] = fn;\n\n return type;\n}\n"],"mappings":";AACA,SAAS,gBAAgB;AAGlB,SAAS,SAA2B,IAAqB;AAC9D,QAAM,OAAO,CAAC,UAAc;AAC1B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,OAAK,QAAQ,IAAI;AAEjB,SAAO;AACT;","names":[]}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/core/resource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,4BAAyB;AAG5C,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"}
@@ -1,79 +1,80 @@
1
- // src/core/scheduler.ts
2
- var MAX_FLUSH_LIMIT = 50;
3
- var flushState = {
4
- schedulers: /* @__PURE__ */ new Set([]),
5
- isScheduled: false
1
+ const MAX_FLUSH_LIMIT = 50;
2
+ let flushState = {
3
+ schedulers: new Set([]),
4
+ isScheduled: false,
6
5
  };
7
- var UpdateScheduler = class {
8
- constructor(_task) {
9
- this._task = _task;
10
- }
11
- _isDirty = false;
12
- get isDirty() {
13
- return this._isDirty;
14
- }
15
- markDirty() {
16
- this._isDirty = true;
17
- flushState.schedulers.add(this);
18
- scheduleFlush();
19
- }
20
- runTask() {
21
- this._isDirty = false;
22
- this._task();
23
- }
24
- };
25
- var scheduleFlush = () => {
26
- if (flushState.isScheduled) return;
27
- flushState.isScheduled = true;
28
- queueMicrotask(flushScheduled);
29
- };
30
- var flushScheduled = () => {
31
- try {
32
- const errors = [];
33
- let flushDepth = 0;
34
- for (const scheduler of flushState.schedulers) {
35
- flushState.schedulers.delete(scheduler);
36
- if (!scheduler.isDirty) continue;
37
- flushDepth++;
38
- if (flushDepth > MAX_FLUSH_LIMIT) {
39
- throw new Error(
40
- `Maximum update depth exceeded. This can happen when a resource repeatedly calls setState inside tapEffect.`
41
- );
42
- }
43
- try {
44
- scheduler.runTask();
45
- } catch (error) {
46
- errors.push(error);
47
- }
6
+ export class UpdateScheduler {
7
+ _task;
8
+ _isDirty = false;
9
+ constructor(_task) {
10
+ this._task = _task;
11
+ }
12
+ get isDirty() {
13
+ return this._isDirty;
14
+ }
15
+ markDirty() {
16
+ this._isDirty = true;
17
+ flushState.schedulers.add(this);
18
+ scheduleFlush();
48
19
  }
49
- if (errors.length > 0) {
50
- if (errors.length === 1) {
51
- throw errors[0];
52
- } else {
53
- throw new AggregateError(errors, "Errors occurred during flushSync");
54
- }
20
+ runTask() {
21
+ this._isDirty = false;
22
+ this._task();
55
23
  }
56
- } finally {
57
- flushState.schedulers.clear();
58
- flushState.isScheduled = false;
59
- }
24
+ }
25
+ const scheduleFlush = () => {
26
+ if (flushState.isScheduled)
27
+ return;
28
+ flushState.isScheduled = true;
29
+ queueMicrotask(flushScheduled);
60
30
  };
61
- var flushSync = (callback) => {
62
- const prev = flushState;
63
- flushState = {
64
- schedulers: /* @__PURE__ */ new Set([]),
65
- isScheduled: true
66
- };
67
- try {
68
- const result = callback();
69
- flushScheduled();
70
- return result;
71
- } finally {
72
- flushState = prev;
73
- }
31
+ const flushScheduled = () => {
32
+ try {
33
+ const errors = [];
34
+ let flushDepth = 0;
35
+ for (const scheduler of flushState.schedulers) {
36
+ flushState.schedulers.delete(scheduler);
37
+ if (!scheduler.isDirty)
38
+ continue;
39
+ flushDepth++;
40
+ if (flushDepth > MAX_FLUSH_LIMIT) {
41
+ throw new Error(`Maximum update depth exceeded. This can happen when a resource ` +
42
+ `repeatedly calls setState inside tapEffect.`);
43
+ }
44
+ try {
45
+ scheduler.runTask();
46
+ }
47
+ catch (error) {
48
+ errors.push(error);
49
+ }
50
+ }
51
+ if (errors.length > 0) {
52
+ if (errors.length === 1) {
53
+ throw errors[0];
54
+ }
55
+ else {
56
+ throw new AggregateError(errors, "Errors occurred during flushSync");
57
+ }
58
+ }
59
+ }
60
+ finally {
61
+ flushState.schedulers.clear();
62
+ flushState.isScheduled = false;
63
+ }
74
64
  };
75
- export {
76
- UpdateScheduler,
77
- flushSync
65
+ export const flushSync = (callback) => {
66
+ const prev = flushState;
67
+ flushState = {
68
+ schedulers: new Set([]),
69
+ isScheduled: true,
70
+ };
71
+ try {
72
+ const result = callback();
73
+ flushScheduled();
74
+ return result;
75
+ }
76
+ finally {
77
+ flushState = prev;
78
+ }
78
79
  };
79
80
  //# sourceMappingURL=scheduler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/scheduler.ts"],"sourcesContent":["type Task = () => void;\n\ntype GlobalFlushState = {\n schedulers: Set<UpdateScheduler>;\n isScheduled: boolean;\n};\n\nconst MAX_FLUSH_LIMIT = 50;\nlet flushState: GlobalFlushState = {\n schedulers: new Set([]),\n isScheduled: false,\n};\n\nexport class UpdateScheduler {\n private _isDirty = false;\n\n constructor(private readonly _task: Task) {}\n\n get isDirty() {\n return this._isDirty;\n }\n\n markDirty() {\n this._isDirty = true;\n\n flushState.schedulers.add(this);\n scheduleFlush();\n }\n\n runTask() {\n this._isDirty = false;\n this._task();\n }\n}\n\nconst scheduleFlush = () => {\n if (flushState.isScheduled) return;\n flushState.isScheduled = true;\n queueMicrotask(flushScheduled);\n};\n\nconst flushScheduled = () => {\n try {\n const errors = [];\n let flushDepth = 0;\n\n for (const scheduler of flushState.schedulers) {\n flushState.schedulers.delete(scheduler);\n if (!scheduler.isDirty) continue;\n\n flushDepth++;\n\n if (flushDepth > MAX_FLUSH_LIMIT) {\n throw new Error(\n `Maximum update depth exceeded. This can happen when a resource ` +\n `repeatedly calls setState inside tapEffect.`,\n );\n }\n\n try {\n scheduler.runTask();\n } catch (error) {\n errors.push(error);\n }\n }\n\n if (errors.length > 0) {\n if (errors.length === 1) {\n throw errors[0];\n } else {\n throw new AggregateError(errors, \"Errors occurred during flushSync\");\n }\n }\n } finally {\n flushState.schedulers.clear();\n flushState.isScheduled = false;\n }\n};\n\nexport const flushSync = <T>(callback: () => T): T => {\n const prev = flushState;\n flushState = {\n schedulers: new Set([]),\n isScheduled: true,\n };\n\n try {\n const result = callback();\n flushScheduled();\n\n return result;\n } finally {\n flushState = prev;\n }\n};\n"],"mappings":";AAOA,IAAM,kBAAkB;AACxB,IAAI,aAA+B;AAAA,EACjC,YAAY,oBAAI,IAAI,CAAC,CAAC;AAAA,EACtB,aAAa;AACf;AAEO,IAAM,kBAAN,MAAsB;AAAA,EAG3B,YAA6B,OAAa;AAAb;AAAA,EAAc;AAAA,EAFnC,WAAW;AAAA,EAInB,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY;AACV,SAAK,WAAW;AAEhB,eAAW,WAAW,IAAI,IAAI;AAC9B,kBAAc;AAAA,EAChB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAChB,SAAK,MAAM;AAAA,EACb;AACF;AAEA,IAAM,gBAAgB,MAAM;AAC1B,MAAI,WAAW,YAAa;AAC5B,aAAW,cAAc;AACzB,iBAAe,cAAc;AAC/B;AAEA,IAAM,iBAAiB,MAAM;AAC3B,MAAI;AACF,UAAM,SAAS,CAAC;AAChB,QAAI,aAAa;AAEjB,eAAW,aAAa,WAAW,YAAY;AAC7C,iBAAW,WAAW,OAAO,SAAS;AACtC,UAAI,CAAC,UAAU,QAAS;AAExB;AAEA,UAAI,aAAa,iBAAiB;AAChC,cAAM,IAAI;AAAA,UACR;AAAA,QAEF;AAAA,MACF;AAEA,UAAI;AACF,kBAAU,QAAQ;AAAA,MACpB,SAAS,OAAO;AACd,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,GAAG;AACrB,UAAI,OAAO,WAAW,GAAG;AACvB,cAAM,OAAO,CAAC;AAAA,MAChB,OAAO;AACL,cAAM,IAAI,eAAe,QAAQ,kCAAkC;AAAA,MACrE;AAAA,IACF;AAAA,EACF,UAAE;AACA,eAAW,WAAW,MAAM;AAC5B,eAAW,cAAc;AAAA,EAC3B;AACF;AAEO,IAAM,YAAY,CAAI,aAAyB;AACpD,QAAM,OAAO;AACb,eAAa;AAAA,IACX,YAAY,oBAAI,IAAI,CAAC,CAAC;AAAA,IACtB,aAAa;AAAA,EACf;AAEA,MAAI;AACF,UAAM,SAAS,SAAS;AACxB,mBAAe;AAEf,WAAO;AAAA,EACT,UAAE;AACA,iBAAa;AAAA,EACf;AACF;","names":[]}
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,SAAS,GAAG,CAAI,QAAiB,EAAK,EAAE;IACnD,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"}
@@ -1,6 +1,6 @@
1
- import type { tapEffect } from "../hooks/tap-effect";
2
- import type { tapState } from "../hooks/tap-state";
3
- import { fnSymbol } from "./callResourceFn";
1
+ import type { tapEffect } from "../hooks/tap-effect.js";
2
+ import type { tapState } from "../hooks/tap-state.js";
3
+ import { fnSymbol } from "./callResourceFn.js";
4
4
  export type ResourceElement<R, P = any> = {
5
5
  type: Resource<R, P> & {
6
6
  [fnSymbol]: (props: P) => R;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI;IACxC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAA;KAAE,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,KAAK,YAAY,CAAC,CAAC,IAAI,SAAS,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtE,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAC3B,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KACrB,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3B,MAAM,MAAM,qBAAqB,CAAC,CAAC,EAAE,CAAC,IAAI,CACxC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KACrB,eAAe,CAAC,CAAC,CAAC,CAAC;AAExB,MAAM,MAAM,qBAAqB,CAAC,CAAC,IACjC,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEtD,MAAM,MAAM,IAAI,GACZ;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;IACX,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;CACpD,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;IAC3C,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;CACvC,CAAC;AAEN,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IAErB,aAAa,EAAE,YAAY,GAAG,SAAS,CAAC;IAExC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,+BAA4B;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,8BAA2B;AACnD,OAAO,EAAE,QAAQ,EAAE,4BAAyB;AAE5C,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI;IACxC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAA;KAAE,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,KAAK,YAAY,CAAC,CAAC,IAAI,SAAS,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtE,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAC3B,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KACrB,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3B,MAAM,MAAM,qBAAqB,CAAC,CAAC,EAAE,CAAC,IAAI,CACxC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KACrB,eAAe,CAAC,CAAC,CAAC,CAAC;AAExB,MAAM,MAAM,qBAAqB,CAAC,CAAC,IACjC,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEtD,MAAM,MAAM,IAAI,GACZ;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;IACX,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;CACpD,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;IAC3C,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;CACvC,CAAC;AAEN,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IAErB,aAAa,EAAE,YAAY,GAAG,SAAS,CAAC;IAExC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;CACzB"}
@@ -1 +1,2 @@
1
+ import { fnSymbol } from "./callResourceFn.js";
1
2
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,4BAAyB"}
@@ -1,12 +1,10 @@
1
- // src/hooks/depsShallowEqual.ts
2
- var depsShallowEqual = (a, b) => {
3
- if (a.length !== b.length) return false;
4
- for (let i = 0; i < a.length; i++) {
5
- if (!Object.is(a[i], b[i])) return false;
6
- }
7
- return true;
8
- };
9
- export {
10
- depsShallowEqual
1
+ export const depsShallowEqual = (a, b) => {
2
+ if (a.length !== b.length)
3
+ return false;
4
+ for (let i = 0; i < a.length; i++) {
5
+ if (!Object.is(a[i], b[i]))
6
+ return false;
7
+ }
8
+ return true;
11
9
  };
12
10
  //# sourceMappingURL=depsShallowEqual.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/depsShallowEqual.ts"],"sourcesContent":["export const depsShallowEqual = (\n a: readonly unknown[],\n b: readonly unknown[],\n) => {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!Object.is(a[i], b[i])) return false;\n }\n return true;\n};\n"],"mappings":";AAAO,IAAM,mBAAmB,CAC9B,GACA,MACG;AACH,MAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,QAAI,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAG,QAAO;AAAA,EACrC;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"file":"depsShallowEqual.js","sourceRoot":"","sources":["../../src/hooks/depsShallowEqual.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,CAAqB,EACrB,CAAqB,EACrB,EAAE;IACF,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -1,9 +1,5 @@
1
- // src/hooks/tap-callback.ts
2
1
  import { tapMemo } from "./tap-memo.js";
3
- var tapCallback = (fn, deps) => {
4
- return tapMemo(() => fn, deps);
5
- };
6
- export {
7
- tapCallback
2
+ export const tapCallback = (fn, deps) => {
3
+ return tapMemo(() => fn, deps);
8
4
  };
9
5
  //# sourceMappingURL=tap-callback.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-callback.ts"],"sourcesContent":["import { tapMemo } from \"./tap-memo\";\n\nexport const tapCallback = <T extends (...args: any[]) => any>(\n fn: T,\n deps: readonly unknown[],\n): T => {\n return tapMemo(() => fn, deps);\n};\n"],"mappings":";AAAA,SAAS,eAAe;AAEjB,IAAM,cAAc,CACzB,IACA,SACM;AACN,SAAO,QAAQ,MAAM,IAAI,IAAI;AAC/B;","names":[]}
1
+ {"version":3,"file":"tap-callback.js","sourceRoot":"","sources":["../../src/hooks/tap-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,sBAAmB;AAErC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,EAAK,EACL,IAAwB,EACrB,EAAE;IACL,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC,CAAC"}
@@ -1,14 +1,25 @@
1
- // src/hooks/tap-effect-event.ts
2
1
  import { tapRef } from "./tap-ref.js";
3
2
  import { tapEffect } from "./tap-effect.js";
4
- function tapEffectEvent(callback) {
5
- const callbackRef = tapRef(callback);
6
- tapEffect(() => {
7
- callbackRef.current = callback;
8
- });
9
- return callbackRef.current;
3
+ /**
4
+ * Creates a stable function reference that always calls the most recent version of the callback.
5
+ * Similar to React's useEffectEvent hook.
6
+ *
7
+ * @param callback - The callback function to wrap
8
+ * @returns A stable function reference that always calls the latest callback
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const handleClick = tapEffectEvent((value: string) => {
13
+ * console.log(value);
14
+ * });
15
+ * // handleClick reference is stable, but always calls the latest version
16
+ * ```
17
+ */
18
+ export function tapEffectEvent(callback) {
19
+ const callbackRef = tapRef(callback);
20
+ tapEffect(() => {
21
+ callbackRef.current = callback;
22
+ });
23
+ return callbackRef.current;
10
24
  }
11
- export {
12
- tapEffectEvent
13
- };
14
25
  //# sourceMappingURL=tap-effect-event.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-effect-event.ts"],"sourcesContent":["import { tapRef } from \"./tap-ref\";\nimport { tapEffect } from \"./tap-effect\";\n\n/**\n * Creates a stable function reference that always calls the most recent version of the callback.\n * Similar to React's useEffectEvent hook.\n *\n * @param callback - The callback function to wrap\n * @returns A stable function reference that always calls the latest callback\n *\n * @example\n * ```typescript\n * const handleClick = tapEffectEvent((value: string) => {\n * console.log(value);\n * });\n * // handleClick reference is stable, but always calls the latest version\n * ```\n */\nexport function tapEffectEvent<T extends (...args: any[]) => any>(\n callback: T,\n): T {\n const callbackRef = tapRef(callback);\n\n tapEffect(() => {\n callbackRef.current = callback;\n });\n\n return callbackRef.current;\n}\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAiBnB,SAAS,eACd,UACG;AACH,QAAM,cAAc,OAAO,QAAQ;AAEnC,YAAU,MAAM;AACd,gBAAY,UAAU;AAAA,EACxB,CAAC;AAED,SAAO,YAAY;AACrB;","names":[]}
1
+ {"version":3,"file":"tap-effect-event.js","sourceRoot":"","sources":["../../src/hooks/tap-effect-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,qBAAkB;AACnC,OAAO,EAAE,SAAS,EAAE,wBAAqB;AAEzC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAW;IAEX,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC"}
@@ -1,36 +1,35 @@
1
- // src/hooks/tap-effect.ts
2
1
  import { getCurrentResourceFiber } from "../core/execution-context.js";
3
2
  function getEffectCell() {
4
- const fiber = getCurrentResourceFiber();
5
- const index = fiber.currentIndex++;
6
- if (!fiber.isFirstRender && index >= fiber.cells.length) {
7
- throw new Error(
8
- "Rendered more hooks than during the previous render. Hooks must be called in the exact same order in every render."
9
- );
10
- }
11
- if (!fiber.cells[index]) {
12
- const cell2 = {
13
- type: "effect",
14
- mounted: false
15
- };
16
- fiber.cells[index] = cell2;
17
- }
18
- const cell = fiber.cells[index];
19
- if (cell.type !== "effect") {
20
- throw new Error("Hook order changed between renders");
21
- }
22
- return index;
3
+ const fiber = getCurrentResourceFiber();
4
+ const index = fiber.currentIndex++;
5
+ // Check if we're trying to use more hooks than in previous renders
6
+ if (!fiber.isFirstRender && index >= fiber.cells.length) {
7
+ throw new Error("Rendered more hooks than during the previous render. " +
8
+ "Hooks must be called in the exact same order in every render.");
9
+ }
10
+ if (!fiber.cells[index]) {
11
+ // Create the effect cell
12
+ const cell = {
13
+ type: "effect",
14
+ mounted: false,
15
+ };
16
+ fiber.cells[index] = cell;
17
+ }
18
+ const cell = fiber.cells[index];
19
+ if (cell.type !== "effect") {
20
+ throw new Error("Hook order changed between renders");
21
+ }
22
+ return index;
23
23
  }
24
- function tapEffect(effect, deps) {
25
- const fiber = getCurrentResourceFiber();
26
- const cellIndex = getEffectCell();
27
- fiber.renderContext.commitTasks.push({
28
- effect,
29
- deps,
30
- cellIndex
31
- });
24
+ export function tapEffect(effect, deps) {
25
+ const fiber = getCurrentResourceFiber();
26
+ // Reserve a spot for the effect cell and get its index
27
+ const cellIndex = getEffectCell();
28
+ // Add task to render context for execution in commit phase
29
+ fiber.renderContext.commitTasks.push({
30
+ effect,
31
+ deps,
32
+ cellIndex,
33
+ });
32
34
  }
33
- export {
34
- tapEffect
35
- };
36
35
  //# sourceMappingURL=tap-effect.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-effect.ts"],"sourcesContent":["import { getCurrentResourceFiber } from \"../core/execution-context\";\nimport { Cell } from \"../core/types\";\n\nfunction getEffectCell(): number {\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 // Create the effect cell\n const cell: Cell & { type: \"effect\" } = {\n type: \"effect\",\n mounted: false,\n };\n\n fiber.cells[index] = cell;\n }\n\n const cell = fiber.cells[index];\n if (cell.type !== \"effect\") {\n throw new Error(\"Hook order changed between renders\");\n }\n\n return index;\n}\n\nexport namespace tapEffect {\n export type Destructor = () => void;\n export type EffectCallback = () => void | Destructor;\n}\n\nexport function tapEffect(effect: tapEffect.EffectCallback): void;\nexport function tapEffect(\n effect: tapEffect.EffectCallback,\n deps: readonly unknown[],\n): void;\nexport function tapEffect(\n effect: tapEffect.EffectCallback,\n deps?: readonly unknown[],\n): void {\n const fiber = getCurrentResourceFiber();\n\n // Reserve a spot for the effect cell and get its index\n const cellIndex = getEffectCell();\n\n // Add task to render context for execution in commit phase\n fiber.renderContext!.commitTasks.push({\n effect,\n deps,\n cellIndex,\n });\n}\n"],"mappings":";AAAA,SAAS,+BAA+B;AAGxC,SAAS,gBAAwB;AAC/B,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,UAAMA,QAAkC;AAAA,MACtC,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAEA,UAAM,MAAM,KAAK,IAAIA;AAAA,EACvB;AAEA,QAAM,OAAO,MAAM,MAAM,KAAK;AAC9B,MAAI,KAAK,SAAS,UAAU;AAC1B,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAEA,SAAO;AACT;AAYO,SAAS,UACd,QACA,MACM;AACN,QAAM,QAAQ,wBAAwB;AAGtC,QAAM,YAAY,cAAc;AAGhC,QAAM,cAAe,YAAY,KAAK;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;","names":["cell"]}
1
+ {"version":3,"file":"tap-effect.js","sourceRoot":"","sources":["../../src/hooks/tap-effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,qCAAkC;AAGpE,SAAS,aAAa;IACpB,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,yBAAyB;QACzB,MAAM,IAAI,GAA8B;YACtC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,KAAK;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,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAYD,MAAM,UAAU,SAAS,CACvB,MAAgC,EAChC,IAAyB;IAEzB,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;IAExC,uDAAuD;IACvD,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAElC,2DAA2D;IAC3D,KAAK,CAAC,aAAc,CAAC,WAAW,CAAC,IAAI,CAAC;QACpC,MAAM;QACN,IAAI;QACJ,SAAS;KACV,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +1,3 @@
1
- import { ExtractResourceOutput, ResourceElement } from "../core/types";
1
+ import { ExtractResourceOutput, ResourceElement } from "../core/types.js";
2
2
  export declare function tapInlineResource<E extends ResourceElement<any, any>>(element: E): ExtractResourceOutput<E>;
3
3
  //# sourceMappingURL=tap-inline-resource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tap-inline-resource.d.ts","sourceRoot":"","sources":["../../src/hooks/tap-inline-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGvE,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EACnE,OAAO,EAAE,CAAC,GACT,qBAAqB,CAAC,CAAC,CAAC,CAE1B"}
1
+ {"version":3,"file":"tap-inline-resource.d.ts","sourceRoot":"","sources":["../../src/hooks/tap-inline-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,yBAAsB;AAGvE,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EACnE,OAAO,EAAE,CAAC,GACT,qBAAqB,CAAC,CAAC,CAAC,CAE1B"}
@@ -1,9 +1,5 @@
1
- // src/hooks/tap-inline-resource.ts
2
1
  import { callResourceFn } from "../core/callResourceFn.js";
3
- function tapInlineResource(element) {
4
- return callResourceFn(element.type, element.props);
2
+ export function tapInlineResource(element) {
3
+ return callResourceFn(element.type, element.props);
5
4
  }
6
- export {
7
- tapInlineResource
8
- };
9
5
  //# sourceMappingURL=tap-inline-resource.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-inline-resource.ts"],"sourcesContent":["import { ExtractResourceOutput, ResourceElement } from \"../core/types\";\nimport { callResourceFn } from \"../core/callResourceFn\";\n\nexport function tapInlineResource<E extends ResourceElement<any, any>>(\n element: E,\n): ExtractResourceOutput<E> {\n return callResourceFn(element.type, element.props);\n}\n"],"mappings":";AACA,SAAS,sBAAsB;AAExB,SAAS,kBACd,SAC0B;AAC1B,SAAO,eAAe,QAAQ,MAAM,QAAQ,KAAK;AACnD;","names":[]}
1
+ {"version":3,"file":"tap-inline-resource.js","sourceRoot":"","sources":["../../src/hooks/tap-inline-resource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAA+B;AAExD,MAAM,UAAU,iBAAiB,CAC/B,OAAU;IAEV,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC"}
@@ -1,18 +1,14 @@
1
- // src/hooks/tap-memo.ts
2
1
  import { tapRef } from "./tap-ref.js";
3
2
  import { depsShallowEqual } from "./depsShallowEqual.js";
4
- var tapMemo = (fn, deps) => {
5
- const dataRef = tapRef();
6
- if (!dataRef.current) {
7
- dataRef.current = { value: fn(), deps };
8
- }
9
- if (!depsShallowEqual(dataRef.current.deps, deps)) {
10
- dataRef.current.value = fn();
11
- dataRef.current.deps = deps;
12
- }
13
- return dataRef.current.value;
14
- };
15
- export {
16
- tapMemo
3
+ export const tapMemo = (fn, deps) => {
4
+ const dataRef = tapRef();
5
+ if (!dataRef.current) {
6
+ dataRef.current = { value: fn(), deps };
7
+ }
8
+ if (!depsShallowEqual(dataRef.current.deps, deps)) {
9
+ dataRef.current.value = fn();
10
+ dataRef.current.deps = deps;
11
+ }
12
+ return dataRef.current.value;
17
13
  };
18
14
  //# sourceMappingURL=tap-memo.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-memo.ts"],"sourcesContent":["import { tapRef } from \"./tap-ref\";\nimport { depsShallowEqual } from \"./depsShallowEqual\";\n\nexport const tapMemo = <T>(fn: () => T, deps: readonly unknown[]) => {\n const dataRef = tapRef<{ value: T; deps: readonly unknown[] }>();\n if (!dataRef.current) {\n dataRef.current = { value: fn(), deps };\n }\n\n if (!depsShallowEqual(dataRef.current.deps, deps)) {\n dataRef.current.value = fn();\n dataRef.current.deps = deps;\n }\n\n return dataRef.current.value;\n};\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,wBAAwB;AAE1B,IAAM,UAAU,CAAI,IAAa,SAA6B;AACnE,QAAM,UAAU,OAA+C;AAC/D,MAAI,CAAC,QAAQ,SAAS;AACpB,YAAQ,UAAU,EAAE,OAAO,GAAG,GAAG,KAAK;AAAA,EACxC;AAEA,MAAI,CAAC,iBAAiB,QAAQ,QAAQ,MAAM,IAAI,GAAG;AACjD,YAAQ,QAAQ,QAAQ,GAAG;AAC3B,YAAQ,QAAQ,OAAO;AAAA,EACzB;AAEA,SAAO,QAAQ,QAAQ;AACzB;","names":[]}
1
+ {"version":3,"file":"tap-memo.js","sourceRoot":"","sources":["../../src/hooks/tap-memo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,qBAAkB;AACnC,OAAO,EAAE,gBAAgB,EAAE,8BAA2B;AAEtD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,EAAW,EAAE,IAAwB,EAAE,EAAE;IAClE,MAAM,OAAO,GAAG,MAAM,EAA0C,CAAC;IACjE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;QAC7B,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/B,CAAC,CAAC"}
@@ -1,12 +1,8 @@
1
- // src/hooks/tap-ref.ts
2
1
  import { tapState } from "./tap-state.js";
3
- function tapRef(initialValue) {
4
- const [state] = tapState(() => ({
5
- current: initialValue
6
- }));
7
- return state;
2
+ export function tapRef(initialValue) {
3
+ const [state] = tapState(() => ({
4
+ current: initialValue,
5
+ }));
6
+ return state;
8
7
  }
9
- export {
10
- tapRef
11
- };
12
8
  //# sourceMappingURL=tap-ref.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-ref.ts"],"sourcesContent":["import { tapState } from \"./tap-state\";\n\nexport namespace tapRef {\n export interface RefObject<T> {\n current: T;\n }\n}\n\nexport function tapRef<T>(initialValue: T): tapRef.RefObject<T>;\nexport function tapRef<T = undefined>(): tapRef.RefObject<T | undefined>;\nexport function tapRef<T>(initialValue?: T): tapRef.RefObject<T | undefined> {\n const [state] = tapState(() => ({\n current: initialValue,\n }));\n return state;\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AAUlB,SAAS,OAAU,cAAmD;AAC3E,QAAM,CAAC,KAAK,IAAI,SAAS,OAAO;AAAA,IAC9B,SAAS;AAAA,EACX,EAAE;AACF,SAAO;AACT;","names":[]}
1
+ {"version":3,"file":"tap-ref.js","sourceRoot":"","sources":["../../src/hooks/tap-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,uBAAoB;AAUvC,MAAM,UAAU,MAAM,CAAI,YAAgB;IACxC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ExtractResourceOutput, ResourceElement } from "../core/types";
1
+ import { ExtractResourceOutput, ResourceElement } from "../core/types.js";
2
2
  export declare function tapResource<E extends ResourceElement<any, any>>(element: E): ExtractResourceOutput<E>;
3
3
  export declare function tapResource<E extends ResourceElement<any, any>>(element: E, deps: readonly unknown[]): ExtractResourceOutput<E>;
4
4
  //# sourceMappingURL=tap-resource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tap-resource.d.ts","sourceRoot":"","sources":["../../src/hooks/tap-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAWvE,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7D,OAAO,EAAE,CAAC,GACT,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC5B,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7D,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"tap-resource.d.ts","sourceRoot":"","sources":["../../src/hooks/tap-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,yBAAsB;AAWvE,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7D,OAAO,EAAE,CAAC,GACT,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC5B,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7D,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAAC"}
@@ -1,33 +1,18 @@
1
- // src/hooks/tap-resource.ts
2
1
  import { tapEffect } from "./tap-effect.js";
3
- import {
4
- createResourceFiber,
5
- unmountResourceFiber,
6
- renderResourceFiber,
7
- commitResourceFiber
8
- } from "../core/ResourceFiber.js";
2
+ import { createResourceFiber, unmountResourceFiber, renderResourceFiber, commitResourceFiber, } from "../core/ResourceFiber.js";
9
3
  import { tapMemo } from "./tap-memo.js";
10
4
  import { tapState } from "./tap-state.js";
11
- function tapResource(element, deps) {
12
- const [stateVersion, rerender] = tapState({});
13
- const fiber = tapMemo(
14
- () => createResourceFiber(element.type, () => rerender({})),
15
- [element.type]
16
- );
17
- const props = deps ? tapMemo(() => element.props, deps) : element.props;
18
- const result = tapMemo(
19
- () => renderResourceFiber(fiber, props),
20
- [fiber, props, stateVersion]
21
- );
22
- tapEffect(() => {
23
- return () => unmountResourceFiber(fiber);
24
- }, [fiber]);
25
- tapEffect(() => {
26
- commitResourceFiber(fiber, result);
27
- }, [fiber, result]);
28
- return result.state;
5
+ export function tapResource(element, deps) {
6
+ const [stateVersion, rerender] = tapState({});
7
+ const fiber = tapMemo(() => createResourceFiber(element.type, () => rerender({})), [element.type]);
8
+ const props = deps ? tapMemo(() => element.props, deps) : element.props;
9
+ const result = tapMemo(() => renderResourceFiber(fiber, props), [fiber, props, stateVersion]);
10
+ tapEffect(() => {
11
+ return () => unmountResourceFiber(fiber);
12
+ }, [fiber]);
13
+ tapEffect(() => {
14
+ commitResourceFiber(fiber, result);
15
+ }, [fiber, result]);
16
+ return result.state;
29
17
  }
30
- export {
31
- tapResource
32
- };
33
18
  //# sourceMappingURL=tap-resource.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/tap-resource.ts"],"sourcesContent":["import { ExtractResourceOutput, ResourceElement } from \"../core/types\";\nimport { tapEffect } from \"./tap-effect\";\nimport {\n createResourceFiber,\n unmountResourceFiber,\n renderResourceFiber,\n commitResourceFiber,\n} from \"../core/ResourceFiber\";\nimport { tapMemo } from \"./tap-memo\";\nimport { tapState } from \"./tap-state\";\n\nexport function tapResource<E extends ResourceElement<any, any>>(\n element: E,\n): ExtractResourceOutput<E>;\nexport function tapResource<E extends ResourceElement<any, any>>(\n element: E,\n deps: readonly unknown[],\n): ExtractResourceOutput<E>;\nexport function tapResource<E extends ResourceElement<any, any>>(\n element: E,\n deps?: readonly unknown[],\n): ExtractResourceOutput<E> {\n const [stateVersion, rerender] = tapState({});\n const fiber = tapMemo(\n () => createResourceFiber(element.type, () => rerender({})),\n [element.type],\n );\n\n const props = deps ? tapMemo(() => element.props, deps) : element.props;\n const result = tapMemo(\n () => renderResourceFiber(fiber, props),\n [fiber, props, stateVersion],\n );\n\n tapEffect(() => {\n return () => unmountResourceFiber(fiber);\n }, [fiber]);\n\n tapEffect(() => {\n commitResourceFiber(fiber, result);\n }, [fiber, result]);\n\n return result.state;\n}\n"],"mappings":";AACA,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;AACxB,SAAS,gBAAgB;AASlB,SAAS,YACd,SACA,MAC0B;AAC1B,QAAM,CAAC,cAAc,QAAQ,IAAI,SAAS,CAAC,CAAC;AAC5C,QAAM,QAAQ;AAAA,IACZ,MAAM,oBAAoB,QAAQ,MAAM,MAAM,SAAS,CAAC,CAAC,CAAC;AAAA,IAC1D,CAAC,QAAQ,IAAI;AAAA,EACf;AAEA,QAAM,QAAQ,OAAO,QAAQ,MAAM,QAAQ,OAAO,IAAI,IAAI,QAAQ;AAClE,QAAM,SAAS;AAAA,IACb,MAAM,oBAAoB,OAAO,KAAK;AAAA,IACtC,CAAC,OAAO,OAAO,YAAY;AAAA,EAC7B;AAEA,YAAU,MAAM;AACd,WAAO,MAAM,qBAAqB,KAAK;AAAA,EACzC,GAAG,CAAC,KAAK,CAAC;AAEV,YAAU,MAAM;AACd,wBAAoB,OAAO,MAAM;AAAA,EACnC,GAAG,CAAC,OAAO,MAAM,CAAC;AAElB,SAAO,OAAO;AAChB;","names":[]}
1
+ {"version":3,"file":"tap-resource.js","sourceRoot":"","sources":["../../src/hooks/tap-resource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,wBAAqB;AACzC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,iCAA8B;AAC/B,OAAO,EAAE,OAAO,EAAE,sBAAmB;AACrC,OAAO,EAAE,QAAQ,EAAE,uBAAoB;AASvC,MAAM,UAAU,WAAW,CACzB,OAAU,EACV,IAAyB;IAEzB,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9C,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,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACxE,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAC7B,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,SAAS,CAAC,GAAG,EAAE;QACb,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpB,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC"}