@assistant-ui/tap 0.3.1 → 0.3.3

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 (54) hide show
  1. package/README.md +30 -8
  2. package/dist/__tests__/test-utils.js +7 -7
  3. package/dist/__tests__/test-utils.js.map +1 -1
  4. package/dist/core/ResourceFiber.d.ts +3 -3
  5. package/dist/core/ResourceFiber.d.ts.map +1 -1
  6. package/dist/core/ResourceFiber.js +6 -6
  7. package/dist/core/ResourceFiber.js.map +1 -1
  8. package/dist/core/callResourceFn.js +1 -1
  9. package/dist/core/callResourceFn.js.map +1 -1
  10. package/dist/core/commit.d.ts.map +1 -1
  11. package/dist/core/commit.js +8 -12
  12. package/dist/core/commit.js.map +1 -1
  13. package/dist/core/context.js +1 -1
  14. package/dist/core/context.js.map +1 -1
  15. package/dist/core/{ResourceHandle.d.ts → createResource.d.ts} +6 -5
  16. package/dist/core/createResource.d.ts.map +1 -0
  17. package/dist/core/{ResourceHandle.js → createResource.js} +35 -33
  18. package/dist/core/createResource.js.map +1 -0
  19. package/dist/core/resource.d.ts +2 -2
  20. package/dist/core/resource.d.ts.map +1 -1
  21. package/dist/core/resource.js +2 -3
  22. package/dist/core/resource.js.map +1 -1
  23. package/dist/core/scheduler.d.ts +2 -4
  24. package/dist/core/scheduler.d.ts.map +1 -1
  25. package/dist/core/scheduler.js +60 -47
  26. package/dist/core/scheduler.js.map +1 -1
  27. package/dist/core/types.d.ts +9 -10
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/hooks/tap-inline-resource.d.ts +2 -2
  30. package/dist/hooks/tap-inline-resource.d.ts.map +1 -1
  31. package/dist/hooks/tap-inline-resource.js.map +1 -1
  32. package/dist/hooks/tap-resource.d.ts +3 -3
  33. package/dist/hooks/tap-resource.d.ts.map +1 -1
  34. package/dist/hooks/tap-resource.js +6 -6
  35. package/dist/hooks/tap-resource.js.map +1 -1
  36. package/dist/hooks/tap-resources.d.ts +9 -3
  37. package/dist/hooks/tap-resources.d.ts.map +1 -1
  38. package/dist/hooks/tap-resources.js +51 -60
  39. package/dist/hooks/tap-resources.js.map +1 -1
  40. package/dist/hooks/tap-state.d.ts +0 -2
  41. package/dist/hooks/tap-state.d.ts.map +1 -1
  42. package/dist/hooks/tap-state.js +2 -4
  43. package/dist/hooks/tap-state.js.map +1 -1
  44. package/dist/index.d.ts +3 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +3 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/react/use-resource.d.ts +2 -2
  49. package/dist/react/use-resource.d.ts.map +1 -1
  50. package/dist/react/use-resource.js +8 -8
  51. package/dist/react/use-resource.js.map +1 -1
  52. package/package.json +5 -6
  53. package/dist/core/ResourceHandle.d.ts.map +0 -1
  54. package/dist/core/ResourceHandle.js.map +0 -1
@@ -2,9 +2,9 @@
2
2
  import { useEffect, useLayoutEffect, useMemo, useState } from "react";
3
3
  import {
4
4
  createResourceFiber,
5
- unmountResource,
6
- renderResource,
7
- commitResource
5
+ unmountResourceFiber,
6
+ renderResourceFiber,
7
+ commitResourceFiber
8
8
  } from "../core/ResourceFiber.js";
9
9
  var shouldAvoidLayoutEffect = globalThis.__ASSISTANT_UI_DISABLE_LAYOUT_EFFECT__ === true;
10
10
  var useIsomorphicLayoutEffect = shouldAvoidLayoutEffect ? useEffect : useLayoutEffect;
