uniky 1.0.12 → 1.0.13

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 (50) hide show
  1. package/dist/index.js +388 -0
  2. package/dist/index.js.map +1 -0
  3. package/dist/lib/hook/index.d.ts +2 -0
  4. package/dist/lib/hook/index.d.ts.map +1 -0
  5. package/dist/lib/hook/index.js +3 -0
  6. package/dist/lib/hook/index.js.map +1 -0
  7. package/dist/lib/hook/useParam.d.ts +19 -0
  8. package/dist/lib/hook/useParam.d.ts.map +1 -0
  9. package/dist/lib/hook/useParam.js +102 -0
  10. package/dist/lib/hook/useParam.js.map +1 -0
  11. package/dist/lib/http/index.d.ts +2 -0
  12. package/dist/lib/http/index.d.ts.map +1 -0
  13. package/dist/lib/http/index.js +3 -0
  14. package/dist/lib/http/index.js.map +1 -0
  15. package/dist/lib/http/ky.d.ts +53 -0
  16. package/dist/lib/http/ky.d.ts.map +1 -0
  17. package/dist/lib/http/ky.js +323 -0
  18. package/dist/lib/http/ky.js.map +1 -0
  19. package/dist/lib/index.d.ts +3 -0
  20. package/dist/lib/index.d.ts.map +1 -0
  21. package/dist/lib/index.js +4 -0
  22. package/dist/lib/index.js.map +1 -0
  23. package/dist/plugin/global.defined.d.ts +3 -0
  24. package/dist/plugin/global.defined.d.ts.map +1 -0
  25. package/dist/plugin/global.defined.js +284 -0
  26. package/dist/plugin/global.defined.js.map +1 -0
  27. package/dist/plugin/index.d.ts +11 -0
  28. package/dist/plugin/index.d.ts.map +1 -0
  29. package/dist/plugin/index.js +16 -0
  30. package/dist/plugin/index.js.map +1 -0
  31. package/dist/plugin/lib.defined.d.ts +2 -0
  32. package/dist/plugin/lib.defined.d.ts.map +1 -0
  33. package/dist/plugin/lib.defined.js +2 -0
  34. package/dist/plugin/lib.defined.js.map +1 -0
  35. package/dist/plugin/pages.defined.d.ts +6 -0
  36. package/dist/plugin/pages.defined.d.ts.map +1 -0
  37. package/dist/plugin/pages.defined.js +230 -0
  38. package/dist/plugin/pages.defined.js.map +1 -0
  39. package/package.json +18 -11
  40. package/src/lib/hook/index.ts +0 -2
  41. package/src/lib/hook/useParam.ts +0 -114
  42. package/src/lib/http/index.ts +0 -2
  43. package/src/lib/http/ky.ts +0 -454
  44. package/src/lib/index.ts +0 -3
  45. package/src/plugin/_pages.md +0 -37
  46. package/src/plugin/global.defined.ts +0 -333
  47. package/src/plugin/index.ts +0 -29
  48. package/src/plugin/lib.defined.ts +0 -2
  49. package/src/plugin/pages.defined.ts +0 -275
  50. package/src/types/uni-app.d.ts +0 -75
