@rdyl/node-koa-controller 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/cache.js +179 -0
- package/dist/index.js +95 -1
- package/dist/{controller/gateway.js → jwt.js} +6 -1
- package/dist/{controller/meta.js → meta.js} +12 -6
- package/dist/utils.js +141 -0
- package/package.json +1 -1
- package/types/cache.d.ts +10 -0
- package/types/index.d.ts +5 -1
- package/types/jwt.d.ts +37 -0
- package/types/{controller/meta.d.ts → meta.d.ts} +6 -11
- package/types/type.d.ts +5 -0
- package/types/{controller/utils.d.ts → utils.d.ts} +3 -1
- package/dist/controller/index.js +0 -271
- package/dist/controller/utils.js +0 -60
- package/types/controller/gateway.d.ts +0 -36
- package/types/controller/index.d.ts +0 -6
package/CHANGELOG.md
CHANGED
package/dist/cache.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
46
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
+
function step(op) {
|
|
49
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
+
switch (op[0]) {
|
|
54
|
+
case 0: case 1: t = op; break;
|
|
55
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
+
default:
|
|
59
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
+
if (t[2]) _.ops.pop();
|
|
64
|
+
_.trys.pop(); continue;
|
|
65
|
+
}
|
|
66
|
+
op = body.call(thisArg, _);
|
|
67
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
72
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
73
|
+
};
|
|
74
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
|
+
var fs_1 = __importDefault(require("fs"));
|
|
76
|
+
var path_1 = require("path");
|
|
77
|
+
var ASTCache = /** @class */ (function () {
|
|
78
|
+
function ASTCache() {
|
|
79
|
+
}
|
|
80
|
+
ASTCache.resolve = function (dir) {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
82
|
+
var list, _i, list_1, p, url, stat, isDir, sp, ext, _a;
|
|
83
|
+
return __generator(this, function (_b) {
|
|
84
|
+
switch (_b.label) {
|
|
85
|
+
case 0:
|
|
86
|
+
list = fs_1.default.readdirSync(dir);
|
|
87
|
+
_i = 0, list_1 = list;
|
|
88
|
+
_b.label = 1;
|
|
89
|
+
case 1:
|
|
90
|
+
if (!(_i < list_1.length)) return [3 /*break*/, 8];
|
|
91
|
+
p = list_1[_i];
|
|
92
|
+
url = (0, path_1.resolve)(dir, p);
|
|
93
|
+
stat = fs_1.default.statSync(url);
|
|
94
|
+
isDir = stat.isDirectory();
|
|
95
|
+
if (!isDir) return [3 /*break*/, 3];
|
|
96
|
+
// 文件架
|
|
97
|
+
return [4 /*yield*/, ASTCache.resolve(url)];
|
|
98
|
+
case 2:
|
|
99
|
+
// 文件架
|
|
100
|
+
_b.sent();
|
|
101
|
+
return [3 /*break*/, 7];
|
|
102
|
+
case 3:
|
|
103
|
+
_b.trys.push([3, 6, , 7]);
|
|
104
|
+
sp = p.split(".");
|
|
105
|
+
ext = sp[sp.length - 1];
|
|
106
|
+
if (!(ext === "ts" || ext === "js")) return [3 /*break*/, 5];
|
|
107
|
+
// ts | js 文件
|
|
108
|
+
return [4 /*yield*/, Promise.resolve("".concat(url)).then(function (s) { return __importStar(require(s)); })];
|
|
109
|
+
case 4:
|
|
110
|
+
// ts | js 文件
|
|
111
|
+
_b.sent();
|
|
112
|
+
_b.label = 5;
|
|
113
|
+
case 5: return [3 /*break*/, 7];
|
|
114
|
+
case 6:
|
|
115
|
+
_a = _b.sent();
|
|
116
|
+
console.warn("解析出现错误!");
|
|
117
|
+
return [3 /*break*/, 7];
|
|
118
|
+
case 7:
|
|
119
|
+
_i++;
|
|
120
|
+
return [3 /*break*/, 1];
|
|
121
|
+
case 8: return [2 /*return*/];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
ASTCache.register = function (router, useJwt) {
|
|
127
|
+
var _this = this;
|
|
128
|
+
ASTCache.routes.forEach(function (route) {
|
|
129
|
+
var handlers = route.handlers, prefix = route.prefix, Instance = route.Instance;
|
|
130
|
+
handlers.forEach(function (handler) {
|
|
131
|
+
var method = handler.method, url = handler.url, name = handler.name;
|
|
132
|
+
var path = (0, path_1.join)("/" + ASTCache.prefix, prefix, url);
|
|
133
|
+
var isPublic = route.isPublic || handler.isPublic;
|
|
134
|
+
if (isPublic) {
|
|
135
|
+
ASTCache.whitelist.push(path);
|
|
136
|
+
}
|
|
137
|
+
// @ts-ignore
|
|
138
|
+
router[method.toLowerCase()](path, function (_ctx) { return __awaiter(_this, void 0, void 0, function () {
|
|
139
|
+
var instance, _a, stat, value, token, _b;
|
|
140
|
+
return __generator(this, function (_c) {
|
|
141
|
+
switch (_c.label) {
|
|
142
|
+
case 0:
|
|
143
|
+
instance = new Instance(_ctx);
|
|
144
|
+
_c.label = 1;
|
|
145
|
+
case 1:
|
|
146
|
+
_c.trys.push([1, 5, , 6]);
|
|
147
|
+
if (!useJwt) return [3 /*break*/, 3];
|
|
148
|
+
return [4 /*yield*/, useJwt.use(_ctx)];
|
|
149
|
+
case 2:
|
|
150
|
+
_a = _c.sent(), stat = _a.stat, value = _a.value, token = _a.token;
|
|
151
|
+
if (stat === "none" || stat === "expired") {
|
|
152
|
+
return [2 /*return*/, instance.status.unauthorized()];
|
|
153
|
+
}
|
|
154
|
+
instance.jwt = {
|
|
155
|
+
token: token,
|
|
156
|
+
value: value,
|
|
157
|
+
};
|
|
158
|
+
_c.label = 3;
|
|
159
|
+
case 3: return [4 /*yield*/, Promise.resolve(instance[name]())];
|
|
160
|
+
case 4:
|
|
161
|
+
_c.sent();
|
|
162
|
+
return [3 /*break*/, 6];
|
|
163
|
+
case 5:
|
|
164
|
+
_b = _c.sent();
|
|
165
|
+
instance.status.exception();
|
|
166
|
+
return [3 /*break*/, 6];
|
|
167
|
+
case 6: return [2 /*return*/];
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}); });
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
ASTCache.prefix = "";
|
|
175
|
+
ASTCache.routes = [];
|
|
176
|
+
ASTCache.whitelist = [];
|
|
177
|
+
return ASTCache;
|
|
178
|
+
}());
|
|
179
|
+
exports.default = ASTCache;
|
package/dist/index.js
CHANGED
|
@@ -13,5 +13,99 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
13
13
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
26
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
27
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
28
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
29
|
+
function step(op) {
|
|
30
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
31
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
32
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
33
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
34
|
+
switch (op[0]) {
|
|
35
|
+
case 0: case 1: t = op; break;
|
|
36
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
37
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
38
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
39
|
+
default:
|
|
40
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
41
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
42
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
43
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
44
|
+
if (t[2]) _.ops.pop();
|
|
45
|
+
_.trys.pop(); continue;
|
|
46
|
+
}
|
|
47
|
+
op = body.call(thisArg, _);
|
|
48
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
49
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
53
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
54
|
+
};
|
|
16
55
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
|
|
56
|
+
exports.useApiController = useApiController;
|
|
57
|
+
var koa_router_1 = __importDefault(require("koa-router"));
|
|
58
|
+
var koa_static_1 = __importDefault(require("koa-static"));
|
|
59
|
+
var koa_body_1 = require("koa-body");
|
|
60
|
+
var path_1 = require("path");
|
|
61
|
+
var utils_1 = require("./utils");
|
|
62
|
+
var cache_1 = __importDefault(require("./cache"));
|
|
63
|
+
function useApiController(app, opts) {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
+
var root, _a, prefix, _b, port, _c, logs, formidable, jwt, router, rootDir, ip;
|
|
66
|
+
return __generator(this, function (_d) {
|
|
67
|
+
switch (_d.label) {
|
|
68
|
+
case 0:
|
|
69
|
+
root = opts.root, _a = opts.prefix, prefix = _a === void 0 ? "" : _a, _b = opts.port, port = _b === void 0 ? 8080 : _b, _c = opts.logs, logs = _c === void 0 ? true : _c, formidable = opts.formidable, jwt = opts.jwt;
|
|
70
|
+
cache_1.default.prefix = prefix;
|
|
71
|
+
router = new koa_router_1.default();
|
|
72
|
+
rootDir = (0, path_1.resolve)(process.cwd(), root);
|
|
73
|
+
return [4 /*yield*/, cache_1.default.resolve(rootDir)];
|
|
74
|
+
case 1:
|
|
75
|
+
_d.sent();
|
|
76
|
+
// 注册路由
|
|
77
|
+
cache_1.default.register(router, jwt);
|
|
78
|
+
if (opts.static) {
|
|
79
|
+
app.use((0, koa_static_1.default)(process.cwd(), {
|
|
80
|
+
root: opts.static,
|
|
81
|
+
}));
|
|
82
|
+
cache_1.default.whitelist.unshift(new RegExp("/".concat(opts.static)));
|
|
83
|
+
}
|
|
84
|
+
app.use((0, koa_body_1.koaBody)({
|
|
85
|
+
multipart: true,
|
|
86
|
+
formidable: formidable,
|
|
87
|
+
}));
|
|
88
|
+
if (logs) {
|
|
89
|
+
app.use(utils_1.RunningLogsHandler);
|
|
90
|
+
}
|
|
91
|
+
app.use(router.routes()).use(router.allowedMethods());
|
|
92
|
+
ip = (0, utils_1.getIPAdress)();
|
|
93
|
+
return [2 /*return*/, {
|
|
94
|
+
whitelist: cache_1.default.whitelist,
|
|
95
|
+
port: port,
|
|
96
|
+
prefix: prefix,
|
|
97
|
+
ip: ip,
|
|
98
|
+
running: function () {
|
|
99
|
+
(0, utils_1.ServerLaunchLogs)({
|
|
100
|
+
ip: ip,
|
|
101
|
+
port: port,
|
|
102
|
+
prefix: prefix,
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
}];
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
__exportStar(require("./meta"), exports);
|
|
111
|
+
__exportStar(require("./jwt"), exports);
|
|
@@ -93,6 +93,7 @@ var JwtTokens = /** @class */ (function () {
|
|
|
93
93
|
if (!result) {
|
|
94
94
|
return [2 /*return*/, {
|
|
95
95
|
stat: "none",
|
|
96
|
+
token: token,
|
|
96
97
|
value: null,
|
|
97
98
|
}];
|
|
98
99
|
}
|
|
@@ -102,11 +103,13 @@ var JwtTokens = /** @class */ (function () {
|
|
|
102
103
|
this.removeBy(token);
|
|
103
104
|
return [2 /*return*/, {
|
|
104
105
|
stat: "expired",
|
|
106
|
+
token: token,
|
|
105
107
|
value: result.data,
|
|
106
108
|
}];
|
|
107
109
|
}
|
|
108
110
|
return [2 /*return*/, {
|
|
109
111
|
stat: "ok",
|
|
112
|
+
token: token,
|
|
110
113
|
value: result.data,
|
|
111
114
|
}];
|
|
112
115
|
}
|
|
@@ -140,12 +143,14 @@ var JwtSecretGateway = /** @class */ (function () {
|
|
|
140
143
|
return __generator(this, function (_a) {
|
|
141
144
|
switch (_a.label) {
|
|
142
145
|
case 0:
|
|
143
|
-
token = ctx.request.headers[this.headerName.toLowerCase()] ||
|
|
146
|
+
token = (ctx.request.headers[this.headerName.toLowerCase()] ||
|
|
147
|
+
"");
|
|
144
148
|
if (!(typeof token === "string")) return [3 /*break*/, 2];
|
|
145
149
|
return [4 /*yield*/, this._jwtToken.get(token)];
|
|
146
150
|
case 1: return [2 /*return*/, _a.sent()];
|
|
147
151
|
case 2: return [2 /*return*/, {
|
|
148
152
|
stat: "none",
|
|
153
|
+
token: token,
|
|
149
154
|
value: null,
|
|
150
155
|
}];
|
|
151
156
|
}
|
|
@@ -35,10 +35,13 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
38
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
42
|
exports.Patch = exports.Put = exports.Delete = exports.Post = exports.Get = exports.BaseController = exports.HttpMethod = void 0;
|
|
40
43
|
exports.Controller = Controller;
|
|
41
|
-
var
|
|
44
|
+
var cache_1 = __importDefault(require("./cache"));
|
|
42
45
|
var HttpMethod;
|
|
43
46
|
(function (HttpMethod) {
|
|
44
47
|
HttpMethod["GET"] = "GET";
|
|
@@ -50,7 +53,10 @@ var HttpMethod;
|
|
|
50
53
|
var BaseController = /** @class */ (function () {
|
|
51
54
|
function BaseController(_ctx) {
|
|
52
55
|
this._ctx = _ctx;
|
|
53
|
-
this.jwt = {
|
|
56
|
+
this.jwt = {
|
|
57
|
+
token: "",
|
|
58
|
+
value: {},
|
|
59
|
+
};
|
|
54
60
|
}
|
|
55
61
|
Object.defineProperty(BaseController.prototype, "pathname", {
|
|
56
62
|
get: function () {
|
|
@@ -66,11 +72,11 @@ var BaseController = /** @class */ (function () {
|
|
|
66
72
|
values: values,
|
|
67
73
|
getPaged: function (def) {
|
|
68
74
|
if (def === void 0) { def = {}; }
|
|
69
|
-
var p = Number(values.
|
|
75
|
+
var p = Number(values.current);
|
|
70
76
|
var s = Number(values.pageSize);
|
|
71
|
-
var _a = def.
|
|
77
|
+
var _a = def.current, dPage = _a === void 0 ? 1 : _a, _b = def.pageSize, dPageSize = _b === void 0 ? 20 : _b;
|
|
72
78
|
return {
|
|
73
|
-
|
|
79
|
+
current: isNaN(p) ? dPage : p,
|
|
74
80
|
pageSize: isNaN(s) ? dPageSize : s,
|
|
75
81
|
};
|
|
76
82
|
},
|
|
@@ -197,7 +203,7 @@ function Controller(prefix, isPublic) {
|
|
|
197
203
|
handlers: ((_a = target.prototype) === null || _a === void 0 ? void 0 : _a.routes) || [],
|
|
198
204
|
isPublic: isPublic,
|
|
199
205
|
};
|
|
200
|
-
|
|
206
|
+
cache_1.default.routes.push(route);
|
|
201
207
|
};
|
|
202
208
|
}
|
|
203
209
|
exports.Get = MethodFactory(HttpMethod.GET);
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.formatDateTime = formatDateTime;
|
|
43
|
+
exports.getIPAdress = getIPAdress;
|
|
44
|
+
exports.RunningLogsHandler = RunningLogsHandler;
|
|
45
|
+
exports.ServerLaunchLogs = ServerLaunchLogs;
|
|
46
|
+
var os_1 = __importDefault(require("os"));
|
|
47
|
+
var path_1 = require("path");
|
|
48
|
+
var boxen_1 = __importDefault(require("boxen"));
|
|
49
|
+
var chalk_1 = __importDefault(require("chalk"));
|
|
50
|
+
function formatDateTime(date, format) {
|
|
51
|
+
if (date === void 0) { date = new Date(); }
|
|
52
|
+
if (format === void 0) { format = "YYYY-MM-DD HH:mm:ss"; }
|
|
53
|
+
var pad = function (num) { return num.toString().padStart(2, "0"); };
|
|
54
|
+
var year = date.getFullYear();
|
|
55
|
+
var month = pad(date.getMonth() + 1);
|
|
56
|
+
var day = pad(date.getDate());
|
|
57
|
+
var hours = pad(date.getHours());
|
|
58
|
+
var minutes = pad(date.getMinutes());
|
|
59
|
+
var seconds = pad(date.getSeconds());
|
|
60
|
+
return format
|
|
61
|
+
.replace("YYYY", year.toString())
|
|
62
|
+
.replace("MM", month)
|
|
63
|
+
.replace("DD", day)
|
|
64
|
+
.replace("HH", hours)
|
|
65
|
+
.replace("mm", minutes)
|
|
66
|
+
.replace("ss", seconds);
|
|
67
|
+
}
|
|
68
|
+
function getIPAdress() {
|
|
69
|
+
var interfaces = os_1.default.networkInterfaces();
|
|
70
|
+
for (var key in interfaces) {
|
|
71
|
+
var iface = interfaces[key];
|
|
72
|
+
if (iface) {
|
|
73
|
+
for (var i = 0; i < iface.length; i++) {
|
|
74
|
+
var alias = iface[i];
|
|
75
|
+
if (alias.family === "IPv4" &&
|
|
76
|
+
alias.address !== "127.0.0.1" &&
|
|
77
|
+
!alias.internal) {
|
|
78
|
+
return alias.address;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return "127.0.0.1";
|
|
84
|
+
}
|
|
85
|
+
function RunningLogsHandler(ctx, next) {
|
|
86
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
87
|
+
var start, duration, status_1, method, statusColor, dateTime, dText;
|
|
88
|
+
return __generator(this, function (_a) {
|
|
89
|
+
switch (_a.label) {
|
|
90
|
+
case 0:
|
|
91
|
+
start = Date.now();
|
|
92
|
+
_a.label = 1;
|
|
93
|
+
case 1:
|
|
94
|
+
_a.trys.push([1, , 3, 4]);
|
|
95
|
+
return [4 /*yield*/, next()];
|
|
96
|
+
case 2:
|
|
97
|
+
_a.sent();
|
|
98
|
+
return [3 /*break*/, 4];
|
|
99
|
+
case 3:
|
|
100
|
+
duration = Date.now() - start;
|
|
101
|
+
status_1 = ctx.status;
|
|
102
|
+
method = ctx.method;
|
|
103
|
+
statusColor = void 0;
|
|
104
|
+
if (status_1 >= 500)
|
|
105
|
+
statusColor = chalk_1.default.red;
|
|
106
|
+
else if (status_1 >= 400)
|
|
107
|
+
statusColor = chalk_1.default.yellow;
|
|
108
|
+
else if (status_1 >= 300)
|
|
109
|
+
statusColor = chalk_1.default.cyan;
|
|
110
|
+
else if (status_1 >= 200)
|
|
111
|
+
statusColor = chalk_1.default.green;
|
|
112
|
+
else
|
|
113
|
+
statusColor = chalk_1.default.gray;
|
|
114
|
+
dateTime = formatDateTime();
|
|
115
|
+
dText = chalk_1.default.gray("".concat(duration, "ms"));
|
|
116
|
+
if (duration > 5000) {
|
|
117
|
+
dText = chalk_1.default.red("".concat(duration, "ms"));
|
|
118
|
+
}
|
|
119
|
+
else if (duration > 1000) {
|
|
120
|
+
dText = chalk_1.default.yellow("".concat(duration, "ms"));
|
|
121
|
+
}
|
|
122
|
+
console.log("- [".concat(dateTime, " | ").concat(dText, "] ").concat(chalk_1.default.magenta(method), " ").concat(ctx.url, " ").concat(statusColor(status_1)));
|
|
123
|
+
return [7 /*endfinally*/];
|
|
124
|
+
case 4: return [2 /*return*/];
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function ServerLaunchLogs(config) {
|
|
130
|
+
var port = config.port, prefix = config.prefix, ip = config.ip;
|
|
131
|
+
var suffix = (0, path_1.join)(port.toString(), prefix);
|
|
132
|
+
var env = process.env.NODE_ENV || "development";
|
|
133
|
+
var messages = (0, boxen_1.default)(chalk_1.default.hex("#83FFE6")("\n ".concat(chalk_1.default.bold.hex("#FFA500")("🚀 Server started successfully!"), "\n\n ").concat(chalk_1.default.bold("Env:"), " ").concat(chalk_1.default.white(" " + env + " "), "\n\n ").concat(chalk_1.default.bold("Local:"), " ").concat(chalk_1.default.green("http://localhost:".concat(suffix)), "\n ").concat(chalk_1.default.bold("Network:"), " ").concat(chalk_1.default.green("http://".concat(ip, ":").concat(suffix)), "\n")), {
|
|
134
|
+
padding: 0.5,
|
|
135
|
+
margin: 0.5,
|
|
136
|
+
borderStyle: "round",
|
|
137
|
+
borderColor: "#5ED7FF",
|
|
138
|
+
});
|
|
139
|
+
console.clear();
|
|
140
|
+
console.log(messages);
|
|
141
|
+
}
|
package/package.json
CHANGED
package/types/cache.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Router from "koa-router";
|
|
2
|
+
import { ASTCacheRoute } from "./meta";
|
|
3
|
+
import { JwtSecretGateway } from "./jwt";
|
|
4
|
+
export default class ASTCache {
|
|
5
|
+
static prefix: string;
|
|
6
|
+
static routes: ASTCacheRoute[];
|
|
7
|
+
static whitelist: (string | RegExp)[];
|
|
8
|
+
static resolve(dir: string): Promise<void>;
|
|
9
|
+
static register(router: Router, useJwt?: JwtSecretGateway): void;
|
|
10
|
+
}
|
package/types/index.d.ts
CHANGED
package/types/jwt.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { KoaCtx } from "./meta";
|
|
2
|
+
declare class JwtTokens {
|
|
3
|
+
KEY: string;
|
|
4
|
+
duration: number;
|
|
5
|
+
records: JwtTokenItem[];
|
|
6
|
+
constructor(KEY: string, duration: number);
|
|
7
|
+
encode(payload: UseJwtValue): string;
|
|
8
|
+
decode(value: string): UseJwtValue | null;
|
|
9
|
+
removeBy(t: string): void;
|
|
10
|
+
find(t: string): JwtTokenItem | null;
|
|
11
|
+
get(token: string): Promise<JwtResData>;
|
|
12
|
+
create(data: UseJwtValue): string;
|
|
13
|
+
}
|
|
14
|
+
export declare class JwtSecretGateway {
|
|
15
|
+
headerName: string;
|
|
16
|
+
_jwtToken: JwtTokens;
|
|
17
|
+
constructor(headerName: string, opts: {
|
|
18
|
+
KEY: string;
|
|
19
|
+
duration?: number;
|
|
20
|
+
});
|
|
21
|
+
use(ctx: KoaCtx): Promise<JwtResData>;
|
|
22
|
+
authorize(data: UseJwtValue): string;
|
|
23
|
+
remove(t: string): void;
|
|
24
|
+
}
|
|
25
|
+
export interface JwtTokenItem {
|
|
26
|
+
token: string;
|
|
27
|
+
data: UseJwtValue;
|
|
28
|
+
expired: number;
|
|
29
|
+
created: number;
|
|
30
|
+
}
|
|
31
|
+
export type JwtStat = "ok" | "expired" | "none";
|
|
32
|
+
export type JwtResData = {
|
|
33
|
+
stat: JwtStat;
|
|
34
|
+
token: string;
|
|
35
|
+
value: UseJwtValue | null;
|
|
36
|
+
};
|
|
37
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParameterizedContext } from "koa";
|
|
2
2
|
import { IRouterParamContext } from "koa-router";
|
|
3
3
|
import { ExtendedFormidableOptions } from "koa-body";
|
|
4
|
-
import { JwtSecretGateway } from "./
|
|
4
|
+
import { JwtSecretGateway } from "./jwt";
|
|
5
5
|
export type KoaCtx = ParameterizedContext<any, IRouterParamContext<any, {}>, any>;
|
|
6
6
|
export declare enum HttpMethod {
|
|
7
7
|
GET = "GET",
|
|
@@ -12,16 +12,16 @@ export declare enum HttpMethod {
|
|
|
12
12
|
}
|
|
13
13
|
export declare class BaseController {
|
|
14
14
|
_ctx: KoaCtx;
|
|
15
|
-
jwt:
|
|
15
|
+
jwt: UseJwtCtx;
|
|
16
16
|
constructor(_ctx: KoaCtx);
|
|
17
17
|
get pathname(): string;
|
|
18
18
|
get query(): {
|
|
19
19
|
values: import("querystring").ParsedUrlQuery;
|
|
20
20
|
getPaged(def?: Partial<{
|
|
21
|
-
|
|
21
|
+
current: number;
|
|
22
22
|
pageSize: number;
|
|
23
23
|
}>): {
|
|
24
|
-
|
|
24
|
+
current: number;
|
|
25
25
|
pageSize: number;
|
|
26
26
|
};
|
|
27
27
|
getNumber(k: string): number | null;
|
|
@@ -52,14 +52,14 @@ export interface ResData<T> {
|
|
|
52
52
|
msg: string;
|
|
53
53
|
data?: T | null;
|
|
54
54
|
}
|
|
55
|
-
export interface UseProps
|
|
55
|
+
export interface UseProps {
|
|
56
56
|
port: number;
|
|
57
57
|
root: string;
|
|
58
58
|
prefix?: string;
|
|
59
59
|
static?: string;
|
|
60
60
|
logs?: boolean;
|
|
61
61
|
formidable?: ExtendedFormidableOptions;
|
|
62
|
-
jwt?: JwtSecretGateway
|
|
62
|
+
jwt?: JwtSecretGateway;
|
|
63
63
|
}
|
|
64
64
|
export interface SyncUseValue {
|
|
65
65
|
port: number;
|
|
@@ -80,8 +80,3 @@ export interface ASTCacheRoute {
|
|
|
80
80
|
prefix: string;
|
|
81
81
|
handlers: ASTCacheHandler[];
|
|
82
82
|
}
|
|
83
|
-
export interface ASTCacheProp {
|
|
84
|
-
prefix: string;
|
|
85
|
-
routes: ASTCacheRoute[];
|
|
86
|
-
whitelist: (string | RegExp)[];
|
|
87
|
-
}
|
package/types/type.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { KoaCtx } from "./meta";
|
|
1
2
|
export declare function formatDateTime(date?: Date, format?: string): string;
|
|
2
3
|
export declare function getIPAdress(): string;
|
|
3
|
-
export declare function
|
|
4
|
+
export declare function RunningLogsHandler(ctx: KoaCtx, next: Function): Promise<void>;
|
|
5
|
+
export declare function ServerLaunchLogs(config: {
|
|
4
6
|
port: number;
|
|
5
7
|
prefix: string;
|
|
6
8
|
ip: string;
|
package/dist/controller/index.js
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
-
};
|
|
38
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
39
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
40
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
41
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
42
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
43
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
44
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
48
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
49
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
50
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
51
|
-
function step(op) {
|
|
52
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
53
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
54
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
55
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
56
|
-
switch (op[0]) {
|
|
57
|
-
case 0: case 1: t = op; break;
|
|
58
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
59
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
60
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
61
|
-
default:
|
|
62
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
63
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
64
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
65
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
66
|
-
if (t[2]) _.ops.pop();
|
|
67
|
-
_.trys.pop(); continue;
|
|
68
|
-
}
|
|
69
|
-
op = body.call(thisArg, _);
|
|
70
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
71
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
75
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
76
|
-
};
|
|
77
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
78
|
-
exports.ASTCache = void 0;
|
|
79
|
-
exports.useController = useController;
|
|
80
|
-
var koa_router_1 = __importDefault(require("koa-router"));
|
|
81
|
-
var koa_static_1 = __importDefault(require("koa-static"));
|
|
82
|
-
var koa_body_1 = require("koa-body");
|
|
83
|
-
var fs_1 = __importDefault(require("fs"));
|
|
84
|
-
var chalk_1 = __importDefault(require("chalk"));
|
|
85
|
-
var path_1 = require("path");
|
|
86
|
-
var utils_1 = require("./utils");
|
|
87
|
-
exports.ASTCache = {
|
|
88
|
-
prefix: "",
|
|
89
|
-
routes: [],
|
|
90
|
-
whitelist: [],
|
|
91
|
-
};
|
|
92
|
-
function RegisterASTCacheRoutes(router, useJwt) {
|
|
93
|
-
var _this = this;
|
|
94
|
-
exports.ASTCache.routes.forEach(function (route) {
|
|
95
|
-
var handlers = route.handlers, prefix = route.prefix, Instance = route.Instance;
|
|
96
|
-
handlers.forEach(function (handler) {
|
|
97
|
-
var method = handler.method, url = handler.url, name = handler.name;
|
|
98
|
-
var path = (0, path_1.join)("/" + exports.ASTCache.prefix, prefix, url);
|
|
99
|
-
var isPublic = route.isPublic || handler.isPublic;
|
|
100
|
-
if (isPublic) {
|
|
101
|
-
exports.ASTCache.whitelist.push(path);
|
|
102
|
-
}
|
|
103
|
-
// @ts-ignore
|
|
104
|
-
router[method.toLowerCase()](path, function (_ctx) { return __awaiter(_this, void 0, void 0, function () {
|
|
105
|
-
var instance, _a, stat, value, _b;
|
|
106
|
-
return __generator(this, function (_c) {
|
|
107
|
-
switch (_c.label) {
|
|
108
|
-
case 0:
|
|
109
|
-
instance = new Instance(_ctx);
|
|
110
|
-
_c.label = 1;
|
|
111
|
-
case 1:
|
|
112
|
-
_c.trys.push([1, 5, , 6]);
|
|
113
|
-
if (!useJwt) return [3 /*break*/, 3];
|
|
114
|
-
return [4 /*yield*/, useJwt.use(_ctx)];
|
|
115
|
-
case 2:
|
|
116
|
-
_a = _c.sent(), stat = _a.stat, value = _a.value;
|
|
117
|
-
if (stat === "none" || stat === "expired") {
|
|
118
|
-
return [2 /*return*/, instance.status.unauthorized()];
|
|
119
|
-
}
|
|
120
|
-
instance.jwt = value;
|
|
121
|
-
_c.label = 3;
|
|
122
|
-
case 3: return [4 /*yield*/, Promise.resolve(instance[name]())];
|
|
123
|
-
case 4:
|
|
124
|
-
_c.sent();
|
|
125
|
-
return [3 /*break*/, 6];
|
|
126
|
-
case 5:
|
|
127
|
-
_b = _c.sent();
|
|
128
|
-
instance.status.exception();
|
|
129
|
-
return [3 /*break*/, 6];
|
|
130
|
-
case 6: return [2 /*return*/];
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
}); });
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
function useController(app, opts) {
|
|
138
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
139
|
-
var root, _a, prefix, _b, port, _c, logs, formidable, jwt, router, rootDir, initAST, ip;
|
|
140
|
-
var _this = this;
|
|
141
|
-
return __generator(this, function (_d) {
|
|
142
|
-
switch (_d.label) {
|
|
143
|
-
case 0:
|
|
144
|
-
root = opts.root, _a = opts.prefix, prefix = _a === void 0 ? "" : _a, _b = opts.port, port = _b === void 0 ? 8080 : _b, _c = opts.logs, logs = _c === void 0 ? true : _c, formidable = opts.formidable, jwt = opts.jwt;
|
|
145
|
-
exports.ASTCache.prefix = prefix;
|
|
146
|
-
router = new koa_router_1.default();
|
|
147
|
-
rootDir = (0, path_1.resolve)(process.cwd(), root);
|
|
148
|
-
initAST = function (dir) { return __awaiter(_this, void 0, void 0, function () {
|
|
149
|
-
var list, _i, list_1, p, url, stat, isDir, sp, ext, _a;
|
|
150
|
-
return __generator(this, function (_b) {
|
|
151
|
-
switch (_b.label) {
|
|
152
|
-
case 0:
|
|
153
|
-
list = fs_1.default.readdirSync(dir);
|
|
154
|
-
_i = 0, list_1 = list;
|
|
155
|
-
_b.label = 1;
|
|
156
|
-
case 1:
|
|
157
|
-
if (!(_i < list_1.length)) return [3 /*break*/, 8];
|
|
158
|
-
p = list_1[_i];
|
|
159
|
-
url = (0, path_1.resolve)(dir, p);
|
|
160
|
-
stat = fs_1.default.statSync(url);
|
|
161
|
-
isDir = stat.isDirectory();
|
|
162
|
-
if (!isDir) return [3 /*break*/, 3];
|
|
163
|
-
// 文件架
|
|
164
|
-
return [4 /*yield*/, initAST(url)];
|
|
165
|
-
case 2:
|
|
166
|
-
// 文件架
|
|
167
|
-
_b.sent();
|
|
168
|
-
return [3 /*break*/, 7];
|
|
169
|
-
case 3:
|
|
170
|
-
_b.trys.push([3, 6, , 7]);
|
|
171
|
-
sp = p.split(".");
|
|
172
|
-
ext = sp[sp.length - 1];
|
|
173
|
-
if (!(ext === "ts" || ext === "js")) return [3 /*break*/, 5];
|
|
174
|
-
// ts | js 文件
|
|
175
|
-
return [4 /*yield*/, Promise.resolve("".concat(url)).then(function (s) { return __importStar(require(s)); })];
|
|
176
|
-
case 4:
|
|
177
|
-
// ts | js 文件
|
|
178
|
-
_b.sent();
|
|
179
|
-
_b.label = 5;
|
|
180
|
-
case 5: return [3 /*break*/, 7];
|
|
181
|
-
case 6:
|
|
182
|
-
_a = _b.sent();
|
|
183
|
-
console.warn("解析出现错误!");
|
|
184
|
-
return [3 /*break*/, 7];
|
|
185
|
-
case 7:
|
|
186
|
-
_i++;
|
|
187
|
-
return [3 /*break*/, 1];
|
|
188
|
-
case 8: return [2 /*return*/];
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
}); };
|
|
192
|
-
return [4 /*yield*/, initAST(rootDir)];
|
|
193
|
-
case 1:
|
|
194
|
-
_d.sent();
|
|
195
|
-
// 注册路由
|
|
196
|
-
RegisterASTCacheRoutes(router, jwt);
|
|
197
|
-
if (opts.static) {
|
|
198
|
-
app.use((0, koa_static_1.default)(process.cwd(), {
|
|
199
|
-
root: opts.static,
|
|
200
|
-
}));
|
|
201
|
-
exports.ASTCache.whitelist.unshift(new RegExp("/".concat(opts.static)));
|
|
202
|
-
}
|
|
203
|
-
app.use((0, koa_body_1.koaBody)({
|
|
204
|
-
multipart: true,
|
|
205
|
-
formidable: formidable,
|
|
206
|
-
}));
|
|
207
|
-
if (logs) {
|
|
208
|
-
app.use(function (ctx, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
209
|
-
var start, duration, status_1, method, statusColor, dateTime, dText;
|
|
210
|
-
return __generator(this, function (_a) {
|
|
211
|
-
switch (_a.label) {
|
|
212
|
-
case 0:
|
|
213
|
-
start = Date.now();
|
|
214
|
-
_a.label = 1;
|
|
215
|
-
case 1:
|
|
216
|
-
_a.trys.push([1, , 3, 4]);
|
|
217
|
-
return [4 /*yield*/, next()];
|
|
218
|
-
case 2:
|
|
219
|
-
_a.sent();
|
|
220
|
-
return [3 /*break*/, 4];
|
|
221
|
-
case 3:
|
|
222
|
-
duration = Date.now() - start;
|
|
223
|
-
status_1 = ctx.status;
|
|
224
|
-
method = ctx.method;
|
|
225
|
-
statusColor = void 0;
|
|
226
|
-
if (status_1 >= 500)
|
|
227
|
-
statusColor = chalk_1.default.red;
|
|
228
|
-
else if (status_1 >= 400)
|
|
229
|
-
statusColor = chalk_1.default.yellow;
|
|
230
|
-
else if (status_1 >= 300)
|
|
231
|
-
statusColor = chalk_1.default.cyan;
|
|
232
|
-
else if (status_1 >= 200)
|
|
233
|
-
statusColor = chalk_1.default.green;
|
|
234
|
-
else
|
|
235
|
-
statusColor = chalk_1.default.gray;
|
|
236
|
-
dateTime = (0, utils_1.formatDateTime)();
|
|
237
|
-
dText = chalk_1.default.gray("".concat(duration, "ms"));
|
|
238
|
-
if (duration > 5000) {
|
|
239
|
-
dText = chalk_1.default.red("".concat(duration, "ms"));
|
|
240
|
-
}
|
|
241
|
-
else if (duration > 1000) {
|
|
242
|
-
dText = chalk_1.default.yellow("".concat(duration, "ms"));
|
|
243
|
-
}
|
|
244
|
-
console.log("- [".concat(dateTime, " | ").concat(dText, "] ").concat(chalk_1.default.magenta(method), " ").concat(ctx.url, " ").concat(statusColor(status_1)));
|
|
245
|
-
return [7 /*endfinally*/];
|
|
246
|
-
case 4: return [2 /*return*/];
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
}); });
|
|
250
|
-
}
|
|
251
|
-
app.use(router.routes()).use(router.allowedMethods());
|
|
252
|
-
ip = (0, utils_1.getIPAdress)();
|
|
253
|
-
return [2 /*return*/, {
|
|
254
|
-
whitelist: exports.ASTCache.whitelist,
|
|
255
|
-
port: port,
|
|
256
|
-
prefix: prefix,
|
|
257
|
-
ip: ip,
|
|
258
|
-
running: function () {
|
|
259
|
-
return (0, utils_1.RunningLogs)({
|
|
260
|
-
ip: ip,
|
|
261
|
-
port: port,
|
|
262
|
-
prefix: prefix,
|
|
263
|
-
});
|
|
264
|
-
},
|
|
265
|
-
}];
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
__exportStar(require("./meta"), exports);
|
|
271
|
-
__exportStar(require("./gateway"), exports);
|
package/dist/controller/utils.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.formatDateTime = formatDateTime;
|
|
7
|
-
exports.getIPAdress = getIPAdress;
|
|
8
|
-
exports.RunningLogs = RunningLogs;
|
|
9
|
-
var os_1 = __importDefault(require("os"));
|
|
10
|
-
var path_1 = require("path");
|
|
11
|
-
var boxen_1 = __importDefault(require("boxen"));
|
|
12
|
-
var chalk_1 = __importDefault(require("chalk"));
|
|
13
|
-
function formatDateTime(date, format) {
|
|
14
|
-
if (date === void 0) { date = new Date(); }
|
|
15
|
-
if (format === void 0) { format = "YYYY-MM-DD HH:mm:ss"; }
|
|
16
|
-
var pad = function (num) { return num.toString().padStart(2, "0"); };
|
|
17
|
-
var year = date.getFullYear();
|
|
18
|
-
var month = pad(date.getMonth() + 1);
|
|
19
|
-
var day = pad(date.getDate());
|
|
20
|
-
var hours = pad(date.getHours());
|
|
21
|
-
var minutes = pad(date.getMinutes());
|
|
22
|
-
var seconds = pad(date.getSeconds());
|
|
23
|
-
return format
|
|
24
|
-
.replace("YYYY", year.toString())
|
|
25
|
-
.replace("MM", month)
|
|
26
|
-
.replace("DD", day)
|
|
27
|
-
.replace("HH", hours)
|
|
28
|
-
.replace("mm", minutes)
|
|
29
|
-
.replace("ss", seconds);
|
|
30
|
-
}
|
|
31
|
-
function getIPAdress() {
|
|
32
|
-
var interfaces = os_1.default.networkInterfaces();
|
|
33
|
-
for (var key in interfaces) {
|
|
34
|
-
var iface = interfaces[key];
|
|
35
|
-
if (iface) {
|
|
36
|
-
for (var i = 0; i < iface.length; i++) {
|
|
37
|
-
var alias = iface[i];
|
|
38
|
-
if (alias.family === "IPv4" &&
|
|
39
|
-
alias.address !== "127.0.0.1" &&
|
|
40
|
-
!alias.internal) {
|
|
41
|
-
return alias.address;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return "127.0.0.1";
|
|
47
|
-
}
|
|
48
|
-
function RunningLogs(config) {
|
|
49
|
-
var port = config.port, prefix = config.prefix, ip = config.ip;
|
|
50
|
-
var suffix = (0, path_1.join)(port.toString(), prefix);
|
|
51
|
-
var env = process.env.NODE_ENV || "development";
|
|
52
|
-
var messages = (0, boxen_1.default)(chalk_1.default.hex("#83FFE6")("\n ".concat(chalk_1.default.bold.hex("#FFA500")("🚀 Server started successfully!"), "\n\n ").concat(chalk_1.default.bold("Env:"), " ").concat(chalk_1.default.white(" " + env + " "), "\n\n ").concat(chalk_1.default.bold("Local:"), " ").concat(chalk_1.default.green("http://localhost:".concat(suffix)), "\n ").concat(chalk_1.default.bold("Network:"), " ").concat(chalk_1.default.green("http://".concat(ip, ":").concat(suffix)), "\n")), {
|
|
53
|
-
padding: 0.5,
|
|
54
|
-
margin: 0.5,
|
|
55
|
-
borderStyle: "round",
|
|
56
|
-
borderColor: "#5ED7FF",
|
|
57
|
-
});
|
|
58
|
-
console.clear();
|
|
59
|
-
console.log(messages);
|
|
60
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { KoaCtx } from "./meta";
|
|
2
|
-
declare class JwtTokens<T> {
|
|
3
|
-
KEY: string;
|
|
4
|
-
duration: number;
|
|
5
|
-
records: JwtTokenItem<T>[];
|
|
6
|
-
constructor(KEY: string, duration: number);
|
|
7
|
-
encode(payload: T): string;
|
|
8
|
-
decode(value: string): T | null;
|
|
9
|
-
removeBy(t: string): void;
|
|
10
|
-
find(t: string): JwtTokenItem<T> | null;
|
|
11
|
-
get(token: string): Promise<JwtResData<T>>;
|
|
12
|
-
create(data: T): string;
|
|
13
|
-
}
|
|
14
|
-
export declare class JwtSecretGateway<T extends object> {
|
|
15
|
-
headerName: string;
|
|
16
|
-
_jwtToken: JwtTokens<T>;
|
|
17
|
-
constructor(headerName: string, opts: {
|
|
18
|
-
KEY: string;
|
|
19
|
-
duration?: number;
|
|
20
|
-
});
|
|
21
|
-
use(ctx: KoaCtx): Promise<JwtResData<T>>;
|
|
22
|
-
authorize(data: T): string;
|
|
23
|
-
remove(t: string): void;
|
|
24
|
-
}
|
|
25
|
-
export interface JwtTokenItem<T> {
|
|
26
|
-
token: string;
|
|
27
|
-
data: T;
|
|
28
|
-
expired: number;
|
|
29
|
-
created: number;
|
|
30
|
-
}
|
|
31
|
-
export type JwtStat = "ok" | "expired" | "none";
|
|
32
|
-
export type JwtResData<T> = {
|
|
33
|
-
stat: JwtStat;
|
|
34
|
-
value: T;
|
|
35
|
-
};
|
|
36
|
-
export {};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import Koa from "koa";
|
|
2
|
-
import { ASTCacheProp, SyncUseValue, UseProps } from "./meta";
|
|
3
|
-
export declare const ASTCache: ASTCacheProp;
|
|
4
|
-
export declare function useController<U extends object = object>(app: Koa, opts: UseProps<U>): Promise<SyncUseValue>;
|
|
5
|
-
export * from "./meta";
|
|
6
|
-
export * from "./gateway";
|