@kevisual/query 0.0.43 → 0.0.45
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/dist/query-api.d.ts +29 -7
- package/package.json +2 -2
- package/src/query-api.ts +31 -10
package/dist/query-api.d.ts
CHANGED
|
@@ -242,6 +242,10 @@ type Pos = {
|
|
|
242
242
|
id?: string;
|
|
243
243
|
metadata?: {
|
|
244
244
|
args?: Record<string, any>;
|
|
245
|
+
viewItem?: Record<string, any>;
|
|
246
|
+
url?: string;
|
|
247
|
+
source?: string;
|
|
248
|
+
[key: string]: any;
|
|
245
249
|
};
|
|
246
250
|
};
|
|
247
251
|
type InferFromJSONSchema<T> = T extends {
|
|
@@ -259,17 +263,35 @@ type InferFromJSONSchema<T> = T extends {
|
|
|
259
263
|
} ? number : T extends {
|
|
260
264
|
type: "boolean";
|
|
261
265
|
} ? boolean : T extends {
|
|
266
|
+
type: "array";
|
|
267
|
+
items: infer I;
|
|
268
|
+
} ? Array<InferFromJSONSchema<I>> : T extends {
|
|
262
269
|
type: "object";
|
|
263
270
|
properties: infer P;
|
|
271
|
+
required: infer R extends readonly string[];
|
|
264
272
|
} ? {
|
|
265
|
-
[K in keyof P]: InferFromJSONSchema<P[K]>;
|
|
273
|
+
[K in keyof P as K extends R[number] ? K : never]: InferFromJSONSchema<P[K]>;
|
|
274
|
+
} & {
|
|
275
|
+
[K in keyof P as K extends R[number] ? never : K]?: InferFromJSONSchema<P[K]>;
|
|
276
|
+
} : T extends {
|
|
277
|
+
type: "object";
|
|
278
|
+
properties: infer P;
|
|
279
|
+
} ? {
|
|
280
|
+
[K in keyof P]?: InferFromJSONSchema<P[K]>;
|
|
281
|
+
} : T extends {
|
|
282
|
+
type: "object";
|
|
283
|
+
additionalProperties: infer A;
|
|
284
|
+
} ? (A extends false ? Record<string, never> : Record<string, any>) : T extends Record<string, any> ? T extends {
|
|
285
|
+
properties: infer P;
|
|
286
|
+
required: infer R extends readonly string[];
|
|
287
|
+
} ? {
|
|
288
|
+
[K in keyof P as K extends R[number] ? K : never]: InferFromJSONSchema<P[K]>;
|
|
289
|
+
} & {
|
|
290
|
+
[K in keyof P as K extends R[number] ? never : K]?: InferFromJSONSchema<P[K]>;
|
|
266
291
|
} : T extends {
|
|
267
|
-
type: "array";
|
|
268
|
-
items: infer I;
|
|
269
|
-
} ? Array<InferFromJSONSchema<I>> : T extends Record<string, any> ? T extends {
|
|
270
292
|
properties: infer P;
|
|
271
293
|
} ? {
|
|
272
|
-
[K in keyof P]
|
|
294
|
+
[K in keyof P]?: InferFromJSONSchema<P[K]>;
|
|
273
295
|
} : unknown : unknown;
|
|
274
296
|
type InferType<T> = T extends z.ZodType<infer U> ? U : T extends {
|
|
275
297
|
type: infer TType;
|
|
@@ -289,7 +311,7 @@ type ApiMethods<P extends {
|
|
|
289
311
|
};
|
|
290
312
|
}> = {
|
|
291
313
|
[Path in keyof P]: {
|
|
292
|
-
[Key in keyof P[Path]]: (data?:
|
|
314
|
+
[Key in keyof P[Path]]: (data?: ExtractArgsFromMetadata<P[Path][Key]>, opts?: DataOpts) => ReturnType<Query['post']>;
|
|
293
315
|
};
|
|
294
316
|
};
|
|
295
317
|
type QueryApiOpts<P extends {
|
|
@@ -307,7 +329,7 @@ declare class QueryApi<P extends {
|
|
|
307
329
|
} = {}> {
|
|
308
330
|
query: Query;
|
|
309
331
|
constructor(opts?: QueryApiOpts<P>);
|
|
310
|
-
post<T extends Pos>(pos: T, data?:
|
|
332
|
+
post<T extends Pos>(pos: T, data?: ExtractArgsFromMetadata<T>, opts?: DataOpts): Promise<{
|
|
311
333
|
code: number;
|
|
312
334
|
data?: any;
|
|
313
335
|
message?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kevisual/query",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.45",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "npm run clean && bun run bun.config.ts",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"description": "",
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@kevisual/code-builder": "^0.0.6",
|
|
22
|
-
"@kevisual/router": "^0.0.
|
|
22
|
+
"@kevisual/router": "^0.0.74",
|
|
23
23
|
"@types/node": "^25.2.3",
|
|
24
24
|
"typescript": "^5.9.3",
|
|
25
25
|
"es-toolkit": "^1.44.0",
|
package/src/query-api.ts
CHANGED
|
@@ -8,6 +8,10 @@ type Pos = {
|
|
|
8
8
|
id?: string;
|
|
9
9
|
metadata?: {
|
|
10
10
|
args?: Record<string, any>;
|
|
11
|
+
viewItem?: Record<string, any>;
|
|
12
|
+
url?: string;
|
|
13
|
+
source?: string;
|
|
14
|
+
[key: string]: any;
|
|
11
15
|
};
|
|
12
16
|
}
|
|
13
17
|
|
|
@@ -21,18 +25,35 @@ type InferFromJSONSchema<T> =
|
|
|
21
25
|
T extends { type: "number" } ? number :
|
|
22
26
|
T extends { type: "integer" } ? number :
|
|
23
27
|
T extends { type: "boolean" } ? boolean :
|
|
24
|
-
//
|
|
28
|
+
// 数组类型
|
|
29
|
+
T extends { type: "array"; items: infer I }
|
|
30
|
+
? Array<InferFromJSONSchema<I>>
|
|
31
|
+
: // 对象类型 - 带 required 字段(必需字段 + 可选字段)
|
|
32
|
+
// 注意:必须在 additionalProperties 检查之前,因为两者可能同时存在
|
|
33
|
+
T extends { type: "object"; properties: infer P; required: infer R extends readonly string[] }
|
|
34
|
+
? {
|
|
35
|
+
[K in keyof P as K extends R[number] ? K : never]: InferFromJSONSchema<P[K]>
|
|
36
|
+
} & {
|
|
37
|
+
[K in keyof P as K extends R[number] ? never : K]?: InferFromJSONSchema<P[K]>
|
|
38
|
+
}
|
|
39
|
+
: // 对象类型 - 不带 required 字段(所有字段可选)
|
|
25
40
|
T extends { type: "object"; properties: infer P }
|
|
26
41
|
? {
|
|
27
|
-
[K in keyof P]
|
|
42
|
+
[K in keyof P]?: InferFromJSONSchema<P[K]>
|
|
28
43
|
}
|
|
29
|
-
: //
|
|
30
|
-
T extends { type: "
|
|
31
|
-
?
|
|
44
|
+
: // 对象类型 - 只有 additionalProperties(纯动态对象)
|
|
45
|
+
T extends { type: "object"; additionalProperties: infer A }
|
|
46
|
+
? (A extends false ? Record<string, never> : Record<string, any>)
|
|
32
47
|
: // 默认情况 - 如果是对象但没有 type 字段,尝试递归推断
|
|
33
48
|
T extends Record<string, any>
|
|
34
|
-
? T extends { properties: infer P }
|
|
35
|
-
? {
|
|
49
|
+
? T extends { properties: infer P; required: infer R extends readonly string[] }
|
|
50
|
+
? {
|
|
51
|
+
[K in keyof P as K extends R[number] ? K : never]: InferFromJSONSchema<P[K]>
|
|
52
|
+
} & {
|
|
53
|
+
[K in keyof P as K extends R[number] ? never : K]?: InferFromJSONSchema<P[K]>
|
|
54
|
+
}
|
|
55
|
+
: T extends { properties: infer P }
|
|
56
|
+
? { [K in keyof P]?: InferFromJSONSchema<P[K]> }
|
|
36
57
|
: unknown
|
|
37
58
|
: unknown;
|
|
38
59
|
|
|
@@ -54,7 +75,7 @@ type ExtractArgsFromMetadata<T> = T extends { metadata?: { args?: infer A } }
|
|
|
54
75
|
type ApiMethods<P extends { [path: string]: { [key: string]: Pos } }> = {
|
|
55
76
|
[Path in keyof P]: {
|
|
56
77
|
[Key in keyof P[Path]]: (
|
|
57
|
-
data?:
|
|
78
|
+
data?: ExtractArgsFromMetadata<P[Path][Key]>,
|
|
58
79
|
opts?: DataOpts
|
|
59
80
|
) => ReturnType<Query['post']>
|
|
60
81
|
}
|
|
@@ -76,7 +97,7 @@ export class QueryApi<P extends { [path: string]: { [key: string]: Pos } } = {}>
|
|
|
76
97
|
// 使用泛型来推断类型
|
|
77
98
|
post<T extends Pos>(
|
|
78
99
|
pos: T,
|
|
79
|
-
data?:
|
|
100
|
+
data?: ExtractArgsFromMetadata<T>,
|
|
80
101
|
opts?: DataOpts
|
|
81
102
|
) {
|
|
82
103
|
const _pos = pick(pos, ['path', 'key', 'id']);
|
|
@@ -100,7 +121,7 @@ export class QueryApi<P extends { [path: string]: { [key: string]: Pos } } = {}>
|
|
|
100
121
|
}
|
|
101
122
|
|
|
102
123
|
for (const [key, pos] of Object.entries(methods)) {
|
|
103
|
-
that[path][key] = (data?:
|
|
124
|
+
that[path][key] = (data?: ExtractArgsFromMetadata<typeof pos>, opts?: DataOpts) => {
|
|
104
125
|
const _pos = pick(pos, ['path', 'key', 'id']);
|
|
105
126
|
return that.query.post({
|
|
106
127
|
..._pos,
|