@rdyl/node-koa-controller 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ ## 0.0.1 (2025-01-21)
2
+
3
+
4
+
package/README.md ADDED
@@ -0,0 +1,20 @@
1
+ ## Installation
2
+
3
+ ```bash
4
+ $ npm install @rdyl/react-router-connect
5
+ # or
6
+ $ yarn add @rdyl/react-router-connect
7
+ ```
8
+
9
+ ## Getting started
10
+
11
+ 1. 配置tsconfig.json
12
+ ```json
13
+ {
14
+ "compilerOptions": {
15
+ "types": [
16
+ "@rdyl/react-router-connect/types/type.d.ts"
17
+ ],
18
+ },
19
+ }
20
+ ```
@@ -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 __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 fs_1 = __importDefault(require("fs"));
82
+ var path_1 = require("path");
83
+ exports.ASTCache = {
84
+ routes: [],
85
+ whitelist: [],
86
+ };
87
+ function RegisterASTCacheRoutes(router) {
88
+ exports.ASTCache.routes.forEach(function (route) {
89
+ var handlers = route.handlers, prefix = route.prefix, Instance = route.Instance;
90
+ handlers.forEach(function (handler) {
91
+ var method = handler.method, url = handler.url, name = handler.name;
92
+ var path = (0, path_1.join)('/' + prefix, url);
93
+ var isPublic = route.isPublic || route.isPublic;
94
+ if (isPublic) {
95
+ exports.ASTCache.whitelist.push(path);
96
+ }
97
+ // @ts-ignore
98
+ router[method.toLowerCase()](path, function (_ctx) {
99
+ try {
100
+ var instance = new Instance(_ctx);
101
+ instance[name]();
102
+ }
103
+ catch (_a) {
104
+ console.log(path + ':配置错误!');
105
+ }
106
+ });
107
+ });
108
+ });
109
+ }
110
+ function useController(app_1, _a) {
111
+ return __awaiter(this, arguments, void 0, function (app, _b) {
112
+ var router, rootDir, initAST;
113
+ var _this = this;
114
+ var root = _b.root, _c = _b.prefix, prefix = _c === void 0 ? '' : _c;
115
+ return __generator(this, function (_d) {
116
+ switch (_d.label) {
117
+ case 0:
118
+ router = new koa_router_1.default({
119
+ prefix: prefix,
120
+ });
121
+ rootDir = (0, path_1.resolve)(process.cwd(), root);
122
+ initAST = function (dir) { return __awaiter(_this, void 0, void 0, function () {
123
+ var list, _i, list_1, p, url, stat, isDir, sp, ext, _a;
124
+ return __generator(this, function (_b) {
125
+ switch (_b.label) {
126
+ case 0:
127
+ list = fs_1.default.readdirSync(dir);
128
+ _i = 0, list_1 = list;
129
+ _b.label = 1;
130
+ case 1:
131
+ if (!(_i < list_1.length)) return [3 /*break*/, 8];
132
+ p = list_1[_i];
133
+ url = (0, path_1.resolve)(dir, p);
134
+ stat = fs_1.default.statSync(url);
135
+ isDir = stat.isDirectory();
136
+ if (!isDir) return [3 /*break*/, 3];
137
+ // 文件架
138
+ return [4 /*yield*/, initAST(url)];
139
+ case 2:
140
+ // 文件架
141
+ _b.sent();
142
+ return [3 /*break*/, 7];
143
+ case 3:
144
+ _b.trys.push([3, 6, , 7]);
145
+ sp = p.split('.');
146
+ ext = sp[sp.length - 1];
147
+ if (!(ext === 'ts' || ext === 'js')) return [3 /*break*/, 5];
148
+ // ts | js 文件
149
+ return [4 /*yield*/, Promise.resolve("".concat(url)).then(function (s) { return __importStar(require(s)); })];
150
+ case 4:
151
+ // ts | js 文件
152
+ _b.sent();
153
+ _b.label = 5;
154
+ case 5: return [3 /*break*/, 7];
155
+ case 6:
156
+ _a = _b.sent();
157
+ console.warn('解析出现错误!');
158
+ return [3 /*break*/, 7];
159
+ case 7:
160
+ _i++;
161
+ return [3 /*break*/, 1];
162
+ case 8: return [2 /*return*/];
163
+ }
164
+ });
165
+ }); };
166
+ return [4 /*yield*/, initAST(rootDir)];
167
+ case 1:
168
+ _d.sent();
169
+ // 注册路由
170
+ RegisterASTCacheRoutes(router);
171
+ app.use(router.routes()).use(router.allowedMethods());
172
+ return [2 /*return*/, Promise.resolve({
173
+ whitelist: exports.ASTCache.whitelist,
174
+ })];
175
+ }
176
+ });
177
+ });
178
+ }
179
+ __exportStar(require("./meta"), exports);
@@ -0,0 +1,172 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Patch = exports.Put = exports.Delete = exports.Post = exports.Get = exports.BaseController = exports.HttpMethod = void 0;
40
+ exports.Controller = Controller;
41
+ var index_1 = require("./index");
42
+ var HttpMethod;
43
+ (function (HttpMethod) {
44
+ HttpMethod["GET"] = "GET";
45
+ HttpMethod["POST"] = "POST";
46
+ HttpMethod["PATCH"] = "PATCH";
47
+ HttpMethod["PUT"] = "PUT";
48
+ HttpMethod["DELETE"] = "DELETE";
49
+ })(HttpMethod || (exports.HttpMethod = HttpMethod = {}));
50
+ var BaseController = /** @class */ (function () {
51
+ function BaseController(_ctx) {
52
+ this._ctx = _ctx;
53
+ }
54
+ Object.defineProperty(BaseController.prototype, "pathname", {
55
+ get: function () {
56
+ return this._ctx.request.path;
57
+ },
58
+ enumerable: false,
59
+ configurable: true
60
+ });
61
+ Object.defineProperty(BaseController.prototype, "query", {
62
+ get: function () {
63
+ return this._ctx.query;
64
+ },
65
+ enumerable: false,
66
+ configurable: true
67
+ });
68
+ Object.defineProperty(BaseController.prototype, "params", {
69
+ get: function () {
70
+ return this._ctx.params || {};
71
+ },
72
+ enumerable: false,
73
+ configurable: true
74
+ });
75
+ Object.defineProperty(BaseController.prototype, "body", {
76
+ get: function () {
77
+ // @ts-ignore
78
+ return this._ctx.request.body;
79
+ },
80
+ enumerable: false,
81
+ configurable: true
82
+ });
83
+ BaseController.prototype.files = function () {
84
+ return __awaiter(this, void 0, void 0, function () {
85
+ return __generator(this, function (_a) {
86
+ // @ts-ignore
87
+ return [2 /*return*/, this._ctx.request.files];
88
+ });
89
+ });
90
+ };
91
+ Object.defineProperty(BaseController.prototype, "status", {
92
+ get: function () {
93
+ var _ctx = this._ctx;
94
+ var sendJson = function (body) {
95
+ _ctx.response.set("Content-Type", "application/json;charset=utf-8");
96
+ _ctx.body = body;
97
+ };
98
+ return {
99
+ ok: function (data) {
100
+ sendJson({ data: data });
101
+ },
102
+ okCreated: function (data, msg) {
103
+ sendJson({ code: 201, data: data, msg: msg });
104
+ },
105
+ okAccept: function (data, msg) {
106
+ sendJson({ code: 203, data: data, msg: msg });
107
+ },
108
+ parameterError: function (msg) {
109
+ if (msg === void 0) { msg = "Parameter Error"; }
110
+ sendJson({ msg: msg, code: 400 });
111
+ },
112
+ unauthorized: function (msg) {
113
+ if (msg === void 0) { msg = "User Unauthorized"; }
114
+ sendJson({ msg: msg, code: 401 });
115
+ },
116
+ inaccessible: function (msg) {
117
+ if (msg === void 0) { msg = "User Inaccessible"; }
118
+ sendJson({ msg: msg, code: 403 });
119
+ },
120
+ exception: function (msg) {
121
+ if (msg === void 0) { msg = "Service Exception"; }
122
+ sendJson({ msg: msg, code: 500 });
123
+ },
124
+ unavailable: function (msg) {
125
+ if (msg === void 0) { msg = "Service Unavailable"; }
126
+ sendJson({ msg: msg, code: 503 });
127
+ },
128
+ };
129
+ },
130
+ enumerable: false,
131
+ configurable: true
132
+ });
133
+ return BaseController;
134
+ }());
135
+ exports.BaseController = BaseController;
136
+ function MethodFactory(method) {
137
+ return function (url, isPublic) {
138
+ if (isPublic === void 0) { isPublic = false; }
139
+ return function (target, name) {
140
+ var item = {
141
+ url: url,
142
+ method: method,
143
+ name: name,
144
+ isPublic: isPublic,
145
+ };
146
+ if (target.routes) {
147
+ target.routes.push(item);
148
+ }
149
+ else {
150
+ target.routes = [item];
151
+ }
152
+ };
153
+ };
154
+ }
155
+ function Controller(prefix, isPublic) {
156
+ if (isPublic === void 0) { isPublic = false; }
157
+ return function (target) {
158
+ var _a;
159
+ var route = {
160
+ Instance: target,
161
+ prefix: prefix,
162
+ handlers: ((_a = target.prototype) === null || _a === void 0 ? void 0 : _a.routes) || [],
163
+ isPublic: isPublic,
164
+ };
165
+ index_1.ASTCache.routes.push(route);
166
+ };
167
+ }
168
+ exports.Get = MethodFactory(HttpMethod.GET);
169
+ exports.Post = MethodFactory(HttpMethod.POST);
170
+ exports.Delete = MethodFactory(HttpMethod.DELETE);
171
+ exports.Put = MethodFactory(HttpMethod.PUT);
172
+ exports.Patch = MethodFactory(HttpMethod.PATCH);
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./controller"), exports);
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@rdyl/node-koa-controller",
3
+ "version": "0.0.1",
4
+ "license": "MIT",
5
+ "main": "dist/index.js",
6
+ "types": "types/index.d.ts",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "types",
13
+ "CHANGELOG.md",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
18
+ "build": "tsc && copyfiles -u 1 src/**/*.d.ts src/*.d.ts types && npm run changelog && git add CHANGELOG.md"
19
+ },
20
+ "dependencies": {
21
+ "@types/koa": "^2.15.0",
22
+ "@types/koa-router": "^7.4.8",
23
+ "koa": "^2.15.3",
24
+ "koa-router": "^13.0.1"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^22.9.0",
28
+ "copyfiles": "^2.4.1",
29
+ "typescript": "^5.6.3",
30
+ "@commitlint/cli": "^19.6.1",
31
+ "@commitlint/config-conventional": "^19.6.0",
32
+ "conventional-changelog-cli": "^5.0.0"
33
+ }
34
+ }
@@ -0,0 +1,7 @@
1
+ import Koa from 'koa';
2
+ import { ASTCacheProp, InitOpts } from './meta';
3
+ export declare const ASTCache: ASTCacheProp;
4
+ export declare function useController(app: Koa, { root, prefix }: InitOpts): Promise<{
5
+ whitelist: string[];
6
+ }>;
7
+ export * from './meta';
@@ -0,0 +1,59 @@
1
+ import { ParameterizedContext } from "koa";
2
+ import { IRouterParamContext } from "koa-router";
3
+ export declare enum HttpMethod {
4
+ GET = "GET",
5
+ POST = "POST",
6
+ PATCH = "PATCH",
7
+ PUT = "PUT",
8
+ DELETE = "DELETE"
9
+ }
10
+ export declare class BaseController {
11
+ _ctx: ParameterizedContext<any, IRouterParamContext<any, {}>, any>;
12
+ constructor(_ctx: ParameterizedContext<any, IRouterParamContext<any, {}>, any>);
13
+ get pathname(): string;
14
+ get query(): import("querystring").ParsedUrlQuery;
15
+ get params(): Record<string, string>;
16
+ get body(): any;
17
+ files(): Promise<any>;
18
+ get status(): {
19
+ ok(data?: unknown): void;
20
+ okCreated(data: unknown, msg?: string): void;
21
+ okAccept(data: unknown, msg?: string): void;
22
+ parameterError(msg?: string): void;
23
+ unauthorized(msg?: string): void;
24
+ inaccessible(msg?: string): void;
25
+ exception(msg?: string): void;
26
+ unavailable(msg?: string): void;
27
+ };
28
+ }
29
+ export declare function Controller(prefix: string, isPublic?: boolean): (target: any) => void;
30
+ export declare const Get: (url: string, isPublic?: boolean) => (target: any, name: string) => void;
31
+ export declare const Post: (url: string, isPublic?: boolean) => (target: any, name: string) => void;
32
+ export declare const Delete: (url: string, isPublic?: boolean) => (target: any, name: string) => void;
33
+ export declare const Put: (url: string, isPublic?: boolean) => (target: any, name: string) => void;
34
+ export declare const Patch: (url: string, isPublic?: boolean) => (target: any, name: string) => void;
35
+ export interface ResData<T> {
36
+ msg: string;
37
+ code: number;
38
+ data: T;
39
+ }
40
+ export interface InitOpts {
41
+ root: string;
42
+ prefix?: string;
43
+ }
44
+ export interface ASTCacheHandler {
45
+ url: string;
46
+ method: string;
47
+ isPublic: boolean;
48
+ name: string;
49
+ }
50
+ export interface ASTCacheRoute {
51
+ Instance: any;
52
+ isPublic: boolean;
53
+ prefix: string;
54
+ handlers: ASTCacheHandler[];
55
+ }
56
+ export interface ASTCacheProp {
57
+ routes: ASTCacheRoute[];
58
+ whitelist: string[];
59
+ }
@@ -0,0 +1 @@
1
+ export * from "./controller";