create-lik-app 1.3.1 → 1.4.1
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/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/templates/.gitignore +1 -0
- package/templates/template-bun/.prettierrc +4 -0
- package/templates/template-bun/README.md +15 -0
- package/templates/template-bun/bun.lockb +0 -0
- package/templates/template-bun/bunfig.toml +3 -0
- package/templates/template-bun/env/.env.dev +13 -0
- package/templates/template-bun/env/.env.development +9 -0
- package/templates/template-bun/env/.env.production +8 -0
- package/templates/template-bun/env/.env.test +8 -0
- package/templates/template-bun/nginx.conf +30 -0
- package/templates/template-bun/package.json +26 -0
- package/templates/template-bun/public/_git_not_ignore +0 -0
- package/templates/template-bun/src/context/index.ts +20 -0
- package/templates/template-bun/src/controllers/example/index.ts +35 -0
- package/templates/template-bun/src/controllers/index.ts +1 -0
- package/templates/template-bun/src/controllers/ws/index.ts +12 -0
- package/templates/template-bun/src/db/index.ts +1 -0
- package/templates/template-bun/src/db/model/users.ts +30 -0
- package/templates/template-bun/src/db/setup.ts +19 -0
- package/templates/template-bun/src/index.ts +14 -0
- package/templates/template-bun/src/plugins/derives/auth.ts +19 -0
- package/templates/template-bun/src/router/index.ts +18 -0
- package/templates/template-bun/src/utils/logger.ts +13 -0
- package/templates/template-bun/src/utils/resCreator.ts +26 -0
- package/templates/template-bun/tsconfig.json +17 -0
- package/templates/template-bun/types/env.d.ts +12 -0
package/dist/index.mjs
CHANGED
@@ -94,7 +94,7 @@ Instructions:
|
|
94
94
|
Filtered results for: ${this.inputValue?this.inputValue:e.gray("Enter something to filter")}
|
95
95
|
`}renderOption(r,l,i){let d;return l.disabled?d=r===i?e.gray().underline(l.title):e.strikethrough().gray(l.title):d=r===i?e.cyan().underline(l.title):l.title,(l.selected?e.green(u.radioOn):u.radioOff)+" "+d}renderDoneOrInstructions(){if(this.done)return this.value.filter(l=>l.selected).map(l=>l.title).join(", ");const r=[e.gray(this.hint),this.renderInstructions(),this.renderCurrentInput()];return this.filteredOptions.length&&this.filteredOptions[this.cursor].disabled&&r.push(e.yellow(this.warn)),r.join(" ")}render(){if(this.closed)return;this.firstRender&&this.out.write(n.hide),super.render();let r=[o.symbol(this.done,this.aborted),e.bold(this.msg),o.delimiter(!1),this.renderDoneOrInstructions()].join(" ");this.showMinError&&(r+=e.red(`You must select a minimum of ${this.minSelected} choices.`),this.showMinError=!1),r+=this.renderOptions(this.filteredOptions),this.out.write(this.clear+r),this.clear=t(r,this.out.columns)}}return ft=s,ft}var pt,Jr;function ws(){if(Jr)return pt;Jr=1;const e=R(),n=U(),{style:a,clear:t}=H(),{erase:o,cursor:u}=C();class s extends n{constructor(r={}){super(r),this.msg=r.message,this.value=r.initial,this.initialValue=!!r.initial,this.yesMsg=r.yes||"yes",this.yesOption=r.yesOption||"(Y/n)",this.noMsg=r.no||"no",this.noOption=r.noOption||"(y/N)",this.render()}reset(){this.value=this.initialValue,this.fire(),this.render()}exit(){this.abort()}abort(){this.done=this.aborted=!0,this.fire(),this.render(),this.out.write(`
|
96
96
|
`),this.close()}submit(){this.value=this.value||!1,this.done=!0,this.aborted=!1,this.fire(),this.render(),this.out.write(`
|
97
|
-
`),this.close()}_(r,l){return r.toLowerCase()==="y"?(this.value=!0,this.submit()):r.toLowerCase()==="n"?(this.value=!1,this.submit()):this.bell()}render(){this.closed||(this.firstRender?this.out.write(u.hide):this.out.write(t(this.outputText,this.out.columns)),super.render(),this.outputText=[a.symbol(this.done,this.aborted),e.bold(this.msg),a.delimiter(this.done),this.done?this.value?this.yesMsg:this.noMsg:e.gray(this.initialValue?this.yesOption:this.noOption)].join(" "),this.out.write(o.line+u.to(0)+this.outputText))}}return pt=s,pt}var mt,Kr;function ys(){return Kr||(Kr=1,mt={TextPrompt:is(),SelectPrompt:ss(),TogglePrompt:ns(),DatePrompt:ms(),NumberPrompt:gs(),MultiselectPrompt:Gr(),AutocompletePrompt:vs(),AutocompleteMultiselectPrompt:bs(),ConfirmPrompt:ws()}),mt}var Zr;function xs(){return Zr||(Zr=1,function(e){const n=e,a=ys(),t=s=>s;function o(s,g,r={}){return new Promise((l,i)=>{const d=new a[s](g),f=r.onAbort||t,h=r.onSubmit||t,c=r.onExit||t;d.on("state",g.onState||t),d.on("submit",b=>l(h(b))),d.on("exit",b=>l(c(b))),d.on("abort",b=>i(f(b)))})}n.text=s=>o("TextPrompt",s),n.password=s=>(s.style="password",n.text(s)),n.invisible=s=>(s.style="invisible",n.text(s)),n.number=s=>o("NumberPrompt",s),n.date=s=>o("DatePrompt",s),n.confirm=s=>o("ConfirmPrompt",s),n.list=s=>{const g=s.separator||",";return o("TextPrompt",s,{onSubmit:r=>r.split(g).map(l=>l.trim())})},n.toggle=s=>o("TogglePrompt",s),n.select=s=>o("SelectPrompt",s),n.multiselect=s=>{s.choices=[].concat(s.choices||[]);const g=r=>r.filter(l=>l.selected).map(l=>l.value);return o("MultiselectPrompt",s,{onAbort:g,onSubmit:g})},n.autocompleteMultiselect=s=>{s.choices=[].concat(s.choices||[]);const g=r=>r.filter(l=>l.selected).map(l=>l.value);return o("AutocompleteMultiselectPrompt",s,{onAbort:g,onSubmit:g})};const u=(s,g)=>Promise.resolve(g.filter(r=>r.title.slice(0,s.length).toLowerCase()===s.toLowerCase()));n.autocomplete=s=>(s.suggest=s.suggest||u,s.choices=[].concat(s.choices||[]),o("AutocompletePrompt",s))}(ke)),ke}var gt,Xr;function $s(){if(Xr)return gt;Xr=1;const e=xs(),n=["suggest","format","onState","validate","onRender","type"],a=()=>{};async function t(g=[],{onSubmit:r=a,onCancel:l=a}={}){const i={},d=t._override||{};g=[].concat(g);let f,h,c,b,v,p;const m=async(w,y,x=!1)=>{if(!(!x&&w.validate&&w.validate(y)!==!0))return w.format?await w.format(y,i):y};for(h of g)if({name:b,type:v}=h,typeof v=="function"&&(v=await v(f,{...i},h),h.type=v),!!v){for(let w in h){if(n.includes(w))continue;let y=h[w];h[w]=typeof y=="function"?await y(f,{...i},p):y}if(p=h,typeof h.message!="string")throw new Error("prompt message is required");if({name:b,type:v}=h,e[v]===void 0)throw new Error(`prompt type (${v}) is not defined`);if(d[h.name]!==void 0&&(f=await m(h,d[h.name]),f!==void 0)){i[b]=f;continue}try{f=t._injected?o(t._injected,h.initial):await e[v](h),i[b]=f=await m(h,f,!0),c=await r(h,f,i)}catch{c=!await l(h,i)}if(c)return i}return i}function o(g,r){const l=g.shift();if(l instanceof Error)throw l;return l===void 0?r:l}function u(g){t._injected=(t._injected||[]).concat(g)}function s(g){t._override=Object.assign({},g)}return gt=Object.assign(t,{prompt:t,prompts:e,inject:u,override:s}),gt}var vt,Qr;function Ss(){if(Qr)return vt;Qr=1;function e(n){n=(Array.isArray(n)?n:n.split(".")).map(Number);let a=0,t=process.versions.node.split(".").map(Number);for(;a<n.length;a++){if(t[a]>n[a])return!1;if(n[a]>t[a])return!0}return!1}return vt=e("8.6.0")?Ki():$s(),vt}var Ms=Ss();const Os=K(Ms);var G={exports:{}},bt,ei;function Ps(){if(ei)return bt;ei=1,bt=t,t.sync=o;var e=te;function n(u,s){var g=s.pathExt!==void 0?s.pathExt:process.env.PATHEXT;if(!g||(g=g.split(";"),g.indexOf("")!==-1))return!0;for(var r=0;r<g.length;r++){var l=g[r].toLowerCase();if(l&&u.substr(-l.length).toLowerCase()===l)return!0}return!1}function a(u,s,g){return!u.isSymbolicLink()&&!u.isFile()?!1:n(s,g)}function t(u,s,g){e.stat(u,function(r,l){g(r,r?!1:a(l,u,s))})}function o(u,s){return a(e.statSync(u),u,s)}return bt}var wt,ti;function Ts(){if(ti)return wt;ti=1,wt=n,n.sync=a;var e=te;function n(u,s,g){e.stat(u,function(r,l){g(r,r?!1:t(l,s))})}function a(u,s){return t(e.statSync(u),s)}function t(u,s){return u.isFile()&&o(u,s)}function o(u,s){var g=u.mode,r=u.uid,l=u.gid,i=s.uid!==void 0?s.uid:process.getuid&&process.getuid(),d=s.gid!==void 0?s.gid:process.getgid&&process.getgid(),f=parseInt("100",8),h=parseInt("010",8),c=parseInt("001",8),b=f|h,v=g&c||g&h&&l===d||g&f&&r===i||g&b&&i===0;return v}return wt}var yt,ri;function qs(){if(ri)return yt;ri=1;var e;process.platform==="win32"||wi.TESTING_WINDOWS?e=Ps():e=Ts(),yt=n,n.sync=a;function n(t,o,u){if(typeof o=="function"&&(u=o,o={}),!u){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(s,g){n(t,o||{},function(r,l){r?g(r):s(l)})})}e(t,o||{},function(s,g){s&&(s.code==="EACCES"||o&&o.ignoreErrors)&&(s=null,g=!1),u(s,g)})}function a(t,o){try{return e.sync(t,o||{})}catch(u){if(o&&o.ignoreErrors||u.code==="EACCES")return!1;throw u}}return yt}var xt,ii;function Es(){if(ii)return xt;ii=1;const e=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",n=ee,a=e?";":":",t=qs(),o=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),u=(r,l)=>{const i=l.colon||a,d=r.match(/\//)||e&&r.match(/\\/)?[""]:[...e?[process.cwd()]:[],...(l.path||process.env.PATH||"").split(i)],f=e?l.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",h=e?f.split(i):[""];return e&&r.indexOf(".")!==-1&&h[0]!==""&&h.unshift(""),{pathEnv:d,pathExt:h,pathExtExe:f}},s=(r,l,i)=>{typeof l=="function"&&(i=l,l={}),l||(l={});const{pathEnv:d,pathExt:f,pathExtExe:h}=u(r,l),c=[],b=p=>new Promise((m,w)=>{if(p===d.length)return l.all&&c.length?m(c):w(o(r));const y=d[p],x=/^".*"$/.test(y)?y.slice(1,-1):y,S=n.join(x,r),M=!x&&/^\.[\\\/]/.test(r)?r.slice(0,2)+S:S;m(v(M,p,0))}),v=(p,m,w)=>new Promise((y,x)=>{if(w===f.length)return y(b(m+1));const S=f[w];t(p+S,{pathExt:h},(M,P)=>{if(!M&&P)if(l.all)c.push(p+S);else return y(p+S);return y(v(p,m,w+1))})});return i?b(0).then(p=>i(null,p),i):b(0)},g=(r,l)=>{l=l||{};const{pathEnv:i,pathExt:d,pathExtExe:f}=u(r,l),h=[];for(let c=0;c<i.length;c++){const b=i[c],v=/^".*"$/.test(b)?b.slice(1,-1):b,p=n.join(v,r),m=!v&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;for(let w=0;w<d.length;w++){const y=m+d[w];try{if(t.sync(y,{pathExt:f}))if(l.all)h.push(y);else return y}catch{}}}if(l.all&&h.length)return h;if(l.nothrow)return null;throw o(r)};return xt=s,s.sync=g,xt}var X={exports:{}},si;function Rs(){if(si)return X.exports;si=1;const e=(n={})=>{const a=n.env||process.env;return(n.platform||process.platform)!=="win32"?"PATH":Object.keys(a).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};return X.exports=e,X.exports.default=e,X.exports}var $t,ni;function Cs(){if(ni)return $t;ni=1;const e=ee,n=Es(),a=Rs();function t(u,s){const g=u.options.env||process.env,r=process.cwd(),l=u.options.cwd!=null,i=l&&process.chdir!==void 0&&!process.chdir.disabled;if(i)try{process.chdir(u.options.cwd)}catch{}let d;try{d=n.sync(u.command,{path:g[a({env:g})],pathExt:s?e.delimiter:void 0})}catch{}finally{i&&process.chdir(r)}return d&&(d=e.resolve(l?u.options.cwd:"",d)),d}function o(u){return t(u)||t(u,!0)}return $t=o,$t}var Q={},oi;function _s(){if(oi)return Q;oi=1;const e=/([()\][%!^"`<>&|;, *?])/g;function n(t){return t=t.replace(e,"^$1"),t}function a(t,o){return t=`${t}`,t=t.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),t=t.replace(/(?=(\\+?)?)\1$/,"$1$1"),t=`"${t}"`,t=t.replace(e,"^$1"),o&&(t=t.replace(e,"^$1")),t}return Q.command=n,Q.argument=a,Q}var St,li;function Ds(){return li||(li=1,St=/^#!(.*)/),St}var Mt,hi;function Is(){if(hi)return Mt;hi=1;const e=Ds();return Mt=(n="")=>{const a=n.match(e);if(!a)return null;const[t,o]=a[0].replace(/#! ?/,"").split(" "),u=t.split("/").pop();return u==="env"?o:o?`${u} ${o}`:u},Mt}var Ot,ui;function As(){if(ui)return Ot;ui=1;const e=te,n=Is();function a(t){const u=Buffer.alloc(150);let s;try{s=e.openSync(t,"r"),e.readSync(s,u,0,150,0),e.closeSync(s)}catch{}return n(u.toString())}return Ot=a,Ot}var Pt,ai;function js(){if(ai)return Pt;ai=1;const e=ee,n=Cs(),a=_s(),t=As(),o=process.platform==="win32",u=/\.(?:com|exe)$/i,s=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function g(i){i.file=n(i);const d=i.file&&t(i.file);return d?(i.args.unshift(i.file),i.command=d,n(i)):i.file}function r(i){if(!o)return i;const d=g(i),f=!u.test(d);if(i.options.forceShell||f){const h=s.test(d);i.command=e.normalize(i.command),i.command=a.command(i.command),i.args=i.args.map(b=>a.argument(b,h));const c=[i.command].concat(i.args).join(" ");i.args=["/d","/s","/c",`"${c}"`],i.command=process.env.comspec||"cmd.exe",i.options.windowsVerbatimArguments=!0}return i}function l(i,d,f){d&&!Array.isArray(d)&&(f=d,d=null),d=d?d.slice(0):[],f=Object.assign({},f);const h={command:i,args:d,options:f,file:void 0,original:{command:i,args:d}};return f.shell?h:r(h)}return Pt=l,Pt}var Tt,ci;function Fs(){if(ci)return Tt;ci=1;const e=process.platform==="win32";function n(u,s){return Object.assign(new Error(`${s} ${u.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${s} ${u.command}`,path:u.command,spawnargs:u.args})}function a(u,s){if(!e)return;const g=u.emit;u.emit=function(r,l){if(r==="exit"){const i=t(l,s);if(i)return g.call(u,"error",i)}return g.apply(u,arguments)}}function t(u,s){return e&&u===1&&!s.file?n(s.original,"spawn"):null}function o(u,s){return e&&u===1&&!s.file?n(s.original,"spawnSync"):null}return Tt={hookChildProcess:a,verifyENOENT:t,verifyENOENTSync:o,notFoundError:n},Tt}var di;function ks(){if(di)return G.exports;di=1;const e=bi,n=js(),a=Fs();function t(u,s,g){const r=n(u,s,g),l=e.spawn(r.command,r.args,r.options);return a.hookChildProcess(l,r),l}function o(u,s,g){const r=n(u,s,g),l=e.spawnSync(r.command,r.args,r.options);return l.error=l.error||a.verifyENOENTSync(l.status,r),l}return G.exports=t,G.exports.spawn=t,G.exports.sync=o,G.exports._parse=n,G.exports._enoent=a,G.exports}var Ns=ks();const Ys=K(Ns),{blue:Hs,cyan:qt,green:Et,yellowBright:fi,white:Bs,red:pi,cyanBright:mi,bgYellowBright:Ls}=Mi,_={react:qt("React"),mobx:qt("Mobx"),"tanstack-router":mi("Tanstack Router"),jotai:mi("Jotai"),vue:Et("Vue3"),pinia:Et("Pinia"),bun:Bs("Bun"),elysia:pi("Elysia"),rspack:fi("Rspack"),tailwinds:qt("Tailwinds"),vite:fi("Vite"),ts:Hs("TS")};function z(){return this._label+" "+(this.completed?Et("\u2714"):pi("\u2718 uncompleted"))+" "+(this.recommended?Ls("recommended"):"")}const J={frontend:{react:{get label(){return z.call(this)},_label:`${_.react} + ${_.mobx}`,value:"react",completed:!0},vue:{get label(){return z.call(this)},_label:`${_.vue} + ${_.pinia}`,value:"vue",completed:!0,recommended:!0},"react-tanstack-jotai":{get label(){return z.call(this)},_label:`${_.react} + ${_.jotai} + ${_["tanstack-router"]}`,value:"react",completed:!0,recommended:!0},"react-tanstack-jotai-tailwindcss":{get label(){return z.call(this)},_label:`${_.react} + ${_.jotai} + ${_["tanstack-router"]} + ${_.tailwinds}`,value:"react",completed:!0,recommended:!0},"react18-tanstack-jotai-tailwindcss":{get label(){return z.call(this)},_label:`${_.react}18 + ${_.jotai} + ${_["tanstack-router"]} + ${_.tailwinds}`,value:"react",completed:!0,recommended:!0}},backend:{bun:{get label(){return z.call(this)},_label:`${_.bun} + ${_.elysia} + ${_.ts}`,value:"bun",completed:!1}}};function gi(e){return e?.trim().replace(/\/+$/g,"")}function Rt(e){return F.basename(F.resolve(e))}function Vs(e){const n=j.readdirSync(e);return n.length===0||n.length===1&&n[0]===".git"}function Us(e){return j.existsSync(e)}function Gs(e){return/^(?:@[a-z\d\-*~][a-z\d\-*._~]*\/)?[a-z\d\-~][a-z\d\-._~]*$/.test(e)}function Ws(e){return e.trim().toLowerCase().replace(/\s+/g,"-").replace(/^[._]/,"").replace(/[^a-z\d\-~]+/g,"-")}function zs(e){if(j.existsSync(e))for(const n of j.readdirSync(e))n!==".git"&&j.rmSync(F.resolve(e,n),{recursive:!0,force:!0})}function Js(e){if(!e)return;const n=e.split(" ")[0].split("/");return{name:n[0],version:n[1]}}function Ks(e,n){j.mkdirSync(n,{recursive:!0});for(const a of j.readdirSync(e)){const t=F.resolve(e,a),o=F.resolve(n,a);vi(t,o)}}function vi(e,n){Zs(e)?Ks(e,n):j.copyFileSync(e,n)}function Zs(e){return j.statSync(e).isDirectory()}const Ct=$i(process.argv.slice(2),{boolean:["help"],string:["_"],default:{help:!1},alias:{h:"help",t:"template"}}),Xs=Object.keys(J).map(e=>` ${k.gray(e)}:
|
97
|
+
`),this.close()}_(r,l){return r.toLowerCase()==="y"?(this.value=!0,this.submit()):r.toLowerCase()==="n"?(this.value=!1,this.submit()):this.bell()}render(){this.closed||(this.firstRender?this.out.write(u.hide):this.out.write(t(this.outputText,this.out.columns)),super.render(),this.outputText=[a.symbol(this.done,this.aborted),e.bold(this.msg),a.delimiter(this.done),this.done?this.value?this.yesMsg:this.noMsg:e.gray(this.initialValue?this.yesOption:this.noOption)].join(" "),this.out.write(o.line+u.to(0)+this.outputText))}}return pt=s,pt}var mt,Kr;function ys(){return Kr||(Kr=1,mt={TextPrompt:is(),SelectPrompt:ss(),TogglePrompt:ns(),DatePrompt:ms(),NumberPrompt:gs(),MultiselectPrompt:Gr(),AutocompletePrompt:vs(),AutocompleteMultiselectPrompt:bs(),ConfirmPrompt:ws()}),mt}var Zr;function xs(){return Zr||(Zr=1,function(e){const n=e,a=ys(),t=s=>s;function o(s,g,r={}){return new Promise((l,i)=>{const d=new a[s](g),f=r.onAbort||t,h=r.onSubmit||t,c=r.onExit||t;d.on("state",g.onState||t),d.on("submit",b=>l(h(b))),d.on("exit",b=>l(c(b))),d.on("abort",b=>i(f(b)))})}n.text=s=>o("TextPrompt",s),n.password=s=>(s.style="password",n.text(s)),n.invisible=s=>(s.style="invisible",n.text(s)),n.number=s=>o("NumberPrompt",s),n.date=s=>o("DatePrompt",s),n.confirm=s=>o("ConfirmPrompt",s),n.list=s=>{const g=s.separator||",";return o("TextPrompt",s,{onSubmit:r=>r.split(g).map(l=>l.trim())})},n.toggle=s=>o("TogglePrompt",s),n.select=s=>o("SelectPrompt",s),n.multiselect=s=>{s.choices=[].concat(s.choices||[]);const g=r=>r.filter(l=>l.selected).map(l=>l.value);return o("MultiselectPrompt",s,{onAbort:g,onSubmit:g})},n.autocompleteMultiselect=s=>{s.choices=[].concat(s.choices||[]);const g=r=>r.filter(l=>l.selected).map(l=>l.value);return o("AutocompleteMultiselectPrompt",s,{onAbort:g,onSubmit:g})};const u=(s,g)=>Promise.resolve(g.filter(r=>r.title.slice(0,s.length).toLowerCase()===s.toLowerCase()));n.autocomplete=s=>(s.suggest=s.suggest||u,s.choices=[].concat(s.choices||[]),o("AutocompletePrompt",s))}(ke)),ke}var gt,Xr;function $s(){if(Xr)return gt;Xr=1;const e=xs(),n=["suggest","format","onState","validate","onRender","type"],a=()=>{};async function t(g=[],{onSubmit:r=a,onCancel:l=a}={}){const i={},d=t._override||{};g=[].concat(g);let f,h,c,b,v,p;const m=async(w,y,x=!1)=>{if(!(!x&&w.validate&&w.validate(y)!==!0))return w.format?await w.format(y,i):y};for(h of g)if({name:b,type:v}=h,typeof v=="function"&&(v=await v(f,{...i},h),h.type=v),!!v){for(let w in h){if(n.includes(w))continue;let y=h[w];h[w]=typeof y=="function"?await y(f,{...i},p):y}if(p=h,typeof h.message!="string")throw new Error("prompt message is required");if({name:b,type:v}=h,e[v]===void 0)throw new Error(`prompt type (${v}) is not defined`);if(d[h.name]!==void 0&&(f=await m(h,d[h.name]),f!==void 0)){i[b]=f;continue}try{f=t._injected?o(t._injected,h.initial):await e[v](h),i[b]=f=await m(h,f,!0),c=await r(h,f,i)}catch{c=!await l(h,i)}if(c)return i}return i}function o(g,r){const l=g.shift();if(l instanceof Error)throw l;return l===void 0?r:l}function u(g){t._injected=(t._injected||[]).concat(g)}function s(g){t._override=Object.assign({},g)}return gt=Object.assign(t,{prompt:t,prompts:e,inject:u,override:s}),gt}var vt,Qr;function Ss(){if(Qr)return vt;Qr=1;function e(n){n=(Array.isArray(n)?n:n.split(".")).map(Number);let a=0,t=process.versions.node.split(".").map(Number);for(;a<n.length;a++){if(t[a]>n[a])return!1;if(n[a]>t[a])return!0}return!1}return vt=e("8.6.0")?Ki():$s(),vt}var Ms=Ss();const Os=K(Ms);var G={exports:{}},bt,ei;function Ps(){if(ei)return bt;ei=1,bt=t,t.sync=o;var e=te;function n(u,s){var g=s.pathExt!==void 0?s.pathExt:process.env.PATHEXT;if(!g||(g=g.split(";"),g.indexOf("")!==-1))return!0;for(var r=0;r<g.length;r++){var l=g[r].toLowerCase();if(l&&u.substr(-l.length).toLowerCase()===l)return!0}return!1}function a(u,s,g){return!u.isSymbolicLink()&&!u.isFile()?!1:n(s,g)}function t(u,s,g){e.stat(u,function(r,l){g(r,r?!1:a(l,u,s))})}function o(u,s){return a(e.statSync(u),u,s)}return bt}var wt,ti;function Ts(){if(ti)return wt;ti=1,wt=n,n.sync=a;var e=te;function n(u,s,g){e.stat(u,function(r,l){g(r,r?!1:t(l,s))})}function a(u,s){return t(e.statSync(u),s)}function t(u,s){return u.isFile()&&o(u,s)}function o(u,s){var g=u.mode,r=u.uid,l=u.gid,i=s.uid!==void 0?s.uid:process.getuid&&process.getuid(),d=s.gid!==void 0?s.gid:process.getgid&&process.getgid(),f=parseInt("100",8),h=parseInt("010",8),c=parseInt("001",8),b=f|h,v=g&c||g&h&&l===d||g&f&&r===i||g&b&&i===0;return v}return wt}var yt,ri;function qs(){if(ri)return yt;ri=1;var e;process.platform==="win32"||wi.TESTING_WINDOWS?e=Ps():e=Ts(),yt=n,n.sync=a;function n(t,o,u){if(typeof o=="function"&&(u=o,o={}),!u){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(s,g){n(t,o||{},function(r,l){r?g(r):s(l)})})}e(t,o||{},function(s,g){s&&(s.code==="EACCES"||o&&o.ignoreErrors)&&(s=null,g=!1),u(s,g)})}function a(t,o){try{return e.sync(t,o||{})}catch(u){if(o&&o.ignoreErrors||u.code==="EACCES")return!1;throw u}}return yt}var xt,ii;function Es(){if(ii)return xt;ii=1;const e=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",n=ee,a=e?";":":",t=qs(),o=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),u=(r,l)=>{const i=l.colon||a,d=r.match(/\//)||e&&r.match(/\\/)?[""]:[...e?[process.cwd()]:[],...(l.path||process.env.PATH||"").split(i)],f=e?l.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",h=e?f.split(i):[""];return e&&r.indexOf(".")!==-1&&h[0]!==""&&h.unshift(""),{pathEnv:d,pathExt:h,pathExtExe:f}},s=(r,l,i)=>{typeof l=="function"&&(i=l,l={}),l||(l={});const{pathEnv:d,pathExt:f,pathExtExe:h}=u(r,l),c=[],b=p=>new Promise((m,w)=>{if(p===d.length)return l.all&&c.length?m(c):w(o(r));const y=d[p],x=/^".*"$/.test(y)?y.slice(1,-1):y,S=n.join(x,r),M=!x&&/^\.[\\\/]/.test(r)?r.slice(0,2)+S:S;m(v(M,p,0))}),v=(p,m,w)=>new Promise((y,x)=>{if(w===f.length)return y(b(m+1));const S=f[w];t(p+S,{pathExt:h},(M,P)=>{if(!M&&P)if(l.all)c.push(p+S);else return y(p+S);return y(v(p,m,w+1))})});return i?b(0).then(p=>i(null,p),i):b(0)},g=(r,l)=>{l=l||{};const{pathEnv:i,pathExt:d,pathExtExe:f}=u(r,l),h=[];for(let c=0;c<i.length;c++){const b=i[c],v=/^".*"$/.test(b)?b.slice(1,-1):b,p=n.join(v,r),m=!v&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;for(let w=0;w<d.length;w++){const y=m+d[w];try{if(t.sync(y,{pathExt:f}))if(l.all)h.push(y);else return y}catch{}}}if(l.all&&h.length)return h;if(l.nothrow)return null;throw o(r)};return xt=s,s.sync=g,xt}var X={exports:{}},si;function Rs(){if(si)return X.exports;si=1;const e=(n={})=>{const a=n.env||process.env;return(n.platform||process.platform)!=="win32"?"PATH":Object.keys(a).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};return X.exports=e,X.exports.default=e,X.exports}var $t,ni;function Cs(){if(ni)return $t;ni=1;const e=ee,n=Es(),a=Rs();function t(u,s){const g=u.options.env||process.env,r=process.cwd(),l=u.options.cwd!=null,i=l&&process.chdir!==void 0&&!process.chdir.disabled;if(i)try{process.chdir(u.options.cwd)}catch{}let d;try{d=n.sync(u.command,{path:g[a({env:g})],pathExt:s?e.delimiter:void 0})}catch{}finally{i&&process.chdir(r)}return d&&(d=e.resolve(l?u.options.cwd:"",d)),d}function o(u){return t(u)||t(u,!0)}return $t=o,$t}var Q={},oi;function _s(){if(oi)return Q;oi=1;const e=/([()\][%!^"`<>&|;, *?])/g;function n(t){return t=t.replace(e,"^$1"),t}function a(t,o){return t=`${t}`,t=t.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),t=t.replace(/(?=(\\+?)?)\1$/,"$1$1"),t=`"${t}"`,t=t.replace(e,"^$1"),o&&(t=t.replace(e,"^$1")),t}return Q.command=n,Q.argument=a,Q}var St,li;function Ds(){return li||(li=1,St=/^#!(.*)/),St}var Mt,hi;function Is(){if(hi)return Mt;hi=1;const e=Ds();return Mt=(n="")=>{const a=n.match(e);if(!a)return null;const[t,o]=a[0].replace(/#! ?/,"").split(" "),u=t.split("/").pop();return u==="env"?o:o?`${u} ${o}`:u},Mt}var Ot,ui;function As(){if(ui)return Ot;ui=1;const e=te,n=Is();function a(t){const u=Buffer.alloc(150);let s;try{s=e.openSync(t,"r"),e.readSync(s,u,0,150,0),e.closeSync(s)}catch{}return n(u.toString())}return Ot=a,Ot}var Pt,ai;function js(){if(ai)return Pt;ai=1;const e=ee,n=Cs(),a=_s(),t=As(),o=process.platform==="win32",u=/\.(?:com|exe)$/i,s=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function g(i){i.file=n(i);const d=i.file&&t(i.file);return d?(i.args.unshift(i.file),i.command=d,n(i)):i.file}function r(i){if(!o)return i;const d=g(i),f=!u.test(d);if(i.options.forceShell||f){const h=s.test(d);i.command=e.normalize(i.command),i.command=a.command(i.command),i.args=i.args.map(b=>a.argument(b,h));const c=[i.command].concat(i.args).join(" ");i.args=["/d","/s","/c",`"${c}"`],i.command=process.env.comspec||"cmd.exe",i.options.windowsVerbatimArguments=!0}return i}function l(i,d,f){d&&!Array.isArray(d)&&(f=d,d=null),d=d?d.slice(0):[],f=Object.assign({},f);const h={command:i,args:d,options:f,file:void 0,original:{command:i,args:d}};return f.shell?h:r(h)}return Pt=l,Pt}var Tt,ci;function Fs(){if(ci)return Tt;ci=1;const e=process.platform==="win32";function n(u,s){return Object.assign(new Error(`${s} ${u.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${s} ${u.command}`,path:u.command,spawnargs:u.args})}function a(u,s){if(!e)return;const g=u.emit;u.emit=function(r,l){if(r==="exit"){const i=t(l,s);if(i)return g.call(u,"error",i)}return g.apply(u,arguments)}}function t(u,s){return e&&u===1&&!s.file?n(s.original,"spawn"):null}function o(u,s){return e&&u===1&&!s.file?n(s.original,"spawnSync"):null}return Tt={hookChildProcess:a,verifyENOENT:t,verifyENOENTSync:o,notFoundError:n},Tt}var di;function ks(){if(di)return G.exports;di=1;const e=bi,n=js(),a=Fs();function t(u,s,g){const r=n(u,s,g),l=e.spawn(r.command,r.args,r.options);return a.hookChildProcess(l,r),l}function o(u,s,g){const r=n(u,s,g),l=e.spawnSync(r.command,r.args,r.options);return l.error=l.error||a.verifyENOENTSync(l.status,r),l}return G.exports=t,G.exports.spawn=t,G.exports.sync=o,G.exports._parse=n,G.exports._enoent=a,G.exports}var Ns=ks();const Ys=K(Ns),{blue:Hs,cyan:qt,green:Et,yellowBright:fi,white:Bs,red:pi,cyanBright:mi,bgYellowBright:Ls}=Mi,_={react:qt("React"),mobx:qt("Mobx"),"tanstack-router":mi("Tanstack Router"),jotai:mi("Jotai"),vue:Et("Vue3"),pinia:Et("Pinia"),bun:Bs("Bun"),elysia:pi("Elysia"),rspack:fi("Rspack"),tailwinds:qt("Tailwinds"),vite:fi("Vite"),ts:Hs("TS")};function z(){return this._label+" "+(this.completed?Et("\u2714"):pi("\u2718 uncompleted"))+" "+(this.recommended?Ls("recommended"):"")}const J={frontend:{react:{get label(){return z.call(this)},_label:`${_.react} + ${_.mobx}`,value:"react",completed:!0},vue:{get label(){return z.call(this)},_label:`${_.vue} + ${_.pinia}`,value:"vue",completed:!0,recommended:!0},"react-tanstack-jotai":{get label(){return z.call(this)},_label:`${_.react} + ${_.jotai} + ${_["tanstack-router"]}`,value:"react",completed:!0,recommended:!0},"react-tanstack-jotai-tailwindcss":{get label(){return z.call(this)},_label:`${_.react} + ${_.jotai} + ${_["tanstack-router"]} + ${_.tailwinds}`,value:"react",completed:!0,recommended:!0},"react18-tanstack-jotai-tailwindcss":{get label(){return z.call(this)},_label:`${_.react}18 + ${_.jotai} + ${_["tanstack-router"]} + ${_.tailwinds}`,value:"react",completed:!0,recommended:!0}},backend:{bun:{get label(){return z.call(this)},_label:`${_.bun} + ${_.elysia} + ${_.ts}`,value:"bun",completed:!0}}};function gi(e){return e?.trim().replace(/\/+$/g,"")}function Rt(e){return F.basename(F.resolve(e))}function Vs(e){const n=j.readdirSync(e);return n.length===0||n.length===1&&n[0]===".git"}function Us(e){return j.existsSync(e)}function Gs(e){return/^(?:@[a-z\d\-*~][a-z\d\-*._~]*\/)?[a-z\d\-~][a-z\d\-._~]*$/.test(e)}function Ws(e){return e.trim().toLowerCase().replace(/\s+/g,"-").replace(/^[._]/,"").replace(/[^a-z\d\-~]+/g,"-")}function zs(e){if(j.existsSync(e))for(const n of j.readdirSync(e))n!==".git"&&j.rmSync(F.resolve(e,n),{recursive:!0,force:!0})}function Js(e){if(!e)return;const n=e.split(" ")[0].split("/");return{name:n[0],version:n[1]}}function Ks(e,n){j.mkdirSync(n,{recursive:!0});for(const a of j.readdirSync(e)){const t=F.resolve(e,a),o=F.resolve(n,a);vi(t,o)}}function vi(e,n){Zs(e)?Ks(e,n):j.copyFileSync(e,n)}function Zs(e){return j.statSync(e).isDirectory()}const Ct=$i(process.argv.slice(2),{boolean:["help"],string:["_"],default:{help:!1},alias:{h:"help",t:"template"}}),Xs=Object.keys(J).map(e=>` ${k.gray(e)}:
|
98
98
|
${Object.values(J[e]).map(n=>` ${n.label}
|
99
99
|
`).join("")}`).join(`
|
100
100
|
`),Qs=`
|
package/package.json
CHANGED
package/templates/.gitignore
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Elysia with Bun runtime
|
2
|
+
|
3
|
+
## Getting Started
|
4
|
+
To get started with this template, simply paste this command into your terminal:
|
5
|
+
```bash
|
6
|
+
bun create elysia ./elysia-example
|
7
|
+
```
|
8
|
+
|
9
|
+
## Development
|
10
|
+
To start the development server run:
|
11
|
+
```bash
|
12
|
+
bun run dev
|
13
|
+
```
|
14
|
+
|
15
|
+
Open http://localhost:3000/ with your browser to see the result.
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
server {
|
2
|
+
listen 80;
|
3
|
+
server_name api.licuii.xyz;
|
4
|
+
|
5
|
+
# 将所有 HTTP 请求重定向到 HTTPS
|
6
|
+
location / {
|
7
|
+
return 301 https://$host$request_uri;
|
8
|
+
}
|
9
|
+
}
|
10
|
+
|
11
|
+
server {
|
12
|
+
listen 443 ssl;
|
13
|
+
server_name api.licuii.xyz;
|
14
|
+
|
15
|
+
# 配置 SSL 证书和私钥
|
16
|
+
ssl_certificate /home/app/conf/nginx/cert/api/api.crt;
|
17
|
+
ssl_certificate_key /home/app/conf/nginx/cert/api/api.key;
|
18
|
+
|
19
|
+
# 推荐的 SSL 设置
|
20
|
+
ssl_protocols TLSv1.2 TLSv1.3;
|
21
|
+
ssl_ciphers HIGH:!aNULL:!MD5;
|
22
|
+
|
23
|
+
location / {
|
24
|
+
proxy_pass http://localhost:3000;
|
25
|
+
proxy_set_header Host $host;
|
26
|
+
proxy_set_header X-Real-IP $remote_addr;
|
27
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
28
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
29
|
+
}
|
30
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"name": "mrdk",
|
3
|
+
"version": "1.0.50",
|
4
|
+
"scripts": {
|
5
|
+
"dev": "bun --env-file=env/.env.development run --watch src/index.ts",
|
6
|
+
"dev:static": "bun --env-file=env/.env.development run src/index.ts",
|
7
|
+
"prod": "bun --env-file=env/.env.production run --watch src/index.ts",
|
8
|
+
"prod:static": "bun --env-file=env/.env.production run src/index.ts",
|
9
|
+
"test": "bun --env-file=env/.env.test run src/index.ts",
|
10
|
+
"test:static": "bun --env-file=env/.env.test run src/index.ts",
|
11
|
+
"dev:local": "bun --env-file=env/.env.dev run --watch src/index.ts",
|
12
|
+
"dev:local:static": "bun --env-file=env/.env.dev run src/index.ts"
|
13
|
+
},
|
14
|
+
"dependencies": {
|
15
|
+
"@alicloud/live20161101": "1.1.1",
|
16
|
+
"@elysiajs/jwt": "^1.0.2",
|
17
|
+
"@elysiajs/static": "^1.0.3",
|
18
|
+
"elysia": "latest",
|
19
|
+
"log4js": "^6.9.1",
|
20
|
+
"mongoose": "^8.3.5"
|
21
|
+
},
|
22
|
+
"devDependencies": {
|
23
|
+
"bun-types": "latest"
|
24
|
+
},
|
25
|
+
"module": "src/index.js"
|
26
|
+
}
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import Elysia from 'elysia'
|
2
|
+
import jwt from '@elysiajs/jwt'
|
3
|
+
import logger from '../utils/logger'
|
4
|
+
import resCreator from '../utils/resCreator'
|
5
|
+
|
6
|
+
const appContext = new Elysia()
|
7
|
+
.use(
|
8
|
+
jwt({
|
9
|
+
name: 'authJWT',
|
10
|
+
secret: process.env.JWT_SECRET!,
|
11
|
+
exp: '24h',
|
12
|
+
b64: true
|
13
|
+
})
|
14
|
+
)
|
15
|
+
.decorate('logger', logger)
|
16
|
+
.decorate('resCreator', resCreator)
|
17
|
+
.state('session_key', null)
|
18
|
+
|
19
|
+
export default appContext
|
20
|
+
export type AppContext = typeof appContext
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import Elysia, { t } from 'elysia';
|
2
|
+
import type { AppContext } from '../../context';
|
3
|
+
import resCreator from '../../utils/resCreator';
|
4
|
+
// import { UserModel } from '../../db';
|
5
|
+
|
6
|
+
const ExampleController = new Elysia({
|
7
|
+
prefix: '/api', // public prefix
|
8
|
+
name: 'ExampleController',
|
9
|
+
}) as unknown as AppContext;
|
10
|
+
|
11
|
+
// get methond
|
12
|
+
ExampleController.get('/', ({ params, resCreator }) => {
|
13
|
+
return resCreator('hello world' + params, true);
|
14
|
+
});
|
15
|
+
|
16
|
+
// post methond
|
17
|
+
ExampleController.post(
|
18
|
+
'/',
|
19
|
+
async ({ body }) => {
|
20
|
+
// await UserModel.create({
|
21
|
+
// nickname: body.username,
|
22
|
+
// phoneNumber: body.phoneNumber,
|
23
|
+
// });
|
24
|
+
return resCreator('success');
|
25
|
+
},
|
26
|
+
{
|
27
|
+
// type limit, with code suggestion
|
28
|
+
body: t.Object({
|
29
|
+
username: t.String(),
|
30
|
+
phoneNumber: t.Number(),
|
31
|
+
}),
|
32
|
+
}
|
33
|
+
);
|
34
|
+
|
35
|
+
export { ExampleController };
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './example';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './model/users';
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { Schema } from 'mongoose';
|
2
|
+
import mongoose from '../setup';
|
3
|
+
|
4
|
+
export interface IUser {
|
5
|
+
nickname: string;
|
6
|
+
openid: string;
|
7
|
+
phoneNumber?: string;
|
8
|
+
avatar?: string;
|
9
|
+
gender?: string;
|
10
|
+
birthday?: string;
|
11
|
+
}
|
12
|
+
|
13
|
+
const userSchema = new Schema({
|
14
|
+
openid: String,
|
15
|
+
nickname: { type: String, required: false, default: '用户' }, // 用户昵称
|
16
|
+
phoneNumber: { type: String, required: false }, // 用户手机号
|
17
|
+
avatar: {
|
18
|
+
type: String,
|
19
|
+
required: false,
|
20
|
+
default:
|
21
|
+
'http://cdn.licuii.xyz/simple-check/user_default_avatar.png',
|
22
|
+
}, // 用户头像
|
23
|
+
gender: { type: String, required: false, default: '保密' }, // 用户性别
|
24
|
+
birthday: { type: String, required: false, default: null }, // 用户生日
|
25
|
+
});
|
26
|
+
|
27
|
+
export const UserModel = mongoose.model<IUser>(
|
28
|
+
'users',
|
29
|
+
userSchema
|
30
|
+
);
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import mongoose from 'mongoose';
|
2
|
+
|
3
|
+
const setup = async () => {
|
4
|
+
try {
|
5
|
+
const user = atob(process.env.DB_USER);
|
6
|
+
const pass = atob(process.env.DB_PWD);
|
7
|
+
|
8
|
+
const uri = `mongodb://${user}:${pass}@${process.env.DB_URI}/${process.env.DB_COLLECTION}`;
|
9
|
+
|
10
|
+
await mongoose.connect(uri);
|
11
|
+
console.log('>>> 💿 Connected to MongoDB >>>');
|
12
|
+
} catch (err) {
|
13
|
+
console.log('>>> Error connecting to MongoDB', err);
|
14
|
+
}
|
15
|
+
};
|
16
|
+
|
17
|
+
export { setup };
|
18
|
+
|
19
|
+
export default mongoose;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { setup } from './db/setup';
|
2
|
+
import appContext from './context';
|
3
|
+
import router from './router';
|
4
|
+
import staticPlugin from '@elysiajs/static';
|
5
|
+
import Elysia from 'elysia';
|
6
|
+
|
7
|
+
!process.env.DISABLE_DB && setup();
|
8
|
+
const app = new Elysia().use(appContext).use(router).use(staticPlugin());
|
9
|
+
|
10
|
+
app.listen(3000, ({ port }) => {
|
11
|
+
console.log(
|
12
|
+
`>>> 🦊 Elysia is running at ${port}, env ${process.env.ENV} >>>`
|
13
|
+
);
|
14
|
+
});
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import Elysia from 'elysia'
|
2
|
+
import type { AppContext } from '../../context'
|
3
|
+
|
4
|
+
interface authType {
|
5
|
+
_id: string
|
6
|
+
}
|
7
|
+
|
8
|
+
const guardContext = (new Elysia({ name: 'guard' }) as AppContext)
|
9
|
+
.derive({ as: 'scoped' }, async ({ headers, authJWT }) => {
|
10
|
+
const token = headers.authorization
|
11
|
+
const auth = (await authJWT.verify(token)) as authType | false
|
12
|
+
|
13
|
+
return { auth: auth as authType }
|
14
|
+
})
|
15
|
+
.onBeforeHandle({ as: 'scoped' }, ({ auth, resCreator }) => {
|
16
|
+
if (!auth) return resCreator(null, false, '登录过期,请重新登录', 401)
|
17
|
+
})
|
18
|
+
|
19
|
+
export { guardContext }
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import Elysia from 'elysia';
|
2
|
+
import { ExampleController } from '../controllers';
|
3
|
+
|
4
|
+
const router = new Elysia().use(ExampleController);
|
5
|
+
|
6
|
+
router.onError(({ logger, path, error, resCreator }) => {
|
7
|
+
const log = logger.getLogger('error');
|
8
|
+
log.error('error' + error, path);
|
9
|
+
|
10
|
+
try {
|
11
|
+
const msg = JSON.parse(error.message);
|
12
|
+
return resCreator(null, false, msg, 400);
|
13
|
+
} catch {
|
14
|
+
return resCreator(null, false, error.message, 400);
|
15
|
+
}
|
16
|
+
});
|
17
|
+
|
18
|
+
export default router;
|
@@ -0,0 +1,26 @@
|
|
1
|
+
interface ResType<T = any> {
|
2
|
+
succ?: boolean;
|
3
|
+
msg?: string;
|
4
|
+
code?: number;
|
5
|
+
data?: T;
|
6
|
+
}
|
7
|
+
|
8
|
+
const resCreator = (
|
9
|
+
data: any,
|
10
|
+
succ = true,
|
11
|
+
msg?: string,
|
12
|
+
code?: number
|
13
|
+
) => {
|
14
|
+
const res: ResType = { data };
|
15
|
+
res.succ = succ;
|
16
|
+
|
17
|
+
if (code) res.code = code;
|
18
|
+
else res.code = res.succ ? 200 : 500;
|
19
|
+
|
20
|
+
if (msg) res.msg = msg;
|
21
|
+
else res.msg = res.succ ? '操作成功' : '操作失败';
|
22
|
+
|
23
|
+
return res;
|
24
|
+
};
|
25
|
+
|
26
|
+
export default resCreator;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"target": "ESNext",
|
4
|
+
"module": "ESNext",
|
5
|
+
"moduleResolution": "node",
|
6
|
+
"types": ["bun-types"],
|
7
|
+
// "importsNotUsedAsValues": "error",
|
8
|
+
"verbatimModuleSyntax": true,
|
9
|
+
"ignoreDeprecations": "5.0",
|
10
|
+
"esModuleInterop": true,
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
12
|
+
"strict": true,
|
13
|
+
"skipLibCheck": true,
|
14
|
+
"resolveJsonModule": true
|
15
|
+
},
|
16
|
+
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/*.ts", "types"]
|
17
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
declare namespace NodeJS {
|
2
|
+
interface ProcessEnv {
|
3
|
+
ENV: 'development' | 'production' | 'test' | 'dev-local';
|
4
|
+
JWT_SECRET: string;
|
5
|
+
DB_USER: string;
|
6
|
+
DB_PWD: string;
|
7
|
+
DB_URI: string;
|
8
|
+
DB_COLLECTION: string;
|
9
|
+
DOMAIN: string;
|
10
|
+
DISABLE_DB: boolean;
|
11
|
+
}
|
12
|
+
}
|