mas-server 3.0.2 → 3.0.4

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.
@@ -1,98 +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"
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"
@@ -1,98 +1,98 @@
1
- type BasicTypeDescriptor =
2
- | typeof String
3
- | typeof Number
4
- | typeof Boolean
5
- | typeof Object;
6
- type TypeDescriptor = BasicTypeDescriptor | Array<TypeDescriptor>;
7
-
8
- interface TypeMapping {
9
- [key: string]: TypeDescriptor | TypeMapping;
10
- }
11
-
12
- function getTypeName(descriptor: TypeDescriptor): string {
13
- if (Array.isArray(descriptor)) {
14
- return "array";
15
- } else {
16
- return descriptor.name.toLowerCase();
17
- }
18
- }
19
-
20
- function validType(obj: any, typeMapping: TypeMapping): boolean {
21
- for (const key in typeMapping) {
22
- if (!(key in obj)) {
23
- return false;
24
- }
25
-
26
- const targetType = typeMapping[key];
27
- const objValue = obj[key];
28
-
29
- if (Array.isArray(targetType)) {
30
- if (!Array.isArray(objValue)) {
31
- return false;
32
- }
33
-
34
- const arrayElementType = targetType[0];
35
-
36
- for (const element of objValue) {
37
- if (typeof arrayElementType === "object") {
38
- if (
39
- !validType(element, arrayElementType as unknown as TypeMapping) ||
40
- Object.keys(element).length !==
41
- Object.keys(arrayElementType as unknown as TypeMapping).length
42
- ) {
43
- return false;
44
- }
45
- } else {
46
- if (
47
- typeof element !== getTypeName(arrayElementType as TypeDescriptor)
48
- ) {
49
- return false;
50
- }
51
- }
52
- }
53
- } else if (typeof targetType === "object") {
54
- if (
55
- typeof objValue !== "object" ||
56
- Array.isArray(objValue) ||
57
- !validType(objValue, targetType as TypeMapping) ||
58
- Object.keys(objValue).length !==
59
- Object.keys(targetType as TypeMapping).length
60
- ) {
61
- return false;
62
- }
63
- } else {
64
- if (typeof objValue !== getTypeName(targetType as TypeDescriptor)) {
65
- return false;
66
- }
67
- }
68
- }
69
-
70
- return true;
71
- }
72
- // 检查基本类型
73
- console.log(
74
- validType({ name: "Alice", age: 30 }, { name: String, age: Number })
75
- ); // 输出 true
76
- console.log(
77
- validType({ name: "Alice", age: 30 }, { name: String, age: String })
78
- ); // 输出 false
79
-
80
- // 检查数组类型
81
- console.log(validType({ values: [1, 2, 3] }, { values: [Number] })); // 输出 true
82
- console.log(validType({ values: [1, "2", 3] }, { values: [Number] })); // 输出 false
83
-
84
- // 检查嵌套类型
85
- console.log(
86
- validType(
87
- { person: { name: "Alice", age: 30 } },
88
- { person: { name: String, age: Number } }
89
- )
90
- ); // 输出 true
91
- console.log(
92
- validType(
93
- { person: { name: "Alice", age: 30 } },
94
- { person: { name: String, age: String } }
95
- )
96
- ); // 输出
97
-
98
- export {};
1
+ type BasicTypeDescriptor =
2
+ | typeof String
3
+ | typeof Number
4
+ | typeof Boolean
5
+ | typeof Object;
6
+ type TypeDescriptor = BasicTypeDescriptor | Array<TypeDescriptor>;
7
+
8
+ interface TypeMapping {
9
+ [key: string]: TypeDescriptor | TypeMapping;
10
+ }
11
+
12
+ function getTypeName(descriptor: TypeDescriptor): string {
13
+ if (Array.isArray(descriptor)) {
14
+ return "array";
15
+ } else {
16
+ return descriptor.name.toLowerCase();
17
+ }
18
+ }
19
+
20
+ function validType(obj: any, typeMapping: TypeMapping): boolean {
21
+ for (const key in typeMapping) {
22
+ if (!(key in obj)) {
23
+ return false;
24
+ }
25
+
26
+ const targetType = typeMapping[key];
27
+ const objValue = obj[key];
28
+
29
+ if (Array.isArray(targetType)) {
30
+ if (!Array.isArray(objValue)) {
31
+ return false;
32
+ }
33
+
34
+ const arrayElementType = targetType[0];
35
+
36
+ for (const element of objValue) {
37
+ if (typeof arrayElementType === "object") {
38
+ if (
39
+ !validType(element, arrayElementType as unknown as TypeMapping) ||
40
+ Object.keys(element).length !==
41
+ Object.keys(arrayElementType as unknown as TypeMapping).length
42
+ ) {
43
+ return false;
44
+ }
45
+ } else {
46
+ if (
47
+ typeof element !== getTypeName(arrayElementType as TypeDescriptor)
48
+ ) {
49
+ return false;
50
+ }
51
+ }
52
+ }
53
+ } else if (typeof targetType === "object") {
54
+ if (
55
+ typeof objValue !== "object" ||
56
+ Array.isArray(objValue) ||
57
+ !validType(objValue, targetType as TypeMapping) ||
58
+ Object.keys(objValue).length !==
59
+ Object.keys(targetType as TypeMapping).length
60
+ ) {
61
+ return false;
62
+ }
63
+ } else {
64
+ if (typeof objValue !== getTypeName(targetType as TypeDescriptor)) {
65
+ return false;
66
+ }
67
+ }
68
+ }
69
+
70
+ return true;
71
+ }
72
+ // 检查基本类型
73
+ console.log(
74
+ validType({ name: "Alice", age: 30 }, { name: String, age: Number })
75
+ ); // 输出 true
76
+ console.log(
77
+ validType({ name: "Alice", age: 30 }, { name: String, age: String })
78
+ ); // 输出 false
79
+
80
+ // 检查数组类型
81
+ console.log(validType({ values: [1, 2, 3] }, { values: [Number] })); // 输出 true
82
+ console.log(validType({ values: [1, "2", 3] }, { values: [Number] })); // 输出 false
83
+
84
+ // 检查嵌套类型
85
+ console.log(
86
+ validType(
87
+ { person: { name: "Alice", age: 30 } },
88
+ { person: { name: String, age: Number } }
89
+ )
90
+ ); // 输出 true
91
+ console.log(
92
+ validType(
93
+ { person: { name: "Alice", age: 30 } },
94
+ { person: { name: String, age: String } }
95
+ )
96
+ ); // 输出
97
+
98
+ export {};
@@ -1,3 +1,3 @@
1
- {
2
- "javascript.format.semicolons": "insert"
3
- }
1
+ {
2
+ "javascript.format.semicolons": "insert"
3
+ }
@@ -22,6 +22,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
25
34
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
36
  };
