@aicblock/nserve 1.0.1 → 1.0.2

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/lib/commander.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var d=Object.create;var l=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var b=(e,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of m(n))!h.call(e,r)&&r!==t&&l(e,r,{get:()=>n[r],enumerable:!(s=g(n,r))||s.enumerable});return e};var O=(e,n,t)=>(t=e!=null?d(y(e)):{},b(n||!e||!e.__esModule?l(t,"default",{value:e,enumerable:!0}):t,e));var R=require("esbuild");var S=O(require("js-yaml"));function i(e,n="INFO"){let t=(p,f="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[f]}${p}\x1B[0m`,r={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[n],u=t(n,r);console.log(`[${u}] - ${e}`)}var a=require("./runtime"),o=require("commander"),c=process.argv;c[2]===void 0&&c.push("serve");o.program.version("1.0.1");o.program.on("command:*",function(){let e=o.program.args[0];if(["serve","build","gen"].includes(e)){(0,a.execRun)(e);return}i("See --help for a list of available commands."),i(`Invalid command: ${e}`,"ERROR"),process.exit(0)});o.program.on("--help",function(){console.log("Commands:"),console.log(" serve Start Run the dev server"),console.log(" build Build the project"),console.log(" gen Generate code based on the configuration file")});o.program.parse(c);
2
+ "use strict";var d=Object.create;var l=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var b=(e,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of m(n))!h.call(e,r)&&r!==t&&l(e,r,{get:()=>n[r],enumerable:!(s=g(n,r))||s.enumerable});return e};var O=(e,n,t)=>(t=e!=null?d(y(e)):{},b(n||!e||!e.__esModule?l(t,"default",{value:e,enumerable:!0}):t,e));var R=require("esbuild");var S=O(require("js-yaml"));function i(e,n="INFO"){let t=(p,f="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[f]}${p}\x1B[0m`,r={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[n],u=t(n,r);console.log(`[${u}] - ${e}`)}var a=require("./runtime"),o=require("commander"),c=process.argv;c[2]===void 0&&c.push("serve");o.program.version("1.0.2");o.program.on("command:*",function(){let e=o.program.args[0];if(["serve","build","gen"].includes(e)){(0,a.execRun)(e);return}i("See --help for a list of available commands."),i(`Invalid command: ${e}`,"ERROR"),process.exit(0)});o.program.on("--help",function(){console.log("Commands:"),console.log(" serve Start Run the dev server"),console.log(" build Build the project"),console.log(" gen Generate code based on the configuration file")});o.program.parse(c);
package/lib/index.d.ts CHANGED
@@ -4,24 +4,10 @@ export declare const nbuild: {
4
4
  build: typeof build;
5
5
  };
6
6
  export declare function DefineNserveConfig(options?: Config): Config | undefined;
7
- export declare const DefineGenRouter: (param: DefineGenRouterConfig) => {
8
- prefix: string;
9
- service: (RouterOption & {
10
- handler: string;
11
- })[];
12
- handler: string;
13
- middleware: string | string[] | undefined;
14
- };
7
+ export declare const DefineGenRouter: (param: DefineGenRouterConfig) => GenRouterConfig;
15
8
  declare const _default: {
16
9
  DefineNserveConfig: typeof DefineNserveConfig;
17
- DefineGenRouter: (param: DefineGenRouterConfig) => {
18
- prefix: string;
19
- service: (RouterOption & {
20
- handler: string;
21
- })[];
22
- handler: string;
23
- middleware: string | string[] | undefined;
24
- };
10
+ DefineGenRouter: (param: DefineGenRouterConfig) => GenRouterConfig;
25
11
  };
26
12
  export default _default;
27
13
 
@@ -170,6 +156,8 @@ interface DataTypeProperty {
170
156
  description?: string
171
157
  // 对象属性定义
172
158
  properties?: Record<string, DataTypeProperty>
159
+ // 是否必填
160
+ required?: boolean
173
161
  }
174
162
 
175
163
  // 泛型参数定义
@@ -209,23 +197,68 @@ interface RouterOption {
209
197
  // 路由响应数据类型定义
210
198
  responseDataType?: DataTypeOption
211
199
  // 路由中间件
212
- middleware?: string | string[]
200
+ middleware?: RouterMiddleware
213
201
  }
214
202
 
203
+ /**
204
+ * 路由中间件选项定义
205
+ */
206
+ interface RouterMiddlewareOption {
207
+ name: string
208
+ value?: Array<string | boolean | number> | (string | boolean | number)
209
+ }
210
+
211
+ /**
212
+ * 路由中间件类型定义
213
+ */
214
+ type RouterMiddleware =
215
+ | string
216
+ | string[]
217
+ | RouterMiddlewareOption
218
+ | RouterMiddlewareOption[]
219
+
215
220
  // 路由配置定义
216
221
  interface DefineGenRouterConfig {
222
+ /**
223
+ * 服务路径
224
+ */
217
225
  servicePath: string
226
+ /**
227
+ * 服务处理函数
228
+ */
218
229
  serviceHandler: string
230
+ /**
231
+ * 路由定义
232
+ */
219
233
  routers: RouterOption[]
220
- middleware?: string | string[]
234
+ /**
235
+ * 路由全局中间件
236
+ */
237
+ middleware?: RouterMiddleware
221
238
  }
222
239
  type GenRouterConfigService = RouterOption & {
240
+ /**
241
+ * 路由处理函数
242
+ */
223
243
  handler: string
224
244
  }
225
245
  interface GenRouterConfig {
246
+ /**
247
+ * 路由前缀
248
+ */
226
249
  prefix: string
250
+ /**
251
+ * 路由处理函数
252
+ */
227
253
  handler: string
254
+ /**
255
+ * 路由服务定义
256
+ */
228
257
  service: GenRouterConfigService[]
258
+ /**
259
+ * 路由全局中间件
260
+ */
261
+ middleware?: RouterMiddleware
229
262
  }
230
263
 
231
264
  type EXEC_COMMAND = 'serve' | 'build' | 'gen'
package/lib/index.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var T=Object.create;var h=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)h(e,r,{get:t[r],enumerable:!0})},x=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of w(t))!F.call(e,n)&&n!==r&&h(e,n,{get:()=>t[n],enumerable:!(s=P(t,n))||s.enumerable});return e};var V=(e,t,r)=>(r=e!=null?T(D(e)):{},x(t||!e||!e.__esModule?h(r,"default",{value:e,enumerable:!0}):r,e)),B=e=>x(h({},"__esModule",{value:!0}),e);var Q={};G(Q,{DefineGenRouter:()=>L,DefineNserveConfig:()=>j,default:()=>z,nbuild:()=>q});module.exports=B(Q);var b=require("esbuild");var K=require("esbuild"),f=require("fs"),m=require("path");var $=V(require("js-yaml"));function v(e,t="INFO"){let r=(c,p="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[p]}${c}\x1B[0m`,n={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[t],o=r(t,n);console.log(`[${o}] - ${e}`)}function O(e,t){let r=(n,o)=>{if(Object.prototype.toString.call(n)!=="[object Object]"||Object.prototype.toString.call(o)!=="[object Object]")return console.warn("[STACK_LOG] AICBLOCK_UTIL: \u53C2\u6570\u9519\u8BEF"),{};let c={},p=Object.keys(n);return Object.keys(o).filter(l=>!p.includes(l)).forEach(l=>Object.assign(c,{[l]:o[l]})),Object.keys(n).forEach(l=>{let i=o[l],u=n[l];if(i!==void 0&&Object.prototype.toString.call(i)==="[object Object]"&&Object.prototype.toString.call(u)==="[object Object]"){Object.assign(c,{[l]:r(u,i)});return}Object.assign(c,{[l]:i!==void 0?i:u})}),c};return(Array.isArray(t)?t:[t]).reduce((n,o)=>r(n,o),e)}function Y(e,t){let r=e.findIndex(n=>n===t);if(r<0||e.length-1===r)return;let s=e[r+1];if(s.indexOf("--")!==0)return s}function J(e){return e===void 0||e===""||e===null}function M(e){let t={};return e.split(/(\r\n)|[\r\n]/).filter(s=>!J(s)).forEach(s=>{let n=s.split("="),o=(n[0]||"").trim(),c=(n[1]||"").trim();o.split("")[0]!=="#"&&o!==""&&(t[o]=c)}),t}function k(e){let t=Number(e);if(!isNaN(t)&&e.trim()!=="")return t;let r=e.toLowerCase();if(r==="true")return!0;if(r==="false")return!1;if(r==="null")return null;if(r!=="undefined")return e}function U(e,t="."){let r=e.trim().split(`
2
- `),s={};return r.filter(n=>n.indexOf("YAML_CONFIG"+t)===0).forEach(n=>{if(!n.trim())return;let[o,c]=n.split("=");if(!o||c===void 0)return;let p=o.trim(),a=c.trim(),l=p.split(t),i=s;for(let u=0;u<l.length;u++){let d=l[u];u===l.length-1?i[d]=k(a):((!i[d]||typeof i[d]!="object")&&(i[d]={}),i=i[d])}}),s}function S(e,t){let r={},s={},n={},o=(0,m.join)(e,".env"),c=process.env.AICBLOCK_NSERVE_RUN_ARGV||"[]",p=Y(JSON.parse(c),"--mode"),a=p!==void 0&&p||(t==="build"?"production":"development"),l=(0,m.join)(e,`.env.${a}`),i={},u=[o,l],d=(0,m.join)(e,".env.local");(0,f.existsSync)(d)&&u.push(d);let C=(0,m.join)(e,`.env.${a}.local`);(0,f.existsSync)(C)&&u.push(C);let R=[],_=g=>{if(!(0,f.existsSync)(g))return;let y=(0,f.readFileSync)(g,"utf-8"),E=M(y);R.push(y),Object.assign(i,E)};u.forEach(_);let A=["YAML_CONFIG."];return Object.keys(i).forEach(g=>{if(A.some(I=>g.indexOf(I)===0))return;let y=i[g];if(g.indexOf("AICBLOCK_NSERVE_APP_")===0){r[g]=y;return}let E=t==="serve"?g.replace(/^(APPTEST_)/,""):g;s[E]=y}),R.join("").indexOf("YAML_CONFIG.")>=0&&Object.assign(n,U(R.join(`
3
- `))),{system:r,app:s,yamlConfig:n}}var W=e=>{let{servicePath:t,serviceHandler:r,routers:s,middleware:n}=e,o=s.map(c=>{let{name:p}=c;return Object.assign(c,{handler:p})});return{prefix:t,service:o,handler:r,middleware:n}},N=W;var q={transformSync:b.transformSync,build:b.build};function j(e){try{let t=process.env.AICBLOCK_NSERVE_RUN_CWD,r=process.env.AICBLOCK_NSERVE_RUN_MODE,s={},n=S(t,r),{app:o,system:c}=n;n.system.AICBLOCK_NSERVE_APP_ENTRY&&Object.assign(s,{entry:n.system.AICBLOCK_NSERVE_APP_ENTRY}),Object.keys(n.yamlConfig||{}).length>0&&Object.assign(s,{yamlConfig:n.yamlConfig.YAML_CONFIG});let p=l=>{let i=o&&o[l];i&&(process.env[l]=i)};Object.keys(o||{}).forEach(p);let a=O({outputDir:"dist",entry:"app.ts",sourceDir:"src"},{...e,envs:{system:c}});return Object.keys(n.yamlConfig||{}).length>0&&(a=O(a||{},{yamlConfig:n.yamlConfig.YAML_CONFIG})),a.lifecycleBefore&&typeof a.lifecycleBefore=="function"&&(a=O(a||{},a.lifecycleBefore(a)||{})),a}catch(t){v("defineNserveConfig fial::","ERROR"),console.error(t)}}var L=N,z={DefineNserveConfig:j,DefineGenRouter:L};0&&(module.exports={DefineGenRouter,DefineNserveConfig,nbuild});
1
+ "use strict";var T=Object.create;var h=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var F=(e,t)=>{for(var r in t)h(e,r,{get:t[r],enumerable:!0})},x=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of w(t))!G.call(e,n)&&n!==r&&h(e,n,{get:()=>t[n],enumerable:!(s=P(t,n))||s.enumerable});return e};var V=(e,t,r)=>(r=e!=null?T(D(e)):{},x(t||!e||!e.__esModule?h(r,"default",{value:e,enumerable:!0}):r,e)),B=e=>x(h({},"__esModule",{value:!0}),e);var Q={};F(Q,{DefineGenRouter:()=>L,DefineNserveConfig:()=>j,default:()=>z,nbuild:()=>q});module.exports=B(Q);var b=require("esbuild");var K=require("esbuild"),f=require("fs"),m=require("path");var $=V(require("js-yaml"));function v(e,t="INFO"){let r=(c,u="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[u]}${c}\x1B[0m`,n={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[t],o=r(t,n);console.log(`[${o}] - ${e}`)}function O(e,t){let r=(n,o)=>{if(Object.prototype.toString.call(n)!=="[object Object]"||Object.prototype.toString.call(o)!=="[object Object]")return console.warn("[STACK_LOG] AICBLOCK_UTIL: \u53C2\u6570\u9519\u8BEF"),{};let c={},u=Object.keys(n);return Object.keys(o).filter(l=>!u.includes(l)).forEach(l=>Object.assign(c,{[l]:o[l]})),Object.keys(n).forEach(l=>{let i=o[l],p=n[l];if(i!==void 0&&Object.prototype.toString.call(i)==="[object Object]"&&Object.prototype.toString.call(p)==="[object Object]"){Object.assign(c,{[l]:r(p,i)});return}Object.assign(c,{[l]:i!==void 0?i:p})}),c};return(Array.isArray(t)?t:[t]).reduce((n,o)=>r(n,o),e)}function Y(e,t){let r=e.findIndex(n=>n===t);if(r<0||e.length-1===r)return;let s=e[r+1];if(s.indexOf("--")!==0)return s}function J(e){return e===void 0||e===""||e===null}function M(e){let t={};return e.split(/(\r\n)|[\r\n]/).filter(s=>!J(s)).forEach(s=>{let n=s.split("="),o=(n[0]||"").trim(),c=(n[1]||"").trim();o.split("")[0]!=="#"&&o!==""&&(t[o]=c)}),t}function k(e){let t=Number(e);if(!isNaN(t)&&e.trim()!=="")return t;let r=e.toLowerCase();if(r==="true")return!0;if(r==="false")return!1;if(r==="null")return null;if(r!=="undefined")return e}function U(e,t="."){let r=e.trim().split(`
2
+ `),s={};return r.filter(n=>n.indexOf("YAML_CONFIG"+t)===0).forEach(n=>{if(!n.trim())return;let[o,c]=n.split("=");if(!o||c===void 0)return;let u=o.trim(),a=c.trim(),l=u.split(t),i=s;for(let p=0;p<l.length;p++){let d=l[p];p===l.length-1?i[d]=k(a):((!i[d]||typeof i[d]!="object")&&(i[d]={}),i=i[d])}}),s}function S(e,t){let r={},s={},n={},o=(0,m.join)(e,".env"),c=process.env.AICBLOCK_NSERVE_RUN_ARGV||"[]",u=Y(JSON.parse(c),"--mode"),a=u!==void 0&&u||(t==="build"?"production":"development"),l=(0,m.join)(e,`.env.${a}`),i={},p=[o,l],d=(0,m.join)(e,".env.local");(0,f.existsSync)(d)&&p.push(d);let C=(0,m.join)(e,`.env.${a}.local`);(0,f.existsSync)(C)&&p.push(C);let R=[],_=g=>{if(!(0,f.existsSync)(g))return;let y=(0,f.readFileSync)(g,"utf-8"),E=M(y);R.push(y),Object.assign(i,E)};p.forEach(_);let A=["YAML_CONFIG."];return Object.keys(i).forEach(g=>{if(A.some(I=>g.indexOf(I)===0))return;let y=i[g];if(g.indexOf("AICBLOCK_NSERVE_APP_")===0){r[g]=y;return}let E=t==="serve"?g.replace(/^(APPTEST_)/,""):g;s[E]=y}),R.join("").indexOf("YAML_CONFIG.")>=0&&Object.assign(n,U(R.join(`
3
+ `))),{system:r,app:s,yamlConfig:n}}var W=e=>{let{servicePath:t,serviceHandler:r,routers:s,middleware:n}=e,o=s.map(c=>{let{name:u}=c;return Object.assign(c,{handler:u})});return{prefix:t,service:o,handler:r,middleware:n}},N=W;var q={transformSync:b.transformSync,build:b.build};function j(e){try{let t=process.env.AICBLOCK_NSERVE_RUN_CWD,r=process.env.AICBLOCK_NSERVE_RUN_MODE,s={},n=S(t,r),{app:o,system:c}=n;n.system.AICBLOCK_NSERVE_APP_ENTRY&&Object.assign(s,{entry:n.system.AICBLOCK_NSERVE_APP_ENTRY}),Object.keys(n.yamlConfig||{}).length>0&&Object.assign(s,{yamlConfig:n.yamlConfig.YAML_CONFIG});let u=l=>{let i=o&&o[l];i&&(process.env[l]=i)};Object.keys(o||{}).forEach(u);let a=O({outputDir:"dist",entry:"app.ts",sourceDir:"src"},{...e,envs:{system:c}});return Object.keys(n.yamlConfig||{}).length>0&&(a=O(a||{},{yamlConfig:n.yamlConfig.YAML_CONFIG})),a.lifecycleBefore&&typeof a.lifecycleBefore=="function"&&(a=O(a||{},a.lifecycleBefore(a)||{})),a}catch(t){v("defineNserveConfig fial::","ERROR"),console.error(t)}}var L=N,z={DefineNserveConfig:j,DefineGenRouter:L};0&&(module.exports={DefineGenRouter,DefineNserveConfig,nbuild});
package/lib/runtime.js CHANGED
@@ -1,27 +1,31 @@
1
- "use strict";var Ee=Object.create;var U=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Re=Object.getOwnPropertyNames;var Te=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var be=(e,r)=>{for(var o in r)U(e,o,{get:r[o],enumerable:!0})},ne=(e,r,o,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Re(r))!_e.call(e,i)&&i!==o&&U(e,i,{get:()=>r[i],enumerable:!(c=Oe(r,i))||c.enumerable});return e};var re=(e,r,o)=>(o=e!=null?Ee(Te(e)):{},ne(r||!e||!e.__esModule?U(o,"default",{value:e,enumerable:!0}):o,e)),Ie=e=>ne(U({},"__esModule",{value:!0}),e);var Pe={};be(Pe,{default:()=>Me,execRun:()=>fe});module.exports=Ie(Pe);var w=require("path");var oe=require("esbuild"),_=require("fs"),k=require("path"),K=re(require("vm")),Ce=re(require("js-yaml"));function b(e,r="INFO"){let o=(l,u="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[u]}${l}\x1B[0m`,i={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[r],f=o(r,i);console.log(`[${f}] - ${e}`)}function W(e,r){let o=e.findIndex(i=>i===r);if(o<0||e.length-1===o)return;let c=e[o+1];if(c.indexOf("--")!==0)return c}function M(e,r){try{let o=(0,_.readFileSync)(e,"utf-8"),c=(0,oe.transformSync)(o,{format:"cjs",loader:"ts",platform:"node",target:"node18"}),i={module:{paths:[(0,k.join)(r,"node_modules")],exports:{default:void 0}},require,__dirname:r,global,__filename,process},f=new K.default.Script(c.code);return K.default.createContext(i),f.runInContext(i),i.module.exports.default||i.module.exports}catch(o){console.error(o),process.exit(0)}}var Q=require("fs"),pe=require("child_process");var g=require("fs"),R=require("path");function se(e){return!e||typeof e!="string"?e:e.replace(/([A-Z])/g," $1").trim().split(/\s+/).join("-").toLowerCase()}function j(e){return!e||typeof e!="string"?e:e.split(/[\-\_]/g).map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join("")}var Se=e=>{let r=[],o=new Map,c=new Map;function i(n){if(!c.has(n))return c.set(n,1),n;let t=c.get(n)+1;return c.set(n,t),`${n}${t}`}function f(n,t,a){let s=[];if(t.type==="array"){if(t.properties&&Object.keys(t.properties).length>0){let p=t.name||i(`${a||"Anonymous"}_${n}_Item`),y=l(p,t.properties,t.description);return y&&(o.set(p,y),s.push(p)),{type:`${p}[]`,generatedInterfaces:s}}return{type:"any[]",generatedInterfaces:s}}if(t.type==="object"&&t.properties){let p=t.name||i(`${a||"Anonymous"}_${n}`),y=l(p,t.properties,t.description);return y&&(o.set(p,y),s.push(p)),{type:p,generatedInterfaces:s}}return typeof t.type=="object"?{type:t.type.name,generatedInterfaces:s}:{type:t.type||"string",generatedInterfaces:s}}function l(n,t,a){let s=[];return a&&s.push(`// ${a}`),Object.entries(t).forEach(([p,y])=>{let h=f(p,y,n),O=y.description?` // ${y.description}`:"",C=` ${p}: ${h.type};`;s.push(O?`${O}
2
- ${C}`:C)}),s.length===0?`interface ${n} {}`:`interface ${n} {
1
+ "use strict";var Ne=Object.create;var Y=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var we=(e,r)=>{for(var o in r)Y(e,o,{get:r[o],enumerable:!0})},fe=(e,r,o,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Ae(r))!je.call(e,i)&&i!==o&&Y(e,i,{get:()=>r[i],enumerable:!(c=xe(r,i))||c.enumerable});return e};var de=(e,r,o)=>(o=e!=null?Ne(Le(e)):{},fe(r||!e||!e.__esModule?Y(o,"default",{value:e,enumerable:!0}):o,e)),De=e=>fe(Y({},"__esModule",{value:!0}),e);var Je={};we(Je,{default:()=>We,execRun:()=>_e});module.exports=De(Je);var q=require("path");var me=require("esbuild"),$=require("fs"),ee=require("path"),Z=de(require("vm")),Ue=de(require("js-yaml"));function S(e,r="INFO"){let o=(l,u="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[u]}${l}\x1B[0m`,i={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[r],d=o(r,i);console.log(`[${d}] - ${e}`)}function te(e,r){let o=e.findIndex(i=>i===r);if(o<0||e.length-1===o)return;let c=e[o+1];if(c.indexOf("--")!==0)return c}function F(e,r){try{let o=(0,$.readFileSync)(e,"utf-8"),c=(0,me.transformSync)(o,{format:"cjs",loader:"ts",platform:"node",target:"node18"}),i={module:{paths:[(0,ee.join)(r,"node_modules")],exports:{default:void 0}},require,__dirname:r,global,__filename,process},d=new Z.default.Script(c.code);return Z.default.createContext(i),d.runInContext(i),i.module.exports.default||i.module.exports}catch(o){console.error(o),process.exit(0)}}var re=require("fs"),Te=require("child_process");var g=require("fs"),b=require("path");function ge(e){return!e||typeof e!="string"?e:e.replace(/([A-Z])/g," $1").trim().split(/\s+/).join("-").toLowerCase()}function P(e){return!e||typeof e!="string"?e:e.split(/[\-\_]/g).map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join("")}var ve=e=>{let r=[],o=new Map,c=new Map;function i(n){if(!c.has(n))return c.set(n,1),n;let t=c.get(n)+1;return c.set(n,t),`${n}${t}`}function d(n,t,a){let s=[];if(t.type==="array"){if(t.properties&&Object.keys(t.properties).length>0){let p=t.name||i(`${a||"Anonymous"}_${n}_Item`),y=l(p,t.properties,t.description);return y&&(o.set(p,y),s.push(p)),{type:`${p}[]`,generatedInterfaces:s}}return{type:"any[]",generatedInterfaces:s}}if(t.type==="object"&&t.properties){let p=t.name||i(`${a||"Anonymous"}_${n}`),y=l(p,t.properties,t.description);return y&&(o.set(p,y),s.push(p)),{type:p,generatedInterfaces:s}}return typeof t.type=="object"?{type:t.type.name,generatedInterfaces:s}:{type:t.type||"string",generatedInterfaces:s}}function l(n,t,a){let s=[];return a&&s.push(`// ${a}`),Object.entries(t).forEach(([p,y])=>{let h=d(p,y,n),O=y.description?` // ${y.description}`:"",A=` ${p}${y.required===!1?"?":""}: ${h.type};`;s.push(O?`${O}
2
+ ${A}`:A)}),s.length===0?`interface ${n} {}`:`interface ${n} {
3
3
  ${s.join(`
4
4
  `)}
5
5
  }`}function u(n){if(n.type!==void 0){let s=[];return n.description&&s.push(`// ${n.description}`),s.push(`type ${n.name} = ${n.type};`),s.join(`
6
- `)}Object.entries(n.properties||{}).forEach(([s,p])=>{f(s,p,n.name)});let t="";if(n.genericity)if(typeof n.genericity=="string"){let s=d(n);s?t=` extends ${n.genericity}<${s}>`:t=` extends ${n.genericity}`}else{let{name:s,typeParams:p}=n.genericity;t=` extends ${s}<${p.join(", ")}>`}else n.extends&&(Array.isArray(n.extends)?t=` extends ${n.extends.join(", ")}`:t=` extends ${n.extends}`);if(n.genericity)return`interface ${n.name}${t} {}`;let a=[];return Object.entries(n.properties||{}).forEach(([s,p])=>{let y=f(s,p,n.name),h=p.description?` // ${p.description}`:"",O=` ${s}: ${y.type};`;a.push(h?`${h}
6
+ `)}Object.entries(n.properties||{}).forEach(([s,p])=>{d(s,p,n.name)});let t="";if(n.genericity)if(typeof n.genericity=="string"){let s=m(n);s?t=` extends ${n.genericity}<${s}>`:t=` extends ${n.genericity}`}else{let{name:s,typeParams:p}=n.genericity;t=` extends ${s}<${p.join(", ")}>`}else n.extends&&(Array.isArray(n.extends)?t=` extends ${n.extends.join(", ")}`:t=` extends ${n.extends}`);if(n.genericity)return`interface ${n.name}${t} {}`;let a=[];return Object.entries(n.properties||{}).forEach(([s,p])=>{let y=d(s,p,n.name),h=p.description?` // ${p.description}`:"",O=` ${s}${p.required===!1?"?":""}: ${y.type};`;a.push(h?`${h}
7
7
  ${O}`:O)}),`interface ${n.name}${t} {
8
8
  ${a.join(`
9
9
  `)}
10
- }`}function d(n){let t=n.properties?.list;if(t&&t.type==="array"&&t.name)return t.name;for(let[a,s]of Object.entries(n.properties||{}))if(s.type==="array"&&s.name)return s.name;return null}let E=u(e);return o.forEach(n=>{r.push(n)}),r.push(E),r.join(`
10
+ }`}function m(n){let t=n.properties?.list;if(t&&t.type==="array"&&t.name)return t.name;for(let[a,s]of Object.entries(n.properties||{}))if(s.type==="array"&&s.name)return s.name;return null}let E=u(e);return o.forEach(n=>{r.push(n)}),r.push(E),r.join(`
11
11
 
12
- `)},J=Se;var Ne=(e,r,o,c="@")=>{let i=(0,R.join)(r,o,"handler"),f=(0,R.join)(r,o,"logic"),l=(0,R.join)(r,o,"types");!(0,g.existsSync)(i)&&(0,g.mkdirSync)(i,{recursive:!0}),!(0,g.existsSync)(f)&&(0,g.mkdirSync)(f,{recursive:!0}),!(0,g.existsSync)(l)&&(0,g.mkdirSync)(l,{recursive:!0});let d=Object.assign({},{genDir:"nserve-config",routerDir:"router",modelDir:"model"},e),{genDir:E,routerDir:n,middleware:t}=d,a=(0,R.join)(r,E),s=(0,R.join)(a,n||"");if(!(0,g.existsSync)(s)){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u4E0D\u5B58\u5728::",s);return}if(!(0,g.statSync)(s).isDirectory()){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u4E0D\u662F\u76EE\u5F55");return}let y=(0,g.readdirSync)(s).filter(I=>I.endsWith(".ts")||I.endsWith(".js"));if(y.length===0){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u76EE\u5F55\u4E0B\u6CA1\u6709\u63CF\u8FF0\u751F\u6210\u6587\u4EF6");return}let h=[],O=[];y.forEach(I=>{let N=M((0,R.join)(s,I),__dirname);if(!N)return;let H=I.replace(".ts",".handler"),X=j(I.replace(".ts",""))+"Server",de=(0,R.join)(i,[H,".ts"].join("")),me=[c,"handler",H].join("/");h.push(`import ${X} from '${me}'`),O.push(X);let G=[],z=[],B=(0,R.join)(f,N.handler),Y=(0,R.join)(l,N.handler);!(0,g.existsSync)(B)&&(0,g.mkdirSync)(B,{recursive:!0}),!(0,g.existsSync)(Y)&&(0,g.mkdirSync)(Y,{recursive:!0});let Z=["import { Request, Response } from 'express'","import { ErrorResponse, SuccessResponse } from '@aicblock/nserve/lib/tools'"],D={},A={};t&&Object.keys(t).forEach(m=>{let{libName:S,funcName:x}=t[m],F=x?`{${x} as ${m}}`:m;D[m]=`import ${F} from '${S}'`}),N.service?.forEach(m=>{let S=se(m.handler),x=[];if(m.responseDataType&&x.push(J(m.responseDataType)),m.requestDataType&&x.push(J(m.requestDataType)),x.length>0){let $=(0,R.join)(Y,`${S}.types.d.ts`);(0,g.writeFileSync)($,x.join(`
13
- `),"utf-8")}let F=m.method?.toLowerCase()||"get",ee=j(m.handler),q=[];if(m.middleware&&d.middleware){let $=Array.isArray(m.middleware)?m.middleware:[m.middleware];if(!$.every(v=>!!D[v]))throw new Error(`[ERROR] \u8DEF\u7531\u914D\u7F6E\u4E2D\u4F7F\u7528\u4E86\u4E0D\u5B58\u5728\u7684\u4E2D\u95F4\u4EF6::${$}`);$.forEach(v=>{A[v]=D[v]}),q.push(...$)}let ye=[c,"logic",N.handler,S].join("/");G.push(`import ${ee} from '${ye}.logic'`),z.push(`Router.${F}('${m.path}',${q.join(",")}${q.length>0?",":""}${ee})`),m.docRemark&&Z.concat(`// ${m.docRemark}`);let he=Z.concat(`
12
+ `)},ne=ve;var Me=(e,r,o,c="@")=>{let i=(0,b.join)(r,o,"handler"),d=(0,b.join)(r,o,"logic"),l=(0,b.join)(r,o,"types");!(0,g.existsSync)(i)&&(0,g.mkdirSync)(i,{recursive:!0}),!(0,g.existsSync)(d)&&(0,g.mkdirSync)(d,{recursive:!0}),!(0,g.existsSync)(l)&&(0,g.mkdirSync)(l,{recursive:!0});let m=Object.assign({},{genDir:"nserve-config",routerDir:"router",modelDir:"model"},e),{genDir:E,routerDir:n,middleware:t}=m,a=(0,b.join)(r,E),s=(0,b.join)(a,n||"");if(!(0,g.existsSync)(s)){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u4E0D\u5B58\u5728::",s);return}if(!(0,g.statSync)(s).isDirectory()){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u4E0D\u662F\u76EE\u5F55");return}let y=(0,g.readdirSync)(s).filter(N=>N.endsWith(".ts")||N.endsWith(".js"));if(y.length===0){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u76EE\u5F55\u4E0B\u6CA1\u6709\u63CF\u8FF0\u751F\u6210\u6587\u4EF6");return}let h=[],O=[];y.forEach(N=>{let oe=F((0,b.join)(s,N),__dirname);if(!oe)return;let x=oe,se=N.replace(".ts",".handler"),ie=P(N.replace(".ts",""))+"Server",be=(0,b.join)(i,[se,".ts"].join("")),Ie=[c,"handler",se].join("/");h.push(`import ${ie} from '${Ie}'`),O.push(ie);let k=[],ce=[],K=(0,b.join)(d,x.handler),W=(0,b.join)(l,x.handler);!(0,g.existsSync)(K)&&(0,g.mkdirSync)(K,{recursive:!0}),!(0,g.existsSync)(W)&&(0,g.mkdirSync)(W,{recursive:!0});let ae=["ErrorResponse","SuccessResponse"],J=["import type { Request, Response } from 'express'"],G={},M={};t&&Object.keys(t).forEach(f=>{let{libName:T,funcName:_}=t[f],j=_?`{${_} as ${f}}`:f;G[f]=`import ${j} from '${T}'`}),x.service?.forEach(f=>{let T=ge(f.handler),_=[];if(f.responseDataType&&_.push(ne(f.responseDataType)),f.requestDataType&&_.push(ne(f.requestDataType)),_.length>0){let L=(0,b.join)(W,`${T}.types.d.ts`);(0,g.writeFileSync)(L,_.join(`
13
+ `),"utf-8")}let j=f.method?.toLowerCase()||"get",H=P(f.handler),w=[];if(f.middleware&&m.middleware){let L=Array.isArray(f.middleware)?f.middleware:[f.middleware];if(!L.every(R=>{let I=typeof R=="string"?R:R.name;return!!G[I]}))throw new Error(`[ERROR] \u8DEF\u7531\u914D\u7F6E\u4E2D\u4F7F\u7528\u4E86\u4E0D\u5B58\u5728\u7684\u4E2D\u95F4\u4EF6::${L}`);let B=[];L.forEach(R=>{let I=typeof R=="string"?R:R.name;M[I]=G[I];let pe=(typeof R=="string"?void 0:Array.isArray(R.value)?R.value:[R.value])?.map(z=>typeof z=="string"?`'${z}'`:z),Se=pe?`${I}(${pe.join(",")})`:I;B.push(Se)}),w.push(...B)}let X=[c,"logic",x.handler,T].join("/");k.push(`import ${H} from '${X}.logic'`),ce.push(`Router.${j}('${f.path}',${w.join(",")}${w.length>0?",":""}${H})`),f.docRemark&&J.concat(`// ${f.docRemark}`);let D=[];if(f.requestDataType&&f.requestDataType.properties){let L=f.requestDataType,U=L.properties,B=Object.keys(U).reduce((R,I)=>{let ue=typeof U[I].type=="string"?U[I].type:"object";return R[I]={required:U[I].required===void 0||U[I].required===!0,type:ue},R},{});D.push(`const data = ${f.method==="GET"?"req.query":"req.body"} as ${L.name}`,`CheckFieldRequired(data, ${JSON.stringify(B)})`),ae.push("CheckFieldRequired")}J.push(`import { ${ae.join(",")} } from '@aicblock/nserve/lib/tools'`);let $e=J.concat(`
14
+ ${f.docRemark?`// ${f.docRemark}`:""}
14
15
  export async function ServiceLogic(req: Request, res: Response) {
15
16
  try {
16
- SuccessResponse(res)
17
+ // todo: \u63A5\u53E3\u670D\u52A1\u903B\u8F91\u5B9E\u73B0
18
+ ${D.join(`
19
+ `)}
20
+ SuccessResponse(res, true)
17
21
  } catch (error) {
18
22
  ErrorResponse(res, error)
19
23
  }
20
24
  }
21
25
  export default ServiceLogic
22
- `),te=(0,R.join)(B,`${S}.logic.ts`);!(0,g.existsSync)(te)&&(0,g.writeFileSync)(te,he.join(`
23
- `),"utf-8")});let V=[];N.middleware?.forEach(m=>{let S=D[m];!S||A[m]||(A[m]=S,V.push(m))}),Object.keys(A).forEach(m=>{G.push(A[m])});let ge=["// Code generated by plugin. Templates Edited by aicblock cli. DO NOT EDIT.","import express from 'express'",...G,"const app = express()","const Router = express.Router()",V.length>0?`Router.use(${V.join(",")})`:"",`app.use('${N.prefix}', Router)`,...z,"export default app"];(0,g.writeFileSync)(de,ge.join(`
24
- `))});let C=(0,R.join)(i,"router.ts"),P=["// Code generated by plugin. Templates Edited by aicblock cli. DO NOT EDIT.",...h,"export default [",O.join(","),"]"];(0,g.writeFileSync)(C,P.join(`
25
- `)),console.log("[INFO] gen router file ",C)},ie=Ne;var T=require("fs"),L=require("path");var xe=new Set(["INT","BIGINT","BIT","DECIMAL","DOUBLE","FLOAT","INTEGER","MEDIUMINT","NUMERIC","REAL","SMALLINT","TINYINT"]);function $e(e){let c=e.replace(/\/\*[\s\S]*?\*\//g,"").trim().replace(/--.*$/gm,"").replace(/\s+/g," "),i=c.match(/CREATE TABLE [`"]?([\w_]+)[`"]?\s*\(/i);if(!i)throw new Error("\u65E0\u6CD5\u89E3\u6790\u8868\u540D");let l={tableName:i[1],columns:[]},u=c.indexOf("("),d=c.lastIndexOf(")");if(u===-1||d===-1||d<=u)throw new Error("\u65E0\u6CD5\u627E\u5230\u5217\u5B9A\u4E49\u90E8\u5206");let E=c.substring(u+1,d);if(!E.trim())return l;let n=Le(E),t=new Set,a=new Set;return n.forEach(s=>{let p=s.trim();if(p.toUpperCase().startsWith("PRIMARY KEY")){let h=p.match(/PRIMARY KEY\s*\([`"]?([\w_]+)[`"]?\)/i);h&&t.add(h[1]);return}if(p.toUpperCase().startsWith("UNIQUE")){let h=p.match(/\([`"]?([\w_]+)[`"]?(?:\s+ASC|DESC)?\)/i);h&&a.add(h[1]);return}let y=Ae(p);y&&l.columns.push(y)}),l.columns.forEach(s=>{t.has(s.name)&&(s.primaryKey=!0),a.has(s.name)&&(s.unique=!0)}),l}function Le(e){let r=[],o="",c=!1,i=!1,f=0;for(let l=0;l<e.length;l++){let u=e[l],d=l+1<e.length?e[l+1]:"";u==="'"&&!i&&(c=!c),u==="-"&&d==="-"&&!c&&(i=!0),i&&(u===","||u===")")&&(i=!1),u==="("&&!c&&!i&&f++,u===")"&&!c&&!i&&f--,u===","&&!c&&!i&&f===0?(o.trim()&&r.push(o.trim()),o=""):o+=u}return o.trim()&&r.push(o.trim()),r}function Ae(e){if(e.toUpperCase().startsWith("PRIMARY KEY")||e.toUpperCase().startsWith("UNIQUE")||e.toUpperCase().startsWith("KEY"))return null;let r=/^[`"]?([\w_]+)[`"]?\s+([a-zA-Z]+)(?:\s*\(\s*(\d+)\s*\))?(?:\s+(?:CHARACTER\s+SET|CHARSET)\s+\w+)?(?:\s+COLLATE\s+\w+)?(?:\s+(NOT\s+NULL|NULL))?(?:\s+UNIQUE)?(?:\s+AUTO_INCREMENT)?(?:\s+DEFAULT\s+([\w'"-]+))?(?:\s+COMMENT\s+'([^']*)')?/i,o=e.match(r);if(!o)return null;let[,c,i,f,l,u,d]=o,E=i.toUpperCase(),n={name:c,dataType:E};if(f&&(n.length=parseInt(f,10)),l&&l.toUpperCase()==="NOT NULL"&&(n.notNull=!0),e.toUpperCase().includes("UNIQUE")&&(n.unique=!0),e.toUpperCase().includes("AUTO_INCREMENT")&&(n.autoIncrement=!0),u!==void 0&&u!==""&&u!=="NULL"){let t=u.trim();if((t.startsWith("'")&&t.endsWith("'")&&t.length>1||t.startsWith('"')&&t.endsWith('"')&&t.length>1)&&(t=t.substring(1,t.length-1)),xe.has(E)){let a=Number(t);!isNaN(a)&&t!==""?n.defaultValue=a:t!==""&&(n.defaultValue=t)}else t!==""&&(n.defaultValue=t)}return d&&(n.comments=d),n}var je=(e,r,o)=>{let c={genDir:"nserve-config",modelDir:"model"},{genDir:i,modelDir:f}=Object.assign({},c,e),l=(0,L.join)(r,i,f);if(!(0,T.existsSync)(l))return;let u=(0,T.readdirSync)(l).filter(s=>s.endsWith(".sql"));if(u.length===0)throw new Error(`The SQL model directory does not contain any SQL files::${l}`);let d=(0,L.join)(r,o,f);(0,T.existsSync)(d)||(0,T.mkdirSync)(d);let E=[],n=[];u.forEach(s=>{let p=(0,L.join)(l,s),y=(0,T.readFileSync)(p,"utf-8");try{let h=$e(y),O=h.tableName,C=(0,L.join)(d,`${O}.ts`),P=["import type { TableOption } from '@dpapejs/emysql'",`const table:TableOption = ${JSON.stringify(h,null,2)}`,"export default table"];(0,T.writeFileSync)(C,P.join(`
26
- `),"utf-8");let I=j(O);n.push(I),E.push(`import ${I} from './${O}'`),b(`The model file ${O} has been generated::${C}`)}catch{throw new Error(`The SQL file ${s} is not a valid CREATE TABLE statement::${p}`)}});let t=(0,L.join)(d,"index.ts"),a=[...E,`export default [${n.join(", ")}]`];(0,T.writeFileSync)(t,a.join(`
27
- `),"utf-8"),b(`The model index file has been generated::${t}`)},ce=je;var ae=require("child_process"),le=require("path"),we=(e,r,o)=>{try{let c=r||process.cwd();ie(e||{},c,o||"src"),ce(e||{},c,o||"src");let i={semi:!1,singleQuote:!0,trailingComma:"none"},{semi:f,singleQuote:l,trailingComma:u}=Object.assign({},i,e?.codePrettier||{}),d=["npx prettier"];f===!1&&d.push("--no-semi"),l===!0&&d.push("--single-quote"),u&&d.push(`--trailing-comma ${u}`);let E=["'logic/**/*.ts'","'handler/**/*.ts'","'model/**/*.ts'","'types/**/*.d.ts'"];d.push("--write",...E);let n=d.join(" "),t=(0,le.join)(c,o||"src");console.log("[INFO] execRunGen::",t),console.log("[INFO] cmd::",n),(0,ae.spawnSync)(n,{cwd:t,stdio:"inherit",shell:!0}),b("[INFO] execRunGen","SUCCESS")}catch(c){b("execRunGen fial::","ERROR"),console.error(c)}},ue=we;function De(e,r){b(`${r?`The [${r}] app has been `:""}Build DONE. [Build time:${Date.now()-e} ms]`,"SUCCESS")}function ve(e){b(e==="build"?"Build Fail.":"Serve process has exited.","ERROR")}function Ue(){let e=process.cwd(),r=W(process.argv,"--config"),o=(0,w.join)(e,"nserve.config.ts"),c=(0,w.join)(e,"nserve.config.js"),i=r?(0,w.join)(e,r):(0,Q.existsSync)(o)?o:c;if(!(0,Q.existsSync)(i))throw Error(`The configuration file does not exist. [${i}]`);return i}function fe(e){try{let o=Ue(),c=process.cwd(),i=e,f=W(process.argv,"--mode"),l=JSON.stringify(process.argv),u={AICBLOCK_NSERVE_RUN_CWD:c,AICBLOCK_NSERVE_RUN_CONFIG_PATH:o,AICBLOCK_NSERVE_RUN_MODE:i,AICBLOCK_NSERVE_ENV_MODE:f,AICBLOCK_NSERVE_RUN_ARGV:l};if(Object.keys(u).forEach(a=>{let s=u[a];s!==void 0&&(process.env[a]=s)}),e==="gen"){let{generateConfig:a,sourceDir:s}=M(o,process.cwd());ue(a||{},c,s||"src");return}let d=Date.now();var r=void 0;let E=process.platform==="win32"?"node.cmd":"node",t=(0,pe.spawn)(E,["./lib/core/run.js","--cmd"],{cwd:(0,w.join)(__dirname,"../"),stdio:e==="build"?"inherit":"pipe",env:Object.assign({},process.env,u)});t.stdout?.on("data",a=>{r&&r.stop(),console.log(a.toString("utf-8"))}),t.stdout?.on("error",a=>{r&&r.stop(),console.log(a.toString())}),t.stderr?.on("data",a=>{r&&r.stop(),console.log(a.toString("utf-8"))}),t.on("exit",a=>{r&&r.stop(),a===0&&e==="build"&&De(d,f),a!==0&&ve(e)})}catch(o){b("execRun fial::","ERROR"),console.error(o)}}var Me=fe;0&&(module.exports={execRun});
26
+ `),le=(0,b.join)(K,`${T}.logic.ts`);!(0,g.existsSync)(le)&&(0,g.writeFileSync)(le,$e.join(`
27
+ `),"utf-8")});let Q=[];x.middleware&&(Array.isArray(x.middleware)?x.middleware:[x.middleware]).forEach(T=>{let _=typeof T=="string"?T:T.name,j=G[_];if(!j||M[_])return;M[_]=j;let w=(typeof T=="string"?void 0:Array.isArray(T.value)?T.value:[T.value])?.map(D=>typeof D=="string"?`'${D}'`:D),X=w?`${_}(${w.join(",")})`:_;Q.push(X)}),Object.keys(M).forEach(f=>{k.push(M[f])});let Ce=["// Code generated by plugin. Templates Edited by aicblock cli. DO NOT EDIT.","import express from 'express'",...k,"const app = express()","const Router = express.Router()",Q.length>0?`Router.use(${Q.join(",")})`:"",`app.use('${x.prefix}', Router)`,...ce,"export default app"];(0,g.writeFileSync)(be,Ce.join(`
28
+ `))});let A=(0,b.join)(i,"router.ts"),V=["// Code generated by plugin. Templates Edited by aicblock cli. DO NOT EDIT.",...h,"export default [",O.join(","),"]"];(0,g.writeFileSync)(A,V.join(`
29
+ `)),console.log("[INFO] gen router file ",A)},ye=Me;var C=require("fs"),v=require("path");var Pe=new Set(["INT","BIGINT","BIT","DECIMAL","DOUBLE","FLOAT","INTEGER","MEDIUMINT","NUMERIC","REAL","SMALLINT","TINYINT"]);function qe(e){let c=e.replace(/\/\*[\s\S]*?\*\//g,"").trim().replace(/--.*$/gm,"").replace(/\s+/g," "),i=c.match(/CREATE TABLE [`"]?([\w_]+)[`"]?\s*\(/i);if(!i)throw new Error("\u65E0\u6CD5\u89E3\u6790\u8868\u540D");let l={tableName:i[1],columns:[]},u=c.indexOf("("),m=c.lastIndexOf(")");if(u===-1||m===-1||m<=u)throw new Error("\u65E0\u6CD5\u627E\u5230\u5217\u5B9A\u4E49\u90E8\u5206");let E=c.substring(u+1,m);if(!E.trim())return l;let n=Ge(E),t=new Set,a=new Set;return n.forEach(s=>{let p=s.trim();if(p.toUpperCase().startsWith("PRIMARY KEY")){let h=p.match(/PRIMARY KEY\s*\([`"]?([\w_]+)[`"]?\)/i);h&&t.add(h[1]);return}if(p.toUpperCase().startsWith("UNIQUE")){let h=p.match(/\([`"]?([\w_]+)[`"]?(?:\s+ASC|DESC)?\)/i);h&&a.add(h[1]);return}let y=Be(p);y&&l.columns.push(y)}),l.columns.forEach(s=>{t.has(s.name)&&(s.primaryKey=!0),a.has(s.name)&&(s.unique=!0)}),l}function Ge(e){let r=[],o="",c=!1,i=!1,d=0;for(let l=0;l<e.length;l++){let u=e[l],m=l+1<e.length?e[l+1]:"";u==="'"&&!i&&(c=!c),u==="-"&&m==="-"&&!c&&(i=!0),i&&(u===","||u===")")&&(i=!1),u==="("&&!c&&!i&&d++,u===")"&&!c&&!i&&d--,u===","&&!c&&!i&&d===0?(o.trim()&&r.push(o.trim()),o=""):o+=u}return o.trim()&&r.push(o.trim()),r}function Be(e){if(e.toUpperCase().startsWith("PRIMARY KEY")||e.toUpperCase().startsWith("UNIQUE")||e.toUpperCase().startsWith("KEY"))return null;let r=/^[`"]?([\w_]+)[`"]?\s+([a-zA-Z]+)(?:\s*\(\s*(\d+)\s*\))?(?:\s+(?:CHARACTER\s+SET|CHARSET)\s+\w+)?(?:\s+COLLATE\s+\w+)?(?:\s+(NOT\s+NULL|NULL))?(?:\s+UNIQUE)?(?:\s+AUTO_INCREMENT)?(?:\s+DEFAULT\s+([\w'"-]+))?(?:\s+COMMENT\s+'([^']*)')?/i,o=e.match(r);if(!o)return null;let[,c,i,d,l,u,m]=o,E=i.toUpperCase(),n={name:c,dataType:E};if(d&&(n.length=parseInt(d,10)),l&&l.toUpperCase()==="NOT NULL"&&(n.notNull=!0),e.toUpperCase().includes("UNIQUE")&&(n.unique=!0),e.toUpperCase().includes("AUTO_INCREMENT")&&(n.autoIncrement=!0),u!==void 0&&u!==""&&u!=="NULL"){let t=u.trim();if((t.startsWith("'")&&t.endsWith("'")&&t.length>1||t.startsWith('"')&&t.endsWith('"')&&t.length>1)&&(t=t.substring(1,t.length-1)),Pe.has(E)){let a=Number(t);!isNaN(a)&&t!==""?n.defaultValue=a:t!==""&&(n.defaultValue=t)}else t!==""&&(n.defaultValue=t)}return m&&(n.comments=m),n}var Ye=(e,r,o)=>{let c={genDir:"nserve-config",modelDir:"model"},{genDir:i,modelDir:d}=Object.assign({},c,e),l=(0,v.join)(r,i,d);if(!(0,C.existsSync)(l))return;let u=(0,C.readdirSync)(l).filter(s=>s.endsWith(".sql"));if(u.length===0)throw new Error(`The SQL model directory does not contain any SQL files::${l}`);let m=(0,v.join)(r,o,d);(0,C.existsSync)(m)||(0,C.mkdirSync)(m);let E=[],n=[];u.forEach(s=>{let p=(0,v.join)(l,s),y=(0,C.readFileSync)(p,"utf-8");try{let h=qe(y),O=h.tableName,A=(0,v.join)(m,`${O}.ts`),V=["import type { TableOption } from '@dpapejs/emysql'",`const table:TableOption = ${JSON.stringify(h,null,2)}`,"export default table"];(0,C.writeFileSync)(A,V.join(`
30
+ `),"utf-8");let N=P(O);n.push(N),E.push(`import ${N} from './${O}'`),S(`The model file ${O} has been generated::${A}`)}catch{throw new Error(`The SQL file ${s} is not a valid CREATE TABLE statement::${p}`)}});let t=(0,v.join)(m,"index.ts"),a=[...E,`export default [${n.join(", ")}]`];(0,C.writeFileSync)(t,a.join(`
31
+ `),"utf-8"),S(`The model index file has been generated::${t}`)},he=Ye;var Ee=require("child_process"),Re=require("path"),Fe=(e,r,o)=>{try{let c=r||process.cwd();ye(e||{},c,o||"src"),he(e||{},c,o||"src");let i={semi:!1,singleQuote:!0,trailingComma:"none"},{semi:d,singleQuote:l,trailingComma:u}=Object.assign({},i,e?.codePrettier||{}),m=["npx prettier"];d===!1&&m.push("--no-semi"),l===!0&&m.push("--single-quote"),u&&m.push(`--trailing-comma ${u}`);let E=["'logic/**/*.ts'","'handler/**/*.ts'","'model/**/*.ts'","'types/**/*.d.ts'"];m.push("--write",...E);let n=m.join(" "),t=(0,Re.join)(c,o||"src");console.log("[INFO] execRunGen::",t),console.log("[INFO] cmd::",n),(0,Ee.spawnSync)(n,{cwd:t,stdio:"inherit",shell:!0}),S("[INFO] execRunGen","SUCCESS")}catch(c){S("execRunGen fial::","ERROR"),console.error(c)}},Oe=Fe;function Ve(e,r){S(`${r?`The [${r}] app has been `:""}Build DONE. [Build time:${Date.now()-e} ms]`,"SUCCESS")}function ke(e){S(e==="build"?"Build Fail.":"Serve process has exited.","ERROR")}function Ke(){let e=process.cwd(),r=te(process.argv,"--config"),o=(0,q.join)(e,"nserve.config.ts"),c=(0,q.join)(e,"nserve.config.js"),i=r?(0,q.join)(e,r):(0,re.existsSync)(o)?o:c;if(!(0,re.existsSync)(i))throw Error(`The configuration file does not exist. [${i}]`);return i}function _e(e){try{let o=Ke(),c=process.cwd(),i=e,d=te(process.argv,"--mode"),l=JSON.stringify(process.argv),u={AICBLOCK_NSERVE_RUN_CWD:c,AICBLOCK_NSERVE_RUN_CONFIG_PATH:o,AICBLOCK_NSERVE_RUN_MODE:i,AICBLOCK_NSERVE_ENV_MODE:d,AICBLOCK_NSERVE_RUN_ARGV:l};if(Object.keys(u).forEach(a=>{let s=u[a];s!==void 0&&(process.env[a]=s)}),e==="gen"){let{generateConfig:a,sourceDir:s}=F(o,process.cwd());Oe(a||{},c,s||"src");return}let m=Date.now();var r=void 0;let E=process.platform==="win32"?"node.cmd":"node",t=(0,Te.spawn)(E,["./lib/core/run.js","--cmd"],{cwd:(0,q.join)(__dirname,"../"),stdio:e==="build"?"inherit":"pipe",env:Object.assign({},process.env,u)});t.stdout?.on("data",a=>{r&&r.stop(),console.log(a.toString("utf-8"))}),t.stdout?.on("error",a=>{r&&r.stop(),console.log(a.toString())}),t.stderr?.on("data",a=>{r&&r.stop(),console.log(a.toString("utf-8"))}),t.on("exit",a=>{r&&r.stop(),a===0&&e==="build"&&Ve(m,d),a!==0&&ke(e)})}catch(o){S("execRun fial::","ERROR"),console.error(o)}}var We=_e;0&&(module.exports={execRun});
@@ -2,8 +2,24 @@ import type { Response } from 'express';
2
2
  export declare function ErrorResponse(res: Response, err: any, code?: number): void;
3
3
  export declare function SuccessResponse<T>(res: Response, data?: T, message?: string): void;
4
4
  export declare const LoadConfig: (config_path: string) => void;
5
+ export declare const CheckFieldRequired: (data: Record<string, any>, config: Record<string, {
6
+ required: boolean;
7
+ type: "string" | "number" | "array" | "object";
8
+ }>, msg_temp?: {
9
+ required?: string;
10
+ array?: string;
11
+ object?: string;
12
+ }) => void;
5
13
  declare const _default: {
6
14
  ErrorResponse: typeof ErrorResponse;
7
15
  SuccessResponse: typeof SuccessResponse;
16
+ CheckFieldRequired: (data: Record<string, any>, config: Record<string, {
17
+ required: boolean;
18
+ type: "string" | "number" | "array" | "object";
19
+ }>, msg_temp?: {
20
+ required?: string;
21
+ array?: string;
22
+ object?: string;
23
+ }) => void;
8
24
  };
9
25
  export default _default;
@@ -1 +1 @@
1
- "use strict";var d=Object.create;var i=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var A=(r,o)=>{for(var s in o)i(r,s,{get:o[s],enumerable:!0})},f=(r,o,s,e)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of x(o))!O.call(r,n)&&n!==s&&i(r,n,{get:()=>o[n],enumerable:!(e=h(o,n))||e.enumerable});return r};var T=(r,o,s)=>(s=r!=null?d(E(r)):{},f(o||!r||!r.__esModule?i(s,"default",{value:r,enumerable:!0}):s,r)),b=r=>f(i({},"__esModule",{value:!0}),r);var F={};A(F,{ErrorResponse:()=>y,LoadConfig:()=>_,SuccessResponse:()=>R,default:()=>w});module.exports=b(F);var t=require("fs"),m=T(require("yaml"));function l(r,o,s=200,e){let a=Object.assign({code:s,data:o,msg:e||"\u6210\u529F"});r.send(a)}function y(r,o,s=500){console.error("[ERROR] STACK_INFO",o);let e=o?.message||"\u670D\u52A1\u5F02\u5E38",n=/^(\[[\d]*\])/,c=e&&e.match(n)&&e.replace(/^(\[[\d]*\]\-)/,"")||e;l(r,null,s,c)}function R(r,o,s){l(r,o,200,s)}var S=r=>{try{if(!(0,t.existsSync)(r))throw Error(`The configuration file does not exist. [${r}]`);let o=(0,t.readFileSync)(r,"utf8");return m.default.parse(o)}catch(o){throw console.error(o),Error()}},_=r=>{try{if(console.info("[INFO] config path::",r),!(0,t.existsSync)(r))throw Error(`The configuration file does not exist. [${r}]`);let o=S(r);if(!o)return;let s=Array.isArray(o),e=n=>{Object.keys(n)?.forEach(c=>{let g=n[c];global[c]=Array.isArray(g)?g.reduce((p,u)=>Object.assign(p,u),{}):g})};s?o.forEach(e):e(o)}catch(o){throw console.error(o),Error("LOAD_CONFIG_PARAM_ERROR")}},w={ErrorResponse:y,SuccessResponse:R};0&&(module.exports={ErrorResponse,LoadConfig,SuccessResponse});
1
+ "use strict";var R=Object.create;var f=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var q=(e,r)=>{for(var t in r)f(e,t,{get:r[t],enumerable:!0})},y=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of E(r))!O.call(e,o)&&o!==t&&f(e,o,{get:()=>r[o],enumerable:!(s=T(r,o))||s.enumerable});return e};var w=(e,r,t)=>(t=e!=null?R(j(e)):{},y(r||!e||!e.__esModule?f(t,"default",{value:e,enumerable:!0}):t,e)),x=e=>y(f({},"__esModule",{value:!0}),e);var S={};q(S,{CheckFieldRequired:()=>b,ErrorResponse:()=>p,LoadConfig:()=>_,SuccessResponse:()=>h,default:()=>k});module.exports=x(S);var l=require("fs"),g=w(require("yaml"));function m(e,r,t=200,s){let i=Object.assign({code:t,data:r,msg:s||"\u6210\u529F"});e.send(i)}function p(e,r,t=500){console.error("[ERROR] STACK_INFO",r);let s=r?.message||"\u670D\u52A1\u5F02\u5E38",o=/^(\[[\d]*\])/,a=s&&s.match(o)&&s.replace(/^(\[[\d]*\]\-)/,"")||s;m(e,null,t,a)}function h(e,r,t){m(e,r,200,t)}var A=e=>{try{if(!(0,l.existsSync)(e))throw Error(`The configuration file does not exist. [${e}]`);let r=(0,l.readFileSync)(e,"utf8");return g.default.parse(r)}catch(r){throw console.error(r),Error()}},_=e=>{try{if(console.info("[INFO] config path::",e),!(0,l.existsSync)(e))throw Error(`The configuration file does not exist. [${e}]`);let r=A(e);if(!r)return;let t=Array.isArray(r),s=o=>{Object.keys(o)?.forEach(a=>{let n=o[a];global[a]=Array.isArray(n)?n.reduce((d,u)=>Object.assign(d,u),{}):n})};t?r.forEach(s):s(r)}catch(r){throw console.error(r),Error("LOAD_CONFIG_PARAM_ERROR")}},b=(e,r,t)=>{if(e==null)throw Error("The data is required.");if(r==null)throw Error("The config is required.");let o={...{required:"The field [${key}] is required.",array:"The field [${key}] must be an array with at least one element.",object:"The field [${key}] must be an object."},...t},i=(n,d)=>n.replace(/\$\{key\}/g,d);Object.keys(r).forEach(n=>{if(!r[n].required)return;let u=r[n].type,c=e[n];if(c==null)throw Error(i(o.required,n));if(u==="array"&&(!Array.isArray(c)||c.length===0))throw Error(i(o.array,n));if(u==="object"&&(Object.prototype.toString.call(c)!=="[object Object]"||Object.keys(c).length===0))throw Error(i(o.object,n))})},k={ErrorResponse:p,SuccessResponse:h,CheckFieldRequired:b};0&&(module.exports={CheckFieldRequired,ErrorResponse,LoadConfig,SuccessResponse});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aicblock/nserve",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "🛠️ Description NodeJS Server-side development CLI",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -54,4 +54,4 @@
54
54
  "prettier": "3.7.4",
55
55
  "yaml": "2.8.2"
56
56
  }
57
- }
57
+ }