@@ -12,14 +12,14 @@ function useResource(element) {
12
12
  const [, rerender] = useState({});
13
13
  const fiber = useMemo(
14
14
  () => createResourceFiber(element.type, () => rerender({})),
15
- [element.type, rerender]
15
+ [element.type]
16
16
  );
17
- const result = renderResource(fiber, element.props);
17
+ const result = renderResourceFiber(fiber, element.props);
18
18
  useIsomorphicLayoutEffect(() => {
19
- return () => unmountResource(fiber);
20
- }, []);
19
+ return () => unmountResourceFiber(fiber);
20
+ }, [fiber]);
21
21
  useIsomorphicLayoutEffect(() => {
22
- commitResource(fiber, result);
22
+ commitResourceFiber(fiber, result);
23
23
  });
24
24
  return result.state;
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/use-resource.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useMemo, useState } from \"react\";\nimport { ResourceElement } from \"../core/types\";\nimport {\n createResourceFiber,\n unmountResource,\n renderResource,\n commitResource,\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<R, P>(element: ResourceElement<R, P>): R {\n const [, rerender] = useState({});\n const fiber = useMemo(\n () => createResourceFiber(element.type, () => rerender({})),\n [element.type, rerender],\n );\n\n const result = renderResource(fiber, element.props);\n useIsomorphicLayoutEffect(() => {\n return () => unmountResource(fiber);\n }, []);\n useIsomorphicLayoutEffect(() => {\n commitResource(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,YAAkB,SAAmC;AACnE,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,MAAM,QAAQ;AAAA,EACzB;AAEA,QAAM,SAAS,eAAe,OAAO,QAAQ,KAAK;AAClD,4BAA0B,MAAM;AAC9B,WAAO,MAAM,gBAAgB,KAAK;AAAA,EACpC,GAAG,CAAC,CAAC;AACL,4BAA0B,MAAM;AAC9B,mBAAe,OAAO,MAAM;AAAA,EAC9B,CAAC;AAED,SAAO,OAAO;AAChB;","names":[]}
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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/tap",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "type": "module",
5
5
  "description": "Zero-dependency reactive state management inspired by React hooks",
6
6
  "main": "dist/index.js",
@@ -18,12 +18,12 @@
18
18
  }
19
19
  },
20
20
  "devDependencies": {
21
- "@types/node": "^24.10.1",
21
+ "@types/node": "^25.0.0",
22
22
  "@types/react": "*",
23
- "@vitest/ui": "^4.0.14",
24
- "tsx": "^4.20.6",
23
+ "@vitest/ui": "^4.0.15",
24
+ "tsx": "^4.21.0",
25
25
  "typescript": "^5.9.3",
26
- "vitest": "^4.0.14",
26
+ "vitest": "^4.0.15",
27
27
  "@assistant-ui/x-buildutils": "0.0.1"
28
28
  },
29
29
  "exports": {
@@ -52,7 +52,6 @@
52
52
  },
