@_tc/template-core 0.0.1-bate.55 → 0.0.1-bate.57
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/cjs/app/controller/project.js +1 -1
- package/cjs/app/middleware/error-handle.js +1 -1
- package/cjs/app/middleware/request-parameter-parsing.js +1 -0
- package/cjs/app/middleware.js +1 -1
- package/esm/app/controller/project.js +7 -2
- package/esm/app/middleware/error-handle.js +1 -1
- package/esm/app/middleware/request-parameter-parsing.js +18 -0
- package/esm/app/middleware.js +1 -1
- package/package.json +1 -1
- package/types/app/middleware/request-parameter-parsing.d.ts +7 -0
- package/types/app/type.d.ts +30 -2
- package/types/app/typings.d.ts +1 -0
- package/types/index.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./base.js`);var t=(t=>{let n=e(t);return class extends n{getModelList=async e=>{let t=(await this.service.project.getModelList()).reduce((e,t)=>{let{model:n,project:r}=t,{key:i,name:a,desc:o}=n,s={key:i,name:a,desc:o},c=Object.keys(r).reduce((e,t)=>{let{key:n,name:i,desc:a,homePage:o}=r[t];return e[t]={key:n,name:i,desc:a,homePage:o},e},{});return e.push({model:s,project:c}),e},[]);this.success(e,t)};getProjectList=async e=>{let
|
|
1
|
+
const e=require(`./base.js`);var t=(t=>{let n=e(t);return class extends n{getModelList=async e=>{let t=(await this.service.project.getModelList()).reduce((e,t)=>{let{model:n,project:r}=t,{key:i,name:a,desc:o}=n,s={key:i,name:a,desc:o},c=Object.keys(r).reduce((e,t)=>{let{key:n,name:i,desc:a,homePage:o}=r[t];return e[t]={key:n,name:i,desc:a,homePage:o},e},{});return e.push({model:s,project:c}),e},[]);this.success(e,t)};getProjectList=async e=>{let t=e.reqData?.data.projk,n=(await this.service.project.getList(t))?.map(e=>{let{modelKey:t,key:n,name:r,desc:i,homePage:a}=e;return{modelKey:t,key:n,name:r,desc:i,homePage:a}});this.success(e,n)};getProject=async e=>{let{key:t}=e.params;if(!t){this.fail(e,10001,`获取项目异常`);return}let n=this.service.project.getProject(t);if(!n){this.fail(e,10001,`获取项目异常`);return}this.success(e,n)}}});module.exports=t;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={},t=t=>async(n,r)=>{try{await r()}catch(r){let{status:i=200,message:a,detail:o,code:s=5e4,returnError:c}=r;if(t.extends.logger?.info(`error info -> ${JSON.stringify(r)}`),t.extends.logger?.error(`-- [excption] --`,r),t.extends.logger?.error(`-- [excption] info --`,i,a,o),a?.includes(`template not found`)){let r=n.req.url;if(e[r]===void 0?e[r]=0:e[r]+=1,e[r]<t.config.notFoundRedirectCount){n.status=302,n.redirect(t.options?.homePage??`/`);return}else e[r]=0}c?(n.status=i,n.body={code:s,message:a}):(n.status=200,n.body={code:5e4,message:`网络错误`})}};module.exports=t;
|
|
1
|
+
var e={},t=t=>async(n,r)=>{try{await r()}catch(r){let{status:i=200,message:a,detail:o,code:s=5e4,returnError:c}=r;if(t.extends.logger?.info(`error info -> ${JSON.stringify(r)}`),t.extends.logger?.error(`-- [excption] --`,r),t.extends.logger?.error(`-- [excption] info --`,i,a,o),a?.includes(`template not found`)){let r=n.path??n.req.url??n.url;if(e[r]===void 0?e[r]=0:e[r]+=1,e[r]<t.config.notFoundRedirectCount){n.status=302,n.redirect(t.options?.homePage??`/`);return}else e[r]=0}c?(n.status=i,n.body={code:s,message:a}):(n.status=200,n.body={code:5e4,message:`网络错误`})}};module.exports=t;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=e=>typeof e==`object`&&!!e&&!Array.isArray(e),t=(t=>async(n,r)=>{if(n.path.includes(`${t.options.apiPrefix}/`)){let{query:t,headers:r}=n,i=n.request.body;n.reqData={query:t,body:i,headers:r,data:{...t,...e(i)?i:{}}}}await r()});module.exports=t;
|
package/cjs/app/middleware.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../_virtual/_rolldown/runtime.js`),t=require(`../packages/core/paths.js`);let n=require(`koa-compress`);n=e.__toESM(n);let r=require(`path`),i=require(`koa-bodyparser`);i=e.__toESM(i);let a=require(`koa-static`);a=e.__toESM(a);var o=(0,i.default)({formLimit:`1000mb`,enableTypes:[`form`,`json`,`text`]}),s=e=>{let i=e.envs.isLocal()?{maxage:0,setHeaders(e){e.setHeader(`Cache-Control`,`no-store, no-cache, must-revalidate, proxy-revalidate`),e.setHeader(`Pragma`,`no-cache`),e.setHeader(`Expires`,`0`)}}:{maxage:365*24*60*60*1e3};e.use(e.middlewares.errorHandle),e.use((0,n.default)({threshold:2048}));let s=(0,r.resolve)(t.getAppPath(e,`business`),`./public`),c=(0,r.resolve)(t.getAppPath(e,`frame`),`./public`),l=e.options.additionalPublicPaths??[];l=Array.isArray(l)?l:[l],e.use((0,a.default)(c,i)),e.use((0,a.default)(s,i)),l.forEach(t=>e.use((0,a.default)(t,i))),e.use(o),e.use(e.middlewares.projectHandler),!e.envs.isLocal()&&e.use(e.middlewares.apiSignVerify),e.use(e.middlewares.apiParamsVerify)};module.exports=s;
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.js`),t=require(`../packages/core/paths.js`);let n=require(`koa-compress`);n=e.__toESM(n);let r=require(`path`),i=require(`koa-bodyparser`);i=e.__toESM(i);let a=require(`koa-static`);a=e.__toESM(a);var o=(0,i.default)({formLimit:`1000mb`,enableTypes:[`form`,`json`,`text`]}),s=e=>{let i=e.envs.isLocal()?{maxage:0,setHeaders(e){e.setHeader(`Cache-Control`,`no-store, no-cache, must-revalidate, proxy-revalidate`),e.setHeader(`Pragma`,`no-cache`),e.setHeader(`Expires`,`0`)}}:{maxage:365*24*60*60*1e3};e.use(e.middlewares.errorHandle),e.use((0,n.default)({threshold:2048}));let s=(0,r.resolve)(t.getAppPath(e,`business`),`./public`),c=(0,r.resolve)(t.getAppPath(e,`frame`),`./public`),l=e.options.additionalPublicPaths??[];l=Array.isArray(l)?l:[l],e.use((0,a.default)(c,i)),e.use((0,a.default)(s,i)),l.forEach(t=>e.use((0,a.default)(t,i))),e.use(o),e.use(e.middlewares.requestParameterParsing),e.use(e.middlewares.projectHandler),!e.envs.isLocal()&&e.use(e.middlewares.apiSignVerify),e.use(e.middlewares.apiParamsVerify)};module.exports=s;
|
|
@@ -26,7 +26,7 @@ var t = ((t) => {
|
|
|
26
26
|
this.success(e, t);
|
|
27
27
|
};
|
|
28
28
|
getProjectList = async (e) => {
|
|
29
|
-
let
|
|
29
|
+
let t = e.reqData?.data.projk, n = (await this.service.project.getList(t))?.map((e) => {
|
|
30
30
|
let { modelKey: t, key: n, name: r, desc: i, homePage: a } = e;
|
|
31
31
|
return {
|
|
32
32
|
modelKey: t,
|
|
@@ -39,7 +39,12 @@ var t = ((t) => {
|
|
|
39
39
|
this.success(e, n);
|
|
40
40
|
};
|
|
41
41
|
getProject = async (e) => {
|
|
42
|
-
let { key: t } = e.params
|
|
42
|
+
let { key: t } = e.params;
|
|
43
|
+
if (!t) {
|
|
44
|
+
this.fail(e, 10001, "获取项目异常");
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
let n = this.service.project.getProject(t);
|
|
43
48
|
if (!n) {
|
|
44
49
|
this.fail(e, 10001, "获取项目异常");
|
|
45
50
|
return;
|
|
@@ -5,7 +5,7 @@ var e = {}, t = (t) => async (n, r) => {
|
|
|
5
5
|
} catch (r) {
|
|
6
6
|
let { status: i = 200, message: a, detail: o, code: s = 5e4, returnError: c } = r;
|
|
7
7
|
if (t.extends.logger?.info(`error info -> ${JSON.stringify(r)}`), t.extends.logger?.error("-- [excption] --", r), t.extends.logger?.error("-- [excption] info --", i, a, o), a?.includes("template not found")) {
|
|
8
|
-
let r = n.req.url;
|
|
8
|
+
let r = n.path ?? n.req.url ?? n.url;
|
|
9
9
|
if (e[r] === void 0 ? e[r] = 0 : e[r] += 1, e[r] < t.config.notFoundRedirectCount) {
|
|
10
10
|
n.status = 302, n.redirect(t.options?.homePage ?? "/");
|
|
11
11
|
return;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region app/middleware/request-parameter-parsing.ts
|
|
2
|
+
var e = (e) => typeof e == "object" && !!e && !Array.isArray(e), t = ((t) => async (n, r) => {
|
|
3
|
+
if (n.path.includes(`${t.options.apiPrefix}/`)) {
|
|
4
|
+
let { query: t, headers: r } = n, i = n.request.body;
|
|
5
|
+
n.reqData = {
|
|
6
|
+
query: t,
|
|
7
|
+
body: i,
|
|
8
|
+
headers: r,
|
|
9
|
+
data: {
|
|
10
|
+
...t,
|
|
11
|
+
...e(i) ? i : {}
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
await r();
|
|
16
|
+
});
|
|
17
|
+
//#endregion
|
|
18
|
+
export { t as default };
|
package/esm/app/middleware.js
CHANGED
|
@@ -20,7 +20,7 @@ var a = r({
|
|
|
20
20
|
} : { maxage: 365 * 24 * 60 * 60 * 1e3 };
|
|
21
21
|
r.use(r.middlewares.errorHandle), r.use(t({ threshold: 2048 }));
|
|
22
22
|
let s = n(e(r, "business"), "./public"), c = n(e(r, "frame"), "./public"), l = r.options.additionalPublicPaths ?? [];
|
|
23
|
-
l = Array.isArray(l) ? l : [l], r.use(i(c, o)), r.use(i(s, o)), l.forEach((e) => r.use(i(e, o))), r.use(a), r.use(r.middlewares.projectHandler), !r.envs.isLocal() && r.use(r.middlewares.apiSignVerify), r.use(r.middlewares.apiParamsVerify);
|
|
23
|
+
l = Array.isArray(l) ? l : [l], r.use(i(c, o)), r.use(i(s, o)), l.forEach((e) => r.use(i(e, o))), r.use(a), r.use(r.middlewares.requestParameterParsing), r.use(r.middlewares.projectHandler), !r.envs.isLocal() && r.use(r.middlewares.apiSignVerify), r.use(r.middlewares.apiParamsVerify);
|
|
24
24
|
};
|
|
25
25
|
//#endregion
|
|
26
26
|
export { o as default };
|
package/package.json
CHANGED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* - 统一处理请求参数获取
|
|
3
|
+
* - 除了params 因为params 必须经过router才会有
|
|
4
|
+
* - 而当前中间件是在 router之前追加,router params 仍然从 ctx.params 获取
|
|
5
|
+
*/
|
|
6
|
+
declare const requestParameterParsing: (app: import("../../packages/core/index").KoaApp) => (ctx: import("app/type").Ctx, next: import("koa").Next) => Promise<void>;
|
|
7
|
+
export default requestParameterParsing;
|
package/types/app/type.d.ts
CHANGED
|
@@ -1,6 +1,34 @@
|
|
|
1
|
+
import type Koa from "koa";
|
|
2
|
+
import type Router from "koa-router";
|
|
3
|
+
import type { IncomingHttpHeaders } from "http";
|
|
4
|
+
import type { ParsedUrlQuery } from "querystring";
|
|
1
5
|
export type KoaApp = import('./typings').KoaApp;
|
|
2
6
|
export type KoaRouter = import('./typings').KoaRouter;
|
|
3
|
-
export type
|
|
7
|
+
export type CtxParams = Router.IRouterParamContext['params'];
|
|
8
|
+
export interface CtxReqData {
|
|
9
|
+
/**
|
|
10
|
+
* URL query 参数。
|
|
11
|
+
*/
|
|
12
|
+
query: ParsedUrlQuery;
|
|
13
|
+
/**
|
|
14
|
+
* bodyparser 解析后的请求 body。
|
|
15
|
+
*/
|
|
16
|
+
body: unknown;
|
|
17
|
+
/**
|
|
18
|
+
* 原始请求 headers。
|
|
19
|
+
*/
|
|
20
|
+
headers: IncomingHttpHeaders;
|
|
21
|
+
/**
|
|
22
|
+
* 便捷合并层:当前中间件会按 query -> body 的顺序合并。
|
|
23
|
+
* 字段有冲突时,后面的来源会覆盖前面的来源;需要精确来源时请使用 query/body/headers。
|
|
24
|
+
*/
|
|
25
|
+
data: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export type Ctx = Router.RouterContext<Koa.DefaultState, Koa.DefaultContext> & {
|
|
28
|
+
params: CtxParams;
|
|
29
|
+
reqData?: CtxReqData;
|
|
30
|
+
};
|
|
31
|
+
export type MiddlewareFN = (app: KoaApp) => (ctx: Ctx, next: Koa.Next) => Promise<void>;
|
|
32
|
+
export type RouterFN = (app: KoaApp, router: KoaRouter) => void;
|
|
4
33
|
export type ControllerFN<T extends object = object> = (app: KoaApp) => new () => T;
|
|
5
34
|
export type ServiceFN<T extends object = object> = (app: KoaApp) => new () => T;
|
|
6
|
-
export type RouterFN = (app: KoaApp, router: KoaRouter) => void;
|
package/types/app/typings.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ declare module '../packages/core/index' {
|
|
|
35
35
|
errorHandle: import('koa').Middleware;
|
|
36
36
|
apiSignVerify: import('koa').Middleware;
|
|
37
37
|
apiParamsVerify: import('koa').Middleware;
|
|
38
|
+
requestParameterParsing: import('koa').Middleware;
|
|
38
39
|
projectHandler: import('koa').Middleware;
|
|
39
40
|
}
|
|
40
41
|
interface AppConfigAugmented extends Partial<DefaultAppConfig> {
|
package/types/index.d.ts
CHANGED
|
@@ -3,9 +3,9 @@ import type Router from "koa-router";
|
|
|
3
3
|
import "./app/typings";
|
|
4
4
|
import { MOmit } from "./typings/type";
|
|
5
5
|
export type { FrameworkAugment, KoaApp } from "./packages/core/index";
|
|
6
|
-
export type { ControllerFN, Ctx, ServiceFN } from "./app/type";
|
|
7
6
|
export type { CryptoExtend, CryptoHashAlgorithm, HmacSignOptions, SignedPayloadOptions, VerifySignedPayloadOptions, } from "./app/extend/crypto";
|
|
8
7
|
export type { DB, DBDataOptions, DBDataRecord, DBFactory, DBRunResult, FrameworkDB, ListDBDataOptions, SQLiteParams, SQLiteValue, } from "./app/extend/db";
|
|
8
|
+
export type { ControllerFN, Ctx, MiddlewareFN, RouterFN, ServiceFN } from "./app/type";
|
|
9
9
|
export type { Router };
|
|
10
10
|
export declare const serverStart: (options?: MOmit<StartOptions, "frameBaseDir">) => Promise<import("./packages/core/index").KoaApp>;
|
|
11
11
|
export declare const baseFn: {
|