mas-server 2.0.46 → 2.0.51
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/.temp/merge/validType.ts +98 -0
- package/beforebuild.js +3 -0
- package/dist/index.js +8 -47
- package/dist/utils/apiDoc.js +17 -2
- package/dist/utils/createRouter.js +51 -0
- package/dist/utils/getRouterInfo.js +34 -0
- package/dist/utils/mas-encrypt.min.js +1 -3072
- package/dist/utils/validRouteData.js +1 -1
- package/dist/utils/validToken.js +1 -1
- package/dist/utils/validType.js +0 -17
- package/package.json +50 -51
- package/src/index.ts +20 -24
- package/src/typings/index.ts +5 -5
- package/src/utils/apiDoc.ts +18 -2
- package/src/utils/createRouter.ts +22 -0
- package/src/utils/getRouterInfo.ts +28 -0
- package/src/utils/readApi.ts +0 -2
- package/src/utils/validRouteData.ts +1 -2
- package/src/utils/validToken.ts +1 -1
- package/src/utils/validType.ts +0 -17
- package/test/apiTemplate/api.temp.ts +8 -3
- package/test/config/config.ts +1 -1
- package/test/config/defaultApiConfig.ts +7 -0
- package/test/config/docNav.ts +0 -0
- package/test/main.ts +1 -0
- package/test/scripts/beforeCreated.ts +2 -41
- package/test/scripts/createApiFile.ts +0 -1
- package/test/scripts/createApis.ts +0 -48
- package/test/scripts/getSqlFormType.ts +2 -13
- package/test/src/api/example/ArrValid.ts +11 -0
- package/test/src/api/example/per.ts +34 -0
- package/test/src/api/example/tip.ts +9 -0
- package/test/src/api/example/validReqData.ts +85 -0
- package/test/src/api/index.ts +8 -1
- package/test/src/debug.ts +3 -50
- package/test/src/sqlform.json +1 -1
- package/test/test.ts +0 -12
- package/test//345/276/205/345/274/200/345/217/221.md +12 -6
- package/tsconfig-build.json +20 -0
- package/tsconfig.json +1 -3
- package/.temp/validType.ts +0 -96
- package/dist/apiDoc/assets/empty-a6de4920.js +0 -1
- package/dist/apiDoc/assets/index-be53fe8f.css +0 -6
- package/dist/apiDoc/assets/index-f9ab4187.js +0 -1427
- package/dist/apiDoc/assets/jsoneditor-icons-45c98bf0.svg +0 -749
- package/dist/apiDoc/favicon.ico +0 -0
- package/dist/apiDoc/index.html +0 -15
- package/dist/utils/getRouteByApiSrc.js +0 -54
- package/test/config/api.config.ts +0 -3
- package/test/config/api.key.ts +0 -14
- package/test/src/api/curd/student/del.ts +0 -9
- package/test/src/api/curd/student/get.ts +0 -9
- package/test/src/api/curd/student/set.ts +0 -9
- package/test/src/api/per.ts +0 -6
- package/test/src/api/person/del.ts +0 -4
- package/test/src/api/person/get.ts +0 -4
- package/test/src/api/person/set.ts +0 -4
- package/test/src/api/test.ts +0 -7
- package/test/src/api/validtest/boolArr.ts +0 -4
- package/test/typings/studentSF.ts +0 -6
- package/test/typings/test11SF.ts +0 -1
- package/test/typings/test22SF.ts +0 -1
- package/test/typings/testformSF.ts +0 -1
- /package/.temp/{logs/.keep → .keep} +0 -0
- /package/{src/utils → .temp}/getRouteByApiSrc.ts +0 -0
- /package/.temp/{a.ts → merge/a.ts} +0 -0
- /package/.temp/{as.ts → merge/as.ts} +0 -0
- /package/.temp/{b.ts → merge/b.ts} +0 -0
- /package/.temp/{i.js → merge/i.js} +0 -0
- /package/{test/typings → .temp/merge/logs}/.keep +0 -0
- /package/.temp/{test.ts → merge/test.ts} +0 -0
- /package/.temp/{validType copy.ts → merge/validType copy.ts} +0 -0
- /package/.temp/{validTypeOptimize.ts → merge/validTypeOptimize.ts} +0 -0
- /package/{test/scripts → .temp}/updateRouter.ts +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { getType } from "../utils/masUtils";
|
|
2
|
+
|
|
3
|
+
type BasicTypeDescriptor =
|
|
4
|
+
| StringConstructor
|
|
5
|
+
| NumberConstructor
|
|
6
|
+
| BooleanConstructor
|
|
7
|
+
| ObjectConstructor;
|
|
8
|
+
type TypeDescriptor = BasicTypeDescriptor | Array<any>;
|
|
9
|
+
|
|
10
|
+
interface TypeMapping {
|
|
11
|
+
[key: string]:
|
|
12
|
+
| TypeDescriptor
|
|
13
|
+
| TypeMapping
|
|
14
|
+
| Array<TypeDescriptor | TypeMapping>;
|
|
15
|
+
}
|
|
16
|
+
const vliadBase = (obj, typeMapping) => {
|
|
17
|
+
return getType(obj) == (typeMapping as any).name.toLowerCase();
|
|
18
|
+
};
|
|
19
|
+
const validTypeObj = (obj: any, typeMapping: TypeMapping | TypeDescriptor) => {
|
|
20
|
+
if (obj === null || obj === undefined) return false;
|
|
21
|
+
let typeT = getType(typeMapping);
|
|
22
|
+
if (typeT == "function") {
|
|
23
|
+
return vliadBase(obj, typeMapping);
|
|
24
|
+
} else if (typeT == "object") {
|
|
25
|
+
if (getType(obj) !== "object") return false;
|
|
26
|
+
for (let k in typeMapping) {
|
|
27
|
+
if (obj[k] === null || obj[k] === undefined) return false;
|
|
28
|
+
if (!validType(obj[k], typeMapping[k])) return false;
|
|
29
|
+
}
|
|
30
|
+
} else if (typeT == "array") {
|
|
31
|
+
if (getType(obj) != "array") return false;
|
|
32
|
+
if (obj.length === 0) return false;
|
|
33
|
+
const typeMappingArrObj = typeMapping[0];
|
|
34
|
+
if (!typeMappingArrObj) {
|
|
35
|
+
throw new Error(`非法的效验格式 ${typeMapping} ${typeMappingArrObj}`);
|
|
36
|
+
}
|
|
37
|
+
if (getType(obj) != "array") return false;
|
|
38
|
+
for (let v of obj) {
|
|
39
|
+
if (!validTypeObj(v, typeMappingArrObj)) return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
};
|
|
44
|
+
const validTypeObjStrict = (
|
|
45
|
+
obj: any,
|
|
46
|
+
typeMapping: TypeMapping | TypeDescriptor
|
|
47
|
+
) => {
|
|
48
|
+
if (obj === null || obj === undefined) return false;
|
|
49
|
+
let typeT = getType(typeMapping);
|
|
50
|
+
if (typeT == "function") {
|
|
51
|
+
return vliadBase(obj, typeMapping);
|
|
52
|
+
} else if (typeT == "object") {
|
|
53
|
+
if (getType(obj) !== "object") return false;
|
|
54
|
+
if (Object.keys(obj).length != Object.keys(typeT).length) return false;
|
|
55
|
+
for (let k in typeMapping) {
|
|
56
|
+
if (obj[k] === null || obj[k] === undefined) return false;
|
|
57
|
+
if (!validType(obj[k], typeMapping[k])) return false;
|
|
58
|
+
}
|
|
59
|
+
} else if (typeT == "array") {
|
|
60
|
+
if (getType(obj) != "array") return false;
|
|
61
|
+
if (obj.length === 0) return false;
|
|
62
|
+
const typeMappingArrObj = typeMapping[0];
|
|
63
|
+
if (!typeMappingArrObj) {
|
|
64
|
+
throw new Error(`非法的效验格式 ${typeMapping} ${typeMappingArrObj}`);
|
|
65
|
+
}
|
|
66
|
+
if (getType(obj) != "array") return false;
|
|
67
|
+
for (let v of obj) {
|
|
68
|
+
if (!validTypeObj(v, typeMappingArrObj)) return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
};
|
|
73
|
+
export default function validType(
|
|
74
|
+
obj: any,
|
|
75
|
+
typeMapping: TypeMapping | TypeDescriptor,
|
|
76
|
+
strict: boolean = false
|
|
77
|
+
): boolean {
|
|
78
|
+
return strict
|
|
79
|
+
? validTypeObjStrict(obj, typeMapping)
|
|
80
|
+
: validTypeObj(obj, typeMapping);
|
|
81
|
+
}
|
|
82
|
+
// let res = validType(
|
|
83
|
+
// { name: "2", arr: [1] },
|
|
84
|
+
// { name: String, arr: [Number] },
|
|
85
|
+
// true
|
|
86
|
+
// [
|
|
87
|
+
// { name: "s", age: "" },
|
|
88
|
+
// { names: "s", age: "" },
|
|
89
|
+
// ],
|
|
90
|
+
// { name: "11", age: 1, obj: { a: "1", b: 1 } },
|
|
91
|
+
// String,
|
|
92
|
+
// Boolean,
|
|
93
|
+
// { name: String, age: Number, obj: { a: String, b: Number } }
|
|
94
|
+
// [{ name: String }]
|
|
95
|
+
// );
|
|
96
|
+
// console.log(res);
|
|
97
|
+
// console.log(getType(null)); //"null"
|
|
98
|
+
// console.log(getType(undefined)); //"undefined"
|
package/beforebuild.js
ADDED
package/dist/index.js
CHANGED
|
@@ -1,45 +1,19 @@
|
|
|
1
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 (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
28
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.validType = exports.createToken = exports.validToken = exports.massql = exports.getsqlFormDataType = exports.getsqlFormData = exports.createSqlForm = exports.checkSqlKey = exports.sqlQuery = exports.sqlInit = exports.sqlEnd = exports.sqlState = exports.moment = exports.
|
|
6
|
+
exports.validType = exports.createToken = exports.validToken = exports.massql = exports.getsqlFormDataType = exports.getsqlFormData = exports.createSqlForm = exports.checkSqlKey = exports.sqlQuery = exports.sqlInit = exports.sqlEnd = exports.sqlState = exports.moment = exports.readApi = exports.getApp = void 0;
|
|
30
7
|
require("module-alias/register");
|
|
31
8
|
const express_1 = __importDefault(require("express"));
|
|
32
9
|
const cors_1 = __importDefault(require("cors"));
|
|
33
10
|
const path_1 = __importDefault(require("path"));
|
|
34
|
-
const fs = __importStar(require("fs"));
|
|
35
11
|
const state_1 = require("./state");
|
|
36
12
|
const getLog_1 = __importDefault(require("./utils/getLog"));
|
|
37
13
|
const quickSend_1 = __importDefault(require("./utils/quickSend"));
|
|
38
14
|
const readApi_1 = __importDefault(require("./utils/readApi"));
|
|
39
15
|
exports.readApi = readApi_1.default;
|
|
40
16
|
const validRouteData_1 = __importDefault(require("./utils/validRouteData"));
|
|
41
|
-
const getRouteByApiSrc_1 = __importDefault(require("./utils/getRouteByApiSrc"));
|
|
42
|
-
exports.getRouteByApiSrc = getRouteByApiSrc_1.default;
|
|
43
17
|
const validToken_1 = __importDefault(require("./utils/validToken"));
|
|
44
18
|
const ansi_colors_1 = __importDefault(require("ansi-colors"));
|
|
45
19
|
const moment_1 = __importDefault(require("moment"));
|
|
@@ -63,16 +37,17 @@ Object.defineProperty(exports, "createToken", { enumerable: true, get: function
|
|
|
63
37
|
Object.defineProperty(exports, "validToken", { enumerable: true, get: function () { return meaToken_1.validToken; } });
|
|
64
38
|
const validType_1 = __importDefault(require("./utils/validType"));
|
|
65
39
|
exports.validType = validType_1.default;
|
|
40
|
+
const createRouter_1 = __importDefault(require("./utils/createRouter"));
|
|
41
|
+
const getRouterInfo_1 = __importDefault(require("./utils/getRouterInfo"));
|
|
66
42
|
// =================================================================
|
|
67
43
|
function getApp(DIRNAME, beforeMounted) {
|
|
68
44
|
// 路径和配置放入state
|
|
69
45
|
state_1.state.DIRNAME = DIRNAME;
|
|
70
46
|
const config = require(path_1.default.join(DIRNAME, "/config/config.ts")).default;
|
|
71
|
-
|
|
72
|
-
|
|
47
|
+
// 获取路由信息
|
|
48
|
+
(0, getRouterInfo_1.default)(path_1.default.join(state_1.state.DIRNAME, "src/api"), path_1.default.join(state_1.state.DIRNAME, "config/defaultApiConfig.ts"));
|
|
73
49
|
state_1.state.config = config;
|
|
74
|
-
state_1.state.
|
|
75
|
-
state_1.state.apiCN = apiCN;
|
|
50
|
+
state_1.state.apiCN = [];
|
|
76
51
|
// new express
|
|
77
52
|
const app = (0, express_1.default)();
|
|
78
53
|
// 是否允许跨域
|
|
@@ -83,7 +58,6 @@ function getApp(DIRNAME, beforeMounted) {
|
|
|
83
58
|
// 初始化app
|
|
84
59
|
app.use(express_1.default.urlencoded({ extended: true }));
|
|
85
60
|
app.use(express_1.default.json());
|
|
86
|
-
// 自定义中间件来处理纯文本和JSON数据
|
|
87
61
|
// 错误处理中间件
|
|
88
62
|
app.use((err, req, res, next) => {
|
|
89
63
|
if (err.type == "entity.parse.failed") {
|
|
@@ -109,21 +83,8 @@ function getApp(DIRNAME, beforeMounted) {
|
|
|
109
83
|
app.use("/apidoc", express_1.default.static(path_1.default.join(__dirname, "/apiDoc")));
|
|
110
84
|
(0, apiDoc_1.default)(app);
|
|
111
85
|
}
|
|
112
|
-
//
|
|
113
|
-
|
|
114
|
-
let isExist = fs.existsSync(path_1.default.join(DIRNAME, "src", item) + ".ts");
|
|
115
|
-
if (!isExist) {
|
|
116
|
-
console.info(ansi_colors_1.default.red(`${item} not found`));
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
const apiFunc = require(path_1.default.join(DIRNAME, "src", item)).default;
|
|
120
|
-
if (!apiFunc) {
|
|
121
|
-
console.info(ansi_colors_1.default.yellow(`${item} 没有导出函数,已跳过..`));
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
apiFunc && app[Router[item].methods](item, apiFunc);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
86
|
+
// 创建路由
|
|
87
|
+
(0, createRouter_1.default)(app);
|
|
127
88
|
// 运行debug
|
|
128
89
|
setTimeout(() => {
|
|
129
90
|
try {
|
package/dist/utils/apiDoc.js
CHANGED
|
@@ -8,9 +8,24 @@ exports.default = (app) => {
|
|
|
8
8
|
}
|
|
9
9
|
return value;
|
|
10
10
|
});
|
|
11
|
-
|
|
11
|
+
const newRouter = JSON.parse(router);
|
|
12
|
+
// 有的描述没有类型,尝试从validFormat里取
|
|
13
|
+
for (const key in newRouter) {
|
|
14
|
+
const item = newRouter[key];
|
|
15
|
+
if (item.validFormat && item.validFormatDes) {
|
|
16
|
+
for (const validFormatDesItem of item.validFormatDes) {
|
|
17
|
+
if (!validFormatDesItem.type &&
|
|
18
|
+
item.validFormat[validFormatDesItem.name]) {
|
|
19
|
+
validFormatDesItem.type = item.validFormat[validFormatDesItem.name];
|
|
20
|
+
}
|
|
21
|
+
else if (!validFormatDesItem.type) {
|
|
22
|
+
validFormatDesItem.type = "String";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
12
27
|
app.post("/apidoc/router", (req, res) => {
|
|
13
|
-
res.return(
|
|
28
|
+
res.return(newRouter);
|
|
14
29
|
});
|
|
15
30
|
app.post("/apidoc/cn", (req, res) => {
|
|
16
31
|
res.return(state_1.state.apiCN);
|
|
@@ -0,0 +1,51 @@
|
|
|
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 (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const state_1 = require("@/state");
|
|
30
|
+
const path_1 = __importDefault(require("path"));
|
|
31
|
+
const fs = __importStar(require("fs"));
|
|
32
|
+
const ansi_colors_1 = __importDefault(require("ansi-colors"));
|
|
33
|
+
function createRouter(app) {
|
|
34
|
+
const { Router, DIRNAME } = state_1.state;
|
|
35
|
+
// 遍历api路由
|
|
36
|
+
for (const item in Router) {
|
|
37
|
+
let isExist = fs.existsSync(path_1.default.join(DIRNAME, "src", item) + ".ts");
|
|
38
|
+
if (!isExist) {
|
|
39
|
+
console.info(ansi_colors_1.default.red(`${item} not found`));
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const apiFunc = require(path_1.default.join(DIRNAME, "src", item)).default;
|
|
43
|
+
if (!apiFunc) {
|
|
44
|
+
console.info(ansi_colors_1.default.yellow(`${item} 没有导出函数,已跳过..`));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
apiFunc && app[Router[item].methods](item, apiFunc);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.default = createRouter;
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
const state_1 = require("@/state");
|
|
7
|
+
const readApi_1 = __importDefault(require("./readApi"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const ansi_colors_1 = __importDefault(require("ansi-colors"));
|
|
11
|
+
function getRouterInfo(apiDir, defaullConfigDir) {
|
|
12
|
+
const apiConfig = {};
|
|
13
|
+
const { DIRNAME } = state_1.state;
|
|
14
|
+
const routerDir = (0, readApi_1.default)(apiDir, "api");
|
|
15
|
+
const defaullConfig = require(defaullConfigDir).default;
|
|
16
|
+
// 遍历api路由
|
|
17
|
+
for (const item of routerDir) {
|
|
18
|
+
let isExist = fs_1.default.existsSync(path_1.default.join(DIRNAME, "src", item) + ".ts");
|
|
19
|
+
if (!isExist) {
|
|
20
|
+
console.info(ansi_colors_1.default.red(`${item} not found`));
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const apiItemConfig = require(path_1.default.join(DIRNAME, "src", item)).config;
|
|
24
|
+
apiConfig[item] = apiItemConfig || defaullConfig;
|
|
25
|
+
// if (!apiFunc) {
|
|
26
|
+
// console.info(c.yellow(`${item} 没有导出函数,已跳过..`));
|
|
27
|
+
// } else {
|
|
28
|
+
// apiFunc && app[Router[item].methods](item, apiFunc);
|
|
29
|
+
// }
|
|
30
|
+
}
|
|
31
|
+
state_1.state.Router = apiConfig;
|
|
32
|
+
return apiConfig;
|
|
33
|
+
}
|
|
34
|
+
exports.default = getRouterInfo;
|