@kevisual/query 0.0.48 → 0.0.50

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.
@@ -107,13 +107,14 @@ type QueryOpts = {
107
107
  } & AdapterOpts;
108
108
  type QueryOptions = {
109
109
  url?: string;
110
+ baseURL?: string;
111
+ beforeRequest?: Fn;
110
112
  adapter?: typeof adapter;
111
113
  headers?: Record<string, string>;
112
114
  timeout?: number;
113
115
  isClient?: boolean;
114
116
  tokenName?: string;
115
117
  storage?: Storage;
116
- beforeRequest?: Fn;
117
118
  };
118
119
  type Data = {
119
120
  path?: string;
@@ -149,6 +150,7 @@ type DataOpts = Partial<QueryOpts> & {
149
150
  */
150
151
  declare class Query {
151
152
  adapter: typeof adapter;
153
+ baseURL: string;
152
154
  url: string;
153
155
  /**
154
156
  * 请求前处理函数
@@ -227,7 +229,12 @@ type RouteInfo = {
227
229
  };
228
230
  };
229
231
  };
230
- declare const createQueryByRoutes: (list: RouteInfo[]) => string;
232
+ type CreateQueryOptions = {
233
+ removeViewItem?: boolean;
234
+ before?: string;
235
+ after?: string;
236
+ };
237
+ declare const createQueryByRoutes: (list: RouteInfo[], options?: CreateQueryOptions) => string;
231
238
 
232
239
  type Pos = {
233
240
  path?: string;
@@ -309,7 +316,7 @@ type ApiMethods<P extends {
309
316
  };
310
317
  }> = {
311
318
  [Path in keyof P]: {
312
- [Key in keyof P[Path]]: (data?: ExtractArgsFromMetadata<P[Path][Key]>, opts?: DataOpts) => ReturnType<Query['post']>;
319
+ [Key in keyof P[Path]]: <T = any>(data?: ExtractArgsFromMetadata<P[Path][Key]>, opts?: DataOpts) => Promise<Result<T>>;
313
320
  };
314
321
  };
315
322
  type QueryApiOpts<P extends {
package/dist/query-api.js CHANGED
@@ -120,6 +120,7 @@ var wrapperError = ({ code, message }) => {
120
120
 
121
121
  class Query {
122
122
  adapter;
123
+ baseURL;
123
124
  url;
124
125
  beforeRequest;
125
126
  afterResponse;
@@ -136,6 +137,11 @@ class Query {
136
137
  this.storage = opts?.storage || globalThis?.localStorage;
137
138
  const defaultURL = opts?.isClient ? "/client/router" : "/api/router";
138
139
  this.url = opts?.url || defaultURL;
140
+ if (this.url.startsWith("http")) {
141
+ const urlObj = new URL(this.url);
142
+ this.baseURL = urlObj.origin;
143
+ }
144
+ this.baseURL = opts?.baseURL || this.baseURL;
139
145
  this.headers = opts?.headers || {
140
146
  "Content-Type": "application/json"
141
147
  };
@@ -179,6 +185,13 @@ class Query {
179
185
  timeout: _timeout,
180
186
  ...rest
181
187
  };
188
+ const isStartsWithHttp = req.url.startsWith("http");
189
+ if (!isStartsWithHttp) {
190
+ if (this.baseURL) {
191
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
192
+ req.url = baseURL + req.url;
193
+ }
194
+ }
182
195
  try {
183
196
  if (_beforeRequest) {
184
197
  const res = await _beforeRequest(req);
@@ -275,7 +288,7 @@ class Query {
275
288
  }
276
289
  }
277
290
 
278
- // node_modules/@kevisual/router/dist/router-browser.js
291
+ // node_modules/.pnpm/@kevisual+router@0.0.84/node_modules/@kevisual/router/dist/router-browser.js
279
292
  var __create = Object.create;
280
293
  var __getProtoOf = Object.getPrototypeOf;
281
294
  var __defProp = Object.defineProperty;
@@ -14026,8 +14039,14 @@ var toJSONSchema3 = toJSONSchema2;
14026
14039
  var fromJSONSchema3 = fromJSONSchema2;
14027
14040
 
14028
14041
  // src/create-query/index.ts
14029
- var removeViewItemFromRoutes = (list) => {
14042
+ var removeViewItemCotnextFromRoutes = (list, options) => {
14030
14043
  for (const route of list) {
14044
+ if (options?.removeViewItem) {
14045
+ if (route.metadata?.viewItem) {
14046
+ delete route.metadata.viewItem;
14047
+ }
14048
+ continue;
14049
+ }
14031
14050
  if (route.metadata?.viewItem) {
14032
14051
  if (route.metadata.viewItem?.api?.query) {
14033
14052
  delete route.metadata.viewItem.api.query;
@@ -14042,9 +14061,9 @@ var removeViewItemFromRoutes = (list) => {
14042
14061
  }
14043
14062
  return list;
14044
14063
  };
14045
- var createQueryByRoutes = (list) => {
14064
+ var createQueryByRoutes = (list, options) => {
14046
14065
  const obj = {};
14047
- list = removeViewItemFromRoutes(list);
14066
+ list = removeViewItemCotnextFromRoutes(list, options);
14048
14067
  for (const route of list) {
14049
14068
  if (!obj[route.path]) {
14050
14069
  obj[route.path] = {};
@@ -14058,11 +14077,12 @@ var createQueryByRoutes = (list) => {
14058
14077
  }
14059
14078
  obj[route.path][route.key] = route;
14060
14079
  }
14061
- const code = `
14062
- import { createQueryApi } from '@kevisual/query/api';
14080
+ const before = options?.before || `import { createQueryApi } from '@kevisual/query/api';`;
14081
+ const after = options?.after || `export { queryApi };`;
14082
+ const code = `${before}
14063
14083
  const api = ${generateApiCode(obj)} as const;
14064
14084
  const queryApi = createQueryApi({ api });
14065
- export { queryApi };
14085
+ ${after}
14066
14086
  `;
14067
14087
  return code;
14068
14088
  };
@@ -106,13 +106,14 @@ type QueryOpts$1 = {
106
106
  } & AdapterOpts;
107
107
  type QueryOptions = {
108
108
  url?: string;
109
+ baseURL?: string;
110
+ beforeRequest?: Fn;
109
111
  adapter?: typeof adapter;
110
112
  headers?: Record<string, string>;
111
113
  timeout?: number;
112
114
  isClient?: boolean;
113
115
  tokenName?: string;
114
116
  storage?: Storage;
115
- beforeRequest?: Fn;
116
117
  };
117
118
  type Data = {
118
119
  path?: string;
@@ -155,6 +156,7 @@ declare const wrapperError: ({ code, message }: {
155
156
  */
156
157
  declare class Query {
157
158
  adapter: typeof adapter;
159
+ baseURL: string;
158
160
  url: string;
159
161
  /**
160
162
  * 请求前处理函数
@@ -317,6 +317,7 @@ var wrapperError = ({ code, message }) => {
317
317
 
318
318
  class Query {
319
319
  adapter;
320
+ baseURL;
320
321
  url;
321
322
  beforeRequest;
322
323
  afterResponse;
@@ -333,6 +334,11 @@ class Query {
333
334
  this.storage = opts?.storage || globalThis?.localStorage;
334
335
  const defaultURL = opts?.isClient ? "/client/router" : "/api/router";
335
336
  this.url = opts?.url || defaultURL;
337
+ if (this.url.startsWith("http")) {
338
+ const urlObj = new URL(this.url);
339
+ this.baseURL = urlObj.origin;
340
+ }
341
+ this.baseURL = opts?.baseURL || this.baseURL;
336
342
  this.headers = opts?.headers || {
337
343
  "Content-Type": "application/json"
338
344
  };
@@ -376,6 +382,13 @@ class Query {
376
382
  timeout: _timeout,
377
383
  ...rest
378
384
  };
385
+ const isStartsWithHttp = req.url.startsWith("http");
386
+ if (!isStartsWithHttp) {
387
+ if (this.baseURL) {
388
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
389
+ req.url = baseURL + req.url;
390
+ }
391
+ }
379
392
  try {
380
393
  if (_beforeRequest) {
381
394
  const res = await _beforeRequest(req);
package/dist/query.d.ts CHANGED
@@ -106,13 +106,14 @@ type QueryOpts = {
106
106
  } & AdapterOpts;
107
107
  type QueryOptions = {
108
108
  url?: string;
109
+ baseURL?: string;
110
+ beforeRequest?: Fn;
109
111
  adapter?: typeof adapter;
110
112
  headers?: Record<string, string>;
111
113
  timeout?: number;
112
114
  isClient?: boolean;
113
115
  tokenName?: string;
114
116
  storage?: Storage;
115
- beforeRequest?: Fn;
116
117
  };
117
118
  type Data = {
118
119
  path?: string;
@@ -155,6 +156,7 @@ declare const wrapperError: ({ code, message }: {
155
156
  */
156
157
  declare class Query {
157
158
  adapter: typeof adapter;
159
+ baseURL: string;
158
160
  url: string;
159
161
  /**
160
162
  * 请求前处理函数
package/dist/query.js CHANGED
@@ -120,6 +120,7 @@ var wrapperError = ({ code, message }) => {
120
120
 
121
121
  class Query {
122
122
  adapter;
123
+ baseURL;
123
124
  url;
124
125
  beforeRequest;
125
126
  afterResponse;
@@ -136,6 +137,11 @@ class Query {
136
137
  this.storage = opts?.storage || globalThis?.localStorage;
137
138
  const defaultURL = opts?.isClient ? "/client/router" : "/api/router";
138
139
  this.url = opts?.url || defaultURL;
140
+ if (this.url.startsWith("http")) {
141
+ const urlObj = new URL(this.url);
142
+ this.baseURL = urlObj.origin;
143
+ }
144
+ this.baseURL = opts?.baseURL || this.baseURL;
139
145
  this.headers = opts?.headers || {
140
146
  "Content-Type": "application/json"
141
147
  };
@@ -179,6 +185,13 @@ class Query {
179
185
  timeout: _timeout,
180
186
  ...rest
181
187
  };
188
+ const isStartsWithHttp = req.url.startsWith("http");
189
+ if (!isStartsWithHttp) {
190
+ if (this.baseURL) {
191
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
192
+ req.url = baseURL + req.url;
193
+ }
194
+ }
182
195
  try {
183
196
  if (_beforeRequest) {
184
197
  const res = await _beforeRequest(req);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kevisual/query",
3
- "version": "0.0.48",
3
+ "version": "0.0.50",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "build": "npm run clean && bun run bun.config.ts",
@@ -19,8 +19,8 @@
19
19
  "description": "",
20
20
  "devDependencies": {
21
21
  "@kevisual/code-builder": "^0.0.6",
22
- "@kevisual/router": "^0.0.80",
23
- "@types/node": "^25.2.3",
22
+ "@kevisual/router": "^0.0.84",
23
+ "@types/node": "^25.3.0",
24
24
  "typescript": "^5.9.3",
25
25
  "es-toolkit": "^1.44.0",
26
26
  "zod": "^4.3.6",
@@ -22,8 +22,14 @@ type RouteInfo = {
22
22
  }
23
23
  };
24
24
  }
25
- const removeViewItemFromRoutes = (list: RouteInfo[]) => {
25
+ const removeViewItemCotnextFromRoutes = (list: RouteInfo[], options?: CreateQueryOptions) => {
26
26
  for (const route of list) {
27
+ if (options?.removeViewItem) {
28
+ if (route.metadata?.viewItem) {
29
+ delete route.metadata.viewItem;
30
+ }
31
+ continue;
32
+ }
27
33
  if (route.metadata?.viewItem) {
28
34
  if (route.metadata.viewItem?.api?.query) {
29
35
  delete route.metadata.viewItem.api.query;
@@ -38,9 +44,14 @@ const removeViewItemFromRoutes = (list: RouteInfo[]) => {
38
44
  }
39
45
  return list;
40
46
  }
41
- export const createQueryByRoutes = (list: RouteInfo[]) => {
47
+ type CreateQueryOptions = {
48
+ removeViewItem?: boolean,
49
+ before?: string,
50
+ after?: string,
51
+ }
52
+ export const createQueryByRoutes = (list: RouteInfo[], options?: CreateQueryOptions) => {
42
53
  const obj: any = {};
43
- list = removeViewItemFromRoutes(list);
54
+ list = removeViewItemCotnextFromRoutes(list, options);
44
55
  for (const route of list) {
45
56
  if (!obj[route.path]) {
46
57
  obj[route.path] = {};
@@ -55,11 +66,12 @@ export const createQueryByRoutes = (list: RouteInfo[]) => {
55
66
  }
56
67
  obj[route.path][route.key] = route;
57
68
  }
58
- const code = `
59
- import { createQueryApi } from '@kevisual/query/api';
69
+ const before = options?.before || `import { createQueryApi } from '@kevisual/query/api';`;
70
+ const after = options?.after || `export { queryApi };`;
71
+ const code = `${before}
60
72
  const api = ${generateApiCode(obj)} as const;
61
73
  const queryApi = createQueryApi({ api });
62
- export { queryApi };
74
+ ${after}
63
75
  `
64
76
  return code;
65
77
  }
package/src/query-api.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { DataOpts, Query } from "./query.ts";
1
+ import { DataOpts, Query, Result } from "./query.ts";
2
2
  import { z } from "zod";
3
3
  import { createQueryByRoutes } from "./create-query/index.ts";
4
4
  import { pick } from 'es-toolkit'
@@ -71,22 +71,23 @@ type IsOptional<T> = T extends { optional: true } ? true : false;
71
71
  // 根据 optional 字段分离必需字段和可选字段
72
72
  type ExtractArgsFromMetadata<T> = T extends { metadata?: { args?: infer A } }
73
73
  ? A extends Record<string, any>
74
- ? (
75
- // 必需字段(没有 optional: true)
76
- { [K in keyof A as IsOptional<A[K]> extends true ? never : K]: InferType<A[K]> } &
77
- // 可选字段(有 optional: true)
78
- { [K in keyof A as IsOptional<A[K]> extends true ? K : never]?: InferType<A[K]> }
79
- )
80
- : never
74
+ ? (
75
+ // 必需字段(没有 optional: true)
76
+ { [K in keyof A as IsOptional<A[K]> extends true ? never : K]: InferType<A[K]> } &
77
+ // 可选字段(有 optional: true)
78
+ { [K in keyof A as IsOptional<A[K]> extends true ? K : never]?: InferType<A[K]> }
79
+ )
80
+ : never
81
81
  : never;
82
82
 
83
+
83
84
  // 类型映射:将 API 配置转换为方法签名
84
85
  type ApiMethods<P extends { [path: string]: { [key: string]: Pos } }> = {
85
86
  [Path in keyof P]: {
86
- [Key in keyof P[Path]]: (
87
+ [Key in keyof P[Path]]: <T = any>(
87
88
  data?: ExtractArgsFromMetadata<P[Path][Key]>,
88
89
  opts?: DataOpts
89
- ) => ReturnType<Query['post']>
90
+ ) => Promise<Result<T>>
90
91
  }
91
92
  }
92
93
  type QueryApiOpts<P extends { [path: string]: { [key: string]: Pos } } = {}> = {
package/src/query.ts CHANGED
@@ -20,13 +20,14 @@ export type QueryOpts = {
20
20
 
21
21
  export type QueryOptions = {
22
22
  url?: string;
23
+ baseURL?: string;
24
+ beforeRequest?: Fn;
23
25
  adapter?: typeof adapter;
24
26
  headers?: Record<string, string>;
25
27
  timeout?: number;
26
28
  isClient?: boolean;
27
29
  tokenName?: string;
28
30
  storage?: Storage;
29
- beforeRequest?: Fn;
30
31
  }
31
32
  export type Data = {
32
33
  path?: string;
@@ -67,6 +68,7 @@ export const wrapperError = ({ code, message }: { code?: number; message?: strin
67
68
  */
68
69
  export class Query {
69
70
  adapter: typeof adapter;
71
+ baseURL: string;
70
72
  url: string;
71
73
  /**
72
74
  * 请求前处理函数
@@ -93,6 +95,11 @@ export class Query {
93
95
  this.storage = opts?.storage || globalThis?.localStorage;
94
96
  const defaultURL = opts?.isClient ? '/client/router' : '/api/router';
95
97
  this.url = opts?.url || defaultURL;
98
+ if (this.url.startsWith('http')) {
99
+ const urlObj = new URL(this.url);
100
+ this.baseURL = urlObj.origin;
101
+ }
102
+ this.baseURL = opts?.baseURL || this.baseURL; // 如果opts中有baseURL优先
96
103
  this.headers = opts?.headers || {
97
104
  'Content-Type': 'application/json',
98
105
  };
@@ -155,6 +162,14 @@ export class Query {
155
162
  timeout: _timeout,
156
163
  ...rest,
157
164
  };
165
+ const isStartsWithHttp = req.url.startsWith('http');
166
+ // 如果是完整的url,直接使用, 如果不是完整的url,且baseURL存在,则拼接baseURL
167
+ if (!isStartsWithHttp) {
168
+ if (this.baseURL) {
169
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
170
+ req.url = baseURL + req.url;
171
+ }
172
+ }
158
173
  try {
159
174
  if (_beforeRequest) {
160
175
  const res = await _beforeRequest(req);