53
53
  "scripts": {
54
54
  "build": "tsx build.mts",
55
- "lint": "eslint .",
56
55
  "test": "vitest",
57
56
  "test:run": "vitest run"
58
57
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResourceHandle.d.ts","sourceRoot":"","sources":["../../src/core/ResourceHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAe1C,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,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;QAC5B,SAAS,IAAI,IAAI,CAAC;QAClB,OAAO,IAAI,IAAI,CAAC;KACjB;CACF;AA+CD,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EACjC,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAC9B,oBAAkB,KACjB,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CA2B5B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/ResourceHandle.ts"],"sourcesContent":["import { ResourceElement } from \"./types\";\nimport {\n createResourceFiber,\n unmountResource,\n renderResource,\n commitResource,\n} from \"./ResourceFiber\";\nimport { UpdateScheduler } from \"./scheduler\";\nimport { tapRef } from \"../hooks/tap-ref\";\nimport { tapState } from \"../hooks/tap-state\";\nimport { tapMemo } from \"../hooks/tap-memo\";\nimport { tapInlineResource } from \"../hooks/tap-inline-resource\";\nimport { tapEffect } from \"../hooks/tap-effect\";\nimport { resource } from \"./resource\";\n\nexport namespace createResource {\n export type Unsubscribe = () => void;\n\n export interface Handle<R, P> {\n getState(): R;\n subscribe(callback: () => void): Unsubscribe;\n updateInput(props: P): void;\n flushSync(): void;\n dispose(): void;\n }\n}\n\nconst HandleWrapperResource = resource(\n <R, P>({\n element,\n onUpdateInput,\n onFlushSync,\n onDispose,\n }: {\n element: ResourceElement<R, P>;\n onUpdateInput: () => void;\n onFlushSync: () => void;\n onDispose: () => void;\n }): createResource.Handle<R, P> => {\n const [props, setProps] = tapState(element.props);\n const value = tapInlineResource({ type: element.type, props });\n const subscribers = tapRef(new Set<() => void>()).current;\n const valueRef = tapRef(value);\n\n tapEffect(() => {\n if (value !== valueRef.current) {\n valueRef.current = value;\n subscribers.forEach((callback) => callback());\n }\n });\n\n const handle = tapMemo(\n () => ({\n getState: () => valueRef.current,\n subscribe: (callback: () => void) => {\n subscribers.add(callback);\n return () => subscribers.delete(callback);\n },\n updateInput: (props: P) => {\n onUpdateInput();\n setProps(() => props);\n },\n flushSync: onFlushSync,\n dispose: onDispose,\n }),\n [],\n );\n\n return handle;\n },\n);\n\nexport const createResource = <R, P>(\n element: ResourceElement<R, P>,\n delayMount = false,\n): createResource.Handle<R, P> => {\n let isMounted = !delayMount;\n const props = {\n element,\n onUpdateInput: () => {\n if (isMounted) return;\n isMounted = true;\n commitResource(fiber, lastRender);\n },\n onFlushSync: () => {\n scheduler.flushSync();\n },\n onDispose: () => unmountResource(fiber),\n };\n\n const scheduler = new UpdateScheduler(() => {\n lastRender = renderResource(fiber, props);\n if (isMounted) commitResource(fiber, lastRender);\n });\n\n const fiber = createResourceFiber(HandleWrapperResource<R, P>, () =>\n scheduler.markDirty(),\n );\n\n let lastRender = renderResource(fiber, props);\n if (isMounted) commitResource(fiber, lastRender);\n return lastRender.state;\n};\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAuB;AAChC,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AAczB,IAAM,wBAAwB;AAAA,EAC5B,CAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAKmC;AACjC,UAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,QAAQ,KAAK;AAChD,UAAM,QAAQ,kBAAkB,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC;AAC7D,UAAM,cAAc,OAAO,oBAAI,IAAgB,CAAC,EAAE;AAClD,UAAM,WAAW,OAAO,KAAK;AAE7B,cAAU,MAAM;AACd,UAAI,UAAU,SAAS,SAAS;AAC9B,iBAAS,UAAU;AACnB,oBAAY,QAAQ,CAAC,aAAa,SAAS,CAAC;AAAA,MAC9C;AAAA,IACF,CAAC;AAED,UAAM,SAAS;AAAA,MACb,OAAO;AAAA,QACL,UAAU,MAAM,SAAS;AAAA,QACzB,WAAW,CAAC,aAAyB;AACnC,sBAAY,IAAI,QAAQ;AACxB,iBAAO,MAAM,YAAY,OAAO,QAAQ;AAAA,QAC1C;AAAA,QACA,aAAa,CAACA,WAAa;AACzB,wBAAc;AACd,mBAAS,MAAMA,MAAK;AAAA,QACtB;AAAA,QACA,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,MACA,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,iBAAiB,CAC5B,SACA,aAAa,UACmB;AAChC,MAAI,YAAY,CAAC;AACjB,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA,eAAe,MAAM;AACnB,UAAI,UAAW;AACf,kBAAY;AACZ,qBAAe,OAAO,UAAU;AAAA,IAClC;AAAA,IACA,aAAa,MAAM;AACjB,gBAAU,UAAU;AAAA,IACtB;AAAA,IACA,WAAW,MAAM,gBAAgB,KAAK;AAAA,EACxC;AAEA,QAAM,YAAY,IAAI,gBAAgB,MAAM;AAC1C,iBAAa,eAAe,OAAO,KAAK;AACxC,QAAI,UAAW,gBAAe,OAAO,UAAU;AAAA,EACjD,CAAC;AAED,QAAM,QAAQ;AAAA,IAAoB;AAAA,IAA6B,MAC7D,UAAU,UAAU;AAAA,EACtB;AAEA,MAAI,aAAa,eAAe,OAAO,KAAK;AAC5C,MAAI,UAAW,gBAAe,OAAO,UAAU;AAC/C,SAAO,WAAW;AACpB;","names":["props"]}