katanakit-js 3.2.2 → 4.0.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 (193) hide show
  1. package/README.md +453 -326
  2. package/dist/adapters/angular/fetch.d.ts +37 -0
  3. package/dist/adapters/angular/fetch.d.ts.map +1 -0
  4. package/dist/adapters/angular/fetch.js +67 -0
  5. package/dist/adapters/angular/fetch.js.map +1 -0
  6. package/dist/adapters/angular/index.d.ts +5 -0
  7. package/dist/adapters/angular/index.d.ts.map +1 -0
  8. package/dist/adapters/angular/index.js +5 -0
  9. package/dist/adapters/angular/index.js.map +1 -0
  10. package/dist/adapters/angular/query.d.ts +90 -0
  11. package/dist/adapters/angular/query.d.ts.map +1 -0
  12. package/dist/adapters/angular/query.js +103 -0
  13. package/dist/adapters/angular/query.js.map +1 -0
  14. package/dist/adapters/angular/watch.d.ts +34 -0
  15. package/dist/adapters/angular/watch.d.ts.map +1 -0
  16. package/dist/adapters/angular/watch.js +38 -0
  17. package/dist/adapters/angular/watch.js.map +1 -0
  18. package/dist/adapters/assistant/assistant.service.js +1 -1
  19. package/dist/adapters/assistant/assistant.service.js.map +1 -1
  20. package/dist/adapters/astro/astro.service.d.ts +0 -1
  21. package/dist/adapters/astro/astro.service.d.ts.map +1 -1
  22. package/dist/adapters/astro/astro.service.js +0 -1
  23. package/dist/adapters/astro/astro.service.js.map +1 -1
  24. package/dist/adapters/bun/dummyjson.service.d.ts +88 -0
  25. package/dist/adapters/bun/dummyjson.service.d.ts.map +1 -0
  26. package/dist/adapters/bun/dummyjson.service.js +149 -0
  27. package/dist/adapters/bun/dummyjson.service.js.map +1 -0
  28. package/dist/adapters/bun/index.d.ts +5 -0
  29. package/dist/adapters/bun/index.d.ts.map +1 -0
  30. package/dist/adapters/bun/index.js +5 -0
  31. package/dist/adapters/bun/index.js.map +1 -0
  32. package/dist/adapters/bun/main.d.ts +2 -0
  33. package/dist/adapters/bun/main.d.ts.map +1 -0
  34. package/dist/adapters/bun/main.js +6 -0
  35. package/dist/adapters/bun/main.js.map +1 -0
  36. package/dist/adapters/bun/routes.d.ts +62 -0
  37. package/dist/adapters/bun/routes.d.ts.map +1 -0
  38. package/dist/adapters/bun/routes.js +60 -0
  39. package/dist/adapters/bun/routes.js.map +1 -0
  40. package/dist/adapters/bun/seed.d.ts +65 -0
  41. package/dist/adapters/bun/seed.d.ts.map +1 -0
  42. package/dist/adapters/bun/seed.js +117 -0
  43. package/dist/adapters/bun/seed.js.map +1 -0
  44. package/dist/adapters/bun/server.d.ts +53 -0
  45. package/dist/adapters/bun/server.d.ts.map +1 -0
  46. package/dist/adapters/bun/server.js +64 -0
  47. package/dist/adapters/bun/server.js.map +1 -0
  48. package/dist/adapters/express/app.d.ts +2 -1
  49. package/dist/adapters/express/app.d.ts.map +1 -1
  50. package/dist/adapters/express/app.js +14 -2
  51. package/dist/adapters/express/app.js.map +1 -1
  52. package/dist/adapters/express/products.controller.d.ts.map +1 -1
  53. package/dist/adapters/express/products.controller.js +3 -1
  54. package/dist/adapters/express/products.controller.js.map +1 -1
  55. package/dist/adapters/express/server.js +2 -2
  56. package/dist/adapters/express/server.js.map +1 -1
  57. package/dist/adapters/notion/notion.service.d.ts +4 -2
  58. package/dist/adapters/notion/notion.service.d.ts.map +1 -1
  59. package/dist/adapters/notion/notion.service.js +19 -5
  60. package/dist/adapters/notion/notion.service.js.map +1 -1
  61. package/dist/adapters/react/fetch.d.ts +44 -0
  62. package/dist/adapters/react/fetch.d.ts.map +1 -0
  63. package/dist/adapters/react/fetch.js +74 -0
  64. package/dist/adapters/react/fetch.js.map +1 -0
  65. package/dist/adapters/react/index.d.ts +5 -0
  66. package/dist/adapters/react/index.d.ts.map +1 -0
  67. package/dist/adapters/react/index.js +5 -0
  68. package/dist/adapters/react/index.js.map +1 -0
  69. package/dist/adapters/react/query.d.ts +59 -0
  70. package/dist/adapters/react/query.d.ts.map +1 -0
  71. package/dist/adapters/react/query.js +86 -0
  72. package/dist/adapters/react/query.js.map +1 -0
  73. package/dist/adapters/react/watch.d.ts +37 -0
  74. package/dist/adapters/react/watch.d.ts.map +1 -0
  75. package/dist/adapters/react/watch.js +39 -0
  76. package/dist/adapters/react/watch.js.map +1 -0
  77. package/dist/adapters/solid/fetch.d.ts +43 -0
  78. package/dist/adapters/solid/fetch.d.ts.map +1 -0
  79. package/dist/adapters/solid/fetch.js +72 -0
  80. package/dist/adapters/solid/fetch.js.map +1 -0
  81. package/dist/adapters/solid/index.d.ts +5 -0
  82. package/dist/adapters/solid/index.d.ts.map +1 -0
  83. package/dist/adapters/solid/index.js +5 -0
  84. package/dist/adapters/solid/index.js.map +1 -0
  85. package/dist/adapters/solid/query.d.ts +60 -0
  86. package/dist/adapters/solid/query.d.ts.map +1 -0
  87. package/dist/adapters/solid/query.js +88 -0
  88. package/dist/adapters/solid/query.js.map +1 -0
  89. package/dist/adapters/solid/watch.d.ts +32 -0
  90. package/dist/adapters/solid/watch.d.ts.map +1 -0
  91. package/dist/adapters/solid/watch.js +36 -0
  92. package/dist/adapters/solid/watch.js.map +1 -0
  93. package/dist/adapters/svelte/fetch.d.ts +40 -0
  94. package/dist/adapters/svelte/fetch.d.ts.map +1 -0
  95. package/dist/adapters/svelte/fetch.js +75 -0
  96. package/dist/adapters/svelte/fetch.js.map +1 -0
  97. package/dist/adapters/svelte/index.d.ts +5 -0
  98. package/dist/adapters/svelte/index.d.ts.map +1 -0
  99. package/dist/adapters/svelte/index.js +5 -0
  100. package/dist/adapters/svelte/index.js.map +1 -0
  101. package/dist/adapters/svelte/query.d.ts +60 -0
  102. package/dist/adapters/svelte/query.d.ts.map +1 -0
  103. package/dist/adapters/svelte/query.js +78 -0
  104. package/dist/adapters/svelte/query.js.map +1 -0
  105. package/dist/adapters/svelte/watch.d.ts +32 -0
  106. package/dist/adapters/svelte/watch.d.ts.map +1 -0
  107. package/dist/adapters/svelte/watch.js +41 -0
  108. package/dist/adapters/svelte/watch.js.map +1 -0
  109. package/dist/adapters/telegram/telegram.service.js +1 -1
  110. package/dist/adapters/telegram/telegram.service.js.map +1 -1
  111. package/dist/adapters/vanilla/index.d.ts +3 -0
  112. package/dist/adapters/vanilla/index.d.ts.map +1 -0
  113. package/dist/adapters/vanilla/index.js +3 -0
  114. package/dist/adapters/vanilla/index.js.map +1 -0
  115. package/dist/adapters/vanilla/query.d.ts +69 -0
  116. package/dist/adapters/vanilla/query.d.ts.map +1 -0
  117. package/dist/adapters/vanilla/query.js +76 -0
  118. package/dist/adapters/vanilla/query.js.map +1 -0
  119. package/dist/adapters/vue/index.d.ts +1 -0
  120. package/dist/adapters/vue/index.d.ts.map +1 -1
  121. package/dist/adapters/vue/index.js +1 -0
  122. package/dist/adapters/vue/index.js.map +1 -1
  123. package/dist/adapters/vue/query.d.ts +35 -87
  124. package/dist/adapters/vue/query.d.ts.map +1 -1
  125. package/dist/adapters/vue/query.js +57 -168
  126. package/dist/adapters/vue/query.js.map +1 -1
  127. package/dist/adapters/vue/vue.service.d.ts +9 -5
  128. package/dist/adapters/vue/vue.service.d.ts.map +1 -1
  129. package/dist/adapters/vue/vue.service.js +7 -3
  130. package/dist/adapters/vue/vue.service.js.map +1 -1
  131. package/dist/adapters/whatsapp/whatsapp.service.js +1 -1
  132. package/dist/adapters/whatsapp/whatsapp.service.js.map +1 -1
  133. package/dist/adapters/wordpress/wordpress.service.d.ts +2 -1
  134. package/dist/adapters/wordpress/wordpress.service.d.ts.map +1 -1
  135. package/dist/adapters/wordpress/wordpress.service.js +10 -5
  136. package/dist/adapters/wordpress/wordpress.service.js.map +1 -1
  137. package/dist/core/services/agent.service.d.ts.map +1 -1
  138. package/dist/core/services/agent.service.js +9 -1
  139. package/dist/core/services/agent.service.js.map +1 -1
  140. package/dist/core/services/dates.service.d.ts.map +1 -1
  141. package/dist/core/services/dates.service.js +2 -1
  142. package/dist/core/services/dates.service.js.map +1 -1
  143. package/dist/core/services/error.service.d.ts +1 -1
  144. package/dist/core/services/error.service.js +1 -1
  145. package/dist/core/services/http.service.d.ts +26 -5
  146. package/dist/core/services/http.service.d.ts.map +1 -1
  147. package/dist/core/services/http.service.js +30 -6
  148. package/dist/core/services/http.service.js.map +1 -1
  149. package/dist/core/services/logger.service.d.ts +10 -67
  150. package/dist/core/services/logger.service.d.ts.map +1 -1
  151. package/dist/core/services/logger.service.js +13 -139
  152. package/dist/core/services/logger.service.js.map +1 -1
  153. package/dist/core/services/query.service.d.ts +87 -130
  154. package/dist/core/services/query.service.d.ts.map +1 -1
  155. package/dist/core/services/query.service.js +99 -366
  156. package/dist/core/services/query.service.js.map +1 -1
  157. package/dist/core/services/reactive.service.d.ts.map +1 -1
  158. package/dist/core/services/reactive.service.js +7 -10
  159. package/dist/core/services/reactive.service.js.map +1 -1
  160. package/dist/core/services/timing.service.js +8 -8
  161. package/dist/core/services/timing.service.js.map +1 -1
  162. package/dist/core/services/utils.service.d.ts.map +1 -1
  163. package/dist/core/services/utils.service.js +3 -0
  164. package/dist/core/services/utils.service.js.map +1 -1
  165. package/dist/index.d.ts +0 -1
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +0 -1
  168. package/dist/index.js.map +1 -1
  169. package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
  170. package/dist/infrastructure/dom/dom.service.js +18 -4
  171. package/dist/infrastructure/dom/dom.service.js.map +1 -1
  172. package/dist/infrastructure/observer/observer.service.js +2 -2
  173. package/dist/infrastructure/observer/observer.service.js.map +1 -1
  174. package/dist/infrastructure/sensors/sensors.service.js +6 -6
  175. package/dist/infrastructure/sensors/sensors.service.js.map +1 -1
  176. package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
  177. package/dist/infrastructure/storage/storage.service.js +12 -2
  178. package/dist/infrastructure/storage/storage.service.js.map +1 -1
  179. package/dist/prisma/assistant.store.d.ts +3 -0
  180. package/dist/prisma/assistant.store.d.ts.map +1 -1
  181. package/dist/prisma/assistant.store.js +12 -6
  182. package/dist/prisma/assistant.store.js.map +1 -1
  183. package/dist/prisma/use-prisma.d.ts +5 -4
  184. package/dist/prisma/use-prisma.d.ts.map +1 -1
  185. package/dist/prisma/use-prisma.js +5 -4
  186. package/dist/prisma/use-prisma.js.map +1 -1
  187. package/dist/types/index.d.ts +2 -6
  188. package/dist/types/index.d.ts.map +1 -1
  189. package/package.json +251 -185
  190. package/dist/prisma/db.d.ts +0 -4
  191. package/dist/prisma/db.d.ts.map +0 -1
  192. package/dist/prisma/db.js +0 -12
  193. package/dist/prisma/db.js.map +0 -1
