From aeeb205e1e15713a44fac4085db8d651a0723314 Mon Sep 17 00:00:00 2001 From: xion Date: Wed, 14 May 2025 21:04:25 +0800 Subject: [PATCH] fix: fix types --- .gitignore | 1 - .npmrc | 2 ++ demo/simple/src/define/app.ts | 11 +++++++++++ demo/simple/tsconfig.json | 1 + package.json | 2 +- rollup.config.js | 1 + src/browser.ts | 2 ++ src/index.ts | 4 +++- src/route.ts | 24 +++++++++++++++++++----- src/router-define.ts | 14 +++++++------- src/test/define.ts | 14 ++++++++++++++ tsconfig.json | 3 +++ 12 files changed, 64 insertions(+), 15 deletions(-) create mode 100644 .npmrc create mode 100644 demo/simple/src/define/app.ts create mode 100644 src/test/define.ts diff --git a/.gitignore b/.gitignore index ee1f5dd..8f4d2f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ node_modules src/app.config.json5 dist -.npmrc .turbo diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..7446745 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +//npm.xiongxiao.me/:_authToken=${ME_NPM_TOKEN} +//registry.npmjs.org/:_authToken=${NPM_TOKEN} \ No newline at end of file diff --git a/demo/simple/src/define/app.ts b/demo/simple/src/define/app.ts new file mode 100644 index 0000000..f13a87b --- /dev/null +++ b/demo/simple/src/define/app.ts @@ -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')); diff --git a/demo/simple/tsconfig.json b/demo/simple/tsconfig.json index 76f3427..eb54c05 100644 --- a/demo/simple/tsconfig.json +++ b/demo/simple/tsconfig.json @@ -8,6 +8,7 @@ "allowJs": true, "newLine": "LF", "baseUrl": "./", + "rootDir": "./", "typeRoots": [ "node_modules/@types", ], diff --git a/package.json b/package.json index 0a2ff76..c1ce11e 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/rollup.config.js b/rollup.config.js index 522efe4..0f6502e 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -125,6 +125,7 @@ export default [ format: 'es', }, plugins: [dts()], + external: ['@kevisual/router'], }, { input: 'src/router-simple.ts', diff --git a/src/browser.ts b/src/browser.ts index ae34469..20a4ec2 100644 --- a/src/browser.ts +++ b/src/browser.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'; diff --git a/src/index.ts b/src/index.ts index 5e1a94a..462b631 100644 --- a/src/index.ts +++ b/src/index.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'; diff --git a/src/route.ts b/src/route.ts index 55a9dfa..d3063c7 100644 --- a/src/route.ts +++ b/src/route.ts @@ -57,10 +57,17 @@ export type RouteContext = { /** 是否需要序列化 */ needSerialize?: boolean; } & T; - -export type Run = (ctx: RouteContext) => Promise; +export type SimpleObject = Record; +export type Run = (ctx: RouteContext) => Promise; export type NextRoute = Pick; +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 { 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 }; @@ -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) { diff --git a/src/router-define.ts b/src/router-define.ts index 5e4801d..55a17e2 100644 --- a/src/router-define.ts +++ b/src/router-define.ts @@ -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 = { // [K in T[number]]: RouteOpts; @@ -7,7 +7,7 @@ export type { RouteOpts }; export type RouteObject = { [key: string]: RouteOpts; }; - +type SimpleObject = Record; export function define>( 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(run: Run) { this.object.run = run; return this; } - define(run: Run) { + define(run: Run) { this.object.run = run; return this; } @@ -98,8 +98,8 @@ export class QueryUtil { let newOpts = { app: this.app, ...opts }; return new Chain(obj, newOpts); } - queryChain(key: K) { - const value = this.routeObject[key] as RouteOpts; + queryChain(key: K): (queryData?: Record) => RouteOpts { + const value = this.routeObject[key]; return (queryData?: Record) => { return { ...value, diff --git a/src/test/define.ts b/src/test/define.ts new file mode 100644 index 0000000..06f0f48 --- /dev/null +++ b/src/test/define.ts @@ -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'; +}); diff --git a/tsconfig.json b/tsconfig.json index ba7c2d7..5da6708 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,6 +22,9 @@ "@/*": [ "src/*" ], + "@kevisual/router": [ + "src/index.ts" + ] } }, "include": [