@@ -0,0 +1,284 @@
1
+ // 该插件用于作为 vite.config.ts 中 作为插件;
2
+ // 该插件用于收集 src/autoGen/global文件夹下的ts文件 所有export 导出的内容, 并将其合并为一个全局定义文件 src/autoGen/global.d.ts 文件 同时,生成一个 /src/autoGen/global.install.ts 文件.
3
+ // 以便在项目中全局使用这些类型定义,避免了手动维护全局类型定义文件的麻烦。
4
+ import * as fs from 'node:fs';
5
+ import * as path from 'node:path';
6
+ export default function globalDefinedPlugin() {
7
+ const globalDir = 'src/autoGen/global';
8
+ const globalDtsPath = 'src/autoGen/global.d.ts';
9
+ const installTsPath = 'src/autoGen/global.install.ts';
10
+ /**
11
+ * 递归获取目录下所有 .ts 文件(排除 .d.ts 和 install.ts)
12
+ */
13
+ function getTsFiles(dir) {
14
+ const files = [];
15
+ if (!fs.existsSync(dir)) {
16
+ return files;
17
+ }
18
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
19
+ for (const entry of entries) {
20
+ const fullPath = path.join(dir, entry.name);
21
+ if (entry.isDirectory()) {
22
+ files.push(...getTsFiles(fullPath));
23
+ }
24
+ else if (entry.isFile() && entry.name.endsWith('.ts') && !entry.name.endsWith('.d.ts') && entry.name !== 'global.install.ts') {
25
+ files.push(fullPath);
26
+ }
27
+ }
28
+ return files;
29
+ }
30
+ /**
31
+ * 解析 TypeScript 文件,提取所有 export 的内容
32
+ */
33
+ function parseExports(filePath) {
34
+ const content = fs.readFileSync(filePath, 'utf-8');
35
+ const exports = [];
36
+ // 匹配 export default
37
+ const defaultExportRegex = /export\s+default\s+(function|class|const|let|var)?\s*([a-zA-Z_$][a-zA-Z0-9_$]*)?/g;
38
+ let match;
39
+ while ((match = defaultExportRegex.exec(content)) !== null) {
40
+ if (match[2]) {
41
+ exports.push({
42
+ name: match[2],
43
+ type: match[1] || 'const',
44
+ isDefault: true,
45
+ filePath
46
+ });
47
+ }
48
+ }
49
+ // 匹配 export function
50
+ const functionRegex = /export\s+(?:async\s+)?function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;
51
+ while ((match = functionRegex.exec(content)) !== null) {
52
+ exports.push({
53
+ name: match[1],
54
+ type: 'function',
55
+ isDefault: false,
56
+ filePath
57
+ });
58
+ }
59
+ // 匹配 export const/let/var
60
+ const varRegex = /export\s+(?:const|let|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;
61
+ while ((match = varRegex.exec(content)) !== null) {
62
+ exports.push({
63
+ name: match[1],
64
+ type: 'const',
65
+ isDefault: false,
66
+ filePath
67
+ });
68
+ }
69
+ // 匹配 export class
70
+ const classRegex = /export\s+(?:abstract\s+)?class\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;
71
+ while ((match = classRegex.exec(content)) !== null) {
72
+ exports.push({
73
+ name: match[1],
74
+ type: 'class',
75
+ isDefault: false,
76
+ filePath
77
+ });
78
+ }
79
+ // 匹配 export interface
80
+ const interfaceRegex = /export\s+interface\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;
81
+ while ((match = interfaceRegex.exec(content)) !== null) {
82
+ exports.push({
83
+ name: match[1],
84
+ type: 'interface',
85
+ isDefault: false,
86
+ filePath
87
+ });
88
+ }
89
+ // 匹配 export type
90
+ const typeRegex = /export\s+type\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;
91
+ while ((match = typeRegex.exec(content)) !== null) {
92
+ exports.push({
93
+ name: match[1],
94
+ type: 'type',
95
+ isDefault: false,
96
+ filePath
97
+ });
98
+ }
99
+ // 匹配 export enum
100
+ const enumRegex = /export\s+(?:const\s+)?enum\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;
101
+ while ((match = enumRegex.exec(content)) !== null) {
102
+ exports.push({
103
+ name: match[1],
104
+ type: 'enum',
105
+ isDefault: false,
106
+ filePath
107
+ });
108
+ }
109
+ // 匹配 export { ... }
110
+ const namedExportRegex = /export\s*{([^}]+)}/g;
111
+ while ((match = namedExportRegex.exec(content)) !== null) {
112
+ const names = match[1].split(',').map(n => n.trim().split(/\s+as\s+/)[0].trim());
113
+ for (const name of names) {
114
+ if (name) {
115
+ exports.push({
116
+ name,
117
+ type: 'const',
118
+ isDefault: false,
119
+ filePath
120
+ });
121
+ }
122
+ }
123
+ }
124
+ return exports;
125
+ }
126
+ /**
127
+ * 生成 global.d.ts 文件内容
128
+ */
129
+ function generateGlobalDts(allExports) {
130
+ const imports = new Map();
131
+ // 按文件分组导出
132
+ for (const exp of allExports) {
133
+ const relativePath = path.relative('src/autoGen', exp.filePath).replace(/\\/g, '/').replace(/\.ts$/, '');
134
+ if (!imports.has(relativePath)) {
135
+ imports.set(relativePath, new Set());
136
+ }
137
+ if (!exp.isDefault) {
138
+ imports.get(relativePath).add(exp.name);
139
+ }
140
+ }
141
+ let content = '// 自动生成的全局类型定义文件\n';
142
+ content += '// 请勿手动修改\n\n';
143
+ // 生成 import 语句
144
+ for (const [filePath, names] of imports) {
145
+ if (names.size > 0) {
146
+ content += `import type { ${Array.from(names).join(', ')} } from './${filePath}';\n`;
147
+ }
148
+ }
149
+ content += '\n';
150
+ // 生成全局声明
151
+ content += 'declare global {\n';
152
+ // 对于函数、常量、类等,添加到全局
153
+ const globalItems = allExports.filter(exp => !exp.isDefault && exp.type !== 'interface' && exp.type !== 'type');
154
+ if (globalItems.length > 0) {
155
+ for (const exp of globalItems) {
156
+ if (exp.type === 'function') {
157
+ content += ` const ${exp.name}: typeof import('./${path.relative('src/autoGen', exp.filePath).replace(/\\/g, '/').replace(/\.ts$/, '')}').${exp.name};\n`;
158
+ }
159
+ else if (exp.type === 'const') {
160
+ content += ` const ${exp.name}: typeof import('./${path.relative('src/autoGen', exp.filePath).replace(/\\/g, '/').replace(/\.ts$/, '')}').${exp.name};\n`;
161
+ }
162
+ else if (exp.type === 'class') {
163
+ content += ` const ${exp.name}: typeof import('./${path.relative('src/autoGen', exp.filePath).replace(/\\/g, '/').replace(/\.ts$/, '')}').${exp.name};\n`;
164
+ }
165
+ }
166
+ }
167
+ content += '}\n\n';
168
+ content += 'export {};\n';
169
+ return content;
170
+ }
171
+ /**
172
+ * 生成 global.install.ts 文件内容
173
+ */
174
+ function generateInstallTs(allExports) {
175
+ const imports = new Map();
176
+ // 按文件分组导出
177
+ for (const exp of allExports) {
178
+ const relativePath = './global/' + path.relative(path.join('src', 'autoGen', 'global'), exp.filePath).replace(/\\/g, '/').replace(/\.ts$/, '');
179
+ if (!imports.has(relativePath)) {
180
+ imports.set(relativePath, { names: new Set(), hasDefault: false });
181
+ }
182
+ const importInfo = imports.get(relativePath);
183
+ if (exp.isDefault) {
184
+ importInfo.hasDefault = true;
185
+ importInfo.defaultName = exp.name;
186
+ }
187
+ else if (exp.type !== 'interface' && exp.type !== 'type') {
188
+ importInfo.names.add(exp.name);
189
+ }
190
+ }
191
+ let content = '// 自动生成的全局安装文件\n';
192
+ content += '// 请勿手动修改\n\n';
193
+ // 生成 import 语句
194
+ for (const [filePath, info] of imports) {
195
+ if (info.hasDefault && info.names.size > 0) {
196
+ content += `import ${info.defaultName}, { ${Array.from(info.names).join(', ')} } from '${filePath}';\n`;
197
+ }
198
+ else if (info.hasDefault) {
199
+ content += `import ${info.defaultName} from '${filePath}';\n`;
200
+ }
201
+ else if (info.names.size > 0) {
202
+ content += `import { ${Array.from(info.names).join(', ')} } from '${filePath}';\n`;
203
+ }
204
+ }
205
+ content += '\n';
206
+ content += '/**\n';
207
+ content += ' * 安装全局定义\n';
208
+ content += ' * 在 main.ts 中调用此函数以注册全局变量\n';
209
+ content += ' */\n';
210
+ content += 'export function installGlobals() {\n';
211
+ // 将导出的内容挂载到 globalThis
212
+ const globalItems = allExports.filter(exp => exp.type !== 'interface' && exp.type !== 'type');
213
+ for (const exp of globalItems) {
214
+ const name = exp.isDefault ? (imports.get('./global/' + path.relative(path.join('src', 'autoGen', 'global'), exp.filePath).replace(/\\/g, '/').replace(/\.ts$/, ''))?.defaultName || exp.name) : exp.name;
215
+ content += ` (globalThis as any).${exp.name} = ${name};\n`;
216
+ }
217
+ content += '}\n';
218
+ return content;
219
+ }
220
+ /**
221
+ * 生成所有文件
222
+ */
223
+ function generate() {
224
+ try {
225
+ const tsFiles = getTsFiles(globalDir);
226
+ if (tsFiles.length === 0) {
227
+ console.log('[globalDefined] 未找到任何 TypeScript 文件');
228
+ return;
229
+ }
230
+ // 收集所有导出
231
+ const allExports = [];
232
+ for (const file of tsFiles) {
233
+ const exports = parseExports(file);
234
+ allExports.push(...exports);
235
+ }
236
+ if (allExports.length === 0) {
237
+ console.log('[globalDefined] 未找到任何导出');
238
+ return;
239
+ }
240
+ // 生成 global.d.ts
241
+ const dtsContent = generateGlobalDts(allExports);
242
+ fs.writeFileSync(globalDtsPath, dtsContent, 'utf-8');
243
+ console.log(`[globalDefined] 已生成 ${globalDtsPath}`);
244
+ // 生成 global.install.ts
245
+ const installContent = generateInstallTs(allExports);
246
+ fs.writeFileSync(installTsPath, installContent, 'utf-8');
247
+ console.log(`[globalDefined] 已生成 ${installTsPath}`);
248
+ console.log(`[globalDefined] 共处理 ${tsFiles.length} 个文件,${allExports.length} 个导出`);
249
+ }
250
+ catch (error) {
251
+ console.error('[globalDefined] 生成失败:', error);
252
+ }
253
+ }
254
+ return {
255
+ name: 'vite-plugin-global-defined',
256
+ buildStart() {
257
+ // 构建开始时生成文件
258
+ generate();
259
+ },
260
+ configureServer(server) {
261
+ // 监听 src/autoGen/global 目录下的文件变化
262
+ server.watcher.add(globalDir);
263
+ server.watcher.on('change', (file) => {
264
+ if (file.includes('src/autoGen/global') && file.endsWith('.ts') && !file.endsWith('.d.ts') && !file.includes('global.install.ts')) {
265
+ console.log(`[globalDefined] 检测到文件变化: ${file}`);
266
+ generate();
267
+ }
268
+ });
269
+ server.watcher.on('add', (file) => {
270
+ if (file.includes('src/autoGen/global') && file.endsWith('.ts') && !file.endsWith('.d.ts') && !file.includes('global.install.ts')) {
271
+ console.log(`[globalDefined] 检测到新文件: ${file}`);
272
+ generate();
273
+ }
274
+ });
275
+ server.watcher.on('unlink', (file) => {
276
+ if (file.includes('src/autoGen/global') && file.endsWith('.ts') && !file.endsWith('.d.ts') && !file.includes('global.install.ts')) {
277
+ console.log(`[globalDefined] 检测到文件删除: ${file}`);
278
+ generate();
279
+ }
280
+ });
281
+ }
282
+ };
283
+ }
284
+ //# sourceMappingURL=global.defined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.defined.js","sourceRoot":"","sources":["../../src/plugin/global.defined.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Plugin } from 'vite';
2
+ import pagesDefinedPlugin from './pages.defined';
3
+ import globalDefinedPlugin from './global.defined';
4
+ export interface UnikyPluginOptions {
5
+ enablePages?: boolean;
6
+ enableGlobal?: boolean;
7
+ }
8
+ export declare function unikyPlugin(options?: UnikyPluginOptions): Plugin[];
9
+ export { pagesDefinedPlugin, globalDefinedPlugin };
10
+ export default unikyPlugin;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,kBAAkB,MAAM,iBAAiB,CAAC;AACjD,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,EAAE,CActE;AAED,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;AAEnD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,16 @@
1
+ import pagesDefinedPlugin from './pages.defined';
2
+ import globalDefinedPlugin from './global.defined';
3
+ export function unikyPlugin(options = {}) {
4
+ const { enablePages = true, enableGlobal = true } = options;
5
+ const plugins = [];
6
+ if (enablePages) {
7
+ plugins.push(pagesDefinedPlugin());
8
+ }
9
+ if (enableGlobal) {
10
+ plugins.push(globalDefinedPlugin());
11
+ }
12
+ return plugins;
13
+ }
14
+ export { pagesDefinedPlugin, globalDefinedPlugin };
15
+ export default unikyPlugin;
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,MAAM,iBAAiB,CAAC;AACjD,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AAOnD,MAAM,UAAU,WAAW,CAAC,UAA8B,EAAE;IAC1D,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE5D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;AAEnD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lib.defined.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.defined.d.ts","sourceRoot":"","sources":["../../src/plugin/lib.defined.ts"],"names":[],"mappings":"AACA,OAAO,EAAG,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lib.defined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.defined.js","sourceRoot":"","sources":["../../src/plugin/lib.defined.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { Plugin } from 'vite';
2
+ /**
3
+ * Vite 插件:从 pages.json 生成类型安全的路由定义
4
+ */
5
+ export default function pagesDefinedPlugin(): Plugin;
6
+ //# sourceMappingURL=pages.defined.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.defined.d.ts","sourceRoot":"","sources":["../../src/plugin/pages.defined.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA6OnC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,IAAI,MAAM,CAkCnD"}
@@ -0,0 +1,230 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ /**
4
+ * 移除 JSON 中的注释(支持 JSONC 格式)
5
+ */
6
+ function stripJsonComments(jsonString) {
7
+ let result = '';
8
+ let inString = false;
9
+ let inSingleLineComment = false;
10
+ let inMultiLineComment = false;
11
+ let escapeNext = false;
12
+ for (let i = 0; i < jsonString.length; i++) {
13
+ const char = jsonString[i];
14
+ const nextChar = jsonString[i + 1];
15
+ // 处理转义字符
16
+ if (escapeNext) {
17
+ if (inString) {
18
+ result += char;
19
+ }
20
+ escapeNext = false;
21
+ continue;
22
+ }
23
+ if (char === '\\' && inString) {
24
+ result += char;
25
+ escapeNext = true;
26
+ continue;
27
+ }
28
+ // 处理字符串
29
+ if (char === '"' && !inSingleLineComment && !inMultiLineComment) {
30
+ inString = !inString;
31
+ result += char;
32
+ continue;
33
+ }
34
+ // 如果在字符串内,直接添加字符
35
+ if (inString) {
36
+ result += char;
37
+ continue;
38
+ }
39
+ // 处理多行注释结束
40
+ if (inMultiLineComment) {
41
+ if (char === '*' && nextChar === '/') {
42
+ inMultiLineComment = false;
43
+ i++; // 跳过 '/'
44
+ }
45
+ continue;
46
+ }
47
+ // 处理单行注释结束
48
+ if (inSingleLineComment) {
49
+ if (char === '\n' || char === '\r') {
50
+ inSingleLineComment = false;
51
+ result += char; // 保留换行符
52
+ }
53
+ continue;
54
+ }
55
+ // 检测注释开始
56
+ if (char === '/') {
57
+ if (nextChar === '/') {
58
+ inSingleLineComment = true;
59
+ i++; // 跳过第二个 '/'
60
+ continue;
61
+ }
62
+ if (nextChar === '*') {
63
+ inMultiLineComment = true;
64
+ i++; // 跳过 '*'
65
+ continue;
66
+ }
67
+ }
68
+ // 正常字符
69
+ result += char;
70
+ }
71
+ return result;
72
+ }
73
+ /**
74
+ * 从 pages.json 提取所有页面路径
75
+ */
76
+ function extractPagePaths(pagesJson) {
77
+ const pagePaths = [];
78
+ // 提取主包页面
79
+ if (pagesJson.pages && Array.isArray(pagesJson.pages)) {
80
+ pagesJson.pages.forEach((page) => {
81
+ if (page.path) {
82
+ pagePaths.push(page.path);
83
+ }
84
+ });
85
+ }
86
+ // 提取分包页面
87
+ if (pagesJson.subPackages && Array.isArray(pagesJson.subPackages)) {
88
+ pagesJson.subPackages.forEach((subPackage) => {
89
+ const root = subPackage.root;
90
+ if (subPackage.pages && Array.isArray(subPackage.pages)) {
91
+ subPackage.pages.forEach((page) => {
92
+ if (page.path) {
93
+ const fullPath = `${root}/${page.path}`.replace(/\/+/g, '/');
94
+ pagePaths.push(fullPath);
95
+ }
96
+ });
97
+ }
98
+ });
99
+ }
100
+ return pagePaths;
101
+ }
102
+ /**
103
+ * 生成 TypeScript 代码
104
+ */
105
+ function generateTypeScriptCode(pagePaths) {
106
+ const pagesArray = pagePaths.map((p) => `"${p}"`).join(', ');
107
+ return `// Auto-generated by vite-plugin-pages-defined
108
+ // Do not edit this file manually
109
+
110
+ export const _Pages = [${pagesArray}] as const;
111
+ export type _PagePath = typeof _Pages[number];
112
+
113
+ type RouteFunction = (path: _PagePath, options?: { query?: Record<string, any>, json?: Record<string, any> }) => void;
114
+
115
+ interface ToRouteInterface {
116
+ navigate: RouteFunction;
117
+ redirect: RouteFunction;
118
+ switchTab: RouteFunction;
119
+ reLaunch: RouteFunction;
120
+ back: (delta?: number) => void;
121
+ }
122
+
123
+ const buildUrl = (path: string, query?: Record<string, any>, json?: Record<string, any>): string => {
124
+ const fullPath = path.startsWith('/') ? path : \`/\${path}\`;
125
+ const params: string[] = [];
126
+
127
+ if (query && Object.keys(query).length > 0) {
128
+ Object.entries(query).forEach(([key, value]) => {
129
+ params.push(\`\${encodeURIComponent(key)}=\${encodeURIComponent(String(value))}\`);
130
+ });
131
+ }
132
+
133
+ if (json && Object.keys(json).length > 0) {
134
+ const jsonStr = JSON.stringify(json);
135
+ params.push(\`json=\${encodeURIComponent(jsonStr)}\`);
136
+ }
137
+
138
+ return params.length > 0 ? \`\${fullPath}?\${params.join('&')}\` : fullPath;
139
+ };
140
+
141
+ const ToRoute: ToRouteInterface = {
142
+ navigate: (path, options) => {
143
+ const url = buildUrl(path, options?.query, options?.json);
144
+ uni.navigateTo({ url });
145
+ },
146
+ redirect: (path, options) => {
147
+ const url = buildUrl(path, options?.query, options?.json);
148
+ uni.redirectTo({ url });
149
+ },
150
+ switchTab: (path, options) => {
151
+ const url = buildUrl(path, options?.query, options?.json);
152
+ uni.switchTab({ url });
153
+ },
154
+ reLaunch: (path, options) => {
155
+ const url = buildUrl(path, options?.query, options?.json);
156
+ uni.reLaunch({ url });
157
+ },
158
+ back: (delta = 1) => {
159
+ uni.navigateBack({ delta });
160
+ }
161
+ };
162
+
163
+ export const _To = ToRoute;
164
+ `;
165
+ }
166
+ /**
167
+ * 生成 pages.ts 文件
168
+ */
169
+ function generatePagesFile(srcDir, outputPath) {
170
+ try {
171
+ const pagesJsonPath = path.resolve(srcDir, 'pages.json');
172
+ // 读取 pages.json
173
+ if (!fs.existsSync(pagesJsonPath)) {
174
+ console.warn('[pages-defined] pages.json not found');
175
+ return;
176
+ }
177
+ const pagesJsonContent = fs.readFileSync(pagesJsonPath, 'utf-8');
178
+ // 移除 JSON 注释后再解析
179
+ const cleanedJson = stripJsonComments(pagesJsonContent);
180
+ const pagesJson = JSON.parse(cleanedJson);
181
+ // 提取所有页面路径
182
+ const pagePaths = extractPagePaths(pagesJson);
183
+ // 生成 TypeScript 代码
184
+ const code = generateTypeScriptCode(pagePaths);
185
+ // 确保输出目录存在
186
+ const outputDir = path.dirname(outputPath);
187
+ if (!fs.existsSync(outputDir)) {
188
+ fs.mkdirSync(outputDir, { recursive: true });
189
+ }
190
+ // 写入文件
191
+ fs.writeFileSync(outputPath, code, 'utf-8');
192
+ console.log(`[pages-defined] Generated ${outputPath} with ${pagePaths.length} pages`);
193
+ }
194
+ catch (error) {
195
+ console.error('[pages-defined] Error generating pages.ts:', error);
196
+ }
197
+ }
198
+ /**
199
+ * Vite 插件:从 pages.json 生成类型安全的路由定义
200
+ */
201
+ export default function pagesDefinedPlugin() {
202
+ let srcDir;
203
+ let outputPath;
204
+ return {
205
+ name: 'vite-plugin-pages-defined',
206
+ configResolved(config) {
207
+ // 确定 src 目录和输出路径
208
+ srcDir = path.resolve(config.root, 'src');
209
+ outputPath = path.resolve(srcDir, 'autoGen/global/pages.ts');
210
+ },
211
+ buildStart() {
212
+ // 在构建开始时生成 pages.ts
213
+ generatePagesFile(srcDir, outputPath);
214
+ },
215
+ configureServer(server) {
216
+ // 监听 pages.json 文件变化
217
+ const pagesJsonPath = path.resolve(srcDir, 'pages.json');
218
+ server.watcher.add(pagesJsonPath);
219
+ server.watcher.on('change', (file) => {
220
+ if (file === pagesJsonPath) {
221
+ console.log('[pages-defined] pages.json changed, regenerating pages.ts...');
222
+ generatePagesFile(srcDir, outputPath);
223
+ }
224
+ });
225
+ // 初始生成
226
+ generatePagesFile(srcDir, outputPath);
227
+ }
228
+ };
229
+ }
230
+ //# sourceMappingURL=pages.defined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.defined.js","sourceRoot":"","sources":["../../src/plugin/pages.defined.ts"],"names":[],"mappings":"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"}