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.
Files changed (28) hide show
  1. package/dist/index.mjs +1 -1
  2. package/package.json +1 -1
  3. package/templates/.gitignore +1 -0
  4. package/templates/template-bun/.prettierrc +4 -0
  5. package/templates/template-bun/README.md +15 -0
  6. package/templates/template-bun/bun.lockb +0 -0
  7. package/templates/template-bun/bunfig.toml +3 -0
  8. package/templates/template-bun/env/.env.dev +13 -0
  9. package/templates/template-bun/env/.env.development +9 -0
  10. package/templates/template-bun/env/.env.production +8 -0
  11. package/templates/template-bun/env/.env.test +8 -0
  12. package/templates/template-bun/nginx.conf +30 -0
  13. package/templates/template-bun/package.json +26 -0
  14. package/templates/template-bun/public/_git_not_ignore +0 -0
  15. package/templates/template-bun/src/context/index.ts +20 -0
  16. package/templates/template-bun/src/controllers/example/index.ts +35 -0
  17. package/templates/template-bun/src/controllers/index.ts +1 -0
  18. package/templates/template-bun/src/controllers/ws/index.ts +12 -0
  19. package/templates/template-bun/src/db/index.ts +1 -0
  20. package/templates/template-bun/src/db/model/users.ts +30 -0
  21. package/templates/template-bun/src/db/setup.ts +19 -0
  22. package/templates/template-bun/src/index.ts +14 -0
  23. package/templates/template-bun/src/plugins/derives/auth.ts +19 -0
  24. package/templates/template-bun/src/router/index.ts +18 -0
  25. package/templates/template-bun/src/utils/logger.ts +13 -0
  26. package/templates/template-bun/src/utils/resCreator.ts +26 -0
  27. package/templates/template-bun/tsconfig.json +17 -0
  28. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-lik-app",
3
- "version": "1.3.1",
3
+ "version": "1.4.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": "licheung228 <licheung228@163.com>",
@@ -1 +1,2 @@
1
1
  */node_modules
2
+ template-bun/logs
@@ -0,0 +1,4 @@
1
+ {
2
+ "printWidth": 65,
3
+ "singleQuote": true
4
+ }
@@ -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,3 @@
1
+ [install]
2
+ # set default registry as a string
3
+ registry = "https://registry.npmmirror.com"
@@ -0,0 +1,13 @@
1
+ # JWT 密钥
2
+ JWT_SECRET='TSETJWT'
3
+ DB_URI='localhost:27017'
4
+ # mongodb集合名
5
+ DB_COLLECTION=''
6
+ # 填写你的数据库用户名
7
+ DB_USER=''
8
+ # 密码
9
+ DB_PWD=''
10
+ # 你的域名/ip
11
+ DOMAIN='' # 测试使用baseUrl
12
+ ENV='dev-local'
13
+ DISABLE_DB=true # 不开启 mongodb
@@ -0,0 +1,9 @@
1
+
2
+ # 释意 见 .env.dev
3
+ JWT_SECRET=''
4
+ DB_URI='localhost:27017'
5
+ DB_COLLECTION=''
6
+ DB_USER=''
7
+ DB_PWD=''
8
+ DOMAIN=''
9
+ ENV='development'
@@ -0,0 +1,8 @@
1
+ JWT_SECRET=''
2
+ DB_URI=''
3
+ DB_COLLECTION=''
4
+ DB_USER=''
5
+ DB_PWD=''
6
+ DOMAIN=''
7
+ SERVER_ENV='production'
8
+ ENV='production'
@@ -0,0 +1,8 @@
1
+ JWT_SECRET=''
2
+ DB_URI=''
3
+ DB_COLLECTION=''
4
+ DB_USER=''
5
+ DB_PWD=''
6
+ DOMAIN=''
7
+ SERVER_ENV='production'
8
+ ENV='test'
@@ -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,12 @@
1
+ import Elysia from 'elysia';
2
+
3
+ const WsController = new Elysia({ name: 'WsController' });
4
+
5
+ WsController.ws('/ws', {
6
+ message(ws, message) {},
7
+ open(ws) {
8
+ console.log('open');
9
+ },
10
+ });
11
+
12
+ export default WsController;
@@ -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,13 @@
1
+ import log4js from 'log4js'
2
+
3
+ const logger = log4js.configure({
4
+ appenders: {
5
+ error: {
6
+ type: 'file',
7
+ filename: './logs/error.log'
8
+ }
9
+ },
10
+ categories: { default: { appenders: ['error'], level: 'error' } }
11
+ })
12
+
13
+ export default logger
@@ -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
+ }