@@ -0,0 +1,39 @@
1
+ import { useEffect, useRef } from "react";
2
+ /**
3
+ * React effect-based watcher that invokes `callback` whenever the value
4
+ * produced by `source` changes. Tracks the previous value so the callback
5
+ * receives `(value, previous)`.
6
+ *
7
+ * Runs once on mount (with `previous` undefined) and on every change. Cleans
8
+ * up automatically on unmount.
9
+ *
10
+ * @typeParam T - The watched value type.
11
+ * @param source - A getter returning the value to watch.
12
+ * @param callback - Invoked on change as `(value, previous)`.
13
+ * @param options - `deep` (default `true`) serializes objects for comparison.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { useState } from "react";
18
+ * import { useWatch } from "katanakit-js/adapters/react";
19
+ *
20
+ * function Form() {
21
+ * const [product, setProduct] = useState({ name: "", price: 0 });
22
+ * useWatch(() => product, (next, prev) => {
23
+ * console.log("changed:", next, prev);
24
+ * });
25
+ * // ...
26
+ * }
27
+ * ```
28
+ */
29
+ export function useWatch(source, callback, options = {}) {
30
+ const { deep = true } = options;
31
+ const previous = useRef(undefined);
32
+ const current = source();
33
+ const dep = deep ? JSON.stringify(current) : current;
34
+ useEffect(() => {
35
+ callback(current, previous.current);
36
+ previous.current = current;
37
+ }, [dep]);
38
+ }
39
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/adapters/react/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAW1C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,QAAQ,CACvB,MAAe,EACf,QAAqD,EACrD,UAA2B,EAAE;IAE7B,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAgB,SAAS,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;IAC5B,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type Signal } from "solid-js";
2
+ import type { ApiError, UrlOptions } from "../../types/index.js";
3
+ /** Reactive state exposed by the {@link useRequest} primitive (Solid accessors). */
4
+ export interface RequestState<T = unknown> {
5
+ data: Signal<T | null>[0];
6
+ error: Signal<ApiError | null>[0];
7
+ loading: Signal<boolean>[0];
8
+ refetch: () => Promise<void>;
9
+ }
10
+ /**
11
+ * Solid primitive that wraps KatanaKit's HTTP GET with fine-grained signals.
12
+ * Bridges the Safe Result pattern to idiomatic Solid state and never throws
13
+ * on HTTP errors.
14
+ *
15
+ * Stale responses are ignored via a request version counter and AbortController;
16
+ * in-flight requests are aborted on cleanup.
17
+ *
18
+ * @param apiName - Name of the registered API (see `useInitApis`).
19
+ * @param endpointName - Name of the endpoint inside that API.
20
+ * @param options - Optional `UrlOptions` (path/query params).
21
+ * @returns Signal accessors `{ data, error, loading }` plus `refetch`.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * import { Show } from "solid-js";
26
+ * import { useRequest } from "katanakit-js/adapters/solid";
27
+ *
28
+ * function Pokemon() {
29
+ * const { data, error, loading } = useRequest<{ name: string }>(
30
+ * "pokeapi",
31
+ * "pokemonById",
32
+ * { params: { id: 25 } },
33
+ * );
34
+ * return (
35
+ * <Show when={!loading() && !error()} fallback={<div>Loading…</div>}>
36
+ * <div>{data()?.name}</div>
37
+ * </Show>
38
+ * );
39
+ * }
40
+ * ```
41
+ */
42
+ export declare function useRequest<T>(apiName: string, endpointName: string, options?: UrlOptions): RequestState<T>;
43
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/adapters/solid/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAGhE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEjE,oFAAoF;AACpF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACxC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GAClB,YAAY,CAAC,CAAC,CAAC,CA2CjB"}
@@ -0,0 +1,72 @@
1
+ import { createSignal, onCleanup } from "solid-js";
2
+ import { useFetch } from "../../core/services/http.service.js";
3
+ /**
4
+ * Solid primitive that wraps KatanaKit's HTTP GET with fine-grained signals.
5
+ * Bridges the Safe Result pattern to idiomatic Solid state and never throws
6
+ * on HTTP errors.
7
+ *
8
+ * Stale responses are ignored via a request version counter and AbortController;
9
+ * in-flight requests are aborted on cleanup.
10
+ *
11
+ * @param apiName - Name of the registered API (see `useInitApis`).
12
+ * @param endpointName - Name of the endpoint inside that API.
13
+ * @param options - Optional `UrlOptions` (path/query params).
14
+ * @returns Signal accessors `{ data, error, loading }` plus `refetch`.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * import { Show } from "solid-js";
19
+ * import { useRequest } from "katanakit-js/adapters/solid";
20
+ *
21
+ * function Pokemon() {
22
+ * const { data, error, loading } = useRequest<{ name: string }>(
23
+ * "pokeapi",
24
+ * "pokemonById",
25
+ * { params: { id: 25 } },
26
+ * );
27
+ * return (
28
+ * <Show when={!loading() && !error()} fallback={<div>Loading…</div>}>
29
+ * <div>{data()?.name}</div>
30
+ * </Show>
31
+ * );
32
+ * }
33
+ * ```
34
+ */
35
+ export function useRequest(apiName, endpointName, options) {
36
+ const [data, setData] = createSignal(null);
37
+ const [error, setError] = createSignal(null);
38
+ const [loading, setLoading] = createSignal(true);
39
+ let version = 0;
40
+ let controller = null;
41
+ let disposed = false;
42
+ const refetch = async () => {
43
+ const current = ++version;
44
+ controller?.abort();
45
+ const next = new AbortController();
46
+ controller = next;
47
+ setLoading(true);
48
+ setError(null);
49
+ const result = await useFetch(apiName, endpointName, {
50
+ method: "GET",
51
+ urlOptions: options,
52
+ signal: next.signal,
53
+ });
54
+ if (disposed || current !== version)
55
+ return;
56
+ if (result.ok) {
57
+ setData(() => result.data);
58
+ setError(null);
59
+ }
60
+ else if (!next.signal.aborted) {
61
+ setError(result.error);
62
+ }
63
+ setLoading(false);
64
+ };
65
+ onCleanup(() => {
66
+ disposed = true;
67
+ controller?.abort();
68
+ });
69
+ void refetch();
70
+ return { data, error, loading, refetch };
71
+ }
72
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/adapters/solid/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAe,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAW/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,UAAU,CACzB,OAAe,EACf,YAAoB,EACpB,OAAoB;IAEpB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAW,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAkB,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,GAA2B,IAAI,CAAC;IAC9C,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACzC,MAAM,OAAO,GAAG,EAAE,OAAO,CAAC;QAC1B,UAAU,EAAE,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,UAAU,GAAG,IAAI,CAAC;QAElB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAI,OAAO,EAAE,YAAY,EAAE;YACvD,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,OAAO;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ,IAAI,OAAO,KAAK,OAAO;YAAE,OAAO;QAE5C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,UAAU,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,CAAC;QAChB,UAAU,EAAE,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,KAAK,OAAO,EAAE,CAAC;IAEf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { useCreateQueryClient, useInitQueryClient, useQueryClient, useSafeQueryFn, } from "../../core/services/query.service.js";
2
+ export * from "./fetch.js";
3
+ export * from "./query.js";
4
+ export * from "./watch.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/solid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACd,MAAM,sCAAsC,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { useCreateQueryClient, useInitQueryClient, useQueryClient, useSafeQueryFn, } from "../../core/services/query.service.js";
2
+ export * from "./fetch.js";
3
+ export * from "./query.js";
4
+ export * from "./watch.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/solid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACd,MAAM,sCAAsC,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { type MutationObserverOptions, type MutationObserverResult, type QueryClient, type QueryObserverOptions, type QueryObserverResult } from "@tanstack/query-core";
2
+ /** Options for the Solid binding: a plain object or a reactive getter. */
3
+ export type SolidQueryOptions<TQueryFnData, TError, TData> = QueryObserverOptions<TQueryFnData, TError, TData> | (() => QueryObserverOptions<TQueryFnData, TError, TData>);
4
+ /**
5
+ * Solid primitive for a cached query, backed by TanStack Query Core.
6
+ *
7
+ * Returns a reactive {@link QueryObserverResult} store — read `query.data`,
8
+ * `query.isPending`, `query.isError`, `query.status`, etc. directly. Pass a
9
+ * getter (`() => ({ queryKey, queryFn })`) to react to key changes.
10
+ *
11
+ * Call it inside a component or `createRoot` so `onCleanup` disposes the observer.
12
+ *
13
+ * @param options - TanStack query options, or a getter returning them.
14
+ * @param client - Optional {@link QueryClient} (defaults to the shared singleton).
15
+ * @returns A reactive {@link QueryObserverResult} store.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * import { Show } from "solid-js";
20
+ * import { useQuery, useSafeQueryFn } from "katanakit-js/adapters/solid";
21
+ * import { useGetApi } from "katanakit-js";
22
+ *
23
+ * function Pokemon() {
24
+ * const query = useQuery(() => ({
25
+ * queryKey: ["pokemon", 25],
26
+ * queryFn: useSafeQueryFn(() => useGetApi("pokeapi", "pokemonById", { params: { id: 25 } })),
27
+ * }));
28
+ * return (
29
+ * <Show when={!query.isPending} fallback={<div>Loading…</div>}>
30
+ * <div>{query.data?.name}</div>
31
+ * </Show>
32
+ * );
33
+ * }
34
+ * ```
35
+ */
36
+ export declare function useQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(options: SolidQueryOptions<TQueryFnData, TError, TData>, client?: QueryClient): QueryObserverResult<TData, TError>;
37
+ /**
38
+ * Solid primitive for a mutation, backed by TanStack Query Core.
39
+ *
40
+ * @param options - TanStack mutation options, or a getter returning them.
41
+ * @param client - Optional {@link QueryClient} (defaults to the shared singleton).
42
+ * @returns A reactive {@link MutationObserverResult} store.
43
+ *
44
+ * @example
45
+ * ```tsx
46
+ * import { useMutation, useQueryClient } from "katanakit-js/adapters/solid";
47
+ * import { usePost } from "katanakit-js";
48
+ *
49
+ * function CreateUser() {
50
+ * const qc = useQueryClient();
51
+ * const mutation = useMutation(() => ({
52
+ * mutationFn: (name: string) => usePost("api", "createUser", { name }),
53
+ * onSuccess: () => qc.invalidateQueries({ queryKey: ["users"] }),
54
+ * }));
55
+ * return <button disabled={mutation.isPending} onClick={() => mutation.mutate("Ada")}>Create</button>;
56
+ * }
57
+ * ```
58
+ */
59
+ export declare function useMutation<TData = unknown, TError = Error, TVariables = void, TContext = unknown>(options: MutationObserverOptions<TData, TError, TVariables, TContext> | (() => MutationObserverOptions<TData, TError, TVariables, TContext>), client?: QueryClient): MutationObserverResult<TData, TError, TVariables, TContext>;
60
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/adapters/solid/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAEhB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,MAAM,sBAAsB,CAAC;AAM9B,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,IACtD,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,GACjD,CAAC,MAAM,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,YAAY,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,YAAY,EACpF,OAAO,EAAE,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EACvD,MAAM,CAAC,EAAE,WAAW,GAClB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAsBpC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,OAAO,EACjG,OAAO,EACJ,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,GAC5D,CAAC,MAAM,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,EACvE,MAAM,CAAC,EAAE,WAAW,GAClB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAqB7D"}
@@ -0,0 +1,88 @@
1
+ import { MutationObserver, QueryObserver, } from "@tanstack/query-core";
2
+ import { createEffect, onCleanup } from "solid-js";
3
+ import { createStore } from "solid-js/store";
4
+ import { useQueryClient } from "../../core/services/query.service.js";
5
+ /**
6
+ * Solid primitive for a cached query, backed by TanStack Query Core.
7
+ *
8
+ * Returns a reactive {@link QueryObserverResult} store — read `query.data`,
9
+ * `query.isPending`, `query.isError`, `query.status`, etc. directly. Pass a
10
+ * getter (`() => ({ queryKey, queryFn })`) to react to key changes.
11
+ *
12
+ * Call it inside a component or `createRoot` so `onCleanup` disposes the observer.
13
+ *
14
+ * @param options - TanStack query options, or a getter returning them.
15
+ * @param client - Optional {@link QueryClient} (defaults to the shared singleton).
16
+ * @returns A reactive {@link QueryObserverResult} store.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * import { Show } from "solid-js";
21
+ * import { useQuery, useSafeQueryFn } from "katanakit-js/adapters/solid";
22
+ * import { useGetApi } from "katanakit-js";
23
+ *
24
+ * function Pokemon() {
25
+ * const query = useQuery(() => ({
26
+ * queryKey: ["pokemon", 25],
27
+ * queryFn: useSafeQueryFn(() => useGetApi("pokeapi", "pokemonById", { params: { id: 25 } })),
28
+ * }));
29
+ * return (
30
+ * <Show when={!query.isPending} fallback={<div>Loading…</div>}>
31
+ * <div>{query.data?.name}</div>
32
+ * </Show>
33
+ * );
34
+ * }
35
+ * ```
36
+ */
37
+ export function useQuery(options, client) {
38
+ const queryClient = client ?? useQueryClient();
39
+ const getOptions = typeof options === "function" ? options : () => options;
40
+ const observer = new QueryObserver(queryClient, queryClient.defaultQueryOptions(getOptions()));
41
+ const [state, setState] = createStore(observer.getCurrentResult());
42
+ const unsubscribe = observer.subscribe((result) => {
43
+ setState(result);
44
+ });
45
+ // Re-apply options whenever the reactive getter's dependencies change.
46
+ createEffect(() => {
47
+ observer.setOptions(queryClient.defaultQueryOptions(getOptions()));
48
+ });
49
+ onCleanup(unsubscribe);
50
+ return state;
51
+ }
52
+ /**
53
+ * Solid primitive for a mutation, backed by TanStack Query Core.
54
+ *
55
+ * @param options - TanStack mutation options, or a getter returning them.
56
+ * @param client - Optional {@link QueryClient} (defaults to the shared singleton).
57
+ * @returns A reactive {@link MutationObserverResult} store.
58
+ *
59
+ * @example
60
+ * ```tsx
61
+ * import { useMutation, useQueryClient } from "katanakit-js/adapters/solid";
62
+ * import { usePost } from "katanakit-js";
63
+ *
64
+ * function CreateUser() {
65
+ * const qc = useQueryClient();
66
+ * const mutation = useMutation(() => ({
67
+ * mutationFn: (name: string) => usePost("api", "createUser", { name }),
68
+ * onSuccess: () => qc.invalidateQueries({ queryKey: ["users"] }),
69
+ * }));
70
+ * return <button disabled={mutation.isPending} onClick={() => mutation.mutate("Ada")}>Create</button>;
71
+ * }
72
+ * ```
73
+ */
74
+ export function useMutation(options, client) {
75
+ const queryClient = client ?? useQueryClient();
76
+ const getOptions = typeof options === "function" ? options : () => options;
77
+ const observer = new MutationObserver(queryClient, getOptions());
78
+ const [state, setState] = createStore(observer.getCurrentResult());
79
+ const unsubscribe = observer.subscribe((result) => {
80
+ setState(result);
81
+ });
82
+ createEffect(() => {
83
+ observer.setOptions(getOptions());
84
+ });
85
+ onCleanup(unsubscribe);
86
+ return state;
87
+ }
88
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/adapters/solid/query.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,EAIhB,aAAa,GAGb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAOtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,QAAQ,CACvB,OAAuD,EACvD,MAAoB;IAEpB,MAAM,WAAW,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAmB,EAAE,CAAC,OAAO,CAAC;IAE3F,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAE/F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,WAAW,CACpC,QAAQ,CAAC,gBAAgB,EAAE,CAC3B,CAAC;IAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;QACjD,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,YAAY,CAAC,GAAG,EAAE;QACjB,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,WAAW,CAC1B,OAEuE,EACvE,MAAoB;IAEpB,MAAM,WAAW,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAmB,EAAE,CAAC,OAAO,CAAC;IAE3F,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;IAEjE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,WAAW,CACpC,QAAQ,CAAC,gBAAgB,EAAE,CAC3B,CAAC;IAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;QACjD,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,GAAG,EAAE;QACjB,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,32 @@
1
+ /** Options for {@link useWatch}. Accepted for API parity; Solid tracks deep reads natively. */
2
+ export interface UseWatchOptions {
3
+ deep?: boolean;
4
+ }
5
+ /**
6
+ * Solid effect-based watcher that invokes `callback` whenever any signal read
7
+ * inside `source` changes. Tracks the previous value so the callback receives
8
+ * `(value, previous)`.
9
+ *
10
+ * Solid's fine-grained reactivity means nested mutations are tracked
11
+ * automatically, so `deep` is effectively always on. Runs once on creation and
12
+ * on every tracked change; cleans up with the owning component.
13
+ *
14
+ * @typeParam T - The watched value type.
15
+ * @param source - A getter that reads the signals to watch.
16
+ * @param callback - Invoked on change as `(value, previous)`.
17
+ * @param options - Accepted for API parity (ignored).
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * import { createSignal } from "solid-js";
22
+ * import { useWatch } from "katanakit-js/adapters/solid";
23
+ *
24
+ * function Form() {
25
+ * const [product, setProduct] = createSignal({ name: "", price: 0 });
26
+ * useWatch(() => product(), (next, prev) => console.log(next, prev));
27
+ * // ...
28
+ * }
29
+ * ```
30
+ */
31
+ export declare function useWatch<T>(source: () => T, callback: (value: T, previous: T | undefined) => void, _options?: UseWatchOptions): void;
32
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/adapters/solid/watch.ts"],"names":[],"mappings":"AAEA,+FAA+F;AAC/F,MAAM,WAAW,eAAe;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACzB,MAAM,EAAE,MAAM,CAAC,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,EACrD,QAAQ,GAAE,eAAoB,GAC5B,IAAI,CAQN"}
@@ -0,0 +1,36 @@
1
+ import { createEffect } from "solid-js";
2
+ /**
3
+ * Solid effect-based watcher that invokes `callback` whenever any signal read
4
+ * inside `source` changes. Tracks the previous value so the callback receives
5
+ * `(value, previous)`.
6
+ *
7
+ * Solid's fine-grained reactivity means nested mutations are tracked
8
+ * automatically, so `deep` is effectively always on. Runs once on creation and
9
+ * on every tracked change; cleans up with the owning component.
10
+ *
11
+ * @typeParam T - The watched value type.
12
+ * @param source - A getter that reads the signals to watch.
13
+ * @param callback - Invoked on change as `(value, previous)`.
14
+ * @param options - Accepted for API parity (ignored).
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * import { createSignal } from "solid-js";
19
+ * import { useWatch } from "katanakit-js/adapters/solid";
20
+ *
21
+ * function Form() {
22
+ * const [product, setProduct] = createSignal({ name: "", price: 0 });
23
+ * useWatch(() => product(), (next, prev) => console.log(next, prev));
24
+ * // ...
25
+ * }
26
+ * ```
27
+ */
28
+ export function useWatch(source, callback, _options = {}) {
29
+ let previous;
30
+ createEffect(() => {
31
+ const value = source();
32
+ callback(value, previous);
33
+ previous = value;
34
+ });
35
+ }
36
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/adapters/solid/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAOxC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,QAAQ,CACvB,MAAe,EACf,QAAqD,EACrD,WAA4B,EAAE;IAE9B,IAAI,QAAuB,CAAC;IAE5B,YAAY,CAAC,GAAG,EAAE;QACjB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC1B,QAAQ,GAAG,KAAK,CAAC;IAClB,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type Readable } from "svelte/store";
2
+ import type { ApiError, UrlOptions } from "../../types/index.js";
3
+ /** Reactive state exposed by the {@link useRequest} factory (Svelte stores). */
4
+ export interface RequestState<T = unknown> {
5
+ data: Readable<T | null>;
6
+ error: Readable<ApiError | null>;
7
+ loading: Readable<boolean>;
8
+ refetch: () => Promise<void>;
9
+ }
10
+ /**
11
+ * Svelte store factory that wraps KatanaKit's HTTP GET. Bridges the Safe
12
+ * Result pattern to idiomatic Svelte stores and never throws on HTTP errors.
13
+ *
14
+ * Stale responses are ignored via a request version counter and AbortController;
15
+ * in-flight requests are aborted on component destroy.
16
+ *
17
+ * @param apiName - Name of the registered API (see `useInitApis`).
18
+ * @param endpointName - Name of the endpoint inside that API.
19
+ * @param options - Optional `UrlOptions` (path/query params).
20
+ * @returns Readable stores `{ data, error, loading }` plus `refetch`.
21
+ *
22
+ * @example
23
+ * ```svelte
24
+ * <script lang="ts">
25
+ * import { useRequest } from "katanakit-js/adapters/svelte";
26
+ *
27
+ * const { data, error, loading } = useRequest("pokeapi", "pokemonById", { params: { id: 25 } });
28
+ * </script>
29
+ *
30
+ * {#if $loading}
31
+ * <div>Loading…</div>
32
+ * {:else if $error}
33
+ * <div>{$error.message}</div>
34
+ * {:else}
35
+ * <div>{$data?.name}</div>
36
+ * {/if}
37
+ * ```
38
+ */
39
+ export declare function useRequest<T>(apiName: string, endpointName: string, options?: UrlOptions): RequestState<T>;
40
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/adapters/svelte/fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,cAAc,CAAC;AAGvD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEjE,gFAAgF;AAChF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACxC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GAClB,YAAY,CAAC,CAAC,CAAC,CA+CjB"}
@@ -0,0 +1,75 @@
1
+ import { onDestroy } from "svelte";
2
+ import { writable } from "svelte/store";
3
+ import { useFetch } from "../../core/services/http.service.js";
4
+ /**
5
+ * Svelte store factory that wraps KatanaKit's HTTP GET. Bridges the Safe
6
+ * Result pattern to idiomatic Svelte stores and never throws on HTTP errors.
7
+ *
8
+ * Stale responses are ignored via a request version counter and AbortController;
9
+ * in-flight requests are aborted on component destroy.
10
+ *
11
+ * @param apiName - Name of the registered API (see `useInitApis`).
12
+ * @param endpointName - Name of the endpoint inside that API.
13
+ * @param options - Optional `UrlOptions` (path/query params).
14
+ * @returns Readable stores `{ data, error, loading }` plus `refetch`.
15
+ *
16
+ * @example
17
+ * ```svelte
18
+ * <script lang="ts">
19
+ * import { useRequest } from "katanakit-js/adapters/svelte";
20
+ *
21
+ * const { data, error, loading } = useRequest("pokeapi", "pokemonById", { params: { id: 25 } });
22
+ * </script>
23
+ *
24
+ * {#if $loading}
25
+ * <div>Loading…</div>
26
+ * {:else if $error}
27
+ * <div>{$error.message}</div>
28
+ * {:else}
29
+ * <div>{$data?.name}</div>
30
+ * {/if}
31
+ * ```
32
+ */
33
+ export function useRequest(apiName, endpointName, options) {
34
+ const data = writable(null);
35
+ const error = writable(null);
36
+ const loading = writable(true);
37
+ let version = 0;
38
+ let controller = null;
39
+ let disposed = false;
40
+ const refetch = async () => {
41
+ const current = ++version;
42
+ controller?.abort();
43
+ const next = new AbortController();
44
+ controller = next;
45
+ loading.set(true);
46
+ error.set(null);
47
+ const result = await useFetch(apiName, endpointName, {
48
+ method: "GET",
49
+ urlOptions: options,
50
+ signal: next.signal,
51
+ });
52
+ if (disposed || current !== version)
53
+ return;
54
+ if (result.ok) {
55
+ data.set(result.data);
56
+ error.set(null);
57
+ }
58
+ else if (!next.signal.aborted) {
59
+ error.set(result.error);
60
+ }
61
+ loading.set(false);
62
+ };
63
+ try {
64
+ onDestroy(() => {
65
+ disposed = true;
66
+ controller?.abort();
67
+ });
68
+ }
69
+ catch {
70
+ // Not inside a component init — the caller owns teardown.
71
+ }
72
+ void refetch();
73
+ return { data, error, loading, refetch };
74
+ }
75
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/adapters/svelte/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAiB,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAW/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,UAAU,CACzB,OAAe,EACf,YAAoB,EACpB,OAAoB;IAEpB,MAAM,IAAI,GAAG,QAAQ,CAAW,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,GAA2B,IAAI,CAAC;IAC9C,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACzC,MAAM,OAAO,GAAG,EAAE,OAAO,CAAC;QAC1B,UAAU,EAAE,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,UAAU,GAAG,IAAI,CAAC;QAElB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAI,OAAO,EAAE,YAAY,EAAE;YACvD,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,OAAO;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ,IAAI,OAAO,KAAK,OAAO;YAAE,OAAO;QAE5C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,IAAI,CAAC;QACJ,SAAS,CAAC,GAAG,EAAE;YACd,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,EAAE,KAAK,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACR,0DAA0D;IAC3D,CAAC;IAED,KAAK,OAAO,EAAE,CAAC;IAEf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { useCreateQueryClient, useInitQueryClient, useQueryClient, useSafeQueryFn, } from "../../core/services/query.service.js";
2
+ export * from "./fetch.js";
3
+ export * from "./query.js";
4
+ export * from "./watch.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/svelte/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACd,MAAM,sCAAsC,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { useCreateQueryClient, useInitQueryClient, useQueryClient, useSafeQueryFn, } from "../../core/services/query.service.js";
2
+ export * from "./fetch.js";
3
+ export * from "./query.js";
4
+ export * from "./watch.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/svelte/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACd,MAAM,sCAAsC,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { type MutationObserverOptions, type MutationObserverResult, type QueryClient, type QueryObserverOptions, type QueryObserverResult } from "@tanstack/query-core";
2
+ import { type Readable } from "svelte/store";
3
+ /**
4
+ * Svelte store factory for a cached query, backed by TanStack Query Core.
5
+ *
6
+ * Returns a `Readable` of TanStack's {@link QueryObserverResult}. Subscribe
7
+ * with `$query` — `$query.data`, `$query.isPending`, `$query.isError`,
8
+ * `$query.status`, etc.
9
+ *
10
+ * @param options - TanStack query options (`queryKey`, `queryFn`, `staleTime`, …).
11
+ * @param client - Optional {@link QueryClient} (defaults to the shared singleton).
12
+ * @returns A `Readable` of the TanStack {@link QueryObserverResult}.
13
+ *
14
+ * @example
15
+ * ```svelte
16
+ * <script lang="ts">
17
+ * import { useQuery, useSafeQueryFn } from "katanakit-js/adapters/svelte";
18
+ * import { useGetApi } from "katanakit-js";
19
+ *
20
+ * const query = useQuery({
21
+ * queryKey: ["pokemon", 25],
22
+ * queryFn: useSafeQueryFn(() => useGetApi("pokeapi", "pokemonById", { params: { id: 25 } })),
23
+ * });
24
+ * </script>
25
+ *
26
+ * {#if $query.isPending}
27
+ * <div>Loading…</div>
28
+ * {:else if $query.isError}
29
+ * <div>{$query.error?.message}</div>
30
+ * {:else}
31
+ * <div>{$query.data?.name}</div>
32
+ * {/if}
33
+ * ```
34
+ */
35
+ export declare function useQuery<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(options: QueryObserverOptions<TQueryFnData, TError, TData>, client?: QueryClient): Readable<QueryObserverResult<TData, TError>>;
36
+ /**
37
+ * Svelte store factory for a mutation, backed by TanStack Query Core.
38
+ *
39
+ * @param options - TanStack mutation options (`mutationFn`, `onSuccess`, …).
40
+ * @param client - Optional {@link QueryClient} (defaults to the shared singleton).
41
+ * @returns A `Readable` of the TanStack {@link MutationObserverResult}.
42
+ *
43
+ * @example
44
+ * ```svelte
45
+ * <script lang="ts">
46
+ * import { useMutation, useQueryClient } from "katanakit-js/adapters/svelte";
47
+ * import { usePost } from "katanakit-js";
48
+ *
49
+ * const qc = useQueryClient();
50
+ * const mutation = useMutation({
51
+ * mutationFn: (name: string) => usePost("api", "createUser", { name }),
52
+ * onSuccess: () => qc.invalidateQueries({ queryKey: ["users"] }),
53
+ * });
54
+ * </script>
55
+ *
56
+ * <button disabled={$mutation.isPending} on:click={() => $mutation.mutate("Ada")}>Create</button>
57
+ * ```
58
+ */
59
+ export declare function useMutation<TData = unknown, TError = Error, TVariables = void, TContext = unknown>(options: MutationObserverOptions<TData, TError, TVariables, TContext>, client?: QueryClient): Readable<MutationObserverResult<TData, TError, TVariables, TContext>>;
60
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/adapters/svelte/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAEhB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,cAAc,CAAC;AAIvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,YAAY,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,YAAY,EACpF,OAAO,EAAE,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAC1D,MAAM,CAAC,EAAE,WAAW,GAClB,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAS9C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,OAAO,EACjG,OAAO,EAAE,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EACrE,MAAM,CAAC,EAAE,WAAW,GAClB,QAAQ,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAavE"}