mas-server 1.0.2 → 2.0.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.
- package/.temp/a.ts +4 -0
- package/.temp/as.ts +1 -0
- package/.temp/b.ts +3 -0
- package/{src/index.js → .temp/i.js} +3 -3
- package/.temp/logs/.keep +0 -0
- package/.temp/test.ts +2 -0
- package/.temp/validType copy.ts +149 -0
- package/.temp/validType.ts +96 -0
- package/.temp/validTypeOptimize.ts +98 -0
- package/.vscode/settings.json +0 -109
- package/dist/index.js +136 -0
- package/dist/masmysql/checkSqlkey.js +67 -0
- package/dist/masmysql/createSqlForm.js +44 -0
- package/dist/masmysql/esaysql.js +53 -0
- package/dist/masmysql/index.js +111 -0
- package/dist/masmysql/masSql.js +741 -0
- package/dist/masmysql/state.js +5 -0
- package/dist/masmysql/type.js +2 -0
- package/dist/masmysql/utils.js +12 -0
- package/dist/state.js +4 -0
- package/dist/typings/index.js +2 -0
- package/dist/utils/apiDoc.js +18 -0
- package/dist/utils/getLog.js +18 -0
- package/dist/utils/getRouteByApiSrc.js +54 -0
- package/dist/utils/masUtils.js +12 -0
- package/dist/utils/meaToken.js +57 -0
- package/dist/utils/quickSend.js +32 -0
- package/dist/utils/readApi.js +50 -0
- package/dist/utils/validRouteData.js +37 -0
- package/dist/utils/validToken.js +24 -0
- package/dist/utils/validType.js +101 -0
- package/package.json +34 -15
- package/src/apiDoc/assets/empty-907982e4.js +1 -0
- package/src/apiDoc/assets/index-b56e6bc6.js +1414 -0
- package/src/apiDoc/assets/index-bb16d834.css +6 -0
- package/src/{public/doc/img/jsoneditor-icons.256e3abc.svg → apiDoc/assets/jsoneditor-icons-45c98bf0.svg} +213 -357
- package/src/apiDoc/favicon.ico +0 -0
- package/src/apiDoc/index.html +15 -0
- package/src/index.ts +132 -0
- package/src/masmysql/checkSqlkey.ts +55 -0
- package/src/masmysql/createSqlForm.ts +37 -0
- package/src/masmysql/esaysql.ts +44 -0
- package/src/masmysql/index.ts +68 -0
- package/src/masmysql/masSql.ts +736 -0
- package/src/masmysql/state.ts +5 -0
- package/src/masmysql/type.ts +34 -0
- package/src/masmysql/utils.ts +8 -0
- package/src/state.ts +1 -0
- package/src/typings/index.ts +114 -0
- package/src/utils/apiDoc.ts +18 -0
- package/src/utils/getLog.ts +20 -0
- package/src/utils/getRouteByApiSrc.ts +55 -0
- package/src/utils/mas-encrypt.min.js +1 -0
- package/src/utils/masUtils.ts +8 -0
- package/src/utils/meaToken.ts +56 -0
- package/src/utils/quickSend.ts +19 -0
- package/src/utils/readApi.ts +30 -0
- package/src/utils/validRouteData.ts +46 -0
- package/src/utils/validToken.ts +22 -0
- package/src/utils/validType.ts +98 -0
- package/test/apiTemplate/api.temp.ts +6 -0
- package/test/apiTemplate/curd/del.ts +9 -0
- package/test/apiTemplate/curd/get.ts +9 -0
- package/test/apiTemplate/curd/set.ts +9 -0
- package/test/config/api.config.ts +3 -0
- package/test/config/api.key.ts +14 -0
- package/test/config/config.ts +30 -0
- package/test/config/createSqlFormData.ts +14 -0
- package/test/logs/.keep +0 -0
- package/test/main.ts +25 -0
- package/test/scripts/beforeCreated.ts +67 -0
- package/test/scripts/createApiFile.ts +27 -0
- package/test/scripts/createApis.ts +109 -0
- package/test/scripts/createSqlForm.ts +5 -0
- package/test/scripts/getSqlFormType.ts +34 -0
- package/test/scripts/run.ts +4 -0
- package/test/scripts/updateRouter.ts +46 -0
- package/test/src/api/curd/student/del.ts +9 -0
- package/test/src/api/curd/student/get.ts +9 -0
- package/test/src/api/curd/student/set.ts +9 -0
- package/test/src/api/index.ts +4 -0
- package/test/src/api/per.ts +6 -0
- package/test/src/api/person/del.ts +4 -0
- package/test/src/api/person/get.ts +4 -0
- package/test/src/api/person/set.ts +4 -0
- package/test/src/api/test.ts +7 -0
- package/test/src/api/validtest/boolArr.ts +4 -0
- package/test/src/debug.ts +56 -0
- package/test/src/masState.ts +4 -0
- package/test/src/sql/selectStudent.ts +7 -0
- package/test/src/sqlform.json +1 -0
- package/test/test.ts +13 -0
- package/test/typings/.keep +0 -0
- package/test/typings/studentSF.ts +6 -0
- package/test/typings/test11SF.ts +1 -0
- package/test/typings/test22SF.ts +1 -0
- package/test/typings/testformSF.ts +1 -0
- package/test//345/276/205/345/274/200/345/217/221.md +12 -0
- package/tsconfig.json +23 -0
- package/tsconfigschema.json +1263 -0
- package/src/config/api.res.json +0 -1
- package/src/config/api.tree.json +0 -1
- package/src/config/apiModules/del.module +0 -6
- package/src/config/apiModules/get.module +0 -6
- package/src/config/apiModules/set.module +0 -6
- package/src/config/config.schema.js +0 -41
- package/src/public/doc/css/app.722f60c4.css +0 -1
- package/src/public/doc/css/chunk-287b9965.80548a4b.css +0 -1
- package/src/public/doc/css/chunk-vendors.a16c4353.css +0 -1
- package/src/public/doc/favicon.ico +0 -0
- package/src/public/doc/fonts/element-icons.535877f5.woff +0 -0
- package/src/public/doc/fonts/element-icons.732389de.ttf +0 -0
- package/src/public/doc/index.html +0 -1
- package/src/public/doc/js/app.9ce10690.js +0 -2
- package/src/public/doc/js/app.9ce10690.js.map +0 -1
- package/src/public/doc/js/chunk-287b9965.77cfd27f.js +0 -32
- package/src/public/doc/js/chunk-287b9965.77cfd27f.js.map +0 -1
- package/src/public/doc/js/chunk-vendors.7c84e9a7.js +0 -35
- package/src/public/doc/js/chunk-vendors.7c84e9a7.js.map +0 -1
- package/src/public/index.html +0 -15
- package/src/state.js +0 -6
- package/src/utils/DataVerified.js +0 -35
- package/src/utils/beforeCreate.js +0 -19
- package/src/utils/createApi.js +0 -34
- package/src/utils/createApiFile.js +0 -40
- package/src/utils/createSqlForm.js +0 -7
- package/src/utils/encrypt.js +0 -1
- package/src/utils/getDir.js +0 -60
- package/src/utils/logs.js +0 -16
- package/src/utils/masDoc.js +0 -37
- package/src/utils/masRoute.js +0 -29
- package/src/utils/quickSend.js +0 -18
- package/src/utils/token.js +0 -57
- package/test/.utils/api.js +0 -4
- package/test/.utils/apis.js +0 -5
- package/test/.utils/beforeIndex.js +0 -4
- package/test/.utils/createForm.js +0 -4
- package/test/config/api.config.json +0 -7
- package/test/config/api.config.k.json +0 -1
- package/test/config/config.js +0 -22
- package/test/config/sqlform.config.js +0 -23
- package/test/index.js +0 -12
- package/test/public/1.txt +0 -1
- package/test/serverLogs/2022-10-29.log +0 -6
- package/test/serverLogs/2022-10-30.log +0 -58
- package/test/src/$form.js +0 -1
- package/test/src/api/index.js +0 -3
- package/test/src/api/test.js +0 -9
- package/test/src/api/vip/del.js +0 -6
- package/test/src/api/vip/get.js +0 -6
- package/test/src/api/vip/set.js +0 -6
- package/test/src/api/vip666.js +0 -4
- package/test/src/debug.js +0 -2
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<link rel="icon" href="./favicon.ico">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Vite App</title>
|
|
8
|
+
<script type="module" crossorigin src="./assets/index-b56e6bc6.js"></script>
|
|
9
|
+
<link rel="stylesheet" href="./assets/index-bb16d834.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
|
|
14
|
+
</body>
|
|
15
|
+
</html>
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import "module-alias/register";
|
|
2
|
+
import express from "express";
|
|
3
|
+
import type { Express } from "express";
|
|
4
|
+
import cors from "cors";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import * as fs from "fs";
|
|
7
|
+
import { state } from "@/state";
|
|
8
|
+
import getLog from "@/utils/getLog";
|
|
9
|
+
import quickSend from "@/utils/quickSend";
|
|
10
|
+
import readApi from "@/utils/readApi";
|
|
11
|
+
import validRouteData from "@/utils/validRouteData";
|
|
12
|
+
import getRouteByApiSrc from "@/utils/getRouteByApiSrc";
|
|
13
|
+
import validTokenUse from "@/utils/validToken";
|
|
14
|
+
import type { masReq, masRes, apiConfigType, configType } from "@/typings";
|
|
15
|
+
import c from "ansi-colors";
|
|
16
|
+
import moment from "moment";
|
|
17
|
+
import "moment/locale/zh-cn";
|
|
18
|
+
moment.locale("zh-cn");
|
|
19
|
+
// 数据库
|
|
20
|
+
import {
|
|
21
|
+
sqlEnd,
|
|
22
|
+
sqlInit,
|
|
23
|
+
sqlQuery,
|
|
24
|
+
checkSqlKey,
|
|
25
|
+
createSqlForm,
|
|
26
|
+
massql,
|
|
27
|
+
state as sqlState,
|
|
28
|
+
getsqlFormDataType,
|
|
29
|
+
getsqlFormData,
|
|
30
|
+
} from "masmysql";
|
|
31
|
+
import type { createSqlFormType, sqlForm } from "masmysql";
|
|
32
|
+
import apiDoc from "./utils/apiDoc";
|
|
33
|
+
import { createToken, validToken } from "./utils/meaToken";
|
|
34
|
+
|
|
35
|
+
// =================================================================
|
|
36
|
+
export function getApp(
|
|
37
|
+
DIRNAME: string,
|
|
38
|
+
beforeMounted?: (app: Express) => void
|
|
39
|
+
) {
|
|
40
|
+
// 路径和配置放入state
|
|
41
|
+
state.DIRNAME = DIRNAME;
|
|
42
|
+
const config = require(path.join(DIRNAME, "/config/config.ts")).default;
|
|
43
|
+
const Router = require(path.join(DIRNAME, "/config/api.config.ts")).default;
|
|
44
|
+
const apiCN = require(path.join(DIRNAME, "/config/api.key.ts")).default;
|
|
45
|
+
state.config = config;
|
|
46
|
+
state.Router = Router;
|
|
47
|
+
state.apiCN = apiCN;
|
|
48
|
+
// new express
|
|
49
|
+
const app = express();
|
|
50
|
+
|
|
51
|
+
// 是否允许跨域
|
|
52
|
+
config.cors && app.use(cors());
|
|
53
|
+
if (beforeMounted) {
|
|
54
|
+
beforeMounted(app);
|
|
55
|
+
}
|
|
56
|
+
// 初始化app
|
|
57
|
+
app.use(express.urlencoded({ extended: true }));
|
|
58
|
+
app.use(express.json());
|
|
59
|
+
// 自定义中间件来处理纯文本和JSON数据
|
|
60
|
+
// 错误处理中间件
|
|
61
|
+
app.use((err, req, res, next) => {
|
|
62
|
+
if (err.type == "entity.parse.failed") {
|
|
63
|
+
req.body._str = err.body;
|
|
64
|
+
}
|
|
65
|
+
next();
|
|
66
|
+
});
|
|
67
|
+
//快速return
|
|
68
|
+
app.use(quickSend);
|
|
69
|
+
// 日志
|
|
70
|
+
if (config.logs.open) {
|
|
71
|
+
app.use(require("express-ip")().getIpInfoMiddleware);
|
|
72
|
+
app.use(getLog);
|
|
73
|
+
}
|
|
74
|
+
// 权限管理
|
|
75
|
+
if (config.token.open) {
|
|
76
|
+
app.use(validTokenUse);
|
|
77
|
+
}
|
|
78
|
+
// 数据效验
|
|
79
|
+
app.use(validRouteData);
|
|
80
|
+
if (config.apidoc) {
|
|
81
|
+
app.use("/apidoc", express.static(path.join(__dirname, "/apiDoc")));
|
|
82
|
+
apiDoc(app);
|
|
83
|
+
}
|
|
84
|
+
// 遍历api路由
|
|
85
|
+
for (const item in Router) {
|
|
86
|
+
let isExist = fs.existsSync(path.join(DIRNAME, "src", item) + ".ts");
|
|
87
|
+
if (!isExist) {
|
|
88
|
+
console.info(c.red(`${item} not found`));
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const apiFunc = require(path.join(DIRNAME, "src", item)).default;
|
|
92
|
+
if (!apiFunc) {
|
|
93
|
+
console.info(c.yellow(`${item} 没有导出函数,已跳过..`));
|
|
94
|
+
} else {
|
|
95
|
+
apiFunc && app[Router[item].methods](item, apiFunc);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// 运行debug
|
|
99
|
+
setTimeout(() => {
|
|
100
|
+
try {
|
|
101
|
+
require(path.join(DIRNAME + "/src/debug"));
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.info(c.red("debug.js报错!!!"));
|
|
104
|
+
console.info(error);
|
|
105
|
+
}
|
|
106
|
+
}, config.debugTime || 1000);
|
|
107
|
+
return app;
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
readApi,
|
|
111
|
+
getRouteByApiSrc,
|
|
112
|
+
moment,
|
|
113
|
+
sqlState,
|
|
114
|
+
sqlEnd,
|
|
115
|
+
sqlInit,
|
|
116
|
+
sqlQuery,
|
|
117
|
+
checkSqlKey,
|
|
118
|
+
createSqlForm,
|
|
119
|
+
getsqlFormData,
|
|
120
|
+
getsqlFormDataType,
|
|
121
|
+
massql,
|
|
122
|
+
validToken,
|
|
123
|
+
createToken,
|
|
124
|
+
};
|
|
125
|
+
export type {
|
|
126
|
+
masReq,
|
|
127
|
+
masRes,
|
|
128
|
+
apiConfigType,
|
|
129
|
+
configType,
|
|
130
|
+
createSqlFormType,
|
|
131
|
+
sqlForm,
|
|
132
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import state from "./state";
|
|
2
|
+
import { sqlQuery } from "./esaysql";
|
|
3
|
+
import c from "ansi-colors";
|
|
4
|
+
/** 添加相关表名 */
|
|
5
|
+
const replenishForm = async (formName: string, key: string) => {
|
|
6
|
+
// state.status = 0;
|
|
7
|
+
const replenishData = {
|
|
8
|
+
create_time: "`create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
|
|
9
|
+
update_time:
|
|
10
|
+
"`update_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP",
|
|
11
|
+
is_delete: "`is_delete` INT DEFAULT 0",
|
|
12
|
+
};
|
|
13
|
+
console.info(c.yellow(`${formName}缺少字段${key}`));
|
|
14
|
+
await sqlQuery(`alter table ${formName} add ${replenishData[key]}`);
|
|
15
|
+
console.info(c.yellow("已为您自动添加"));
|
|
16
|
+
};
|
|
17
|
+
/** 获取相关表名,并检查每个表是否含有 is_delete,create_time,update_time,没有则添加 */
|
|
18
|
+
export default async function checkSqlKey() {
|
|
19
|
+
let dbname = state.config.database;
|
|
20
|
+
// 获得数据库相关表名
|
|
21
|
+
let formName = (await sqlQuery(
|
|
22
|
+
`select table_name
|
|
23
|
+
from information_schema.tables
|
|
24
|
+
where table_schema='${dbname}'`
|
|
25
|
+
)) as any;
|
|
26
|
+
const sqlform = {};
|
|
27
|
+
formName = formName.map((item) => item["TABLE_NAME"]);
|
|
28
|
+
const listKeyArr = {};
|
|
29
|
+
// 获得相关表字段,并且没有
|
|
30
|
+
for (let item of formName) {
|
|
31
|
+
let listkey: any = await sqlQuery(
|
|
32
|
+
`SELECT DATA_TYPE,COLUMN_NAME FROM information_schema.COLUMNS
|
|
33
|
+
WHERE table_name = '${item}' AND
|
|
34
|
+
\`TABLE_SCHEMA\`='${dbname}'`
|
|
35
|
+
);
|
|
36
|
+
listKeyArr[item] = JSON.parse(JSON.stringify(listkey));
|
|
37
|
+
listkey = listkey.map((item) => item["COLUMN_NAME"]);
|
|
38
|
+
if (!listkey.includes("create_time")) {
|
|
39
|
+
await replenishForm(item, "create_time");
|
|
40
|
+
listkey.push("create_time");
|
|
41
|
+
}
|
|
42
|
+
if (!listkey.includes("update_time")) {
|
|
43
|
+
await replenishForm(item, "update_time");
|
|
44
|
+
listkey.push("update_time");
|
|
45
|
+
}
|
|
46
|
+
if (!listkey.includes("is_delete")) {
|
|
47
|
+
await replenishForm(item, "is_delete");
|
|
48
|
+
listkey.push("is_delete");
|
|
49
|
+
}
|
|
50
|
+
sqlform[item] = listkey;
|
|
51
|
+
}
|
|
52
|
+
state.listKey = JSON.parse(JSON.stringify(listKeyArr));
|
|
53
|
+
state.sqlForm = { ...sqlform };
|
|
54
|
+
return sqlform;
|
|
55
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { sqlQuery } from "./esaysql";
|
|
2
|
+
import state from "./state";
|
|
3
|
+
import { createSqlForm } from "./type";
|
|
4
|
+
|
|
5
|
+
export default async (form: { [key: string]: createSqlForm }) => {
|
|
6
|
+
const formArr = Object.keys(state.sqlForm);
|
|
7
|
+
for (let k in form) {
|
|
8
|
+
let data = form[k];
|
|
9
|
+
if (formArr.includes(k.toLowerCase())) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
const sqldata = `CREATE TABLE ${k.toLowerCase()}
|
|
13
|
+
(
|
|
14
|
+
\`id\` INT AUTO_INCREMENT PRIMARY KEY COMMENT '唯一主键',
|
|
15
|
+
${data
|
|
16
|
+
.map(
|
|
17
|
+
(item) =>
|
|
18
|
+
`\`${item.key}\` ${
|
|
19
|
+
item.type.toLowerCase() == "str"
|
|
20
|
+
? `VARCHAR(${item.length || "100"})`
|
|
21
|
+
: item.type.toLowerCase() == "int"
|
|
22
|
+
? "INT"
|
|
23
|
+
: item.type.toLowerCase() == "float"
|
|
24
|
+
? "FLOAT"
|
|
25
|
+
: "VARCHAR(100)"
|
|
26
|
+
} ${item.notNull ? "NOT NULL" : ""} COMMENT '${item.des || ""}'`
|
|
27
|
+
)
|
|
28
|
+
.join(",")},
|
|
29
|
+
\`create_time\` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
30
|
+
\`update_time\` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
31
|
+
\`is_delete\` INT DEFAULT 0 COMMENT '是否被删除'
|
|
32
|
+
)`;
|
|
33
|
+
await sqlQuery(sqldata, 1);
|
|
34
|
+
console.log(`尝试创建${k}表完成`);
|
|
35
|
+
}
|
|
36
|
+
console.log("创建表完成");
|
|
37
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const mysql = require("mysql");
|
|
2
|
+
import state from "./state";
|
|
3
|
+
import c from "ansi-colors";
|
|
4
|
+
export function sqlInit(config: {
|
|
5
|
+
host: string;
|
|
6
|
+
user: string;
|
|
7
|
+
password: string;
|
|
8
|
+
database: string;
|
|
9
|
+
}) {
|
|
10
|
+
state.config = config;
|
|
11
|
+
state.connection = mysql.createConnection(config);
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
state.connection.connect(function (err) {
|
|
14
|
+
if (err) {
|
|
15
|
+
console.error("error connecting: " + err.stack);
|
|
16
|
+
throw Error("连接数据库失败!");
|
|
17
|
+
} else {
|
|
18
|
+
resolve(true);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function sqlEnd() {
|
|
24
|
+
state.connection.end();
|
|
25
|
+
}
|
|
26
|
+
export function sqlQuery(sqldata, details = 0) {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
state.connection.query(sqldata, (error, sqlRes) => {
|
|
29
|
+
if (details) {
|
|
30
|
+
if (error) {
|
|
31
|
+
reject(error);
|
|
32
|
+
console.info(error);
|
|
33
|
+
} else resolve(sqlRes);
|
|
34
|
+
}
|
|
35
|
+
if (!sqlRes) {
|
|
36
|
+
console.info(error, sqlRes);
|
|
37
|
+
console.info(c.red("错误:数据库语句错误"));
|
|
38
|
+
resolve(undefined);
|
|
39
|
+
} else if (Number.isInteger(sqlRes.affectedRows))
|
|
40
|
+
resolve(sqlRes.affectedRows);
|
|
41
|
+
else resolve(JSON.parse(JSON.stringify(sqlRes)));
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import checkSqlKey from "./checkSqlkey";
|
|
2
|
+
import createSqlFormScript from "./createSqlForm";
|
|
3
|
+
import { sqlEnd, sqlInit, sqlQuery } from "./esaysql";
|
|
4
|
+
import massql from "./masSql";
|
|
5
|
+
import state from "./state";
|
|
6
|
+
import * as fs from "fs";
|
|
7
|
+
import type { createSqlFormType, sqlForm, sqlState } from "./type";
|
|
8
|
+
/** 创建表名 */
|
|
9
|
+
async function createSqlForm(
|
|
10
|
+
config: sqlState["config"],
|
|
11
|
+
createForm: createSqlFormType
|
|
12
|
+
) {
|
|
13
|
+
sqlInit(config);
|
|
14
|
+
await checkSqlKey();
|
|
15
|
+
await createSqlFormScript(createForm);
|
|
16
|
+
sqlEnd();
|
|
17
|
+
}
|
|
18
|
+
export function getsqlFormData(path?: string) {
|
|
19
|
+
if (!state.sqlForm) {
|
|
20
|
+
throw Error("请先初始化数据库!");
|
|
21
|
+
}
|
|
22
|
+
const sqlForm = JSON.parse(JSON.stringify(state.sqlForm));
|
|
23
|
+
for (let k in sqlForm) {
|
|
24
|
+
sqlForm[k].push(`@!${k}`);
|
|
25
|
+
}
|
|
26
|
+
if (path) {
|
|
27
|
+
if (!path.includes(".json")) {
|
|
28
|
+
throw Error("写入路径错误");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (fs.existsSync(path)) {
|
|
32
|
+
const data = require(path);
|
|
33
|
+
if (JSON.stringify(data) != JSON.stringify(sqlForm)) {
|
|
34
|
+
fs.writeFileSync(path, `${JSON.stringify(sqlForm)}`);
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
fs.writeFileSync(path, `${JSON.stringify(sqlForm)}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return sqlForm;
|
|
41
|
+
}
|
|
42
|
+
export function getsqlFormDataType(): {
|
|
43
|
+
[key: string]: { typeData: any; typeObj: any };
|
|
44
|
+
} {
|
|
45
|
+
if (!state.listKey) {
|
|
46
|
+
throw Error("请先初始化数据库!");
|
|
47
|
+
}
|
|
48
|
+
let tarr = { int: "number", float: "number" };
|
|
49
|
+
let btarr = { int: "Number", float: "Number" };
|
|
50
|
+
let nnn = { is_delete: "", update_time: "", create_time: "" };
|
|
51
|
+
let res = {};
|
|
52
|
+
for (let key in state.listKey) {
|
|
53
|
+
let typeObj = "{";
|
|
54
|
+
let typeData = "{";
|
|
55
|
+
for (let item of state.listKey[key]) {
|
|
56
|
+
if (nnn[item.COLUMN_NAME] === "") continue;
|
|
57
|
+
typeObj += `${item.COLUMN_NAME}?:${tarr[item.DATA_TYPE] || "string"};`;
|
|
58
|
+
if (item.COLUMN_NAME==="id") continue;
|
|
59
|
+
typeData += `${item.COLUMN_NAME}:${btarr[item.DATA_TYPE] || "String"},`;
|
|
60
|
+
}
|
|
61
|
+
typeData=typeData.slice(0,typeData.length-1) + "}";
|
|
62
|
+
typeObj += "}";
|
|
63
|
+
res[key] = { typeData, typeObj };
|
|
64
|
+
}
|
|
65
|
+
return res;
|
|
66
|
+
}
|
|
67
|
+
export { sqlEnd, sqlInit, state, sqlQuery, checkSqlKey, createSqlForm, massql };
|
|
68
|
+
export type { createSqlFormType, sqlState, sqlForm };
|