mas-server 3.0.41 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +8 -7
  2. package/dist/getApp/apiHandler.d.ts +21 -0
  3. package/dist/getApp/apiHandler.d.ts.map +1 -0
  4. package/dist/getApp/config.d.ts +22 -0
  5. package/dist/getApp/config.d.ts.map +1 -0
  6. package/dist/getApp/docTransform.d.ts +41 -0
  7. package/dist/getApp/docTransform.d.ts.map +1 -0
  8. package/dist/getApp/fsRoutes.d.ts +17 -0
  9. package/dist/getApp/fsRoutes.d.ts.map +1 -0
  10. package/dist/getApp/getApp.d.ts +11 -0
  11. package/dist/getApp/getApp.d.ts.map +1 -0
  12. package/dist/getApp/logs.d.ts +29 -0
  13. package/dist/getApp/logs.d.ts.map +1 -0
  14. package/dist/index.d.ts +5 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +1 -121
  17. package/dist/middleware/openCors.d.ts +9 -0
  18. package/dist/middleware/openCors.d.ts.map +1 -0
  19. package/dist/type.d.ts +150 -0
  20. package/dist/type.d.ts.map +1 -0
  21. package/dist/utils/mas-encrypt.min.d.ts +6 -0
  22. package/dist/utils/mas-encrypt.min.d.ts.map +1 -0
  23. package/dist/utils/quickSend.d.ts +8 -0
  24. package/dist/utils/quickSend.d.ts.map +1 -0
  25. package/dist/utils/tokenUtils.d.ts +54 -0
  26. package/dist/utils/tokenUtils.d.ts.map +1 -0
  27. package/dist/utils/typeFromValidFormat.d.ts +69 -0
  28. package/dist/utils/typeFromValidFormat.d.ts.map +1 -0
  29. package/dist/utils/validType.d.ts +17 -0
  30. package/dist/utils/validType.d.ts.map +1 -0
  31. package/package.json +43 -46
  32. package/.temp/.keep +0 -0
  33. package/.temp/getRouteByApiSrc.ts +0 -55
  34. package/.temp/merge/a.ts +0 -4
  35. package/.temp/merge/as.ts +0 -1
  36. package/.temp/merge/b.ts +0 -3
  37. package/.temp/merge/i.js +0 -103
  38. package/.temp/merge/logs/.keep +0 -0
  39. package/.temp/merge/test.ts +0 -2
  40. package/.temp/merge/validType copy.ts +0 -149
  41. package/.temp/merge/validType.ts +0 -98
  42. package/.temp/merge/validTypeOptimize.ts +0 -98
  43. package/.temp/updateRouter.ts +0 -46
  44. package/.vscode/settings.json +0 -3
  45. package/beforebuild.js +0 -9
  46. package/dist/state.js +0 -4
  47. package/dist/typings/index.js +0 -2
  48. package/dist/utils/apiLimit.js +0 -20
  49. package/dist/utils/createRouter.js +0 -81
  50. package/dist/utils/getRouterInfo.js +0 -56
  51. package/dist/utils/logs.js +0 -58
  52. package/dist/utils/mas-encrypt.min.js +0 -1
  53. package/dist/utils/masUtils.js +0 -10
  54. package/dist/utils/meaToken.js +0 -57
  55. package/dist/utils/printLog.js +0 -12
  56. package/dist/utils/quickSend.js +0 -37
  57. package/dist/utils/readApi.js +0 -60
  58. package/dist/utils/validRouteData.js +0 -37
  59. package/dist/utils/validToken.js +0 -24
  60. package/dist/utils/validType.js +0 -84
  61. package/src/index.ts +0 -98
  62. package/src/state.ts +0 -1
  63. package/src/typings/index.ts +0 -113
  64. package/src/utils/apiLimit.ts +0 -15
  65. package/src/utils/createRouter.ts +0 -34
  66. package/src/utils/getRouterInfo.ts +0 -49
  67. package/src/utils/logs.ts +0 -21
  68. package/src/utils/mas-encrypt.min.js +0 -1
  69. package/src/utils/masUtils.ts +0 -7
  70. package/src/utils/meaToken.ts +0 -56
  71. package/src/utils/printLog.ts +0 -12
  72. package/src/utils/quickSend.ts +0 -25
  73. package/src/utils/readApi.ts +0 -28
  74. package/src/utils/validRouteData.ts +0 -45
  75. package/src/utils/validToken.ts +0 -22
  76. package/src/utils/validType.ts +0 -81
  77. package/test/apiTemplate/curd/del.ts +0 -9
  78. package/test/apiTemplate/curd/get.ts +0 -9
  79. package/test/apiTemplate/curd/set.ts +0 -9
  80. package/test/apiTemplate/defaultApi.ts +0 -8
  81. package/test/config/serverConfig/config.ts +0 -29
  82. package/test/config/sqlConfig/createSqlFormData.ts +0 -13
  83. package/test/logs/.keep +0 -0
  84. package/test/main.ts +0 -29
  85. package/test/scripts/beforeCreated.ts +0 -28
  86. package/test/scripts/createApiFile.ts +0 -26
  87. package/test/scripts/createApis.ts +0 -61
  88. package/test/scripts/createSqlForm.ts +0 -5
  89. package/test/scripts/getSqlFormType.ts +0 -23
  90. package/test/scripts/run.ts +0 -4
  91. package/test/src/api/example/ArrValid.ts +0 -11
  92. package/test/src/api/example/per.ts +0 -34
  93. package/test/src/api/example/tip.ts +0 -7
  94. package/test/src/api/example/validReqData.ts +0 -82
  95. package/test/src/api/index.ts +0 -9
  96. package/test/src/apiDoc.ts +0 -34
  97. package/test/src/debug.ts +0 -5
  98. package/test/src/masState.ts +0 -4
  99. package/test/src/sqlform.json +0 -1
  100. package/test/test.ts +0 -1
  101. package/tsconfig-build.json +0 -20
  102. package/tsconfig.json +0 -21
  103. package/tsconfigschema.json +0 -1263
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export function encode(t: any, e: any, r?: number): any;
2
+ export function decode(t: any, e: any, r?: number): any;
3
+ export function isJSON(t: any): boolean;
4
+ export function randomInt(t: any, e: any): number;
5
+ export function randomStr(e: any): string;
6
+ //# sourceMappingURL=mas-encrypt.min.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mas-encrypt.min.d.ts","sourceRoot":"","sources":["../../src/utils/mas-encrypt.min.js"],"names":[],"mappings":"AAAk99C,wDAA+c;AAA/c,wDAA+c;AAAl+C,wCAAiG;AAAA,kDAA8S;AAA9S,0CAA8S"}
@@ -0,0 +1,8 @@
1
+ import type { RequestHandler } from 'express';
2
+ /**
3
+ * 扩展 Response 对象,添加便捷的返回方法。
4
+ * 为 Express 中间件,给 res 对象添加 return、reply、success、fail 方法。
5
+ */
6
+ declare const quickSend: RequestHandler;
7
+ export default quickSend;
8
+ //# sourceMappingURL=quickSend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickSend.d.ts","sourceRoot":"","sources":["../../src/utils/quickSend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAExD;;;GAGG;AACH,QAAA,MAAM,SAAS,EAAE,cA+ChB,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 解码加密的 token 字符串
3
+ * @param token - 需要解码的加密 token 字符串
4
+ * @param key - 解密密钥,默认为 '8087'
5
+ * @param layer - 编码层数,默认为 0
6
+ * @returns 解码后的数据对象,如果解码失败则返回 false
7
+ */
8
+ declare function decode(token: string, key?: string, layer?: number): any;
9
+ /**
10
+ * 编码数据为加密的 token 字符串
11
+ * @param data - 需要编码的数据,可以是对象或字符串
12
+ * @param key - 加密密钥,默认为 '8087'
13
+ * @param layer - 编码层数,默认为 0
14
+ * @returns 编码后的 token 字符串
15
+ */
16
+ declare function encode(data: any, key?: string, layer?: number): string;
17
+ /**
18
+ * Token 验证结果类型
19
+ */
20
+ type TokenValidationResult = {
21
+ status: 1;
22
+ data?: any;
23
+ _permission?: string[];
24
+ _masTime?: number;
25
+ [key: string]: any;
26
+ } | {
27
+ status: 0;
28
+ msg: string;
29
+ errorCode: number;
30
+ token?: any;
31
+ };
32
+ /**
33
+ * 验证 token
34
+ * @param param0 token:解密的token,permission:效验的权限,只要有其中一个就可
35
+ * @param key 解密密钥
36
+ * @returns 验证结果
37
+ */
38
+ declare const validToken: ({ token, permission }: {
39
+ token: any;
40
+ permission?: string[];
41
+ }, key?: string) => TokenValidationResult;
42
+ /**
43
+ * 创建 token
44
+ * @param param0 data:加密的数据,time:过期时间/s(为零则不会过期),permission:权限设置
45
+ * @param key 加密密钥
46
+ * @returns 加密后的 token 字符串
47
+ */
48
+ declare function createToken({ data, time, permission, }?: {
49
+ data?: any;
50
+ time?: number;
51
+ permission?: string[];
52
+ }, key?: string): string;
53
+ export { validToken, createToken, decode, encode };
54
+ //# sourceMappingURL=tokenUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenUtils.d.ts","sourceRoot":"","sources":["../../src/utils/tokenUtils.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,iBAAS,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAe,EAAE,KAAK,GAAE,MAAU,GAAG,GAAG,CAE3E;AAED;;;;;;GAMG;AACH,iBAAS,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAE,MAAe,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,CAE1E;AAED;;GAEG;AACH,KAAK,qBAAqB,GACtB;IACE,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,GACD;IACE,MAAM,EAAE,CAAC,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEN;;;;;GAKG;AACH,QAAA,MAAM,UAAU,GACd,uBAA4B;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EACjE,YAAY,KACX,qBA0BF,CAAC;AAEF;;;;;GAKG;AACH,iBAAS,WAAW,CAClB,EACE,IAAW,EACX,IAAQ,EACR,UAAe,GAChB,GAAE;IAAE,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,EAC5D,GAAG,SAAS,GACX,MAAM,CAMR;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * 由 `requestFormat`(运行时校验格式)推导出真实的 TypeScript 类型。
3
+ *
4
+ * 约定(与 `src/utils/validType.ts` 的运行时校验保持一致):
5
+ * - `String / Number / Boolean / Object` 这类构造器表示基础类型
6
+ * - `'?'` 表示 **可选 string**(字段可缺失/可为 undefined/null;存在时必须是 string)
7
+ * - `-1` 表示 **可选 number**(字段可缺失/可为 undefined/null;存在时必须是 number)
8
+ * - `[...]` 表示数组,数组元素格式由数组元素类型决定(推荐只放 1 个元素作为“模板”)
9
+ * - `{ ... }` 表示对象,key 对应字段格式
10
+ */
11
+ /** 运行时校验支持的基础构造器描述符 */
12
+ export type BasicTypeDescriptor = StringConstructor | NumberConstructor | BooleanConstructor | ObjectConstructor;
13
+ /**
14
+ * 可选字段占位符(仅用于 `requestFormat/responseFormat` 的“值”层表达)。
15
+ *
16
+ * 使用示例:
17
+ * ```ts
18
+ * const _String = '?' as const;
19
+ * const _Number = -1 as const;
20
+ * const requestFormat = { name: _String, age: _Number };
21
+ * ```
22
+ */
23
+ export type OptionalDescriptor = '?' | -1;
24
+ /**
25
+ * 运行时校验格式(requestFormat)的 TypeScript 结构。
26
+ *
27
+ * 注意:这里是“类型层”定义,用于推导 `req.body` 的类型;运行时仍由 `validType` 校验。
28
+ */
29
+ export type ValidFormat = BasicTypeDescriptor | OptionalDescriptor | {
30
+ [key: string]: ValidFormat;
31
+ } | ValidFormat[];
32
+ /** 可选字符串占位符:字段可缺失/undefined/null;存在时必须是 string */
33
+ export declare const _String: "?";
34
+ /** 可选数字占位符:字段可缺失/undefined/null;存在时必须是 number */
35
+ export declare const _Number: -1;
36
+ /**
37
+ * 将构造器描述符映射为对应的 TypeScript 原始类型。
38
+ */
39
+ type PrimitiveFromDescriptor<T> = T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T extends ObjectConstructor ? Record<string, unknown> : never;
40
+ /**
41
+ * 将可选占位符映射为对应的 TypeScript 原始类型(存在时的类型)。
42
+ */
43
+ type PrimitiveFromOptionalDescriptor<T> = T extends '?' ? string : T extends -1 ? number : never;
44
+ /**
45
+ * 从对象格式中计算“可选字段 key 集合”。
46
+ */
47
+ type OptionalKeys<T> = T extends object ? {
48
+ [K in keyof T]-?: T[K] extends OptionalDescriptor ? K : T[K] extends readonly (infer U)[] ? U extends OptionalDescriptor ? K : never : never;
49
+ }[keyof T] : never;
50
+ /**
51
+ * 从对象格式中计算“必填字段 key 集合”。
52
+ */
53
+ type RequiredKeys<T> = Exclude<keyof T, OptionalKeys<T>>;
54
+ /**
55
+ * 从 `requestFormat` 推导 body 类型:
56
+ * - 构造器 -> 基础类型
57
+ * - 可选占位符 -> 基础类型(存在时)
58
+ * - 数组 -> 元素类型数组
59
+ * - 对象 -> 递归映射字段
60
+ * - 其它 -> unknown
61
+ */
62
+ export type TypeFromValidFormat<T> = T extends BasicTypeDescriptor ? PrimitiveFromDescriptor<T> : T extends OptionalDescriptor ? PrimitiveFromOptionalDescriptor<T> : T extends readonly (infer U)[] ? TypeFromValidFormat<U>[] : T extends object ? // 对象字段:占位符字段推导为可选属性,其余字段为必填属性
63
+ {
64
+ [K in RequiredKeys<T>]: TypeFromValidFormat<T[K]>;
65
+ } & {
66
+ [K in OptionalKeys<T>]?: TypeFromValidFormat<T[K]>;
67
+ } : unknown;
68
+ export {};
69
+ //# sourceMappingURL=typeFromValidFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeFromValidFormat.d.ts","sourceRoot":"","sources":["../../src/utils/typeFromValidFormat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,uBAAuB;AACvB,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,CAAC;AAEtB;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB,mBAAmB,GACnB,kBAAkB,GAClB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,GAC9B,WAAW,EAAE,CAAC;AAElB,kDAAkD;AAClD,eAAO,MAAM,OAAO,EAAG,GAAY,CAAC;AACpC,iDAAiD;AACjD,eAAO,MAAM,OAAO,EAAG,CAAC,CAAU,CAAC;AAEnC;;GAEG;AACH,KAAK,uBAAuB,CAAC,CAAC,IAAI,CAAC,SAAS,iBAAiB,GACzD,MAAM,GACN,CAAC,SAAS,iBAAiB,GACzB,MAAM,GACN,CAAC,SAAS,kBAAkB,GAC1B,OAAO,GACP,CAAC,SAAS,iBAAiB,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,KAAK,CAAC;AAEhB;;GAEG;AACH,KAAK,+BAA+B,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,GACnD,MAAM,GACN,CAAC,SAAS,CAAC,CAAC,GACV,MAAM,GACN,KAAK,CAAC;AAEZ;;GAEG;AACH,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACnC;KACG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,kBAAkB,GAC7C,CAAC,GAED,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC/B,CAAC,SAAS,kBAAkB,GAC1B,CAAC,GACD,KAAK,GACP,KAAK;CACZ,CAAC,MAAM,CAAC,CAAC,GACV,KAAK,CAAC;AAEV;;GAEG;AACH,KAAK,YAAY,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,mBAAmB,GAC9D,uBAAuB,CAAC,CAAC,CAAC,GAC1B,CAAC,SAAS,kBAAkB,GAC1B,+BAA+B,CAAC,CAAC,CAAC,GAClC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC5B,mBAAmB,CAAC,CAAC,CAAC,EAAE,GACxB,CAAC,SAAS,MAAM,GAEd,AADA,8BAA8B;AAC9B;KAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KACrD,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACnD,GACD,OAAO,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ValidFormat } from './typeFromValidFormat';
2
+ /**
3
+ * 获取值的“运行时类型标签”(与 `Object.prototype.toString` 一致)。
4
+ *
5
+ * @param value - 任意值
6
+ * @returns 小写类型字符串,例如:`"string" | "number" | "object" | "array" | "function"`
7
+ */
8
+ export declare function getType(value: unknown): string;
9
+ /**
10
+ * 校验值是否满足 `typeMapping/requestFormat` 所描述的格式。
11
+ *
12
+ * @param value - 待校验值(通常是 req.body 或其子字段)
13
+ * @param format - 格式描述(`String/Number/...`、对象、数组)
14
+ * @param strict - strict=true 时对象不允许出现多余字段;strict=false 允许多余字段
15
+ */
16
+ export default function validType(value: unknown, format: ValidFormat, strict?: boolean): boolean;
17
+ //# sourceMappingURL=validType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validType.d.ts","sourceRoot":"","sources":["../../src/utils/validType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE9C;AA8ID;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,WAAW,EACnB,MAAM,GAAE,OAAe,GACtB,OAAO,CAqBT"}
package/package.json CHANGED
@@ -1,53 +1,50 @@
1
1
  {
2
2
  "name": "mas-server",
3
- "version": "3.0.41",
4
- "description": "一款基于express面向中小型项目的后端框架",
5
- "main": "dist/index.js",
6
- "typings": "src/index.ts",
3
+ "version": "4.0.0-beta.0",
4
+ "description": "",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "private": false,
7
18
  "scripts": {
8
- "test": "npx ts-node ./test/scripts/beforeCreated.ts -end && npx ts-node ./test/scripts/run.ts",
9
- "testmon": "npx nodemon ./test/scripts/run.ts",
10
- "testTS": "npx nodemon ./test/test.ts",
11
- "createSql": "npx ts-node ./test/scripts/createSqlForm.ts",
12
- "createApi": "npx ts-node ./test/scripts/createApiFile.ts",
13
- "createApis": "npx ts-node ./test/scripts/createApis.ts",
14
- "init": "npx nodemon ./test/scripts/beforeCreated.ts -end",
15
- "gsft": "npx nodemon ./test/scripts/getSqlFormType.ts",
16
- "build": "node ./beforebuild.js && tsc --project ./tsconfig-build.json",
17
- "sync": "npm run build && npm publish --registry=https://registry.npmjs.org && cnpm sync mas-server && explorer \"https://npmmirror.com/package/mas-server\""
19
+ "build": "bun run build:js && bun run build:types",
20
+ "build:js": "bun build src/index.ts --outdir ./dist --target node --format esm --minify --external express --external morgan --external rotating-file-stream --external ansi-colors --external moment",
21
+ "build:types": "tsc --project tsconfig.build.json",
22
+ "prepublishOnly": "bun run build",
23
+ "debug": "bun run --watch debug.ts",
24
+ "testServer": "bun run --watch test/src/main.ts",
25
+ "sync": "bun run build && npm publish --registry=https://registry.npmjs.org && cnpm sync mas-server && explorer \"https://npmmirror.com/package/mas-server\""
18
26
  },
19
- "keywords": [],
20
- "author": "tingxi8087",
21
- "license": "ISC",
22
- "dependencies": {
23
- "@types/express": "^4.17.21",
24
- "ansi-colors": "^4.1.3",
25
- "axios": "^1.3.6",
26
- "cors": "^2.8.5",
27
- "express": "^4.18.2",
28
- "express-ip": "^1.0.4",
29
- "express-rate-limit": "^7.1.4",
30
- "fs-extra": "^11.1.1",
31
- "glob": "^10.3.1",
32
- "masmysql": "^2.0.56",
33
- "module-alias": "^2.2.2",
34
- "moment": "^2.29.4",
35
- "moment-timezone": "^0.5.44",
36
- "morgan": "^1.10.0",
37
- "mysql": "^2.18.1",
38
- "nodemon": "^2.0.22",
39
- "rotating-file-stream": "^3.1.1",
40
- "ts-node": "^10.9.1",
41
- "ts-node-dev": "^2.0.0",
42
- "typescript": "^5.0.4"
27
+ "devDependencies": {
28
+ "@types/bun": "latest",
29
+ "@types/morgan": "^1.9.10",
30
+ "@typescript-eslint/eslint-plugin": "^8.52.0",
31
+ "@typescript-eslint/parser": "^8.52.0",
32
+ "eslint": "^9.39.2",
33
+ "eslint-config-prettier": "^10.1.8",
34
+ "eslint-plugin-prettier": "^5.5.4",
35
+ "prettier": "^3.7.4",
36
+ "typescript": "^5",
37
+ "typescript-eslint": "^8.51.0"
43
38
  },
44
- "_moduleAliases": {
45
- "@": "src/",
46
- "@@": "."
39
+ "peerDependencies": {
40
+ "typescript": "^5"
47
41
  },
48
- "devDependencies": {
49
- "@types/cors": "^2.8.13",
50
- "@types/express": "^4.17.17",
51
- "@types/moment": "^2.13.0"
42
+ "dependencies": {
43
+ "@types/express": "^5.0.6",
44
+ "ansi-colors": "^4.1.3",
45
+ "express": "^5.2.1",
46
+ "moment": "^2.30.1",
47
+ "morgan": "^1.10.1",
48
+ "rotating-file-stream": "^3.2.7"
52
49
  }
53
- }
50
+ }
package/.temp/.keep DELETED
File without changes
@@ -1,55 +0,0 @@
1
- import readApi from "./readApi";
2
- import c from "ansi-colors";
3
- import { ApiConfigType } from "../typings";
4
-
5
- export default function getRouteByApiSrc(
6
- apiSrc,
7
- apiConfig: ApiConfigType,
8
- apiKey: { [key: string]: string }
9
- ) {
10
- const routerArr = readApi(apiSrc, "api");
11
- const newApiConfig = {};
12
- apiConfig = { ...apiConfig };
13
- let isAdd = false;
14
- for (let v of routerArr) {
15
- if (!apiConfig[v]) {
16
- isAdd = true;
17
- console.info(c.green(`新增接口 ${v}`));
18
- newApiConfig[v] = {
19
- name: "新建接口",
20
- methods: "all",
21
- des: "",
22
- validFormat: null,
23
- };
24
- } else {
25
- newApiConfig[v] = apiConfig[v];
26
- delete apiConfig[v];
27
- }
28
- }
29
- if (Object.keys(apiConfig).length != 0) {
30
- console.info(c.red(`删除接口 ${Object.keys(apiConfig)}`));
31
- isAdd = true;
32
- }
33
- // 接口翻译
34
- let newApiConfigArr = [];
35
-
36
- for (let item in newApiConfig) {
37
- for (let v of item.slice(1).split("/")) {
38
- newApiConfigArr.push(v);
39
- }
40
- }
41
-
42
- newApiConfigArr = [...new Set(newApiConfigArr)];
43
- apiKey = { ...apiKey };
44
- const newApiKey = {};
45
-
46
- for (let v of newApiConfigArr) {
47
- if (apiKey[v] === undefined) {
48
- isAdd = true;
49
- newApiKey[v] = "";
50
- } else {
51
- newApiKey[v] = apiKey[v];
52
- }
53
- }
54
- return { newApiConfig, isAdd, newApiConfigArr, newApiKey };
55
- }
package/.temp/merge/a.ts DELETED
@@ -1,4 +0,0 @@
1
- import * as fs from "fs";
2
- import path from "path";
3
- fs.writeFileSync(path.join(__dirname, "as.ts"), `export default{name:"test"}`);
4
- export {};
package/.temp/merge/as.ts DELETED
@@ -1 +0,0 @@
1
- export default{name:"test"}
package/.temp/merge/b.ts DELETED
@@ -1,3 +0,0 @@
1
- import test from "./as";
2
- console.log(test);
3
- export {};
package/.temp/merge/i.js DELETED
@@ -1,103 +0,0 @@
1
- const express = require("express");
2
- const formidable = require('express-formidable');
3
- const cors = require('cors');
4
- const fs = require('fs');
5
- const path = require('path');
6
- const { tip } = require("masutils");
7
- const configSchema = require('./config/config.schema');
8
- const state = require("./state");
9
- const beforeIndex = require('./utils/beforeCreate');
10
- const masmysql = require('masmysql');
11
- const { sql, setSqlConfig, getSqlFormKey } = require('masmysql');
12
- const createSqlForm = require("./utils/createSqlForm");
13
- const getDir = require("./utils/getDir");
14
- const createApi = require("./utils/createApi");
15
- const createApiFile = require("./utils/createApiFile");
16
- const createForm = (dirname) => {
17
- const config = require(path.join(dirname, "/config", "config.js"));
18
- const form = require(path.join(dirname, "/config", "/sqlform.config.js"));
19
- createSqlForm(config.sql, form);
20
- };
21
- const createCode = (dirname) => {
22
- createApi(dirname);
23
- };
24
- const createApis = (dirname) => {
25
- createApiFile(dirname);
26
- };
27
- let token = null;
28
- const getApp = (dirname) => {
29
- const app = express();
30
- const config = require(path.join(dirname, "/config", "config.js"));
31
- state.config = config;
32
- state.dirname = dirname;
33
- // 工具包
34
- const logs = require("./utils/logs");
35
- const quickSend = require('./utils/quickSend');
36
- token = require("./utils/token");
37
- const DataVerified = require("./utils/DataVerified");
38
- const masDoc = require("./utils/masDoc");
39
- const apiConfig = require(path.join(dirname, "/config", "/api.config.json"));
40
- // 处理数据库
41
- config.useSql && setSqlConfig(config.sql);
42
- config.useSql && sql.init();
43
- config.useSql && getSqlFormKey(dirname + "/src/$form.js");
44
- // 处理express
45
- config.cors && app.use(cors());
46
- app.use('/public', express.static(path.join(dirname, "/public")));
47
- config.apidoc && app.use('/masPublic', express.static(path.join(__dirname, "/public")));;
48
- app.use(formidable());
49
- app.use(quickSend);
50
- config.logs.open && app.use(require('express-ip')().getIpInfoMiddleware);
51
- config.logs.open && app.use(logs);
52
- config.token.open && app.use(token._main);
53
- app.use(DataVerified);
54
- masDoc(app, config);
55
- getDir('/api').map(item => {
56
- let model = require(dirname + `/src/${item}`);
57
- if (typeof model === "function") {
58
- if (apiConfig[item] && apiConfig[item].methods) {
59
- app[apiConfig[item].methods](item, model);
60
- } else {
61
- app.all(item, model);
62
- }
63
- }
64
- });
65
- app.all('/', async (req, res) => {
66
- const index = require(path.join(dirname, "/src/api", "index.js"));
67
- index(req, res);
68
- });
69
- app.all('*', (req, res) => {
70
- res.return(404, 0, 404);
71
- });
72
- setTimeout(() => {
73
- try {
74
- require(path.join(dirname + '/src/debug.js'));
75
- } catch (error) {
76
- tip("debug.js报错!!!");
77
- tip(error);
78
- }
79
- }, 1000);
80
- return app;
81
- };
82
- /**
83
- * @desc: 生成token
84
- * @param {*} data 要放入token的数据
85
- * @param {string} permission 角色权限
86
- * @param {number} time token过期时间,设置此项传入数据必须为json数据,单位为s,默认为0,不过期
87
- * @return {*}
88
- */
89
- function createToken(data, permission, time) {
90
- return token.createToken(data, time, permission, state.config);
91
- }
92
- module.exports = {
93
- getApp,
94
- configSchema: configSchema.configSchema,
95
- $sqlForm: configSchema.$sqlForm,
96
- beforeIndex,
97
- masmysql,
98
- createToken,
99
- sql,
100
- createForm,
101
- createCode,
102
- createApis
103
- };
File without changes
@@ -1,2 +0,0 @@
1
- import "./a";
2
- import "./b";
@@ -1,149 +0,0 @@
1
- type BasicTypeDescriptor =
2
- | StringConstructor
3
- | NumberConstructor
4
- | BooleanConstructor
5
- | ObjectConstructor;
6
- type TypeDescriptor = BasicTypeDescriptor | Array<any>;
7
-
8
- interface TypeMapping {
9
- [key: string]:
10
- | TypeDescriptor
11
- | TypeMapping
12
- | Array<TypeDescriptor | TypeMapping>;
13
- }
14
- import { getType } from "../src/utils/masUtils";
15
- function getTypeName(descriptor: TypeDescriptor): string {
16
- if (Array.isArray(descriptor)) {
17
- return "array";
18
- } else {
19
- return (descriptor as BasicTypeDescriptor).name.toLowerCase();
20
- }
21
- }
22
-
23
- function validTypeObj(obj: any, typeMapping: TypeMapping): boolean {
24
- for (const key in typeMapping) {
25
- if (!obj.hasOwnProperty(key)) {
26
- return false;
27
- }
28
-
29
- const targetType = typeMapping[key];
30
-
31
- const objValue = obj[key];
32
- if (Array.isArray(targetType)) {
33
- if (!Array.isArray(objValue)) {
34
- return false;
35
- }
36
-
37
- const arrayElementType = targetType[0];
38
-
39
- for (const element of objValue) {
40
- if (typeof arrayElementType === "object") {
41
- if (!validType(element, arrayElementType as TypeMapping)) {
42
- return false;
43
- }
44
- } else {
45
- if (
46
- typeof element !== getTypeName(arrayElementType as TypeDescriptor)
47
- ) {
48
- return false;
49
- }
50
- }
51
- }
52
- } else if (typeof targetType === "object") {
53
- if (
54
- typeof objValue !== "object" ||
55
- Array.isArray(objValue) ||
56
- !validType(objValue, targetType as TypeMapping)
57
- ) {
58
- return false;
59
- }
60
- } else {
61
- if (typeof objValue !== getTypeName(targetType as TypeDescriptor)) {
62
- return false;
63
- }
64
- }
65
- }
66
-
67
- return true;
68
- }
69
- function validTypeObjStrict(obj: any, typeMapping: TypeMapping): boolean {
70
- if (getType(typeMapping) == "object") {
71
- if (getType(obj) != "object") return false;
72
- if (Object.keys(obj).length != Object.keys(typeMapping).length) {
73
- return false;
74
- }
75
- }
76
-
77
- for (const key in typeMapping) {
78
- if (!obj?.hasOwnProperty(key)) {
79
- return false;
80
- }
81
-
82
- const targetType = typeMapping[key];
83
- const objValue = obj[key];
84
-
85
- if (Array.isArray(targetType)) {
86
- if (!Array.isArray(objValue)) {
87
- return false;
88
- }
89
-
90
- const arrayElementType = targetType[0];
91
-
92
- for (const element of objValue) {
93
- if (typeof arrayElementType === "object") {
94
- if (
95
- !validType(element, arrayElementType as TypeMapping) ||
96
- Object.keys(element).length !==
97
- Object.keys(arrayElementType as TypeMapping).length
98
- ) {
99
- return false;
100
- }
101
- } else {
102
- if (
103
- typeof element !== getTypeName(arrayElementType as TypeDescriptor)
104
- ) {
105
- return false;
106
- }
107
- }
108
- }
109
- } else if (typeof targetType === "object") {
110
- if (
111
- typeof objValue !== "object" ||
112
- Array.isArray(objValue) ||
113
- !validType(objValue, targetType as TypeMapping) ||
114
- Object.keys(objValue).length !==
115
- Object.keys(targetType as TypeMapping).length
116
- ) {
117
- return false;
118
- }
119
- } else {
120
- if (typeof objValue !== getTypeName(targetType as TypeDescriptor)) {
121
- return false;
122
- }
123
- }
124
- }
125
-
126
- return true;
127
- }
128
-
129
- export default function validType(
130
- obj: any,
131
- typeMapping: TypeMapping | TypeDescriptor,
132
- strict: boolean = false
133
- ): boolean {
134
- if (getType(typeMapping) == "function") {
135
- const typeT = typeMapping.toString().split(" ")[1].trimEnd();
136
- if (typeT == "Boolean()") {
137
- return getType(obj) == "boolean";
138
- } else if (typeT == "Number()") {
139
- return getType(obj) == "number";
140
- } else if (typeT == "String()") {
141
- return getType(obj) == "string";
142
- }
143
- } else {
144
- return strict
145
- ? validTypeObjStrict(obj, typeMapping as any)
146
- : validTypeObj(obj, typeMapping as any);
147
- }
148
- return false;
149
- }