@kevisual/query 0.0.41 → 0.0.43
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 +19 -1
- package/dist/query-api.js +17 -0
- package/package.json +1 -1
- package/src/create-query/index.ts +29 -0
- package/src/query-api.ts +14 -2
package/dist/query-api.d.ts
CHANGED
|
@@ -220,6 +220,18 @@ type RouteInfo = {
|
|
|
220
220
|
metadata?: {
|
|
221
221
|
summary?: string;
|
|
222
222
|
args?: Record<string, any>;
|
|
223
|
+
viewItem?: {
|
|
224
|
+
type?: string;
|
|
225
|
+
api?: {
|
|
226
|
+
query?: any;
|
|
227
|
+
};
|
|
228
|
+
worker?: {
|
|
229
|
+
worker?: any;
|
|
230
|
+
};
|
|
231
|
+
context?: {
|
|
232
|
+
router?: any;
|
|
233
|
+
};
|
|
234
|
+
};
|
|
223
235
|
};
|
|
224
236
|
};
|
|
225
237
|
declare const createQueryByRoutes: (list: RouteInfo[]) => string;
|
|
@@ -254,9 +266,15 @@ type InferFromJSONSchema<T> = T extends {
|
|
|
254
266
|
} : T extends {
|
|
255
267
|
type: "array";
|
|
256
268
|
items: infer I;
|
|
257
|
-
} ? Array<InferFromJSONSchema<I>> :
|
|
269
|
+
} ? Array<InferFromJSONSchema<I>> : T extends Record<string, any> ? T extends {
|
|
270
|
+
properties: infer P;
|
|
271
|
+
} ? {
|
|
272
|
+
[K in keyof P]: InferFromJSONSchema<P[K]>;
|
|
273
|
+
} : unknown : unknown;
|
|
258
274
|
type InferType<T> = T extends z.ZodType<infer U> ? U : T extends {
|
|
259
275
|
type: infer TType;
|
|
276
|
+
} ? InferFromJSONSchema<T> : T extends {
|
|
277
|
+
properties: infer P;
|
|
260
278
|
} ? InferFromJSONSchema<T> : T;
|
|
261
279
|
type ExtractArgsFromMetadata<T> = T extends {
|
|
262
280
|
metadata?: {
|
package/dist/query-api.js
CHANGED
|
@@ -263,8 +263,25 @@ class Query {
|
|
|
263
263
|
}
|
|
264
264
|
|
|
265
265
|
// src/create-query/index.ts
|
|
266
|
+
var removeViewItemFromRoutes = (list) => {
|
|
267
|
+
for (const route of list) {
|
|
268
|
+
if (route.metadata?.viewItem) {
|
|
269
|
+
if (route.metadata.viewItem?.api?.query) {
|
|
270
|
+
delete route.metadata.viewItem.api.query;
|
|
271
|
+
}
|
|
272
|
+
if (route.metadata.viewItem?.worker?.worker) {
|
|
273
|
+
delete route.metadata.viewItem.worker.worker;
|
|
274
|
+
}
|
|
275
|
+
if (route.metadata.viewItem?.context?.router) {
|
|
276
|
+
delete route.metadata.viewItem.context.router;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return list;
|
|
281
|
+
};
|
|
266
282
|
var createQueryByRoutes = (list) => {
|
|
267
283
|
const obj = {};
|
|
284
|
+
list = removeViewItemFromRoutes(list);
|
|
268
285
|
for (const route of list) {
|
|
269
286
|
if (!obj[route.path]) {
|
|
270
287
|
obj[route.path] = {};
|
package/package.json
CHANGED
|
@@ -7,10 +7,39 @@ type RouteInfo = {
|
|
|
7
7
|
metadata?: {
|
|
8
8
|
summary?: string;
|
|
9
9
|
args?: Record<string, any>;
|
|
10
|
+
viewItem?: {
|
|
11
|
+
type?: string;
|
|
12
|
+
api?: {
|
|
13
|
+
query?: any;
|
|
14
|
+
},
|
|
15
|
+
worker?: {
|
|
16
|
+
worker?: any;
|
|
17
|
+
},
|
|
18
|
+
context?: {
|
|
19
|
+
router?: any;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
10
22
|
};
|
|
11
23
|
}
|
|
24
|
+
const removeViewItemFromRoutes = (list: RouteInfo[]) => {
|
|
25
|
+
for (const route of list) {
|
|
26
|
+
if (route.metadata?.viewItem) {
|
|
27
|
+
if (route.metadata.viewItem?.api?.query) {
|
|
28
|
+
delete route.metadata.viewItem.api.query;
|
|
29
|
+
}
|
|
30
|
+
if (route.metadata.viewItem?.worker?.worker) {
|
|
31
|
+
delete route.metadata.viewItem.worker.worker;
|
|
32
|
+
}
|
|
33
|
+
if (route.metadata.viewItem?.context?.router) {
|
|
34
|
+
delete route.metadata.viewItem.context.router;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return list;
|
|
39
|
+
}
|
|
12
40
|
export const createQueryByRoutes = (list: RouteInfo[]) => {
|
|
13
41
|
const obj: any = {};
|
|
42
|
+
list = removeViewItemFromRoutes(list);
|
|
14
43
|
for (const route of list) {
|
|
15
44
|
if (!obj[route.path]) {
|
|
16
45
|
obj[route.path] = {};
|
package/src/query-api.ts
CHANGED
|
@@ -13,22 +13,34 @@ type Pos = {
|
|
|
13
13
|
|
|
14
14
|
// JSON Schema 类型推断 - 使用更精确的类型匹配
|
|
15
15
|
type InferFromJSONSchema<T> =
|
|
16
|
+
// 处理带 enum 的字符串类型
|
|
16
17
|
T extends { type: "string"; enum: readonly (infer E)[] } ? E :
|
|
17
18
|
T extends { type: "string"; enum: (infer E)[] } ? E :
|
|
19
|
+
// 基础类型
|
|
18
20
|
T extends { type: "string" } ? string :
|
|
19
21
|
T extends { type: "number" } ? number :
|
|
20
22
|
T extends { type: "integer" } ? number :
|
|
21
23
|
T extends { type: "boolean" } ? boolean :
|
|
24
|
+
// 对象类型 - 检查是否有 properties
|
|
22
25
|
T extends { type: "object"; properties: infer P }
|
|
23
|
-
? {
|
|
24
|
-
|
|
26
|
+
? {
|
|
27
|
+
[K in keyof P]: InferFromJSONSchema<P[K]>
|
|
28
|
+
}
|
|
29
|
+
: // 数组类型
|
|
30
|
+
T extends { type: "array"; items: infer I }
|
|
25
31
|
? Array<InferFromJSONSchema<I>>
|
|
32
|
+
: // 默认情况 - 如果是对象但没有 type 字段,尝试递归推断
|
|
33
|
+
T extends Record<string, any>
|
|
34
|
+
? T extends { properties: infer P }
|
|
35
|
+
? { [K in keyof P]: InferFromJSONSchema<P[K]> }
|
|
36
|
+
: unknown
|
|
26
37
|
: unknown;
|
|
27
38
|
|
|
28
39
|
// 统一类型推断:支持 Zod schema 和原始 JSON Schema
|
|
29
40
|
type InferType<T> =
|
|
30
41
|
T extends z.ZodType<infer U> ? U : // Zod schema
|
|
31
42
|
T extends { type: infer TType } ? InferFromJSONSchema<T> : // 任何包含 type 字段的 JSON Schema(忽略 $schema)
|
|
43
|
+
T extends { properties: infer P } ? InferFromJSONSchema<T> : // 处理没有 type 但有 properties 的对象
|
|
32
44
|
T;
|
|
33
45
|
|
|
34
46
|
// 提取 args 对象,将每个 Zod schema 或 JSON Schema 转换为实际类型
|