katanakit-js 3.2.2 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +435 -307
- package/dist/adapters/angular/fetch.d.ts +37 -0
- package/dist/adapters/angular/fetch.d.ts.map +1 -0
- package/dist/adapters/angular/fetch.js +67 -0
- package/dist/adapters/angular/fetch.js.map +1 -0
- package/dist/adapters/angular/index.d.ts +4 -0
- package/dist/adapters/angular/index.d.ts.map +1 -0
- package/dist/adapters/angular/index.js +4 -0
- package/dist/adapters/angular/index.js.map +1 -0
- package/dist/adapters/angular/query.d.ts +107 -0
- package/dist/adapters/angular/query.d.ts.map +1 -0
- package/dist/adapters/angular/query.js +166 -0
- package/dist/adapters/angular/query.js.map +1 -0
- package/dist/adapters/angular/watch.d.ts +34 -0
- package/dist/adapters/angular/watch.d.ts.map +1 -0
- package/dist/adapters/angular/watch.js +38 -0
- package/dist/adapters/angular/watch.js.map +1 -0
- package/dist/adapters/assistant/assistant.service.js +1 -1
- package/dist/adapters/assistant/assistant.service.js.map +1 -1
- package/dist/adapters/astro/astro.service.d.ts +0 -1
- package/dist/adapters/astro/astro.service.d.ts.map +1 -1
- package/dist/adapters/astro/astro.service.js +0 -1
- package/dist/adapters/astro/astro.service.js.map +1 -1
- package/dist/adapters/bun/dummyjson.service.d.ts +88 -0
- package/dist/adapters/bun/dummyjson.service.d.ts.map +1 -0
- package/dist/adapters/bun/dummyjson.service.js +149 -0
- package/dist/adapters/bun/dummyjson.service.js.map +1 -0
- package/dist/adapters/bun/index.d.ts +5 -0
- package/dist/adapters/bun/index.d.ts.map +1 -0
- package/dist/adapters/bun/index.js +5 -0
- package/dist/adapters/bun/index.js.map +1 -0
- package/dist/adapters/bun/main.d.ts +2 -0
- package/dist/adapters/bun/main.d.ts.map +1 -0
- package/dist/adapters/bun/main.js +6 -0
- package/dist/adapters/bun/main.js.map +1 -0
- package/dist/adapters/bun/routes.d.ts +62 -0
- package/dist/adapters/bun/routes.d.ts.map +1 -0
- package/dist/adapters/bun/routes.js +60 -0
- package/dist/adapters/bun/routes.js.map +1 -0
- package/dist/adapters/bun/seed.d.ts +65 -0
- package/dist/adapters/bun/seed.d.ts.map +1 -0
- package/dist/adapters/bun/seed.js +117 -0
- package/dist/adapters/bun/seed.js.map +1 -0
- package/dist/adapters/bun/server.d.ts +53 -0
- package/dist/adapters/bun/server.d.ts.map +1 -0
- package/dist/adapters/bun/server.js +64 -0
- package/dist/adapters/bun/server.js.map +1 -0
- package/dist/adapters/express/app.d.ts +2 -1
- package/dist/adapters/express/app.d.ts.map +1 -1
- package/dist/adapters/express/app.js +14 -2
- package/dist/adapters/express/app.js.map +1 -1
- package/dist/adapters/express/products.controller.d.ts.map +1 -1
- package/dist/adapters/express/products.controller.js +3 -1
- package/dist/adapters/express/products.controller.js.map +1 -1
- package/dist/adapters/express/server.js +2 -2
- package/dist/adapters/express/server.js.map +1 -1
- package/dist/adapters/notion/notion.service.d.ts +4 -2
- package/dist/adapters/notion/notion.service.d.ts.map +1 -1
- package/dist/adapters/notion/notion.service.js +19 -5
- package/dist/adapters/notion/notion.service.js.map +1 -1
- package/dist/adapters/react/fetch.d.ts +44 -0
- package/dist/adapters/react/fetch.d.ts.map +1 -0
- package/dist/adapters/react/fetch.js +74 -0
- package/dist/adapters/react/fetch.js.map +1 -0
- package/dist/adapters/react/index.d.ts +4 -0
- package/dist/adapters/react/index.d.ts.map +1 -0
- package/dist/adapters/react/index.js +4 -0
- package/dist/adapters/react/index.js.map +1 -0
- package/dist/adapters/react/query.d.ts +104 -0
- package/dist/adapters/react/query.d.ts.map +1 -0
- package/dist/adapters/react/query.js +200 -0
- package/dist/adapters/react/query.js.map +1 -0
- package/dist/adapters/react/watch.d.ts +37 -0
- package/dist/adapters/react/watch.d.ts.map +1 -0
- package/dist/adapters/react/watch.js +39 -0
- package/dist/adapters/react/watch.js.map +1 -0
- package/dist/adapters/solid/fetch.d.ts +43 -0
- package/dist/adapters/solid/fetch.d.ts.map +1 -0
- package/dist/adapters/solid/fetch.js +72 -0
- package/dist/adapters/solid/fetch.js.map +1 -0
- package/dist/adapters/solid/index.d.ts +4 -0
- package/dist/adapters/solid/index.d.ts.map +1 -0
- package/dist/adapters/solid/index.js +4 -0
- package/dist/adapters/solid/index.js.map +1 -0
- package/dist/adapters/solid/query.d.ts +102 -0
- package/dist/adapters/solid/query.d.ts.map +1 -0
- package/dist/adapters/solid/query.js +163 -0
- package/dist/adapters/solid/query.js.map +1 -0
- package/dist/adapters/solid/watch.d.ts +32 -0
- package/dist/adapters/solid/watch.d.ts.map +1 -0
- package/dist/adapters/solid/watch.js +36 -0
- package/dist/adapters/solid/watch.js.map +1 -0
- package/dist/adapters/svelte/fetch.d.ts +40 -0
- package/dist/adapters/svelte/fetch.d.ts.map +1 -0
- package/dist/adapters/svelte/fetch.js +75 -0
- package/dist/adapters/svelte/fetch.js.map +1 -0
- package/dist/adapters/svelte/index.d.ts +4 -0
- package/dist/adapters/svelte/index.d.ts.map +1 -0
- package/dist/adapters/svelte/index.js +4 -0
- package/dist/adapters/svelte/index.js.map +1 -0
- package/dist/adapters/svelte/query.d.ts +108 -0
- package/dist/adapters/svelte/query.d.ts.map +1 -0
- package/dist/adapters/svelte/query.js +172 -0
- package/dist/adapters/svelte/query.js.map +1 -0
- package/dist/adapters/svelte/watch.d.ts +32 -0
- package/dist/adapters/svelte/watch.d.ts.map +1 -0
- package/dist/adapters/svelte/watch.js +41 -0
- package/dist/adapters/svelte/watch.js.map +1 -0
- package/dist/adapters/telegram/telegram.service.js +1 -1
- package/dist/adapters/telegram/telegram.service.js.map +1 -1
- package/dist/adapters/vue/query.d.ts +1 -2
- package/dist/adapters/vue/query.d.ts.map +1 -1
- package/dist/adapters/vue/query.js +9 -9
- package/dist/adapters/vue/query.js.map +1 -1
- package/dist/adapters/vue/vue.service.d.ts +9 -5
- package/dist/adapters/vue/vue.service.d.ts.map +1 -1
- package/dist/adapters/vue/vue.service.js +7 -3
- package/dist/adapters/vue/vue.service.js.map +1 -1
- package/dist/adapters/whatsapp/whatsapp.service.js +1 -1
- package/dist/adapters/whatsapp/whatsapp.service.js.map +1 -1
- package/dist/adapters/wordpress/wordpress.service.d.ts +2 -1
- package/dist/adapters/wordpress/wordpress.service.d.ts.map +1 -1
- package/dist/adapters/wordpress/wordpress.service.js +10 -5
- package/dist/adapters/wordpress/wordpress.service.js.map +1 -1
- package/dist/core/services/agent.service.d.ts.map +1 -1
- package/dist/core/services/agent.service.js +9 -1
- package/dist/core/services/agent.service.js.map +1 -1
- package/dist/core/services/dates.service.d.ts.map +1 -1
- package/dist/core/services/dates.service.js +2 -1
- package/dist/core/services/dates.service.js.map +1 -1
- package/dist/core/services/error.service.d.ts +1 -1
- package/dist/core/services/error.service.js +1 -1
- package/dist/core/services/http.service.d.ts +26 -5
- package/dist/core/services/http.service.d.ts.map +1 -1
- package/dist/core/services/http.service.js +30 -6
- package/dist/core/services/http.service.js.map +1 -1
- package/dist/core/services/logger.service.d.ts +10 -67
- package/dist/core/services/logger.service.d.ts.map +1 -1
- package/dist/core/services/logger.service.js +13 -139
- package/dist/core/services/logger.service.js.map +1 -1
- package/dist/core/services/query.service.d.ts +4 -0
- package/dist/core/services/query.service.d.ts.map +1 -1
- package/dist/core/services/query.service.js +75 -63
- package/dist/core/services/query.service.js.map +1 -1
- package/dist/core/services/reactive.service.d.ts.map +1 -1
- package/dist/core/services/reactive.service.js +7 -10
- package/dist/core/services/reactive.service.js.map +1 -1
- package/dist/core/services/timing.service.js +8 -8
- package/dist/core/services/timing.service.js.map +1 -1
- package/dist/core/services/utils.service.d.ts.map +1 -1
- package/dist/core/services/utils.service.js +3 -0
- package/dist/core/services/utils.service.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
- package/dist/infrastructure/dom/dom.service.js +18 -4
- package/dist/infrastructure/dom/dom.service.js.map +1 -1
- package/dist/infrastructure/observer/observer.service.js +2 -2
- package/dist/infrastructure/observer/observer.service.js.map +1 -1
- package/dist/infrastructure/sensors/sensors.service.js +6 -6
- package/dist/infrastructure/sensors/sensors.service.js.map +1 -1
- package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
- package/dist/infrastructure/storage/storage.service.js +12 -2
- package/dist/infrastructure/storage/storage.service.js.map +1 -1
- package/dist/prisma/assistant.store.d.ts +3 -0
- package/dist/prisma/assistant.store.d.ts.map +1 -1
- package/dist/prisma/assistant.store.js +12 -6
- package/dist/prisma/assistant.store.js.map +1 -1
- package/dist/prisma/use-prisma.d.ts +5 -4
- package/dist/prisma/use-prisma.d.ts.map +1 -1
- package/dist/prisma/use-prisma.js +5 -4
- package/dist/prisma/use-prisma.js.map +1 -1
- package/dist/types/index.d.ts +2 -6
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +244 -185
- package/dist/prisma/db.d.ts +0 -4
- package/dist/prisma/db.d.ts.map +0 -1
- package/dist/prisma/db.js +0 -12
- package/dist/prisma/db.js.map +0 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { createEffect, createSignal, onCleanup } from "solid-js";
|
|
2
|
+
import { useQueryClient, } from "../../core/services/query.service.js";
|
|
3
|
+
/**
|
|
4
|
+
* Solid primitive that wraps the {@link QueryClient} with fine-grained signals.
|
|
5
|
+
* Integrates with the API manager — your `queryFn` typically calls `useGetApi`
|
|
6
|
+
* or `useFetch` and returns the Safe Result.
|
|
7
|
+
*
|
|
8
|
+
* @param config - Query configuration.
|
|
9
|
+
* @param client - Optional QueryClient instance (uses global singleton by default).
|
|
10
|
+
* @returns Signal accessors for `{ data, error, isLoading, isSuccess, isError, isStale, status }` plus `refetch`.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* import { useQuery } from "katanakit-js/adapters/solid";
|
|
15
|
+
* import { useGetApi } from "katanakit-js";
|
|
16
|
+
*
|
|
17
|
+
* function Pokemon() {
|
|
18
|
+
* const { data, isLoading, error } = useQuery({
|
|
19
|
+
* queryKey: ["pokemon", 25],
|
|
20
|
+
* queryFn: () => useGetApi("pokeapi", "pokemonById", { params: { id: 25 } }),
|
|
21
|
+
* });
|
|
22
|
+
* return <Show when={!isLoading() && !error()} fallback={<div>Loading…</div>}>
|
|
23
|
+
* <div>{data()?.name}</div>
|
|
24
|
+
* </Show>;
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function useQuery(config, client) {
|
|
29
|
+
const qc = client ?? useQueryClient();
|
|
30
|
+
const [data, setData] = createSignal(null);
|
|
31
|
+
const [error, setError] = createSignal(null);
|
|
32
|
+
const [isLoading, setIsLoading] = createSignal(false);
|
|
33
|
+
const [isSuccess, setIsSuccess] = createSignal(false);
|
|
34
|
+
const [isError, setIsError] = createSignal(false);
|
|
35
|
+
const [isStale, setIsStale] = createSignal(true);
|
|
36
|
+
const [status, setStatus] = createSignal("idle");
|
|
37
|
+
const sync = (state) => {
|
|
38
|
+
// Updater form avoids Solid's "function as value" ambiguity for generic T.
|
|
39
|
+
setData(() => state.data);
|
|
40
|
+
setError(state.error);
|
|
41
|
+
setIsLoading(state.isLoading);
|
|
42
|
+
setIsSuccess(state.isSuccess);
|
|
43
|
+
setIsError(state.isError);
|
|
44
|
+
setIsStale(state.isStale);
|
|
45
|
+
setStatus(state.status);
|
|
46
|
+
};
|
|
47
|
+
createEffect(() => {
|
|
48
|
+
const qKey = config.queryKey;
|
|
49
|
+
const unsubscribe = qc.subscribe(qKey, (next) => sync(next));
|
|
50
|
+
const existing = qc.getQueryState(qKey);
|
|
51
|
+
if (existing)
|
|
52
|
+
sync(existing);
|
|
53
|
+
if (config.enabled !== false) {
|
|
54
|
+
void qc
|
|
55
|
+
.fetchQuery({
|
|
56
|
+
queryKey: qKey,
|
|
57
|
+
queryFn: config.queryFn,
|
|
58
|
+
staleTime: config.staleTime,
|
|
59
|
+
cacheTime: config.cacheTime,
|
|
60
|
+
retry: config.retry,
|
|
61
|
+
retryDelay: config.retryDelay,
|
|
62
|
+
})
|
|
63
|
+
.catch(() => {
|
|
64
|
+
// Error is already reflected in the cache state.
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
onCleanup(unsubscribe);
|
|
68
|
+
});
|
|
69
|
+
const refetch = async () => {
|
|
70
|
+
await qc
|
|
71
|
+
.fetchQuery({
|
|
72
|
+
queryKey: config.queryKey,
|
|
73
|
+
queryFn: config.queryFn,
|
|
74
|
+
staleTime: 0,
|
|
75
|
+
cacheTime: config.cacheTime,
|
|
76
|
+
retry: config.retry,
|
|
77
|
+
retryDelay: config.retryDelay,
|
|
78
|
+
})
|
|
79
|
+
.catch(() => {
|
|
80
|
+
// Error is already reflected in the cache state.
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
return { data, error, isLoading, isSuccess, isError, isStale, status, refetch };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Solid primitive for mutations (POST/PUT/PATCH/DELETE).
|
|
87
|
+
* Does not cache — returns a `mutate` function that executes the mutation.
|
|
88
|
+
*
|
|
89
|
+
* @param config - Mutation configuration.
|
|
90
|
+
* @returns Signal accessors plus `{ mutate, reset }`.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```tsx
|
|
94
|
+
* import { useMutation, useQueryClient } from "katanakit-js/adapters/solid";
|
|
95
|
+
* import { usePost } from "katanakit-js";
|
|
96
|
+
*
|
|
97
|
+
* function CreateUser() {
|
|
98
|
+
* const qc = useQueryClient();
|
|
99
|
+
* const { mutate, isLoading } = useMutation({
|
|
100
|
+
* mutationFn: (name: string) => usePost("api", "createUser", { name }),
|
|
101
|
+
* onSuccess: () => qc.invalidateQueries({ queryKey: ["users"] }),
|
|
102
|
+
* });
|
|
103
|
+
* return <button disabled={isLoading()} onClick={() => mutate("Ada")}>Create</button>;
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export function useMutation(config) {
|
|
108
|
+
const [data, setData] = createSignal(null);
|
|
109
|
+
const [error, setError] = createSignal(null);
|
|
110
|
+
const [isLoading, setIsLoading] = createSignal(false);
|
|
111
|
+
const [isSuccess, setIsSuccess] = createSignal(false);
|
|
112
|
+
const [isError, setIsError] = createSignal(false);
|
|
113
|
+
const [status, setStatus] = createSignal("idle");
|
|
114
|
+
const mutate = async (variables) => {
|
|
115
|
+
setIsLoading(true);
|
|
116
|
+
setIsSuccess(false);
|
|
117
|
+
setIsError(false);
|
|
118
|
+
setStatus("loading");
|
|
119
|
+
try {
|
|
120
|
+
const result = await config.mutationFn(variables);
|
|
121
|
+
if (result.ok) {
|
|
122
|
+
setData(() => result.data);
|
|
123
|
+
setError(null);
|
|
124
|
+
setIsSuccess(true);
|
|
125
|
+
setStatus("success");
|
|
126
|
+
config.onSuccess?.(result.data, variables);
|
|
127
|
+
config.onSettled?.(result.data, null, variables);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
setData(null);
|
|
131
|
+
setError(result.error);
|
|
132
|
+
setIsError(true);
|
|
133
|
+
setStatus("error");
|
|
134
|
+
config.onError?.(result.error, variables);
|
|
135
|
+
config.onSettled?.(null, result.error, variables);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (caught) {
|
|
139
|
+
const apiError = caught instanceof Error
|
|
140
|
+
? { message: caught.message, status: 0 }
|
|
141
|
+
: { message: String(caught), status: 0 };
|
|
142
|
+
setData(null);
|
|
143
|
+
setError(apiError);
|
|
144
|
+
setIsError(true);
|
|
145
|
+
setStatus("error");
|
|
146
|
+
config.onError?.(apiError, variables);
|
|
147
|
+
config.onSettled?.(null, apiError, variables);
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
setIsLoading(false);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
const reset = () => {
|
|
154
|
+
setData(null);
|
|
155
|
+
setError(null);
|
|
156
|
+
setIsLoading(false);
|
|
157
|
+
setIsSuccess(false);
|
|
158
|
+
setIsError(false);
|
|
159
|
+
setStatus("idle");
|
|
160
|
+
};
|
|
161
|
+
return { data, error, isLoading, isSuccess, isError, status, mutate, reset };
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/adapters/solid/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/svelte/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/svelte/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { type Readable } from "svelte/store";
|
|
2
|
+
import { type QueryClient, type QueryKey, type QueryState } from "../../core/services/query.service.js";
|
|
3
|
+
import type { ApiError, FetchResult } from "../../types/index.js";
|
|
4
|
+
/** Configuration for `useQuery` (Svelte store factory). */
|
|
5
|
+
export interface UseQueryConfig<T = unknown> {
|
|
6
|
+
/** Cache key (stable array). */
|
|
7
|
+
queryKey: QueryKey;
|
|
8
|
+
/** Fetcher function returning a Safe Result. */
|
|
9
|
+
queryFn: () => Promise<FetchResult<T>>;
|
|
10
|
+
/** Time in ms before cached data is stale (default: 0). */
|
|
11
|
+
staleTime?: number;
|
|
12
|
+
/** Time in ms to keep unused data (default: 5 min). */
|
|
13
|
+
cacheTime?: number;
|
|
14
|
+
/** Retry count on failure (default: 3). */
|
|
15
|
+
retry?: number;
|
|
16
|
+
/** Base delay for exponential backoff (default: 1000). */
|
|
17
|
+
retryDelay?: number;
|
|
18
|
+
/** Whether the query is enabled (default: true). */
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** Reactive return value of `useQuery` (Svelte readable stores). */
|
|
22
|
+
export interface UseQueryReturn<T = unknown> {
|
|
23
|
+
data: Readable<T | null>;
|
|
24
|
+
error: Readable<ApiError | null>;
|
|
25
|
+
isLoading: Readable<boolean>;
|
|
26
|
+
isSuccess: Readable<boolean>;
|
|
27
|
+
isError: Readable<boolean>;
|
|
28
|
+
isStale: Readable<boolean>;
|
|
29
|
+
status: Readable<QueryState<T>["status"]>;
|
|
30
|
+
/** Manually refetch the query. */
|
|
31
|
+
refetch: () => Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
/** Configuration for `useMutation`. */
|
|
34
|
+
export interface UseMutationConfig<TData = unknown, TVariables = unknown> {
|
|
35
|
+
mutationFn: (variables: TVariables) => Promise<FetchResult<TData>>;
|
|
36
|
+
onSuccess?: (data: TData, variables: TVariables) => void;
|
|
37
|
+
onError?: (error: ApiError, variables: TVariables) => void;
|
|
38
|
+
onSettled?: (data: TData | null, error: ApiError | null, variables: TVariables) => void;
|
|
39
|
+
}
|
|
40
|
+
/** Reactive return value of `useMutation`. */
|
|
41
|
+
export interface UseMutationReturn<TData = unknown, TVariables = unknown> {
|
|
42
|
+
data: Readable<TData | null>;
|
|
43
|
+
error: Readable<ApiError | null>;
|
|
44
|
+
isLoading: Readable<boolean>;
|
|
45
|
+
isSuccess: Readable<boolean>;
|
|
46
|
+
isError: Readable<boolean>;
|
|
47
|
+
status: Readable<"idle" | "loading" | "success" | "error">;
|
|
48
|
+
/** Execute the mutation. */
|
|
49
|
+
mutate: (variables: TVariables) => Promise<void>;
|
|
50
|
+
/** Reset the mutation state. */
|
|
51
|
+
reset: () => void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Svelte store factory that wraps the {@link QueryClient}.
|
|
55
|
+
* Integrates with the API manager — your `queryFn` typically calls `useGetApi`
|
|
56
|
+
* or `useFetch` and returns the Safe Result.
|
|
57
|
+
*
|
|
58
|
+
* Unsubscribes automatically on component destroy when called during init.
|
|
59
|
+
*
|
|
60
|
+
* @param config - Query configuration.
|
|
61
|
+
* @param client - Optional QueryClient instance (uses global singleton by default).
|
|
62
|
+
* @returns Readable stores `{ data, error, isLoading, isSuccess, isError, isStale, status }` plus `refetch`.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```svelte
|
|
66
|
+
* <script lang="ts">
|
|
67
|
+
* import { useQuery } from "katanakit-js/adapters/svelte";
|
|
68
|
+
* import { useGetApi } from "katanakit-js";
|
|
69
|
+
*
|
|
70
|
+
* const { data, isLoading, error } = useQuery({
|
|
71
|
+
* queryKey: ["pokemon", 25],
|
|
72
|
+
* queryFn: () => useGetApi("pokeapi", "pokemonById", { params: { id: 25 } }),
|
|
73
|
+
* });
|
|
74
|
+
* </script>
|
|
75
|
+
*
|
|
76
|
+
* {#if $isLoading}
|
|
77
|
+
* <div>Loading…</div>
|
|
78
|
+
* {:else if $error}
|
|
79
|
+
* <div>{$error.message}</div>
|
|
80
|
+
* {:else}
|
|
81
|
+
* <div>{$data?.name}</div>
|
|
82
|
+
* {/if}
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function useQuery<T>(config: UseQueryConfig<T>, client?: QueryClient): UseQueryReturn<T>;
|
|
86
|
+
/**
|
|
87
|
+
* Svelte store factory for mutations (POST/PUT/PATCH/DELETE).
|
|
88
|
+
* Does not cache — returns a `mutate` function that executes the mutation.
|
|
89
|
+
*
|
|
90
|
+
* @param config - Mutation configuration.
|
|
91
|
+
* @returns Readable stores plus `{ mutate, reset }`.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```svelte
|
|
95
|
+
* <script lang="ts">
|
|
96
|
+
* import { useMutation, useQueryClient } from "katanakit-js/adapters/svelte";
|
|
97
|
+
* import { usePost } from "katanakit-js";
|
|
98
|
+
*
|
|
99
|
+
* const qc = useQueryClient();
|
|
100
|
+
* const { mutate, isLoading } = useMutation({
|
|
101
|
+
* mutationFn: (name: string) => usePost("api", "createUser", { name }),
|
|
102
|
+
* onSuccess: () => qc.invalidateQueries({ queryKey: ["users"] }),
|
|
103
|
+
* });
|
|
104
|
+
* </script>
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare function useMutation<TData = unknown, TVariables = unknown>(config: UseMutationConfig<TData, TVariables>): UseMutationReturn<TData, TVariables>;
|
|
108
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/adapters/svelte/query.ts"],"names":[],"mappings":"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"}
|