@aicblock/nserve 1.0.3 → 1.0.5

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 x=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.3");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 x=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.5");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.exitCode=1});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/core/run.js CHANGED
@@ -1 +1,3 @@
1
- "use strict";var J=Object.create;var j=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty;var W=(t,n,r,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of k(n))!U.call(t,e)&&e!==r&&j(t,e,{get:()=>n[e],enumerable:!(o=K(n,e))||o.enumerable});return t};var S=(t,n,r)=>(r=t!=null?J(G(t)):{},W(n||!t||!t.__esModule?j(r,"default",{value:t,enumerable:!0}):r,t));var T=require("esbuild");var A=require("esbuild"),s=require("fs"),b=require("path"),C=S(require("vm")),L=S(require("js-yaml"));function R(t,n="INFO"){let r=(c,i="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[i]}${c}\x1B[0m`,e={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[n],l=r(n,e);console.log(`[${l}] - ${t}`)}function P(t){let n=(r,o)=>{try{let e=(0,s.readdirSync)(r);if(e.length===0){(0,s.rmdirSync)(r),o&&o();return}let l=e.length,c=0,i=f=>{f===l&&((0,s.rmdirSync)(r),o&&o())};e.forEach(f=>{let a=(0,b.join)(r,f);if((0,s.statSync)(a).isDirectory()){n(a,()=>{i(c+=1)});return}(0,s.unlinkSync)(a),i(c+=1)})}catch(e){o&&o(e)}};return new Promise((r,o)=>{if(!t||!(0,s.existsSync)(t)){r();return}if(!(0,s.statSync)(t).isDirectory()){o("The directory path to be deleted is not a directory path");return}n(t,e=>{e?o(e):r()})})}function w(t,n){try{let r=(0,s.readFileSync)(t,"utf-8"),o=(0,A.transformSync)(r,{format:"cjs",loader:"ts",platform:"node",target:"node18"}),e={module:{paths:[(0,b.join)(n,"node_modules")],exports:{default:void 0}},require,__dirname:n,global,__filename,process},l=new C.default.Script(o.code);return C.default.createContext(e),l.runInContext(e),e.module.exports.default||e.module.exports}catch(r){console.error(r),process.exit(0)}}async function v(t,n,r={}){let{createDir:o=!0,indent:e=2,noRefs:l=!0,lineWidth:c=80,skipInvalid:i=!1,quotingType:f='"',forceQuotes:a=!1,encoding:m="utf8",...h}=r;try{let p;if(typeof t=="string")try{p=JSON.parse(t)}catch(y){throw new Error(`\u65E0\u6548\u7684 JSON \u5B57\u7B26\u4E32: ${y instanceof Error?y.message:String(y)}`)}else if(typeof t=="object"&&t!==null)p=t;else throw new Error("jsonData \u5FC5\u987B\u662F\u6709\u6548\u7684 JSON \u5B57\u7B26\u4E32\u3001\u5BF9\u8C61\u6216\u6570\u7EC4");let u=L.default.dump(p,{indent:e,noRefs:l,skipInvalid:i,lineWidth:c,quotingType:f,forceQuotes:a,...h,styles:{"!!null":"canonical",...h.styles}});if(o){let y=(0,b.dirname)(n);try{(0,s.accessSync)(y)}catch{(0,s.mkdirSync)(y,{recursive:!0}),console.log(`\u5DF2\u521B\u5EFA\u76EE\u5F55: ${y}`)}}(0,s.writeFileSync)(n,u,{encoding:m});let O=Buffer.byteLength(u,m);return console.log(`YAML \u6587\u4EF6\u5DF2\u6210\u529F\u751F\u6210: ${n}`),console.log(`\u6587\u4EF6\u5927\u5C0F: ${O} \u5B57\u8282`),{content:u,filePath:n,fileSize:O}}catch(p){throw console.error("\u8F6C\u6362\u6216\u4FDD\u5B58\u5931\u8D25:",p instanceof Error?p.message:String(p)),p}}var g=require("path"),N=S(require("os")),d=require("fs"),E=require("child_process");function I(t,n){let r=Date.now(),o=()=>`${Date.now()-r}ms`;try{(0,T.build)(t).then(({errors:e})=>{if(e.length===0){n&&n(),R(`Compile successfully.[${o()}]`,"SUCCESS");return}R(JSON.stringify(e),"ERROR")})}catch(e){R(JSON.stringify(e),"ERROR")}}var B=t=>{let n=t.compilerOptions?.paths||{},r=Object.keys(n);return{name:"alias",setup(o){o.onLoad({filter:/\.ts$/},async e=>{let l=await d.promises.readFile(e.path,"utf8"),c="ts";if(r.length===0)return{contents:l,loader:c};let i=l;return r.forEach(a=>{let m=a.replace(/\*$/,""),h=new RegExp(`from[\\s]{1,}[\\'\\"]${m}((?!\\n[\\'\\"]).)*[\\'\\"]`,"g"),p=(n[a]&&n[a][0]).replace(/\*$/,"");i.replace(h,u=>`from '${u.replace("from","").replace(/['"]/g,"")}'`)}),{contents:i,loader:c}})}}};function Y(t){return new Promise(n=>{let r;N.default.type().startsWith("Windows")?r=`tasklist /FI "PID eq ${t}" /NH`:r=`kill -0 ${t} 2>/dev/null`,(0,E.exec)(r,(o,e,l)=>{o?n(!1):N.default.type().startsWith("Windows")?n(e.includes(t.toString())):n(l==="")})})}var M=(t,n,r,o)=>{let e=()=>{let c=process.platform==="win32"?"node.cmd":"node";return(0,E.spawnSync)(c,[t],{stdio:"inherit",cwd:r}).pid};(0,d.watch)(n,{recursive:!0},(()=>{let c,i=e();return()=>{c&&clearTimeout(c),c=setTimeout(()=>{Y(i).then(f=>{try{f&&process.kill(i),o&&o().then(()=>i=e())}catch(a){R("Fial","ERROR"),console.log(a)}})},500)}})())},q=()=>{try{let t=process.env.AICBLOCK_NSERVE_RUN_CWD,n=process.env.AICBLOCK_NSERVE_RUN_CONFIG_PATH,r=process.env.AICBLOCK_NSERVE_RUN_MODE,o=w(n,process.env.AICBLOCK_NSERVE_RUN_CWD),{entry:e,testing:l,outputDir:c,sourceDir:i,plugins:f,external:a,yamlConfig:m}=o;if(!i||!(0,d.existsSync)((0,g.join)(t,i)))throw Error("[ERROR] The compilation directory is not configured or does not exist");let h=(0,g.join)(t,i,e);if((!e||typeof e!="string"||!(0,d.existsSync)(h))&&r==="serve")throw Error(`[ERROR] The run file does not exist. Please check the config:[${h}]`);let p=!l,u=(0,g.join)(t,c||"dist");r==="build"&&(0,d.existsSync)(u)&&P(u);let O=(0,g.join)(t,"tsconfig.json"),y=(0,d.readFileSync)(O,"utf-8"),$=JSON.parse(y),_={entryPoints:[h],minify:p,outdir:u,plugins:[B($),...f||[]],bundle:!0,platform:"node",format:"cjs",external:a},F=()=>new Promise(x=>{I(_,()=>{m&&v(m,(0,g.join)(u,"config.yaml")),x(void 0)})});I(_,()=>{if(m&&v(m,(0,g.join)(u,"config.yaml")),r==="build"||!e)return;let x=(0,g.basename)(e),D=x.substring(0,x.length-3)+".js",V=(0,g.join)(u,D);M(V,(0,g.join)(t,i||"src"),u,F)})}catch(t){console.error("[ERROR_STACK]",t);let n=t?.message||"[FN::esbuild::exec]";R(n,"ERROR"),process.exit(0)}};q();
1
+ "use strict";var X=Object.create;var _=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ne=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var se=(e,t)=>{for(var n in t)_(e,n,{get:t[n],enumerable:!0})},V=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of te(t))!re.call(e,r)&&r!==n&&_(e,r,{get:()=>t[r],enumerable:!(o=ee(t,r))||o.enumerable});return e};var J=(e,t,n)=>(n=e!=null?X(ne(e)):{},V(t||!e||!e.__esModule?_(n,"default",{value:e,enumerable:!0}):n,e)),ie=e=>V(_({},"__esModule",{value:!0}),e);var M={};se(M,{GetVmRunScript:()=>F,Spin:()=>$,camelToPascal:()=>fe,clog:()=>O,getAppEnvList:()=>ue,getArgvsParamsValue:()=>U,isInvalid:()=>B,jsonToYamlFile:()=>P,merge:()=>ce,parseEnv:()=>Y,pascalToSnake:()=>pe,rmDir:()=>A});function O(e,t="INFO"){let n=(s,a="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[a]}${s}\x1B[0m`,r={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[t],i=n(t,r);console.log(`[${i}] - ${e}`)}function A(e){let t=(n,o)=>{try{let r=(0,d.readdirSync)(n);if(r.length===0){(0,d.rmdirSync)(n),o&&o();return}let i=r.length,s=0,a=u=>{u===i&&((0,d.rmdirSync)(n),o&&o())};r.forEach(u=>{let c=(0,R.join)(n,u);if((0,d.lstatSync)(c).isDirectory()){t(c,()=>{a(s+=1)});return}(0,d.unlinkSync)(c),a(s+=1)})}catch(r){o&&o(r)}};return new Promise((n,o)=>{if(!e||!(0,d.existsSync)(e)){n();return}if(!(0,d.lstatSync)(e).isDirectory()){o("The directory path to be deleted is not a directory path");return}t(e,r=>{r?o(r):n()})})}function ce(e,t){let n=(r,i)=>{if(Object.prototype.toString.call(r)!=="[object Object]"||Object.prototype.toString.call(i)!=="[object Object]")return console.warn("[STACK_LOG] AICBLOCK_UTIL: \u53C2\u6570\u9519\u8BEF"),{};let s={},a=Object.keys(r);return Object.keys(i).filter(c=>!a.includes(c)).forEach(c=>Object.assign(s,{[c]:i[c]})),Object.keys(r).forEach(c=>{let l=i[c],p=r[c];if(l!==void 0&&Object.prototype.toString.call(l)==="[object Object]"&&Object.prototype.toString.call(p)==="[object Object]"){Object.assign(s,{[c]:n(p,l)});return}Object.assign(s,{[c]:l!==void 0?l:p})}),s};return(Array.isArray(t)?t:[t]).reduce((r,i)=>n(r,i),e)}function U(e,t){let n=e.findIndex(r=>r===t);if(n<0||e.length-1===n)return;let o=e[n+1];if(o.indexOf("--")!==0)return o}function B(e){return e===void 0||e===""||e===null}function Y(e){let t={};return e.split(/(\r\n)|[\r\n]/).filter(o=>!B(o)).forEach(o=>{let r=o.split("="),i=(r[0]||"").trim(),s=(r[1]||"").trim();i.split("")[0]!=="#"&&i!==""&&(t[i]=s)}),t}function le(e){let t=Number(e);if(!isNaN(t)&&e.trim()!=="")return t;let n=e.toLowerCase();if(n==="true")return!0;if(n==="false")return!1;if(n==="null")return null;if(n!=="undefined")return e}function ae(e,t="."){let n=e.trim().split(`
2
+ `),o={};return n.filter(r=>r.indexOf("YAML_CONFIG"+t)===0).forEach(r=>{if(!r.trim())return;let[i,s]=r.split("=");if(!i||s===void 0)return;let a=i.trim(),u=s.trim(),c=a.split(t),l=o;for(let p=0;p<c.length;p++){let g=c[p];p===c.length-1?l[g]=le(u):((!l[g]||typeof l[g]!="object")&&(l[g]={}),l=l[g])}}),o}function ue(e,t){let n={},o={},r={},i=(0,R.join)(e,".env"),s=process.env.AICBLOCK_NSERVE_RUN_ARGV||"[]",a=U(JSON.parse(s),"--mode"),u=a!==void 0&&a||(t==="build"?"production":"development"),c=(0,R.join)(e,`.env.${u}`),l={},p=[i,c],g=(0,R.join)(e,".env.local");(0,d.existsSync)(g)&&p.push(g);let f=(0,R.join)(e,`.env.${u}.local`);(0,d.existsSync)(f)&&p.push(f);let m=[],h=b=>{if(!(0,d.existsSync)(b))return;let E=(0,d.readFileSync)(b,"utf-8"),w=Y(E);m.push(E),Object.assign(l,w)};p.forEach(h);let I=["YAML_CONFIG."];return Object.keys(l).forEach(b=>{if(I.some(N=>b.indexOf(N)===0))return;let E=l[b];if(b.indexOf("AICBLOCK_NSERVE_APP_")===0){n[b]=E;return}let w=t==="serve"?b.replace(/^(APPTEST_)/,""):b;o[w]=E}),m.join("").indexOf("YAML_CONFIG.")>=0&&Object.assign(r,ae(m.join(`
3
+ `))),{system:n,app:o,yamlConfig:r}}function F(e,t){try{let n=(0,R.resolve)(e),o=(0,K.buildSync)({entryPoints:[n],bundle:!0,packages:"external",write:!1,format:"cjs",platform:"node",target:"node18"}),r={module:{exports:{default:void 0}},require:(0,W.createRequire)(n),__dirname:(0,R.dirname)(n),global,__filename:n,process},i=new L.default.Script(o.outputFiles[0].text,{filename:n});return L.default.createContext(r),i.runInContext(r),r.module.exports.default||r.module.exports}catch(n){throw n}}async function P(e,t,n={}){let{createDir:o=!0,indent:r=2,noRefs:i=!0,lineWidth:s=80,skipInvalid:a=!1,quotingType:u='"',forceQuotes:c=!1,encoding:l="utf8",...p}=n;try{let g;if(typeof e=="string")try{g=JSON.parse(e)}catch(h){throw new Error(`\u65E0\u6548\u7684 JSON \u5B57\u7B26\u4E32: ${h instanceof Error?h.message:String(h)}`)}else if(typeof e=="object"&&e!==null)g=e;else throw new Error("jsonData \u5FC5\u987B\u662F\u6709\u6548\u7684 JSON \u5B57\u7B26\u4E32\u3001\u5BF9\u8C61\u6216\u6570\u7EC4");let f=G.default.dump(g,{indent:r,noRefs:i,skipInvalid:a,lineWidth:s,quotingType:u,forceQuotes:c,...p,styles:{"!!null":"canonical",...p.styles}});if(o){let h=(0,R.dirname)(t);try{(0,d.accessSync)(h)}catch{(0,d.mkdirSync)(h,{recursive:!0}),console.log(`\u5DF2\u521B\u5EFA\u76EE\u5F55: ${h}`)}}(0,d.writeFileSync)(t,f,{encoding:l});let m=Buffer.byteLength(f,l);return console.log(`YAML \u6587\u4EF6\u5DF2\u6210\u529F\u751F\u6210: ${t}`),console.log(`\u6587\u4EF6\u5927\u5C0F: ${m} \u5B57\u8282`),{content:f,filePath:t,fileSize:m}}catch(g){throw console.error("\u8F6C\u6362\u6216\u4FDD\u5B58\u5931\u8D25:",g instanceof Error?g.message:String(g)),g}}function fe(e){return!e||typeof e!="string"?e:e.split(/[\-_]/g).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("")}function pe(e,t="_"){return!e||typeof e!="string"?e:e.replace(/([A-Z])([A-Z])(?=[a-z])/g,`$1${t}$2`).replace(/([a-z])([A-Z])/g,`$1${t}$2`).toLowerCase()}var K,d,R,W,L,G,$,D=oe(()=>{"use strict";K=require("esbuild"),d=require("fs"),R=require("path"),W=require("module"),L=J(require("vm")),G=J(require("js-yaml"));$=class e{constructor(t=""){this.pos=0;this.spinner="|/-";if(!(this instanceof e))return new e(t);this.pos=0,this.placeholder=t||""}start(){return this.loop=setInterval(()=>{var t=`\r${this.spinner[this.pos||0]} ${this.placeholder}`;process.stdout.write(t),this.pos=++this.pos%this.spinner.length},100),this}clearLine(){!process||!process.stdout||typeof process.stdout.clearLine!="function"||process.stdout.clearLine(0)}stop(){return this.clearLine(),process.stdout.write("\r"),this.loop&&clearInterval(this.loop),this}update(t){return this.clearLine(),this.placeholder=t+" ",this}}});var j=require("esbuild");D();var x=require("path");var S=require("fs"),k=require("child_process");function q(e,t=3e3){return e.exitCode!==null||e.signalCode!==null?Promise.resolve():new Promise(n=>{let o,r=()=>{clearTimeout(o),e.removeListener("exit",r),n()};e.once("exit",r),o=setTimeout(()=>{e.kill("SIGKILL"),r()},t),e.kill("SIGTERM")||r()})}var C=require("fs"),y=require("path");function v(e,t){let n=(0,y.relative)(e,t);return n!==""&&n!==".."&&!n.startsWith(`..${y.sep}`)&&!(0,y.isAbsolute)(n)}function z(e){return(0,C.existsSync)(e)?(0,C.realpathSync)(e):(0,y.join)(z((0,y.dirname)(e)),e.slice((0,y.dirname)(e).length+1))}function Z(e,t,n){let o=(0,C.realpathSync)(e),r=(0,y.resolve)(o,t),i=(0,y.resolve)(o,n),s=z(r),a=[i,(0,y.join)(o,".git"),(0,y.join)(o,"node_modules"),(0,y.join)(o,"nserve-config")];if(!v(o,r)||!v(o,s)||a.some(u=>r===u||v(r,u)||v(u,r)||s===u||v(s,u)||v(u,s))||(0,C.existsSync)(r)&&(0,C.lstatSync)(r).isSymbolicLink())throw new Error(`Unsafe output directory: ${r}`);return r}async function de(e,t){let n=Date.now();await(0,j.build)(e),t&&await t(),O(`Compile successfully.[${Date.now()-n}ms]`,"SUCCESS")}async function ge(e){return await(0,j.context)(e)}var me=e=>{let t=e.compilerOptions?.paths||{},n=Object.keys(t);return{name:"alias",setup(o){o.onLoad({filter:/\.ts$/},async r=>{let i=await S.promises.readFile(r.path,"utf8"),s="ts";if(n.length===0)return{contents:i,loader:s};let a=i;return n.forEach(c=>{let l=c.replace(/\*$/,""),p=new RegExp(`from[\\s]{1,}[\\'\\"]${l}((?!\\n[\\'\\"]).)*[\\'\\"]`,"g"),g=(t[c]&&t[c][0]).replace(/\*$/,"");a.replace(p,f=>`from '${f.replace("from","").replace(/['"]/g,"")}'`)}),{contents:a,loader:s}})}}};var ye=(e,t,n,o,r,i)=>{let s=null,a=!1,u=!1,c=()=>{let f=process.platform==="win32"?"node.cmd":"node";return s=(0,k.spawn)(f,[e],{stdio:"inherit",cwd:n}),s.on("exit",m=>{m!==0&&!a&&O(`Process exited with code ${m}`,"WARNING")}),s.pid},l=async()=>{if(a){u=!0;return}a=!0,O("Rebuilding...","INFO");try{let f=await o.rebuild();if(f.errors.length===0){if(r&&i){let{jsonToYamlFile:m}=(D(),ie(M));await m(r,(0,x.join)(i,"config.yaml"))}O("Rebuild complete","SUCCESS"),s&&await q(s),c()}else O(`Rebuild failed: ${JSON.stringify(f.errors)}`,"ERROR")}catch(f){O(`Rebuild error: ${f}`,"ERROR")}a=!1,u&&(u=!1,l())},p,g=()=>{p&&clearTimeout(p),p=setTimeout(l,300)};c(),(0,S.watch)(t,{recursive:!0},(f,m)=>{m&&(m.endsWith(".ts")||m.endsWith(".js"))&&g()})},he=async()=>{try{let e=process.env.AICBLOCK_NSERVE_RUN_CWD,t=process.env.AICBLOCK_NSERVE_RUN_CONFIG_PATH,n=process.env.AICBLOCK_NSERVE_RUN_MODE,o=F(t,process.env.AICBLOCK_NSERVE_RUN_CWD),{entry:r,testing:i,outputDir:s,sourceDir:a,plugins:u,external:c,yamlConfig:l}=o;if(!a||!(0,S.existsSync)((0,x.join)(e,a)))throw Error("[ERROR] The compilation directory is not configured or does not exist");let p=(0,x.join)(e,a,r);if((!r||typeof r!="string"||!(0,S.existsSync)(p))&&n==="serve")throw Error(`[ERROR] The run file does not exist. Please check the config:[${p}]`);let g=!i,f=Z(e,s||"dist",a);n==="build"&&(0,S.existsSync)(f)&&await A(f);let m=(0,x.join)(e,"tsconfig.json"),h=(0,S.readFileSync)(m,"utf-8"),I=JSON.parse(h),T={entryPoints:[p],minify:g,outdir:f,plugins:[me(I),...u||[]],bundle:!0,platform:"node",format:"cjs",external:c};if(n==="build"){await de(T,async()=>{l&&await P(l,(0,x.join)(f,"config.yaml"))});return}if(!r)return;let b=Date.now();O("Creating build context...","INFO");let E=await ge(T),w=await E.rebuild();if(w.errors.length===0){l&&await P(l,(0,x.join)(f,"config.yaml")),O(`Initial build complete. [${Date.now()-b}ms]`,"SUCCESS");let N=(0,x.basename)(r),H=N.substring(0,N.length-3)+".js",Q=(0,x.join)(f,H);ye(Q,(0,x.join)(e,a||"src"),f,E,l,f)}else throw new Error(`Initial build failed: ${JSON.stringify(w.errors)}`)}catch(e){console.error("[ERROR_STACK]",e);let t=e?.message||"[FN::esbuild::exec]";O(t,"ERROR"),process.exitCode=1}};he();
package/lib/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export declare const nbuild: {
3
3
  transformSync: typeof transformSync;
4
4
  build: typeof build;
5
5
  };
6
- export declare function DefineNserveConfig(options?: Config): Config | undefined;
6
+ export declare function DefineNserveConfig(options?: Config): Config;
7
7
  export declare const DefineGenRouter: (param: DefineGenRouterConfig) => GenRouterConfig;
8
8
  declare const _default: {
9
9
  DefineNserveConfig: typeof DefineNserveConfig;
@@ -147,9 +147,12 @@ type RouterMethod =
147
147
  // 数据类型属性定义
148
148
  type PropertyType = 'string' | 'number' | 'boolean' | 'object' | 'array'
149
149
 
150
+ // 数据来源类型
151
+ type DataSourceType = 'body' | 'query' | 'params'
152
+
150
153
  interface DataTypeProperty {
151
154
  // 数据类型
152
- type?: PropertyType | { type: 'custom'; name: string }
155
+ type?: PropertyType | { type: 'custom'; name: string } | { type: 'enum'; values: readonly (string | number)[] }
153
156
  // 数据类型名称
154
157
  name?: string
155
158
  // 数据类型描述
@@ -158,6 +161,8 @@ interface DataTypeProperty {
158
161
  properties?: Record<string, DataTypeProperty>
159
162
  // 是否必填
160
163
  required?: boolean
164
+ // 数据来源类型 (body/query/params),默认根据路由method判断
165
+ source?: DataSourceType
161
166
  }
162
167
 
163
168
  // 泛型参数定义
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 $=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)h(e,r,{get:t[r],enumerable:!0})},E=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of $(t))!D.call(e,n)&&n!==r&&h(e,n,{get:()=>t[n],enumerable:!(s=P(t,n))||s.enumerable});return e};var F=(e,t,r)=>(r=e!=null?T(w(e)):{},E(t||!e||!e.__esModule?h(r,"default",{value:e,enumerable:!0}):r,e)),V=e=>E(h({},"__esModule",{value:!0}),e);var Z={};G(Z,{DefineGenRouter:()=>A,DefineNserveConfig:()=>j,default:()=>q,nbuild:()=>z});module.exports=V(Z);var C=require("esbuild");var B=require("esbuild"),f=require("fs"),m=require("path");var K=F(require("js-yaml"));function S(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 k(e){return e===void 0||e===""||e===null}function J(e){let t={};return e.split(/(\r\n)|[\r\n]/).filter(s=>!k(s)).forEach(s=>{let n=s.split("="),o=(n[0]||"").trim(),c=(n[1]||"").trim();o.split("")[0]!=="#"&&o!==""&&(t[o]=c)}),t}function M(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]=M(a):((!i[d]||typeof i[d]!="object")&&(i[d]={}),i=i[d])}}),s}function v(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 b=(0,m.join)(e,`.env.${a}.local`);(0,f.existsSync)(b)&&u.push(b);let R=[],L=g=>{if(!(0,f.existsSync)(g))return;let y=(0,f.readFileSync)(g,"utf-8"),x=J(y);R.push(y),Object.assign(i,x)};u.forEach(L);let _=["YAML_CONFIG."];return Object.keys(i).forEach(g=>{if(_.some(I=>g.indexOf(I)===0))return;let y=i[g];if(g.indexOf("AICBLOCK_NSERVE_APP_")===0){r[g]=y;return}let x=t==="serve"?g.replace(/^(APPTEST_)/,""):g;s[x]=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 z={transformSync:C.transformSync,build:C.build};function j(e){try{let t=process.env.AICBLOCK_NSERVE_RUN_CWD,r=process.env.AICBLOCK_NSERVE_RUN_MODE,s={},n=v(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){S("defineNserveConfig fial::","ERROR"),console.error(t)}}var A=N,q={DefineNserveConfig:j,DefineGenRouter:A};0&&(module.exports={DefineGenRouter,DefineNserveConfig,nbuild});
1
+ "use strict";var P=Object.create;var h=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var F=(e,t)=>{for(var r in t)h(e,r,{get:t[r],enumerable:!0})},E=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of w(t))!D.call(e,n)&&n!==r&&h(e,n,{get:()=>t[n],enumerable:!(o=T(t,n))||o.enumerable});return e};var G=(e,t,r)=>(r=e!=null?P($(e)):{},E(t||!e||!e.__esModule?h(r,"default",{value:e,enumerable:!0}):r,e)),V=e=>E(h({},"__esModule",{value:!0}),e);var Z={};F(Z,{DefineGenRouter:()=>A,DefineNserveConfig:()=>N,default:()=>z,nbuild:()=>q});module.exports=V(Z);var b=require("esbuild");var B=require("esbuild"),f=require("fs"),m=require("path");var K=G(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],s=r(t,n);console.log(`[${s}] - ${e}`)}function O(e,t){let r=(n,s)=>{if(Object.prototype.toString.call(n)!=="[object Object]"||Object.prototype.toString.call(s)!=="[object Object]")return console.warn("[STACK_LOG] AICBLOCK_UTIL: \u53C2\u6570\u9519\u8BEF"),{};let c={},u=Object.keys(n);return Object.keys(s).filter(l=>!u.includes(l)).forEach(l=>Object.assign(c,{[l]:s[l]})),Object.keys(n).forEach(l=>{let i=s[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,s)=>r(n,s),e)}function Y(e,t){let r=e.findIndex(n=>n===t);if(r<0||e.length-1===r)return;let o=e[r+1];if(o.indexOf("--")!==0)return o}function k(e){return e===void 0||e===""||e===null}function J(e){let t={};return e.split(/(\r\n)|[\r\n]/).filter(o=>!k(o)).forEach(o=>{let n=o.split("="),s=(n[0]||"").trim(),c=(n[1]||"").trim();s.split("")[0]!=="#"&&s!==""&&(t[s]=c)}),t}function M(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
+ `),o={};return r.filter(n=>n.indexOf("YAML_CONFIG"+t)===0).forEach(n=>{if(!n.trim())return;let[s,c]=n.split("=");if(!s||c===void 0)return;let u=s.trim(),a=c.trim(),l=u.split(t),i=o;for(let p=0;p<l.length;p++){let d=l[p];p===l.length-1?i[d]=M(a):((!i[d]||typeof i[d]!="object")&&(i[d]={}),i=i[d])}}),o}function S(e,t){let r={},o={},n={},s=(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=[s,l],d=(0,m.join)(e,".env.local");(0,f.existsSync)(d)&&p.push(d);let R=(0,m.join)(e,`.env.${a}.local`);(0,f.existsSync)(R)&&p.push(R);let C=[],L=g=>{if(!(0,f.existsSync)(g))return;let y=(0,f.readFileSync)(g,"utf-8"),x=J(y);C.push(y),Object.assign(i,x)};p.forEach(L);let j=["YAML_CONFIG."];return Object.keys(i).forEach(g=>{if(j.some(I=>g.indexOf(I)===0))return;let y=i[g];if(g.indexOf("AICBLOCK_NSERVE_APP_")===0){r[g]=y;return}let x=t==="serve"?g.replace(/^(APPTEST_)/,""):g;o[x]=y}),C.join("").indexOf("YAML_CONFIG.")>=0&&Object.assign(n,U(C.join(`
3
+ `))),{system:r,app:o,yamlConfig:n}}var W=e=>{let{servicePath:t,serviceHandler:r,routers:o,middleware:n}=e,s=o.map(c=>{let{name:u}=c;return Object.assign(c,{handler:u})});return{prefix:t,service:s,handler:r,middleware:n}},_=W;var q={transformSync:b.transformSync,build:b.build};function N(e){try{let t=process.env.AICBLOCK_NSERVE_RUN_CWD,r=process.env.AICBLOCK_NSERVE_RUN_MODE,o=S(t,r),{app:n,system:s}=o,c=s.AICBLOCK_NSERVE_APP_ENTRY?{entry:s.AICBLOCK_NSERVE_APP_ENTRY}:{},u=l=>{let i=n&&n[l];i&&(process.env[l]=i)};Object.keys(n||{}).forEach(u);let a=O({outputDir:"dist",entry:"app.ts",sourceDir:"src"},{...e,...c,envs:{system:s}});return Object.keys(o.yamlConfig||{}).length>0&&(a=O(a||{},{yamlConfig:o.yamlConfig.YAML_CONFIG})),a.lifecycleBefore&&typeof a.lifecycleBefore=="function"&&(a=O(a||{},a.lifecycleBefore(a)||{})),a}catch(t){throw v("defineNserveConfig fial::","ERROR"),t}}var A=_,z={DefineNserveConfig:N,DefineGenRouter:A};0&&(module.exports={DefineGenRouter,DefineNserveConfig,nbuild});
package/lib/runtime.js CHANGED
@@ -1,21 +1,21 @@
1
- "use strict";var xe=Object.create;var K=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var we=(e,r)=>{for(var o in r)K(e,o,{get:r[o],enumerable:!0})},pe=(e,r,o,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Ae(r))!je.call(e,i)&&i!==o&&K(e,i,{get:()=>r[i],enumerable:!(c=Ce(r,i))||c.enumerable});return e};var fe=(e,r,o)=>(o=e!=null?xe(Le(e)):{},pe(r||!e||!e.__esModule?K(o,"default",{value:e,enumerable:!0}):o,e)),De=e=>pe(K({},"__esModule",{value:!0}),e);var Je={};we(Je,{default:()=>We,execRun:()=>_e});module.exports=De(Je);var B=require("path");var de=require("esbuild"),N=require("fs"),te=require("path"),ee=fe(require("vm")),Ue=fe(require("js-yaml"));function x(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 ne(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 W(e,r){try{let o=(0,N.readFileSync)(e,"utf-8"),c=(0,de.transformSync)(o,{format:"cjs",loader:"ts",platform:"node",target:"node18"}),i={module:{paths:[(0,te.join)(r,"node_modules")],exports:{default:void 0}},require,__dirname:r,global,__filename,process},d=new ee.default.Script(c.code);return ee.default.createContext(i),d.runInContext(i),i.module.exports.default||i.module.exports}catch(o){console.error(o),process.exit(0)}}function D(e){return!e||typeof e!="string"?e:e.split(/[\-_]/g).map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join("")}function me(e,r="_"){return!e||typeof e!="string"?e:e.replace(/([A-Z])([A-Z])(?=[a-z])/g,`$1${r}$2`).replace(/([a-z])([A-Z])/g,`$1${r}$2`).toLowerCase()}var oe=require("fs"),Te=require("child_process");var g=require("fs"),O=require("path");var Me=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),T=y.description?` // ${y.description}`:"",C=` ${p}${y.required===!1?"?":""}: ${h.type};`;s.push(T?`${T}
2
- ${C}`:C)}),s.length===0?`interface ${n} {}`:`interface ${n} {
1
+ "use strict";var Ne=Object.create;var W=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var Ce=Object.getPrototypeOf,Le=Object.prototype.hasOwnProperty;var je=(t,r)=>{for(var o in r)W(t,o,{get:r[o],enumerable:!0})},pe=(t,r,o,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of we(r))!Le.call(t,i)&&i!==o&&W(t,i,{get:()=>r[i],enumerable:!(c=Ae(r,i))||c.enumerable});return t};var te=(t,r,o)=>(o=t!=null?Ne(Ce(t)):{},pe(r||!t||!t.__esModule?W(o,"default",{value:t,enumerable:!0}):o,t)),De=t=>pe(W({},"__esModule",{value:!0}),t);var We={};je(We,{default:()=>Je,execRun:()=>Re});module.exports=De(We);var Y=require("path");var fe=require("esbuild");var F=require("path"),de=require("module"),ne=te(require("vm")),Ue=te(require("js-yaml"));function N(t,r="INFO"){let o=(u,l="green")=>`\x1B[${{green:"32m",red:"31m",blue:"34m",orange:"30m"}[l]}${u}\x1B[0m`,i={INFO:"blue",WARNING:"orange",ERROR:"red",SUCCESS:"green"}[r],y=o(r,i);console.log(`[${y}] - ${t}`)}function re(t,r){let o=t.findIndex(i=>i===r);if(o<0||t.length-1===o)return;let c=t[o+1];if(c.indexOf("--")!==0)return c}function Q(t,r){try{let o=(0,F.resolve)(t),c=(0,fe.buildSync)({entryPoints:[o],bundle:!0,packages:"external",write:!1,format:"cjs",platform:"node",target:"node18"}),i={module:{exports:{default:void 0}},require:(0,de.createRequire)(o),__dirname:(0,F.dirname)(o),global,__filename:o,process},y=new ne.default.Script(c.outputFiles[0].text,{filename:o});return ne.default.createContext(i),y.runInContext(i),i.module.exports.default||i.module.exports}catch(o){throw o}}function U(t){return!t||typeof t!="string"?t:t.split(/[\-_]/g).map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join("")}function me(t,r="_"){return!t||typeof t!="string"?t:t.replace(/([A-Z])([A-Z])(?=[a-z])/g,`$1${r}$2`).replace(/([a-z])([A-Z])/g,`$1${r}$2`).toLowerCase()}var se=require("fs"),Te=require("child_process");var h=require("fs"),O=require("path");var ve=t=>{let r=[],o=new Map,c=new Map;function i(e){if(!c.has(e))return c.set(e,1),e;let n=c.get(e)+1;return c.set(e,n),`${e}${n}`}function y(e,n,T){let s=[];if(n.type==="array"){if(n.properties&&Object.keys(n.properties).length>0){let m=`${T||"Anonymous"}_${e}_Item`,p=n.name,d=p||m;if(p&&o.has(p)){let b=o.get(p),j=u(p,n.properties,n.description);if(b!==j)d=i(p);else return{type:`${p}[]`,generatedInterfaces:s}}let _=u(d,n.properties,n.description);return _&&(o.set(d,_),s.push(d)),{type:`${d}[]`,generatedInterfaces:s}}return{type:"any[]",generatedInterfaces:s}}if(n.type==="object"&&n.properties){let m=`${T||"Anonymous"}_${e}`,p=n.name,d=p||m;if(p&&o.has(p)){let b=o.get(p),j=u(p,n.properties,n.description);if(b!==j)d=i(p);else return{type:p,generatedInterfaces:s}}let _=u(d,n.properties,n.description);return _&&(o.set(d,_),s.push(d)),{type:d,generatedInterfaces:s}}return typeof n.type=="object"&&n.type.type==="enum"?{type:n.type.values.map(d=>typeof d=="string"?`'${d}'`:d).join(" | "),generatedInterfaces:s}:typeof n.type=="object"?{type:n.type.name,generatedInterfaces:s}:{type:n.type||"string",generatedInterfaces:s}}function u(e,n,T){let s=[];return T&&s.push(`// ${T}`),Object.entries(n).forEach(([m,p])=>{let d=y(m,p,e),_=p.description?` // ${p.description}`:"",b=` ${m}${p.required===!1?"?":""}: ${d.type};`;s.push(_?`${_}
2
+ ${b}`:b)}),s.length===0?`interface ${e} {}`:`interface ${e} {
3
3
  ${s.join(`
4
4
  `)}
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])=>{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}`:"",T=` ${s}${p.required===!1?"?":""}: ${y.type};`;a.push(h?`${h}
7
- ${T}`:T)}),`interface ${n.name}${t} {
8
- ${a.join(`
5
+ }`}function l(e){if(e.type!==void 0){let s=[];return e.description&&s.push(`// ${e.description}`),s.push(`type ${e.name} = ${e.type};`),s.join(`
6
+ `)}Object.entries(e.properties||{}).forEach(([s,m])=>{y(s,m,e.name)});let n="";if(e.genericity)if(typeof e.genericity=="string"){let s=a(e);s?n=` extends ${e.genericity}<${s}>`:n=` extends ${e.genericity}`}else{let{name:s,typeParams:m}=e.genericity;n=` extends ${s}<${m.join(", ")}>`}else e.extends&&(Array.isArray(e.extends)?n=` extends ${e.extends.join(", ")}`:n=` extends ${e.extends}`);if(e.genericity)return`interface ${e.name}${n} {}`;let T=[];return Object.entries(e.properties||{}).forEach(([s,m])=>{let p=y(s,m,e.name),d=m.description?` // ${m.description}`:"",_=` ${s}${m.required===!1?"?":""}: ${p.type};`;T.push(d?`${d}
7
+ ${_}`:_)}),`interface ${e.name}${n} {
8
+ ${T.join(`
9
9
  `)}
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(`
10
+ }`}function a(e){let n=e.properties?.list;if(n&&n.type==="array"&&n.name)return n.name;for(let[T,s]of Object.entries(e.properties||{}))if(s.type==="array"&&s.name)return s.name;return null}let f=l(t);return o.forEach(e=>{r.push(e)}),r.push(f),r.join(`
11
11
 
12
- `)},re=Me;var ve=(e,r,o,c="@")=>{let i=(0,O.join)(r,o,"handler"),d=(0,O.join)(r,o,"logic"),l=(0,O.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,O.join)(r,E),s=(0,O.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(A=>A.endsWith(".ts")||A.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=[],T=[];y.forEach(A=>{let F=W((0,O.join)(s,A),__dirname);if(!F)return;let b=F,M=A.replace(".ts",".handler"),se=D(A.replace(".ts",""))+"Server",Oe=(0,O.join)(i,[M,".ts"].join("")),be=[c,"handler",M].join("/");h.push(`import ${se} from '${be}'`),T.push(se);let Q=[],ie=[],z=(0,O.join)(d,b.handler),H=(0,O.join)(l,b.handler);!(0,g.existsSync)(z)&&(0,g.mkdirSync)(z,{recursive:!0}),!(0,g.existsSync)(H)&&(0,g.mkdirSync)(H,{recursive:!0});let Y={},v={};t&&Object.keys(t).forEach(f=>{let{libName:_,funcName:I}=t[f],L=I?`{${I} as ${f}}`:f;Y[f]=`import ${L} from '${_}'`}),b.service?.forEach(f=>{let _=["import type { Request, Response } from 'express'"],I=["ErrorResponse","SuccessResponse"],L=me(f.handler,"-"),P=[];if(f.responseDataType&&P.push(re(f.responseDataType)),f.requestDataType&&P.push(re(f.requestDataType)),P.length>0){let j=(0,O.join)(H,`${L}.types.d.ts`);(0,g.writeFileSync)(j,P.join(`
13
- `),"utf-8")}let V=f.method?.toLowerCase()||"get",k=D(f.handler),w=[];if(f.middleware&&m.middleware){let j=Array.isArray(f.middleware)?f.middleware:[f.middleware];if(!j.every(R=>{let S=typeof R=="string"?R:R.name;return!!Y[S]}))throw new Error(`[ERROR] \u8DEF\u7531\u914D\u7F6E\u4E2D\u4F7F\u7528\u4E86\u4E0D\u5B58\u5728\u7684\u4E2D\u95F4\u4EF6::${j}`);let q=[];j.forEach(R=>{let S=typeof R=="string"?R:R.name;v[S]=Y[S];let ue=(typeof R=="string"?void 0:Array.isArray(R.value)?R.value:[R.value])?.map(Z=>typeof Z=="string"?`'${Z}'`:Z),Ne=ue?`${S}(${ue.join(",")})`:S;q.push(Ne)}),w.push(...q)}let Ie=[c,"logic",b.handler,L].join("/");Q.push(`import ${k} from '${Ie}.logic'`),ie.push(`Router.${V}('${f.path}',${w.join(",")}${w.length>0?",":""}${k})`),f.docRemark&&_.concat(`// ${f.docRemark}`);let ce=[];if(f.requestDataType&&f.requestDataType.properties){let j=f.requestDataType,G=j.properties,q=Object.keys(G).filter(R=>G[R].required!==!1).reduce((R,S)=>{let le=typeof G[S].type=="string"?G[S].type:"object";return R[S]={required:!0,type:le},R},{});Object.keys(q).length>0&&(ce.push(`const data = ${f.method==="GET"?"req.query":"req.body"} as ${j.name}`,`CheckFieldRequired(data, ${JSON.stringify(q)})`),I.push("CheckFieldRequired"))}_.push(`import { ${I.join(",")} } from '@aicblock/nserve/lib/tools'`);let Se=_.concat(`
14
- ${f.docRemark?`// ${f.docRemark}`:""}
12
+ `)},oe=ve;var Me=(t,r,o,c="@")=>{let i=(0,O.join)(r,o,"handler"),y=(0,O.join)(r,o,"logic"),u=(0,O.join)(r,o,"types");!(0,h.existsSync)(i)&&(0,h.mkdirSync)(i,{recursive:!0}),!(0,h.existsSync)(y)&&(0,h.mkdirSync)(y,{recursive:!0}),!(0,h.existsSync)(u)&&(0,h.mkdirSync)(u,{recursive:!0});let a=Object.assign({},{genDir:"nserve-config",routerDir:"router",modelDir:"model"},t),{genDir:f,routerDir:e,middleware:n}=a,T=(0,O.join)(r,f),s=(0,O.join)(T,e||"");if(!(0,h.existsSync)(s)){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u4E0D\u5B58\u5728::",s);return}if(!(0,h.statSync)(s).isDirectory()){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u4E0D\u662F\u76EE\u5F55");return}let p=(0,h.readdirSync)(s).filter(A=>A.endsWith(".ts")||A.endsWith(".js"));if(p.length===0){console.log("[ERROR] API\u63CF\u8FF0\u6587\u4EF6\u76EE\u5F55\u4E0B\u6CA1\u6709\u63CF\u8FF0\u751F\u6210\u6587\u4EF6");return}let d=[],_=[];p.forEach(A=>{let B=Q((0,O.join)(s,A),__dirname);if(!B)return;let $=B,P=A.replace(".ts",".handler"),ie=U(A.replace(".ts",""))+"Server",Oe=(0,O.join)(i,[P,".ts"].join("")),be=[c,"handler",P].join("/");d.push(`import ${ie} from '${be}'`),_.push(ie);let X=[],ce=[],z=(0,O.join)(y,$.handler),H=(0,O.join)(u,$.handler);!(0,h.existsSync)(z)&&(0,h.mkdirSync)(z,{recursive:!0}),!(0,h.existsSync)(H)&&(0,h.mkdirSync)(H,{recursive:!0});let k={},V={};n&&Object.keys(n).forEach(g=>{let{libName:R,funcName:x}=n[g],w=x?`{${x} as ${g}}`:g;k[g]=`import ${w} from '${R}'`}),$.service?.forEach(g=>{let R=["import type { Request, Response } from 'express'"],x=["ErrorResponse","SuccessResponse"],w=me(g.handler,"-"),G=[];if(g.responseDataType&&G.push(oe(g.responseDataType)),g.requestDataType&&G.push(oe(g.requestDataType)),G.length>0){let C=(0,O.join)(H,`${w}.types.d.ts`);(0,h.writeFileSync)(C,G.join(`
13
+ `),"utf-8")}let K=g.method?.toLowerCase()||"get",J=U(g.handler),D=[];if(g.middleware&&a.middleware){let C=Array.isArray(g.middleware)?g.middleware:[g.middleware];if(!C.every(E=>{let I=typeof E=="string"?E:E.name;return!!k[I]}))throw new Error(`[ERROR] \u8DEF\u7531\u914D\u7F6E\u4E2D\u4F7F\u7528\u4E86\u4E0D\u5B58\u5728\u7684\u4E2D\u95F4\u4EF6::${C}`);let q=[];C.forEach(E=>{let I=typeof E=="string"?E:E.name;V[I]=k[I];let ue=(typeof E=="string"?void 0:Array.isArray(E.value)?E.value:[E.value])?.map(ee=>typeof ee=="string"?`'${ee}'`:ee),xe=ue?`${I}(${ue.join(",")})`:I;q.push(xe)}),D.push(...q)}let Ie=[c,"logic",$.handler,w].join("/");X.push(`import ${J} from '${Ie}.logic'`),ce.push(`Router.${K}('${g.path}',${D.join(",")}${D.length>0?",":""}${J})`),g.docRemark&&R.concat(`// ${g.docRemark}`);let ae=[];if(g.requestDataType&&g.requestDataType.properties){let C=g.requestDataType,v=C.properties,q=Object.keys(v).filter(E=>v[E].required!==!1).reduce((E,I)=>{let L=typeof v[I].type=="string"?v[I].type:"object";return E[I]={required:!0,type:L},E},{});if(Object.keys(q).length>0){let E=Object.values(v).filter(L=>L.source).map(L=>L.source),I=E.length>0&&E.every(L=>L===E[0])?E[0]:g.method==="GET"?"query":"body";ae.push(`const data = req.${I} as ${C.name}`,`CheckFieldRequired(data, ${JSON.stringify(q)})`),x.push("CheckFieldRequired")}}R.push(`import { ${x.join(",")} } from '@aicblock/nserve/lib/tools'`);let Se=R.concat(`
14
+ ${g.docRemark?`// ${g.docRemark}`:""}
15
15
  export async function ServiceLogic(req: Request, res: Response) {
16
16
  try {
17
17
  // todo: \u63A5\u53E3\u670D\u52A1\u903B\u8F91\u5B9E\u73B0
18
- ${ce.join(`
18
+ ${ae.join(`
19
19
  `)}
20
20
  SuccessResponse(res, true)
21
21
  } catch (error) {
@@ -23,9 +23,9 @@ ${a.join(`
23
23
  }
24
24
  }
25
25
  export default ServiceLogic
26
- `),ae=(0,O.join)(z,`${L}.logic.ts`);!(0,g.existsSync)(ae)&&(0,g.writeFileSync)(ae,Se.join(`
27
- `),"utf-8")});let X=[];b.middleware&&(Array.isArray(b.middleware)?b.middleware:[b.middleware]).forEach(_=>{let I=typeof _=="string"?_:_.name,L=Y[I];if(!L||v[I])return;v[I]=L;let V=(typeof _=="string"?void 0:Array.isArray(_.value)?_.value:[_.value])?.map(w=>typeof w=="string"?`'${w}'`:w),k=V?`${I}(${V.join(",")})`:I;X.push(k)}),Object.keys(v).forEach(f=>{Q.push(v[f])});let $e=["// Code generated by plugin. Templates Edited by aicblock cli. DO NOT EDIT.","import express from 'express'",...Q,"const app = express()","const Router = express.Router()",X.length>0?`Router.use(${X.join(",")})`:"",`app.use('${b.prefix}', Router)`,...ie,"export default app"];(0,g.writeFileSync)(Oe,$e.join(`
28
- `))});let C=(0,O.join)(i,"router.ts"),J=["// Code generated by plugin. Templates Edited by aicblock cli. DO NOT EDIT.",...h,"export default [",T.join(","),"]"];(0,g.writeFileSync)(C,J.join(`
29
- `)),console.log("[INFO] gen router file ",C)},ge=ve;var $=require("fs"),U=require("path"),Pe=new Set(["INT","BIGINT","BIT","DECIMAL","DOUBLE","FLOAT","INTEGER","MEDIUMINT","NUMERIC","REAL","SMALLINT","TINYINT"]);function Ge(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=qe(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 qe(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 Fe=(e,r,o)=>{let c={genDir:"nserve-config",modelDir:"model"},{genDir:i,modelDir:d}=Object.assign({},c,e),l=(0,U.join)(r,i,d);if(!(0,$.existsSync)(l))return;let u=(0,$.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,U.join)(r,o,d);(0,$.existsSync)(m)||(0,$.mkdirSync)(m);let E=[],n=[];u.forEach(s=>{let p=(0,U.join)(l,s),y=(0,$.readFileSync)(p,"utf-8");try{let h=Ge(y),T=h.tableName,C=(0,U.join)(m,`${T}.ts`),J=h.columns.map(M=>`${D(M.name)} = '${M.name}'`),A=[h.tableName,"_Field"].join(""),F=["import { DefineTable } from '@aicblock/emysql'",`const table = DefineTable(${JSON.stringify(h,null,2)})`,`export enum ${D(A)} { ${J.join(", ")}}`,"export default table"];(0,$.writeFileSync)(C,F.join(`
30
- `),"utf-8");let b=D(T);n.push(b),E.push(`import ${b} from './${T}'`),x(`The model file ${T} has been generated::${C}`)}catch{throw new Error(`The SQL file ${s} is not a valid CREATE TABLE statement::${p}`)}});let t=(0,U.join)(m,"index.ts"),a=[...E,`export default [${n.join(", ")}]`];(0,$.writeFileSync)(t,a.join(`
31
- `),"utf-8"),x(`The model index file has been generated::${t}`)},ye=Fe;var he=require("child_process"),Ee=require("path"),Ye=(e,r,o)=>{try{let c=r||process.cwd();ge(e||{},c,o||"src"),ye(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,Ee.join)(c,o||"src");console.log("[INFO] execRunGen::",t),console.log("[INFO] cmd::",n),(0,he.spawnSync)(n,{cwd:t,stdio:"inherit",shell:!0}),x("[INFO] execRunGen","SUCCESS")}catch(c){x("execRunGen fial::","ERROR"),console.error(c)}},Re=Ye;function Ve(e,r){x(`${r?`The [${r}] app has been `:""}Build DONE. [Build time:${Date.now()-e} ms]`,"SUCCESS")}function ke(e){x(e==="build"?"Build Fail.":"Serve process has exited.","ERROR")}function Ke(){let e=process.cwd(),r=ne(process.argv,"--config"),o=(0,B.join)(e,"nserve.config.ts"),c=(0,B.join)(e,"nserve.config.js"),i=r?(0,B.join)(e,r):(0,oe.existsSync)(o)?o:c;if(!(0,oe.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=ne(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}=W(o,process.cwd());Re(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,B.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){x("execRun fial::","ERROR"),console.error(o)}}var We=_e;0&&(module.exports={execRun});
26
+ `),le=(0,O.join)(z,`${w}.logic.ts`);!(0,h.existsSync)(le)&&(0,h.writeFileSync)(le,Se.join(`
27
+ `),"utf-8")});let Z=[];$.middleware&&(Array.isArray($.middleware)?$.middleware:[$.middleware]).forEach(R=>{let x=typeof R=="string"?R:R.name,w=k[x];if(!w)throw new Error(`[ERROR] \u8DEF\u7531\u914D\u7F6E\u4E2D\u4F7F\u7528\u4E86\u4E0D\u5B58\u5728\u7684\u4E2D\u95F4\u4EF6::${x}`);V[x]=w;let K=(typeof R=="string"?void 0:Array.isArray(R.value)?R.value:[R.value])?.map(D=>typeof D=="string"?`'${D}'`:D),J=K?`${x}(${K.join(",")})`:x;Z.push(J)}),Object.keys(V).forEach(g=>{X.push(V[g])});let $e=["// Code generated by plugin. Templates Edited by aicblock cli. DO NOT EDIT.","import express from 'express'",...X,"const app = express()","const Router = express.Router()",Z.length>0?`Router.use(${Z.join(",")})`:"",`app.use('${$.prefix}', Router)`,...ce,"export default app"];(0,h.writeFileSync)(Oe,$e.join(`
28
+ `))});let b=(0,O.join)(i,"router.ts"),j=["// Code generated by plugin. Templates Edited by aicblock cli. DO NOT EDIT.",...d,"export default [",_.join(","),"]"];(0,h.writeFileSync)(b,j.join(`
29
+ `)),console.log("[INFO] gen router file ",b)},ge=Me;var S=require("fs"),M=require("path"),Pe=new Set(["INT","BIGINT","BIT","DECIMAL","DOUBLE","FLOAT","INTEGER","MEDIUMINT","NUMERIC","REAL","SMALLINT","TINYINT"]);function Ge(t){let c=t.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 u={tableName:i[1],columns:[]},l=c.indexOf("("),a=c.lastIndexOf(")");if(l===-1||a===-1||a<=l)throw new Error("\u65E0\u6CD5\u627E\u5230\u5217\u5B9A\u4E49\u90E8\u5206");let f=c.substring(l+1,a);if(!f.trim())return u;let e=qe(f),n=new Set,T=new Set;return e.forEach(s=>{let m=s.trim();if(m.toUpperCase().startsWith("PRIMARY KEY")){let p=m.match(/^PRIMARY KEY\s*\([`"]?([\w_]+)[`"]?\)(?:\s+USING\s+\w+)?$/i);if(!p)throw new Error(`Unsupported primary key: ${m}`);n.add(p[1]);return}if(m.toUpperCase().startsWith("UNIQUE")){let p=m.match(/^UNIQUE(?:\s+(?:KEY|INDEX))?(?:\s+[`"]?[\w_]+[`"]?)?\s*\([`"]?([\w_]+)[`"]?(?:\s+(?:ASC|DESC))?\)(?:\s+USING\s+\w+)?$/i);if(!p)throw new Error(`Unsupported unique index: ${m}`);T.add(p[1]);return}/^(?:KEY|INDEX|FULLTEXT|SPATIAL)\b/i.test(m)||u.columns.push(Fe(m))}),u.columns.forEach(s=>{n.has(s.name)&&(s.primaryKey=!0),T.has(s.name)&&(s.unique=!0)}),u}function qe(t){let r=[],o="",c=!1,i=!1,y=0;for(let u=0;u<t.length;u++){let l=t[u],a=u+1<t.length?t[u+1]:"";l==="'"&&!i&&(c=!c),l==="-"&&a==="-"&&!c&&(i=!0),i&&(l===","||l===")")&&(i=!1),l==="("&&!c&&!i&&y++,l===")"&&!c&&!i&&y--,l===","&&!c&&!i&&y===0?(o.trim()&&r.push(o.trim()),o=""):o+=l}return o.trim()&&r.push(o.trim()),r}function Fe(t){let r=t.match(/^[`"]?([\w_]+)[`"]?\s+([a-zA-Z]+)(?:\s*\(\s*(\d+)\s*(?:,\s*(\d+)\s*)?\))?/);if(!r)throw new Error(`Unsupported SQL column definition: ${t}`);let[,o,c,i,y]=r,u=c.toUpperCase(),l={name:o,dataType:u};i&&(l.length=Number(i)),y&&(l.point=Number(y));let a=t.slice(r[0].length).trim();for(;a;){let f=null;if(!(f=a.match(/^(?:CHARACTER\s+SET|CHARSET|COLLATE)\s+\w+/i))){if(f=a.match(/^NOT\s+NULL\b/i))l.notNull=!0;else if(!(f=a.match(/^NULL\b/i))){if(f=a.match(/^PRIMARY\s+KEY\b/i))l.primaryKey=!0;else if(f=a.match(/^UNIQUE(?:\s+KEY)?\b/i))l.unique=!0;else if(f=a.match(/^AUTO_INCREMENT\b/i))l.autoIncrement=!0;else if(f=a.match(/^UNSIGNED\b/i))l.unsigned=!0;else if(f=a.match(/^ZEROFILL\b/i))l.zeroFill=!0;else if(f=a.match(/^DEFAULT\s+('(?:''|\\'|[^'])*'|"(?:\\"|[^"])*"|\S+)/i)){let e=f[1];if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).replace(/''/g,"'")),e.toUpperCase()!=="NULL"){let n=Number(e);l.defaultValue=Pe.has(u)&&!isNaN(n)?n:e}}else if(f=a.match(/^COMMENT\s+'((?:''|\\'|[^'])*)'/i))l.comments=f[1].replace(/''/g,"'");else if(!(f=a.match(/^ON\s+UPDATE\s+\w+(?:\(\d*\))?/i)))throw new Error(`Unsupported SQL column option: ${a} in ${t}`)}}a=a.slice(f[0].length).trim()}return l}var Ye=(t,r,o)=>{let c={genDir:"nserve-config",modelDir:"model"},{genDir:i,modelDir:y}=Object.assign({},c,t),u=(0,M.join)(r,i,y);if(!(0,S.existsSync)(u))return;let l=(0,S.readdirSync)(u).filter(s=>s.endsWith(".sql"));if(l.length===0)throw new Error(`The SQL model directory does not contain any SQL files::${u}`);let a=(0,M.join)(r,o,y);(0,S.existsSync)(a)||(0,S.mkdirSync)(a);let f=[],e=[];l.forEach(s=>{let m=(0,M.join)(u,s),p=(0,S.readFileSync)(m,"utf-8");try{let d=Ge(p),_=d.tableName,b=(0,M.join)(a,`${_}.ts`),j=d.columns.map(P=>`${U(P.name)} = '${P.name}'`),A=[d.tableName,"_Field"].join(""),B=["import { DefineTable } from '@aicblock/esql'",`const table = DefineTable(${JSON.stringify(d,null,2)})`,`export enum ${U(A)} { ${j.join(", ")}}`,"export default table"];(0,S.writeFileSync)(b,B.join(`
30
+ `),"utf-8");let $=U(_);e.push($),f.push(`import ${$} from './${_}'`),N(`The model file ${_} has been generated::${b}`)}catch(d){throw new Error(`Invalid CREATE TABLE in ${m}: ${d instanceof Error?d.message:String(d)}`)}});let n=(0,M.join)(a,"index.ts"),T=[...f,`export default [${e.join(", ")}]`];(0,S.writeFileSync)(n,T.join(`
31
+ `),"utf-8"),N(`The model index file has been generated::${n}`)},ye=Ye;var he=require("child_process"),Ee=require("path"),Be=(t,r,o)=>{let c=r||process.cwd();ge(t||{},c,o||"src"),ye(t||{},c,o||"src");let i={semi:!1,singleQuote:!0,trailingComma:"none"},{semi:y,singleQuote:u,trailingComma:l}=Object.assign({},i,t?.codePrettier||{}),a=[];y===!1&&a.push("--no-semi"),u===!0&&a.push("--single-quote"),l&&a.push("--trailing-comma",l);let f=["logic/**/*.ts","handler/**/*.ts","model/**/*.ts","types/**/*.d.ts"];a.push("--no-error-on-unmatched-pattern","--write",...f);let e=(0,Ee.join)(c,o||"src");console.log("[INFO] execRunGen::",e);let n=(0,he.spawnSync)(process.execPath,[require.resolve("prettier/bin/prettier.cjs"),...a],{cwd:e,stdio:"inherit"});if(n.error)throw n.error;if(n.status!==0)throw new Error(`Prettier failed with status ${n.status??n.signal}`);N("[INFO] execRunGen","SUCCESS")},_e=Be;function ke(t,r){N(`${r?`The [${r}] app has been `:""}Build DONE. [Build time:${Date.now()-t} ms]`,"SUCCESS")}function Ve(t){N(t==="build"?"Build Fail.":"Serve process has exited.","ERROR")}function Ke(){let t=process.cwd(),r=re(process.argv,"--config"),o=(0,Y.join)(t,"nserve.config.ts"),c=(0,Y.join)(t,"nserve.config.js"),i=r?(0,Y.join)(t,r):(0,se.existsSync)(o)?o:c;if(!(0,se.existsSync)(i))throw Error(`The configuration file does not exist. [${i}]`);return i}function Re(t){try{let o=Ke(),c=process.cwd(),i=t,y=re(process.argv,"--mode"),u=JSON.stringify(process.argv),l={AICBLOCK_NSERVE_RUN_CWD:c,AICBLOCK_NSERVE_RUN_CONFIG_PATH:o,AICBLOCK_NSERVE_RUN_MODE:i,AICBLOCK_NSERVE_ENV_MODE:y,AICBLOCK_NSERVE_RUN_ARGV:u};if(Object.keys(l).forEach(e=>{let n=l[e];n!==void 0&&(process.env[e]=n)}),t==="gen"){let{generateConfig:e,sourceDir:n}=Q(o,process.cwd());_e(e||{},c,n||"src");return}let a=Date.now();var r=void 0;let f=(0,Te.spawn)(process.execPath,[(0,Y.join)(__dirname,"core/run.js")],{cwd:c,stdio:t==="build"?"inherit":"pipe",env:Object.assign({},process.env,l)});f.stdout?.on("data",e=>{r&&r.stop(),console.log(e.toString("utf-8"))}),f.stdout?.on("error",e=>{r&&r.stop(),console.log(e.toString())}),f.stderr?.on("data",e=>{r&&r.stop(),console.log(e.toString("utf-8"))}),f.on("error",e=>{r&&r.stop(),console.error(e),process.exitCode=1}),f.on("exit",e=>{r&&r.stop(),e===0&&t==="build"&&ke(a,y),e!==0&&Ve(t),e!==0&&(process.exitCode=e||1)})}catch(o){N("execRun fial::","ERROR"),console.error(o),process.exitCode=1}}var Je=Re;0&&(module.exports={execRun});
@@ -1 +1 @@
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});
1
+ "use strict";var R=Object.create;var y=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var E=(r,e)=>{for(var t in e)y(r,t,{get:e[t],enumerable:!0})},g=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of j(e))!x.call(r,s)&&s!==t&&y(r,s,{get:()=>e[s],enumerable:!(o=T(e,s))||o.enumerable});return r};var q=(r,e,t)=>(t=r!=null?R(O(r)):{},g(e||!r||!r.__esModule?y(t,"default",{value:r,enumerable:!0}):t,r)),A=r=>g(y({},"__esModule",{value:!0}),r);var F={};E(F,{CheckFieldRequired:()=>w,ErrorResponse:()=>h,LoadConfig:()=>_,SuccessResponse:()=>b,default:()=>S});module.exports=A(F);var d=require("fs"),m=q(require("yaml"));function p(r,e,t=200,o){let i=Object.assign({code:t,data:e,msg:o||"\u6210\u529F"});r.status(t).send(i)}var c=class extends Error{};function h(r,e,t=500){console.error("[ERROR] STACK_INFO",e);let o=typeof e?.message=="string"?e.message:"",s=o.match(/^\[(4\d\d)\]-/),i=t===500&&e instanceof c?400:t===500&&s?Number(s[1]):t,f=i<500?o.replace(/^\[4\d\d\]-/,"")||"\u8BF7\u6C42\u5931\u8D25":"\u670D\u52A1\u5F02\u5E38";p(r,null,i,f)}function b(r,e,t){p(r,e,200,t)}var $=r=>{try{if(!(0,d.existsSync)(r))throw Error(`The configuration file does not exist. [${r}]`);let e=(0,d.readFileSync)(r,"utf8");return m.default.parse(e)}catch(e){throw console.error(e),Error()}},_=r=>{try{if(console.info("[INFO] config path::",r),!(0,d.existsSync)(r))throw Error(`The configuration file does not exist. [${r}]`);let e=$(r);if(!e)return;let t=Array.isArray(e),o=s=>{Object.keys(s)?.forEach(f=>{let n=s[f];global[f]=Array.isArray(n)?n.reduce((l,u)=>Object.assign(l,u),{}):n})};t?e.forEach(o):o(e)}catch(e){throw console.error(e),Error("LOAD_CONFIG_PARAM_ERROR")}},w=(r,e,t)=>{if(r==null)throw new c("The data is required.");if(e==null)throw Error("The config is required.");let s={...{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,l)=>n.replace(/\$\{key\}/g,l);Object.keys(e).forEach(n=>{let l=e[n].required;if(!l)return;let u=e[n].type,a=r[n];if(a==null)throw new c(i(s.required,n));if(u==="array"&&(!Array.isArray(a)||a.length===0))throw new c(i(s.array,n));if(u==="object"&&(Object.prototype.toString.call(a)!=="[object Object]"||Object.keys(a).length===0))throw new c(i(s.object,n));if(u==="string"){if(typeof a!="string")throw new c(`The field [${n}] must be a string.`);if(l&&a.trim()==="")throw new c(i(s.required,n))}if(u==="number"&&typeof a!="number")throw new c(`The field [${n}] must be a number.`)})},S={ErrorResponse:h,SuccessResponse:b,CheckFieldRequired:w};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.3",
3
+ "version": "1.0.5",
4
4
  "description": "🛠️ Description NodeJS Server-side development CLI",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -46,7 +46,7 @@
46
46
  }
47
47
  },
48
48
  "dependencies": {
49
- "@aicblock/emysql": "^1.3.0",
49
+ "@aicblock/esql": "2.0.1",
50
50
  "commander": "14.0.2",
51
51
  "esbuild": "0.27.2",
52
52
  "express": "5.2.1",