fix: fix types
This commit is contained in:
parent
fc35b531e1
commit
aeeb205e1e
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,7 +1,6 @@
|
||||
node_modules
|
||||
src/app.config.json5
|
||||
dist
|
||||
.npmrc
|
||||
|
||||
.turbo
|
||||
|
||||
|
2
.npmrc
Normal file
2
.npmrc
Normal file
@ -0,0 +1,2 @@
|
||||
//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN}
|
||||
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
|
11
demo/simple/src/define/app.ts
Normal file
11
demo/simple/src/define/app.ts
Normal file
@ -0,0 +1,11 @@
|
||||
// import { App } from '@kevisual/router';
|
||||
import { QueryRouterServer as App } from '@kevisual/router';
|
||||
import { QueryUtil } from '@kevisual/router/define';
|
||||
|
||||
const app = new App();
|
||||
|
||||
const w = QueryUtil.create({
|
||||
a: { path: 'a', description: 'sdf' },
|
||||
});
|
||||
|
||||
app.route(w.get('a'));
|
@ -8,6 +8,7 @@
|
||||
"allowJs": true,
|
||||
"newLine": "LF",
|
||||
"baseUrl": "./",
|
||||
"rootDir": "./",
|
||||
"typeRoots": [
|
||||
"node_modules/@types",
|
||||
],
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package",
|
||||
"name": "@kevisual/router",
|
||||
"version": "0.0.15",
|
||||
"version": "0.0.18",
|
||||
"description": "",
|
||||
"type": "module",
|
||||
"main": "./dist/router.js",
|
||||
|
@ -125,6 +125,7 @@ export default [
|
||||
format: 'es',
|
||||
},
|
||||
plugins: [dts()],
|
||||
external: ['@kevisual/router'],
|
||||
},
|
||||
{
|
||||
input: 'src/router-simple.ts',
|
||||
|
@ -9,3 +9,5 @@ export type { Run } from './route.ts';
|
||||
export { CustomError } from './result/error.ts';
|
||||
|
||||
export * from './server/parse-body.ts';
|
||||
|
||||
export * from './router-define.ts';
|
||||
|
@ -1,7 +1,7 @@
|
||||
export { Route, QueryRouter, QueryRouterServer } from './route.ts';
|
||||
export { Connect, QueryConnect } from './connect.ts';
|
||||
|
||||
export type { RouteContext, RouteOpts } from './route.ts';
|
||||
export type { RouteContext, RouteOpts, RouteMiddleware } from './route.ts';
|
||||
|
||||
export type { Run } from './route.ts';
|
||||
|
||||
@ -14,3 +14,5 @@ export { CustomError } from './result/error.ts';
|
||||
export { Rule, Schema, createSchema } from './validator/index.ts';
|
||||
|
||||
export { App } from './app.ts';
|
||||
|
||||
export * from './router-define.ts';
|
||||
|
24
src/route.ts
24
src/route.ts
@ -57,10 +57,17 @@ export type RouteContext<T = { code?: number }, S = any> = {
|
||||
/** 是否需要序列化 */
|
||||
needSerialize?: boolean;
|
||||
} & T;
|
||||
|
||||
export type Run<T = any> = (ctx: RouteContext<T>) => Promise<typeof ctx | null | void>;
|
||||
export type SimpleObject = Record<string, any>;
|
||||
export type Run<T extends SimpleObject = {}> = (ctx: RouteContext<T>) => Promise<typeof ctx | null | void>;
|
||||
|
||||
export type NextRoute = Pick<Route, 'id' | 'path' | 'key'>;
|
||||
export type RouteMiddleware =
|
||||
| {
|
||||
path: string;
|
||||
key?: string;
|
||||
id?: string;
|
||||
}
|
||||
| string;
|
||||
export type RouteOpts = {
|
||||
path?: string;
|
||||
key?: string;
|
||||
@ -69,7 +76,7 @@ export type RouteOpts = {
|
||||
nextRoute?: NextRoute; // route to run after this route
|
||||
description?: string;
|
||||
metadata?: { [key: string]: any };
|
||||
middleware?: Route[] | string[]; // middleware
|
||||
middleware?: RouteMiddleware[]; // middleware
|
||||
type?: 'route' | 'middleware';
|
||||
/**
|
||||
* validator: {
|
||||
@ -112,7 +119,7 @@ export class Route<U = { [key: string]: any }> {
|
||||
nextRoute?: NextRoute; // route to run after this route
|
||||
description?: string;
|
||||
metadata?: { [key: string]: any };
|
||||
middleware?: (Route | string)[]; // middleware
|
||||
middleware?: RouteMiddleware[]; // middleware
|
||||
type? = 'route';
|
||||
private _validator?: { [key: string]: Rule };
|
||||
schema?: { [key: string]: Schema<any> };
|
||||
@ -379,7 +386,14 @@ export class QueryRouter {
|
||||
if (isString) {
|
||||
route = this.routes.find((r) => r.id === item);
|
||||
} else {
|
||||
route = this.routes.find((r) => r.path === item.path && r.key === item.key);
|
||||
route = this.routes.find((r) => {
|
||||
if (item.id) {
|
||||
return r.id === item.id;
|
||||
} else {
|
||||
// key 可以是空,所以可以不严格验证
|
||||
return r.path === item.path && r.key == item.key;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!route) {
|
||||
if (isString) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import type { QueryRouterServer, Route, RouteOpts, Run } from './route.ts';
|
||||
import type { QueryRouterServer, RouteOpts, Run, RouteMiddleware } from '@kevisual/router';
|
||||
|
||||
// export type RouteObject<T extends readonly string[]> = {
|
||||
// [K in T[number]]: RouteOpts;
|
||||
@ -7,7 +7,7 @@ export type { RouteOpts };
|
||||
export type RouteObject = {
|
||||
[key: string]: RouteOpts;
|
||||
};
|
||||
|
||||
type SimpleObject = Record<string, any>;
|
||||
export function define<T extends Record<string, RouteOpts>>(
|
||||
value: T,
|
||||
): {
|
||||
@ -45,7 +45,7 @@ class Chain {
|
||||
this.object.path = path;
|
||||
return this;
|
||||
}
|
||||
setMiddleware(middleware: string[] | Route[]) {
|
||||
setMiddleware(middleware: RouteMiddleware[]) {
|
||||
this.object.middleware = middleware;
|
||||
return this;
|
||||
}
|
||||
@ -57,11 +57,11 @@ class Chain {
|
||||
this.object.id = key;
|
||||
return this;
|
||||
}
|
||||
setRun(run: Run) {
|
||||
setRun<U extends SimpleObject = {}>(run: Run<U>) {
|
||||
this.object.run = run;
|
||||
return this;
|
||||
}
|
||||
define(run: Run) {
|
||||
define<U extends SimpleObject = {}>(run: Run<U>) {
|
||||
this.object.run = run;
|
||||
return this;
|
||||
}
|
||||
@ -98,8 +98,8 @@ export class QueryUtil<T extends RouteObject = RouteObject> {
|
||||
let newOpts = { app: this.app, ...opts };
|
||||
return new Chain(obj, newOpts);
|
||||
}
|
||||
queryChain<K extends keyof T>(key: K) {
|
||||
const value = this.routeObject[key] as RouteOpts;
|
||||
queryChain<K extends keyof T>(key: K): (queryData?: Record<string, any>) => RouteOpts {
|
||||
const value = this.routeObject[key];
|
||||
return (queryData?: Record<string, any>) => {
|
||||
return {
|
||||
...value,
|
||||
|
14
src/test/define.ts
Normal file
14
src/test/define.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { App } from '@/app.ts';
|
||||
import { QueryUtil } from '@/router-define.ts';
|
||||
const v = QueryUtil.create({
|
||||
a: {
|
||||
path: 'a',
|
||||
key: 'b',
|
||||
},
|
||||
});
|
||||
const app = new App();
|
||||
app.route(v.get('a'));
|
||||
|
||||
v.chain('a').define<{ f: () => {} }>(async (ctx) => {
|
||||
// ctx.f = 'sdf';
|
||||
});
|
@ -22,6 +22,9 @@
|
||||
"@/*": [
|
||||
"src/*"
|
||||
],
|
||||
"@kevisual/router": [
|
||||
"src/index.ts"
|
||||
]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
|
Loading…
x
Reference in New Issue
Block a user