vue2server7 2.3.6 → 2.3.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2server7",
3
- "version": "2.3.6",
3
+ "version": "2.3.8",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "dev": "nodemon --watch src --ext ts --exec \"ts-node src/app.ts\"",
package/test/12.js ADDED
@@ -0,0 +1,115 @@
1
+ const fs = require("fs");
2
+
3
+ const content = fs.readFileSync("input.txt", "utf8");
4
+
5
+ // Java → TS 类型
6
+ function javaToTsType(javaType) {
7
+ const map = {
8
+ String: "string",
9
+ Integer: "number",
10
+ Long: "number",
11
+ Double: "number",
12
+ Float: "number",
13
+ BigDecimal: "number",
14
+ Boolean: "boolean",
15
+ Date: "string",
16
+ LocalDate: "string",
17
+ LocalDateTime: "string",
18
+ };
19
+ return map[javaType] || "any";
20
+ }
21
+
22
+ // TS 类型默认值
23
+ function defaultValue(tsType) {
24
+ switch (tsType) {
25
+ case "string":
26
+ return `""`;
27
+ case "number":
28
+ return `0`;
29
+ case "boolean":
30
+ return `false`;
31
+ default:
32
+ return `null`;
33
+ }
34
+ }
35
+
36
+ /**
37
+ * 解析策略:
38
+ * - 按“字段声明”逐个找:private Type field;
39
+ * - 然后回看它前面一段文本(最多回看 10 行左右)抓 label
40
+ * - label 优先级:ApiModelProperty.value > CheckV.desc > 兜底 field 名
41
+ */
42
+ const fieldRegex = /private\s+(\w+)\s+(\w+)\s*;/g;
43
+
44
+ const lines = content.split(/\r?\n/);
45
+ const jsonResult = [];
46
+ const tsFields = [];
47
+ const formFields = [];
48
+
49
+ // 为了“回看”,我们把每一行的起始偏移算出来,方便从 match.index 找到行号
50
+ const lineStartOffsets = [];
51
+ let offset = 0;
52
+ for (const line of lines) {
53
+ lineStartOffsets.push(offset);
54
+ offset += line.length + 1; // +1 for \n(\r\n 也足够用来定位)
55
+ }
56
+
57
+ function findLineIndexByOffset(idx) {
58
+ // 二分找 <= idx 的最大 lineStartOffsets
59
+ let l = 0, r = lineStartOffsets.length - 1, ans = 0;
60
+ while (l <= r) {
61
+ const m = (l + r) >> 1;
62
+ if (lineStartOffsets[m] <= idx) { ans = m; l = m + 1; }
63
+ else r = m - 1;
64
+ }
65
+ return ans;
66
+ }
67
+
68
+ function extractLabelAround(lineIndex) {
69
+ // 往上最多找 12 行(你可以按需调大)
70
+ const start = Math.max(0, lineIndex - 12);
71
+ const window = lines.slice(start, lineIndex).join("\n");
72
+
73
+ // 先找 ApiModelProperty(value="xxx")
74
+ const api = /@ApiModelProperty\s*\(\s*value\s*=\s*"([^"]+)"/.exec(window);
75
+ if (api?.[1]) return api[1];
76
+
77
+ // 再找 CheckV(desc="xxx")
78
+ const check = /@CheckV\s*\(\s*desc\s*=\s*"([^"]+)"/.exec(window);
79
+ if (check?.[1]) return check[1];
80
+
81
+ return null;
82
+ }
83
+
84
+ let match;
85
+ while ((match = fieldRegex.exec(content)) !== null) {
86
+ const javaType = match[1];
87
+ const field = match[2];
88
+
89
+ const lineIndex = findLineIndexByOffset(match.index);
90
+ const label = extractLabelAround(lineIndex) || field;
91
+
92
+ const tsType = javaToTsType(javaType);
93
+
94
+ jsonResult.push({ field, label });
95
+
96
+ tsFields.push(` /** ${label} */\n ${field}: ${tsType};`);
97
+ formFields.push(` /** ${label} */\n ${field}: ${defaultValue(tsType)}`);
98
+ }
99
+
100
+ // 写文件
101
+ fs.writeFileSync("output.json", JSON.stringify(jsonResult, null, 2), "utf8");
102
+
103
+ fs.writeFileSync(
104
+ "model.ts",
105
+ `export interface Model {\n${tsFields.join("\n\n")}\n}\n`,
106
+ "utf8"
107
+ );
108
+
109
+ fs.writeFileSync(
110
+ "form.js",
111
+ `export const formModel = {\n${formFields.join(",\n\n")}\n};\n`,
112
+ "utf8"
113
+ );
114
+
115
+ console.log("✅ 已生成 output.json / model.ts / form.js");