@@ -46,7 +55,17 @@ function createRouter(app, apiDir) {
46
55
  console.info(ansi_colors_1.default.yellow(`${item} 没有导出函数,已跳过..`));
47
56
  }
48
57
  else {
49
- apiFunc && app[Router[item].methods](item, apiFunc);
58
+ apiFunc &&
59
+ app[Router[item].methods](item, (req, res) => __awaiter(this, void 0, void 0, function* () {
60
+ var _a;
61
+ try {
62
+ yield apiFunc(req, res);
63
+ }
64
+ catch (error) {
65
+ console.log(error, error.toString);
66
+ res.return({ msg: "服务器错误", error: ((_a = error === null || error === void 0 ? void 0 : error.toString) === null || _a === void 0 ? void 0 : _a.call(error)) || null }, 0, 500);
67
+ }
68
+ }));
50
69
  }
51
70
  }
52
71
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mas-server",
3
- "version": "3.0.02",
3
+ "version": "3.0.04",
4
4
  "description": "一款基于express面向中小型项目的后端框架",
5
5
  "main": "dist/index.js",
6
6
  "typings": "src/index.ts",
@@ -14,7 +14,7 @@
14
14
  "init": "npx nodemon ./test/scripts/beforeCreated.ts -end",
15
15
  "gsft": "npx nodemon ./test/scripts/getSqlFormType.ts",
16
16
  "build": "node ./beforebuild.js && tsc --project ./tsconfig-build.json",
17
- "sync": "npm run build && npm publish && cnpm sync mas-server && explorer \"https://npmmirror.com/package/mas-server\""
17
+ "sync": "npm run build && npm publish --registry=https://registry.npmjs.org && cnpm sync mas-server && explorer \"https://npmmirror.com/package/mas-server\""
18
18
  },
19
19
  "keywords": [],
