@xmono/server 1.0.0

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 (2) hide show
  1. package/dist/index.js +1 -0
  2. package/package.json +31 -0
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{ServerUtil:()=>T,default:()=>F});const r=require("fs");var o=e.n(r);const s=require("path");var n=e.n(s);const a=require("koa");var i=e.n(a);const c=require("@koa/send"),l=require("@xmono/db"),d=require("@koa/bodyparser"),u=({publicPath:e,root:t})=>(e=e.replace(/\/*$/,"/").replace(/^\/*/,"/"),async(r,o)=>{if(r.path.startsWith(e)&&["HEAD","GET"].includes(r.method)){let s=decodeURIComponent(r.path.replace(e,""));try{await(0,c.send)(r,s,{root:t})}catch{await o()}}else await o()}),y=require("@koa/router");var p=e.n(y);const f=require("koa-jwt");var b=e.n(f);const h=new(p()),m=async(e,t)=>t().catch(t=>{let r=500,o="";"string"==typeof t?(r=400,o=t,console.log(t)):401===t.status?(r=401,o=t.originalError?t.originalError.message:t.message):(t.status&&(r=t.status),o=t.message,console.log(t)),e.response.status=r,e.response.body=o}),g=new(i());function q(e){Array.isArray(e)||(e=[e]);const t=[];for(let r of e)"function"==typeof r.keys?r.keys().forEach(e=>{t.push(r(e).default)}):t.push(r);return t}const w={async start(e={}){const t=n().resolve("config.json");o().existsSync(t)&&Object.assign(e,require(t)),g.config=e;let{db:r,host:s,port:a=8080,auth:i,public:y="dist/public",models:p,controllers:f,index:w="dist/public/index.html"}=e;if(p&&(p=q(p)),f&&(f=q(f)),r&&(!0===r&&(r={client:"sqlite3",connection:{filename:n().resolve("data.db")}}),await l.DBUtil.init(r,p)),g.use(m),g.use((0,d.bodyParser)({parsedMethods:["PUT","POST","DELETE"]})),g.use(((e,t)=>{if(e){t&&h.use((e=>{const t=b()({secret:e.secret,getToken:e=>e.header.authorization||e.query.token});return e.unless?t.unless({path:e.unless}):t})(t));for(let t of e)for(let e in t){const r=e.split(" ");if(2!==r.length)throw"controller key error: "+e;{const[o,s]=r;if(!["get","post","put","delete"].includes(o))throw"controller method error: "+o;h[o]("/api"+s,t[e])}}}return h.routes()})(f,i)),y)if(Array.isArray(y))for(let e of y)g.use(u(e));else"string"==typeof y&&(y={publicPath:"/",root:y,index:"index.html"}),g.use(u(y));return w&&g.use(async e=>await(0,c.send)(e,w)),new Promise(e=>{const t=g.listen(a,s,()=>{const r=t.address();console.log(`server listen on [${r.address}]:${r.port}`),e(t)})})}},v=require("fs-extra");var S=e.n(v);const k={parse(e){let t=null,r=null,o=null,s=null,n=null;const a=e.query;for(let e in a)switch(e){case"fields":r=a[e].split(",");break;case"sort":{o=o||[];const t=a[e].split(",");for(let e=0;e<t.length;e+=2)o.push({column:t[e],order:t[e+1]});break}case"size":case"page":s=s||{},s[e]=a[e]-0;break;case"search":n=a[e];break;default:if(a[e]){t=t||{};let r=decodeURIComponent(a[e]);"!null"===r&&(r=["!=",""]),t[e]=r}}return{condition:{where:t},options:{fields:r,sort:o,pager:s},search:n}}},$=require("@koa/multer");var x=e.n($);const j={createModelController(e){const t=e.key||"id",r=e.table;async function o(t){const{condition:r,options:o,search:s}=k.parse(t);if(s){const t=[];e.columns.forEach(e=>{e.matchSearch&&t.push({[e.name]:["like",`%${s}%`]})}),t.length&&(r.orWhere=t)}let n=await e.find(r,o);t.callback&&(n=t.callback(n)),o.pager?t.body={data:n,pager:o.pager}:t.body=n}async function s(r){let o=await e.findById(r.params[t]);r.body=r.callback?r.callback(o):o}async function n(t){t.body=await e.save(t.request.body)}async function a(r){r.body=await e.deleteById(r.request.body[t])}async function i(r){r.body=await e.updateById(r.params[t],r.request.body)}return o.req=`get /${r}`,s.req=`get /${r}/:${t}`,n.req=`post /${r}`,i.req=`put /${r}/:${t}`,a.req=`delete /${r}`,{all:function(){return{[o.req]:o,[s.req]:s,[n.req]:n,[i.req]:i,[a.req]:a}},list:o,get:s,post:n,put:i,delete:a}},createFileController(e={}){const{prefix:t="/files",getFullPath:r=e=>e}=e,o=x()({storage:{_handleFile(e,t,o){let s=r(e.body.path),{hash:a,index:i,name:c}=e.body;a&&(s=n().join(s,a)),s=void 0!==i?n().join(s,i):n().join(s,c),S().ensureFileSync(s);const l=S().createWriteStream(s);t.stream.pipe(l),l.on("finish",()=>{o(null,{path:s,size:l.bytesWritten})}),e.on("aborted",()=>{t.stream.on("end",()=>{S().removeSync(s)}),t.stream.emit("end")})},_removeFile(e,t,r){S().remove(t.path,r)}}});return{[`get ${t}/{*path}`]:async e=>{const t=r(e.params.path);if(S().existsSync(t))return await(0,c.send)(e,n().basename(t),{root:n().dirname(t)});throw"无效路径"},[`post ${t}/readdir`]:async e=>{const t=r(e.request.body.path),o=e.request.body.fields||[],s=[];S().existsSync(t)&&S().readdirSync(t).forEach(e=>{let r={name:e};const a=S().statSync(n().join(t,e));if(a.isDirectory())r.dir=1;else for(let e of o)r[e]=a[e];s.push(r)}),e.body=s},[`post ${t}/readfile`]:async e=>{const t=r(e.request.body.path);if(!S().existsSync(t))throw"无效路径";await(0,c.send)(e,n().basename(t),{root:n().dirname(t)})},[`post ${t}/remove`]:async e=>{let{path:t}=e.request.body;Array.isArray(t)||(t=[t]),t.forEach(e=>{S().removeSync(r(e))}),e.body=""},[`post ${t}/upload`]:async(e,t)=>{const r=o.single("file");await r(e,t),e.body=""},[`post ${t}/mkdir`]:async e=>{const t=r(e.request.body.path);S().mkdirSync(t),e.body=""},[`post ${t}/writefile`]:async e=>{const{content:t,path:o}=e.request.body,s=r(o);S().writeFileSync(s,t),e.body=""},[`post ${t}/rename`]:async e=>{let{from:t,to:o}=e.request.body;const s=r(t),n=r(o);S().renameSync(s,n),e.body=""},[`post ${t}/copy`]:async e=>{let{from:t,to:o}=e.request.body;const s=r(t),n=r(o);S().copySync(s,n,{overwrite:!1,errorOnExist:!0}),e.body=""},[`post ${t}/merge`]:async e=>{const{total:t,hash:o,name:s}=e.request.body,a=r(e.request.body.path),i=n().join(a,o),c=n().join(a,s);S().writeFileSync(c,"");for(let e=0;e<t;e++)S().appendFileSync(c,S().readFileSync(i+"/"+e));S().removeSync(i),e.body=""}}}},E=require("jsonwebtoken");var P=e.n(E);const F=w,T={...j,getJWTToken:(e,t,r)=>P().sign(e,t,{expiresIn:r})};module.exports=t})();
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@xmono/server",
3
+ "version": "1.0.0",
4
+ "author": "wangxing",
5
+ "description": "",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "scripts": {
9
+ "build_dev": "xbuild -b index.js -m development",
10
+ "build_prod": "xbuild -b index.js -m production"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "dependencies": {
19
+ "@koa/bodyparser": "^6.0.0",
20
+ "@koa/multer": "^4.0.0",
21
+ "@koa/router": "^15.1.1",
22
+ "@koa/send": "^6.0.0",
23
+ "@xmono/db": "^1.0.0",
24
+ "@xmono/utils": "^1.0.0",
25
+ "fs-extra": "^11.3.3",
26
+ "jsonwebtoken": "^9.0.3",
27
+ "koa": "^3.1.1",
28
+ "koa-jwt": "^4.0.4",
29
+ "multer": "^2.0.2"
30
+ }
31
+ }