vue-api-kit 1.10.5 → 1.10.7

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.
@@ -129,13 +129,9 @@ export interface ApiClientOptions<Q extends Record<string, NestedStructure<ApiQu
129
129
  onBeforeRequest?: (config: InternalAxiosRequestConfig<any>) => Promise<any> | void | any;
130
130
  onStartRequest?: () => Promise<void> | void | any;
131
131
  onFinishRequest?: () => Promise<void> | void | any;
132
- onErrorRequest?: (error: {
132
+ onError?: (error: {
133
133
  err: AxiosError | ZodError | Error;
134
134
  message: string;
135
- status?: number;
136
- code?: string;
137
- response?: any;
138
- url?: string;
139
135
  }) => void;
140
136
  onZodError?: (zodError: $ZodFlattenedError<any, any>) => void;
141
137
  }
package/dist/index.d.ts CHANGED
@@ -2,5 +2,5 @@ export * as z from 'zod';
2
2
  export { createApiClient } from './core/client';
3
3
  export { mergeQueries, mergeMutations, defineQuery, defineMutation } from './core/merge';
4
4
  export type * from './core/types';
5
- export type { ZodError } from 'zod';
5
+ export { ZodError } from 'zod';
6
6
  export { AxiosError } from 'axios';
package/dist/index.js CHANGED
@@ -1,17 +1,18 @@
1
- import P, { ZodError as F } from "zod";
2
- import * as W from "zod";
3
- import N, { AxiosError as L } from "axios";
4
- import { AxiosError as ae } from "axios";
5
- import { nextTick as $, ref as v, onMounted as U, watch as I, onBeforeUnmount as Q } from "vue";
6
- import { debounce as z } from "lodash-es";
7
- function J(e) {
1
+ import A, { ZodError as F } from "zod";
2
+ import * as G from "zod";
3
+ import { ZodError as ae } from "zod";
4
+ import U, { AxiosError as Z } from "axios";
5
+ import { AxiosError as ie } from "axios";
6
+ import { nextTick as _, ref as p, onMounted as N, watch as Q, onBeforeUnmount as z } from "vue";
7
+ import { debounce as J } from "lodash-es";
8
+ function H(e) {
8
9
  return e && typeof e == "object" && e !== null && typeof e.path == "string";
9
10
  }
10
- function H(e) {
11
+ function W(e) {
11
12
  return e && typeof e == "object" && e !== null && typeof e.path == "string" && typeof e.method == "string";
12
13
  }
13
14
  function Y(e) {
14
- const h = N.create({
15
+ const h = U.create({
15
16
  baseURL: e.baseURL,
16
17
  headers: {
17
18
  "Content-Type": "application/json",
@@ -21,13 +22,13 @@ function Y(e) {
21
22
  withCredentials: e.withCredentials ?? !1,
22
23
  withXSRFToken: e.withXSRFToken ?? !1
23
24
  });
24
- let B = !1, A = null;
25
+ let B = !1, w = null;
25
26
  e.onBeforeRequest && h.interceptors.request.use(
26
27
  async (r) => {
27
28
  try {
28
29
  return await e.onBeforeRequest(r) || r;
29
- } catch (i) {
30
- return Promise.reject(i);
30
+ } catch (n) {
31
+ return Promise.reject(n);
31
32
  }
32
33
  },
33
34
  (r) => Promise.reject(r)
@@ -35,8 +36,8 @@ function Y(e) {
35
36
  async (r) => {
36
37
  try {
37
38
  return await e.onStartRequest(), r;
38
- } catch (i) {
39
- return Promise.reject(i);
39
+ } catch (n) {
40
+ return Promise.reject(n);
40
41
  }
41
42
  },
42
43
  (r) => Promise.reject(r)
@@ -45,188 +46,188 @@ function Y(e) {
45
46
  (r) => (e.onFinishRequest(), Promise.reject(r))
46
47
  ), h.interceptors.request.use((r) => {
47
48
  if (!r.url) return r;
48
- const i = (m) => {
49
+ const n = (m) => {
49
50
  if (m)
50
- for (const [d, s] of Object.entries(m)) {
51
- const o = `{${d}}`;
51
+ for (const [c, s] of Object.entries(m)) {
52
+ const o = `{${c}}`;
52
53
  r.url.includes(o) && (r.url = r.url.replace(
53
54
  o,
54
55
  encodeURIComponent(String(s))
55
- ), delete m[d]);
56
+ ), delete m[c]);
56
57
  }
57
58
  };
58
- return r.method !== "get" && r.data?.params && i(r.data.params), i(r.params), r;
59
+ return r.method !== "get" && r.data?.params && n(r.data.params), n(r.params), r;
59
60
  }), e.csrfRefreshEndpoint && h.interceptors.response.use(
60
61
  (r) => r,
61
62
  async (r) => {
62
- const i = r.config;
63
- if (i?.url === e.csrfRefreshEndpoint)
63
+ const n = r.config;
64
+ if (n?.url === e.csrfRefreshEndpoint)
64
65
  return Promise.reject(r);
65
- if (r.response && (r.response.status === 403 || r.response.status === 419) && !i?._retry) {
66
- i._retry = !0;
66
+ if (r.response && (r.response.status === 403 || r.response.status === 419) && !n?._retry) {
67
+ n._retry = !0;
67
68
  try {
68
- return B && A ? await A : (B = !0, A = h.get(e.csrfRefreshEndpoint).then(() => {
69
- B = !1, A = null;
70
- }), await A), h.request(i);
69
+ return B && w ? await w : (B = !0, w = h.get(e.csrfRefreshEndpoint).then(() => {
70
+ B = !1, w = null;
71
+ }), await w), h.request(n);
71
72
  } catch (m) {
72
- return B = !1, A = null, Promise.reject(m);
73
+ return B = !1, w = null, Promise.reject(m);
73
74
  }
74
75
  }
75
76
  return Promise.reject(r);
76
77
  }
77
78
  ), h.interceptors.response.use(
78
79
  (r) => r,
79
- (r) => ($(() => {
80
+ (r) => (_(() => {
80
81
  r.code;
81
82
  }), Promise.reject(r))
82
83
  );
83
84
  function D(r) {
84
- const i = {};
85
+ const n = {};
85
86
  for (const m in r) {
86
- const d = r[m];
87
- if (d)
88
- if (J(d)) {
89
- const s = d;
90
- i[m] = (o) => {
87
+ const c = r[m];
88
+ if (c)
89
+ if (H(c)) {
90
+ const s = c;
91
+ n[m] = (o) => {
91
92
  let a;
92
93
  o && typeof o == "object" && ("loadOnMount" in o || "debounce" in o || "onResult" in o || "onError" in o || "onZodError" in o || "onBeforeRequest" in o || "params" in o || "data" in o ? a = o : a = { params: o });
93
- const b = v(), p = v(), g = v(), C = v(!1), j = v(!1), k = v(!0);
94
- let w = new AbortController();
95
- const n = () => {
96
- w?.abort(), w = new AbortController();
94
+ const g = p(), v = p(), E = p(), C = p(!1), j = p(!1), k = p(!0);
95
+ let P = new AbortController();
96
+ const i = () => {
97
+ P?.abort(), P = new AbortController();
97
98
  }, l = async () => {
98
- C.value && n(), C.value = !0, p.value = void 0;
99
+ C.value && i(), C.value = !0, v.value = void 0;
99
100
  try {
100
101
  s.params && a?.params && s.params.parse(a.params);
101
102
  let t = a?.data;
102
103
  s.data && t && s.data.parse(t);
103
- const c = {
104
+ const u = {
104
105
  method: s.method ?? "GET",
105
106
  url: s.path,
106
107
  params: a?.params,
107
- signal: w.signal
108
+ signal: P.signal
108
109
  };
109
- if (s.method === "POST" && t && (c.data = t), s.onBeforeRequest) {
110
- const f = await s.onBeforeRequest(c);
111
- f !== void 0 && Object.assign(c, f);
110
+ if (s.method === "POST" && t && (u.data = t), s.onBeforeRequest) {
111
+ const d = await s.onBeforeRequest(u);
112
+ d !== void 0 && Object.assign(u, d);
112
113
  }
113
114
  if (a?.onBeforeRequest) {
114
- const f = await a.onBeforeRequest(c);
115
- f !== void 0 && Object.assign(c, f);
115
+ const d = await a.onBeforeRequest(u);
116
+ d !== void 0 && Object.assign(u, d);
116
117
  }
117
- p.value = void 0, g.value = void 0;
118
- const E = await h.request(c), u = s.response ? s.response.parse(E.data) : E.data;
119
- b.value = u, a?.onResult?.(u);
118
+ v.value = void 0, E.value = void 0;
119
+ const b = await h.request(u), f = s.response ? s.response.parse(b.data) : b.data;
120
+ g.value = f, a?.onResult?.(f);
120
121
  } catch (t) {
121
- if (t instanceof L) {
122
+ if (t instanceof Z) {
122
123
  if (t.code !== "ERR_CANCELED") {
123
- const c = t.config?.url, E = t.response?.data?.message || t.message || "An error occurred", u = t.response?.status, f = t.code, R = t.response;
124
- p.value = E, a?.onError?.(t), e.onErrorRequest?.({ err: t, message: E, status: u, code: f, response: R, url: c });
124
+ const u = t.response?.data?.message || t.message || "An error occurred";
125
+ v.value = u, a?.onError?.(t), e.onError?.({ err: t, message: u });
125
126
  }
126
127
  } else if (t instanceof F) {
127
- g.value = P.flattenError(t);
128
- const c = Object.keys(g.value.fieldErrors).length, E = `${Object.values(g.value.fieldErrors).at(0)}.${c > 1 ? ` (and ${c - 1} more errors)` : ""}`;
129
- p.value = E, a?.onError?.(t), a?.onZodError?.(P.flattenError(t)), e.onErrorRequest?.({ err: t, message: E, code: "VALIDATION_ERROR" }), e.onZodError && e.onZodError(P.flattenError(t));
128
+ E.value = A.flattenError(t);
129
+ const u = Object.keys(E.value.fieldErrors).length, b = `${Object.values(E.value.fieldErrors).at(0)}.${u > 1 ? ` (and ${u - 1} more errors)` : ""}`;
130
+ v.value = b, a?.onError?.(t), a?.onZodError?.(A.flattenError(t)), e.onError?.({ err: t, message: b }), e.onZodError && e.onZodError(A.flattenError(t));
130
131
  } else {
131
- const c = t.message || "An error occurred";
132
- p.value = c, a?.onError?.(c), e.onErrorRequest?.({ err: t, message: c });
132
+ const u = t.message || "An error occurred";
133
+ v.value = u, a?.onError?.(u), e.onError?.({ err: t, message: u });
133
134
  }
134
135
  } finally {
135
136
  C.value = !1, j.value = !0;
136
137
  }
137
- }, y = a?.debounce ? z(l, a.debounce) : l;
138
+ }, R = a?.debounce ? J(l, a.debounce) : l;
138
139
  let q = null;
139
- return (a?.params || a?.data) && (U(() => {
140
- q && q(), q = I(
140
+ return (a?.params || a?.data) && (N(() => {
141
+ q && q(), q = Q(
141
142
  () => JSON.stringify({ params: a.params, data: a.data }),
142
143
  () => {
143
- y();
144
+ R();
144
145
  },
145
146
  { immediate: !1 }
146
147
  );
147
- }), Q(() => {
148
- q && q(), w?.abort();
149
- })), (a?.loadOnMount === void 0 || a.loadOnMount) && !j.value && (k.value ? (k.value = !1, l()) : y()), { result: b, errorMessage: p, zodError: g, isLoading: C, isDone: j, refetch: l };
148
+ }), z(() => {
149
+ q && q(), P?.abort();
150
+ })), (a?.loadOnMount === void 0 || a.loadOnMount) && !j.value && (k.value ? (k.value = !1, l()) : R()), { result: g, errorMessage: v, zodError: E, isLoading: C, isDone: j, refetch: l };
150
151
  };
151
- } else typeof d == "object" && (i[m] = D(d));
152
+ } else typeof c == "object" && (n[m] = D(c));
152
153
  }
153
- return i;
154
+ return n;
154
155
  }
155
- const T = e.queries ?? {}, Z = D(T);
156
+ const x = e.queries ?? {}, L = D(x);
156
157
  function S(r) {
157
- const i = {};
158
+ const n = {};
158
159
  for (const m in r) {
159
- const d = r[m];
160
- if (d)
161
- if (H(d)) {
162
- const s = d;
163
- i[m] = (o) => {
164
- const a = v(), b = v(), p = v(), g = v(!1), C = v(!1), j = v(0);
165
- return { result: a, errorMessage: b, zodError: p, isLoading: g, isDone: C, uploadProgress: j, mutate: async (w) => {
166
- if (!g.value) {
167
- g.value = !0, b.value = void 0, j.value = 0;
160
+ const c = r[m];
161
+ if (c)
162
+ if (W(c)) {
163
+ const s = c;
164
+ n[m] = (o) => {
165
+ const a = p(), g = p(), v = p(), E = p(!1), C = p(!1), j = p(0);
166
+ return { result: a, errorMessage: g, zodError: v, isLoading: E, isDone: C, uploadProgress: j, mutate: async (P) => {
167
+ if (!E.value) {
168
+ E.value = !0, g.value = void 0, j.value = 0;
168
169
  try {
169
- const { data: n = {}, params: l } = w ?? {};
170
- let y = n ?? {}, q = {};
170
+ const { data: i = {}, params: l } = P ?? {};
171
+ let R = i ?? {}, q = {};
171
172
  if (s.isMultipart) {
172
- const u = new FormData();
173
- for (const [f, R] of Object.entries(n))
174
- R instanceof File || R instanceof Blob ? u.append(f, R) : Array.isArray(R) ? R.forEach((M) => {
175
- M instanceof File || M instanceof Blob ? u.append(f, M) : u.append(f, JSON.stringify(M));
176
- }) : typeof R == "object" && R !== null ? u.append(f, JSON.stringify(R)) : u.append(f, String(R));
177
- y = u, q["Content-Type"] = "multipart/form-data";
178
- } else s.data && s.data.parse(n);
173
+ const f = new FormData();
174
+ for (const [d, y] of Object.entries(i))
175
+ y instanceof File || y instanceof Blob ? f.append(d, y) : Array.isArray(y) ? y.forEach((M) => {
176
+ M instanceof File || M instanceof Blob ? f.append(d, M) : f.append(d, JSON.stringify(M));
177
+ }) : typeof y == "object" && y !== null ? f.append(d, JSON.stringify(y)) : f.append(d, String(y));
178
+ R = f, q["Content-Type"] = "multipart/form-data";
179
+ } else s.data && s.data.parse(i);
179
180
  s.params && l && s.params.parse(l);
180
181
  const t = {
181
182
  method: s.method,
182
183
  url: s.path,
183
- data: y,
184
+ data: R,
184
185
  params: l,
185
186
  headers: q,
186
- onUploadProgress: (u) => {
187
- if (u.total) {
188
- const f = Math.round(u.loaded * 100 / u.total);
189
- j.value = f, o?.onUploadProgress?.(f);
187
+ onUploadProgress: (f) => {
188
+ if (f.total) {
189
+ const d = Math.round(f.loaded * 100 / f.total);
190
+ j.value = d, o?.onUploadProgress?.(d);
190
191
  }
191
192
  }
192
193
  };
193
194
  if (s.onBeforeRequest) {
194
- const u = await s.onBeforeRequest(t);
195
- u !== void 0 && Object.assign(t, u);
195
+ const f = await s.onBeforeRequest(t);
196
+ f !== void 0 && Object.assign(t, f);
196
197
  }
197
198
  if (o?.onBeforeRequest) {
198
- const u = await o.onBeforeRequest(t);
199
- u !== void 0 && Object.assign(t, u);
199
+ const f = await o.onBeforeRequest(t);
200
+ f !== void 0 && Object.assign(t, f);
200
201
  }
201
- b.value = void 0, p.value = void 0;
202
- const c = await h.request(t), E = s.response ? s.response.parse(c.data) : c.data;
203
- a.value = E, o?.onResult?.(E);
204
- } catch (n) {
205
- if (n instanceof L) {
206
- const l = n.response?.data?.message || n.message || "An error occurred", y = n.response?.status, q = n.code;
207
- b.value = l, o?.onError?.(n), e.onErrorRequest?.({ err: n, message: l, status: y, code: q });
208
- } else if (n instanceof F) {
209
- p.value = P.flattenError(n);
210
- const l = Object.keys(p.value.fieldErrors).length, y = `${Object.values(p.value.fieldErrors).at(0)}.${l > 1 ? ` (and ${l - 1} more errors)` : ""}`;
211
- b.value = y, o?.onError?.(n), o?.onZodError?.(P.flattenError(n)), e.onErrorRequest?.({ err: n, message: y, code: "VALIDATION_ERROR" }), e.onZodError && e.onZodError(P.flattenError(n));
202
+ g.value = void 0, v.value = void 0;
203
+ const u = await h.request(t), b = s.response ? s.response.parse(u.data) : u.data;
204
+ a.value = b, o?.onResult?.(b);
205
+ } catch (i) {
206
+ if (i instanceof Z) {
207
+ const l = i.response?.data?.message || i.message || "An error occurred";
208
+ g.value = l, o?.onError?.(i), e.onError?.({ err: i, message: l });
209
+ } else if (i instanceof F) {
210
+ v.value = A.flattenError(i);
211
+ const l = Object.keys(v.value.fieldErrors).length, R = `${Object.values(v.value.fieldErrors).at(0)}.${l > 1 ? ` (and ${l - 1} more errors)` : ""}`;
212
+ g.value = R, o?.onError?.(i), o?.onZodError?.(A.flattenError(i)), e.onError?.({ err: i, message: R }), e.onZodError && e.onZodError(A.flattenError(i));
212
213
  } else {
213
- const l = n.message || "An error occurred";
214
- b.value = l, o?.onError?.(n), e.onErrorRequest?.({ err: n, message: l });
214
+ const l = i.message || "An error occurred";
215
+ g.value = l, o?.onError?.(i), e.onError?.({ err: i, message: l });
215
216
  }
216
217
  } finally {
217
- g.value = !1, C.value = !0;
218
+ E.value = !1, C.value = !0;
218
219
  }
219
220
  }
220
221
  } };
221
222
  };
222
- } else typeof d == "object" && (i[m] = S(d));
223
+ } else typeof c == "object" && (n[m] = S(c));
223
224
  }
224
- return i;
225
+ return n;
225
226
  }
226
- const _ = e.mutations ?? {}, x = S(_);
227
+ const T = e.mutations ?? {}, $ = S(T);
227
228
  return {
228
- query: Z,
229
- mutation: x
229
+ query: L,
230
+ mutation: $
230
231
  };
231
232
  }
232
233
  function O(e) {
@@ -242,11 +243,12 @@ function te(...e) {
242
243
  return Object.assign({}, ...e);
243
244
  }
244
245
  export {
245
- ae as AxiosError,
246
+ ie as AxiosError,
247
+ ae as ZodError,
246
248
  Y as createApiClient,
247
249
  ee as defineMutation,
248
250
  O as defineQuery,
249
251
  te as mergeMutations,
250
252
  re as mergeQueries,
251
- W as z
253
+ G as z
252
254
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vue-api-kit",
3
3
  "type": "module",
4
- "version": "1.10.5",
4
+ "version": "1.10.7",
5
5
  "description": "A powerful and flexible API client for Vue 3 applications, built with TypeScript and Zod for type-safe API interactions.",
6
6
  "keywords": [
7
7
  "vue3",