20
20
  "author": "tingxi8087",
package/src/state.ts CHANGED
@@ -1 +1 @@
1
- export const state: any = {};
1
+ export const state: any = {};
@@ -16,7 +16,19 @@ export default function createRouter(app, apiDir: string) {
16
16
  if (!apiFunc) {
17
17
  console.info(c.yellow(`${item} 没有导出函数,已跳过..`));
18
18
  } else {
19
- apiFunc && app[Router[item].methods](item, apiFunc);
19
+ apiFunc &&
20
+ app[Router[item].methods](item, async (req, res) => {
21
+ try {
22
+ await apiFunc(req, res);
23
+ } catch (error) {
24
+ console.log(error, error.toString);
25
+ res.return(
26
+ { msg: "服务器错误", error: error?.toString?.() || null },
27
+ 0,
28
+ 500
29
+ );
30
+ }
31
+ });
20
32
  }
21
33
  }
22
34
  }
@@ -1,19 +1,19 @@
1
- export default (req, res, next) => {
2
- // req.fields && (req.body = req.fields);
3
- let right = true;
4
- res.return = async (data, status = 1, code = 200, msg = "") => {
5
- if (!right) return;
6
- right = false;
7
- if (data === null || data === undefined) {
8
- status = 0;
9
- }
10
- if (data instanceof Promise) data = await data;
11
- // if (typeof data != "string") data = JSON.stringify(data);
12
- res.status(code).send({
13
- msg,
14
- status: !!status ? 1 : 0,
15
- data: data === null || data === undefined ? null : data,
16
- });
17
- };
18
- next();
19
- };
1
+ export default (req, res, next) => {
2
+ // req.fields && (req.body = req.fields);
3
+ let right = true;
4
+ res.return = async (data, status = 1, code = 200, msg = "") => {
5
+ if (!right) return;
6
+ right = false;
7
+ if (data === null || data === undefined) {
8
+ status = 0;
9
+ }
10
+ if (data instanceof Promise) data = await data;
11
+ // if (typeof data != "string") data = JSON.stringify(data);
12
+ res.status(code).send({
13
+ msg,
14
+ status: !!status ? 1 : 0,
15
+ data: data === null || data === undefined ? null : data,
16
+ });
17
+ };
18
+ next();
19
+ };
@@ -1,28 +1,28 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
-
4
- export default function readFilesRecursively(
5
- folderPath: string,
6
- routerPrefix: string = ""
7
- ): string[] {
8
- const files: string[] = [];
9
- fs.readdirSync(folderPath).forEach((fileName) => {
10
- const filePath = path.join(folderPath, fileName);
11
- const stat = fs.statSync(filePath);
12
- if (stat.isDirectory()) {
13
- const directoryPrefix = routerPrefix
14
- ? `${routerPrefix}/${fileName}`
15
- : fileName;
16
- const directoryFiles = readFilesRecursively(filePath, directoryPrefix);
17
- files.push(...directoryFiles);
18
- } else {
19
- const filePrefix = routerPrefix
20
- ? `${routerPrefix}/${fileName}`
21
- : fileName;
22
- const fileRoute = `/${filePrefix.replace(/\.[^/.]+$/, "")}`;
23
- files.push(fileRoute);
24
- }
25
- });
26
-
27
- return files;
28
- }
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+
4
+ export default function readFilesRecursively(
5
+ folderPath: string,
6
+ routerPrefix: string = ""
7
+ ): string[] {
8
+ const files: string[] = [];
9
+ fs.readdirSync(folderPath).forEach((fileName) => {
10
+ const filePath = path.join(folderPath, fileName);
11
+ const stat = fs.statSync(filePath);
12
+ if (stat.isDirectory()) {
13
+ const directoryPrefix = routerPrefix
14
+ ? `${routerPrefix}/${fileName}`
15
+ : fileName;
16
+ const directoryFiles = readFilesRecursively(filePath, directoryPrefix);
17
+ files.push(...directoryFiles);
18
+ } else {
19
+ const filePrefix = routerPrefix
20
+ ? `${routerPrefix}/${fileName}`
21
+ : fileName;
22
+ const fileRoute = `/${filePrefix.replace(/\.[^/.]+$/, "")}`;
23
+ files.push(fileRoute);
24
+ }
25
+ });
26
+
27
+ return files;
28
+ }