@visualization-hub/dev-mcp 1.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/README.md +93 -0
- package/bin/viz-dev-mcp.js +2 -0
- package/dist/client/discovery-api.d.ts +17 -0
- package/dist/client/discovery-api.d.ts.map +1 -0
- package/dist/client/discovery-api.js +47 -0
- package/dist/client/discovery-api.js.map +1 -0
- package/dist/client/environment-api.d.ts +3 -0
- package/dist/client/environment-api.d.ts.map +1 -0
- package/dist/client/environment-api.js +13 -0
- package/dist/client/environment-api.js.map +1 -0
- package/dist/client/http.d.ts +7 -0
- package/dist/client/http.d.ts.map +1 -0
- package/dist/client/http.js +38 -0
- package/dist/client/http.js.map +1 -0
- package/dist/client/inspection-api.d.ts +9 -0
- package/dist/client/inspection-api.d.ts.map +1 -0
- package/dist/client/inspection-api.js +30 -0
- package/dist/client/inspection-api.js.map +1 -0
- package/dist/client/transfer-api.d.ts +10 -0
- package/dist/client/transfer-api.d.ts.map +1 -0
- package/dist/client/transfer-api.js +49 -0
- package/dist/client/transfer-api.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +46 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +364 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/template-engine.d.ts +6 -0
- package/dist/templates/template-engine.d.ts.map +1 -0
- package/dist/templates/template-engine.js +350 -0
- package/dist/templates/template-engine.js.map +1 -0
- package/dist/templates/types.d.ts +14 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/templates/types.js +3 -0
- package/dist/templates/types.js.map +1 -0
- package/dist/tools/builder.tool.d.ts +18 -0
- package/dist/tools/builder.tool.d.ts.map +1 -0
- package/dist/tools/builder.tool.js +105 -0
- package/dist/tools/builder.tool.js.map +1 -0
- package/dist/tools/compliance.tool.d.ts +25 -0
- package/dist/tools/compliance.tool.d.ts.map +1 -0
- package/dist/tools/compliance.tool.js +300 -0
- package/dist/tools/compliance.tool.js.map +1 -0
- package/dist/tools/discovery.tools.d.ts +27 -0
- package/dist/tools/discovery.tools.d.ts.map +1 -0
- package/dist/tools/discovery.tools.js +43 -0
- package/dist/tools/discovery.tools.js.map +1 -0
- package/dist/tools/environment.tools.d.ts +91 -0
- package/dist/tools/environment.tools.d.ts.map +1 -0
- package/dist/tools/environment.tools.js +140 -0
- package/dist/tools/environment.tools.js.map +1 -0
- package/dist/tools/inspection.tools.d.ts +29 -0
- package/dist/tools/inspection.tools.d.ts.map +1 -0
- package/dist/tools/inspection.tools.js +42 -0
- package/dist/tools/inspection.tools.js.map +1 -0
- package/dist/tools/scaffolding.tool.d.ts +23 -0
- package/dist/tools/scaffolding.tool.d.ts.map +1 -0
- package/dist/tools/scaffolding.tool.js +70 -0
- package/dist/tools/scaffolding.tool.js.map +1 -0
- package/dist/tools/transfer.tools.d.ts +50 -0
- package/dist/tools/transfer.tools.d.ts.map +1 -0
- package/dist/tools/transfer.tools.js +105 -0
- package/dist/tools/transfer.tools.js.map +1 -0
- package/dist/utils/archive.d.ts +16 -0
- package/dist/utils/archive.d.ts.map +1 -0
- package/dist/utils/archive.js +65 -0
- package/dist/utils/archive.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +22 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateProjectFiles = generateProjectFiles;
|
|
4
|
+
/**
|
|
5
|
+
* 模板生成引擎:为指定技术栈输出符合沙箱 13 项规范的完整工程文件集合
|
|
6
|
+
*/
|
|
7
|
+
function generateProjectFiles(options) {
|
|
8
|
+
const { projectName, pageType, title, description = '', libraries = [], author = 'Visualization Agent', version = '1.0.0' } = options;
|
|
9
|
+
const files = [];
|
|
10
|
+
// 1. package.json
|
|
11
|
+
const packageJson = {
|
|
12
|
+
name: projectName,
|
|
13
|
+
version,
|
|
14
|
+
private: true,
|
|
15
|
+
type: 'module',
|
|
16
|
+
scripts: {
|
|
17
|
+
dev: 'vite',
|
|
18
|
+
build: 'vue-tsc --noEmit && vite build',
|
|
19
|
+
preview: 'vite preview'
|
|
20
|
+
},
|
|
21
|
+
dependencies: {
|
|
22
|
+
vue: '^3.4.38',
|
|
23
|
+
'element-plus': '^2.8.0',
|
|
24
|
+
'@element-plus/icons-vue': '^2.3.1',
|
|
25
|
+
pinia: '^2.2.2'
|
|
26
|
+
},
|
|
27
|
+
devDependencies: {
|
|
28
|
+
'@vitejs/plugin-vue': '^5.1.2',
|
|
29
|
+
less: '^4.2.0',
|
|
30
|
+
typescript: '^5.5.4',
|
|
31
|
+
vite: '^5.4.2',
|
|
32
|
+
'vue-tsc': '^2.1.4'
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
files.push({
|
|
36
|
+
relativePath: 'package.json',
|
|
37
|
+
content: JSON.stringify(packageJson, null, 2)
|
|
38
|
+
});
|
|
39
|
+
// 2. tsconfig.json
|
|
40
|
+
const tsconfig = {
|
|
41
|
+
compilerOptions: {
|
|
42
|
+
target: 'ES2020',
|
|
43
|
+
useDefineForClassFields: true,
|
|
44
|
+
module: 'ESNext',
|
|
45
|
+
lib: ['ES2020', 'DOM', 'DOM.Iterable'],
|
|
46
|
+
skipLibCheck: true,
|
|
47
|
+
moduleResolution: 'bundler',
|
|
48
|
+
allowImportingTsExtensions: true,
|
|
49
|
+
resolveJsonModule: true,
|
|
50
|
+
isolatedModules: true,
|
|
51
|
+
noEmit: true,
|
|
52
|
+
jsx: 'preserve',
|
|
53
|
+
strict: true,
|
|
54
|
+
noUnusedLocals: false,
|
|
55
|
+
noUnusedParameters: false,
|
|
56
|
+
noFallthroughCasesInSwitch: true
|
|
57
|
+
},
|
|
58
|
+
include: ['src/**/*.ts', 'src/**/*.d.ts', 'src/**/*.tsx', 'src/**/*.vue']
|
|
59
|
+
};
|
|
60
|
+
files.push({
|
|
61
|
+
relativePath: 'tsconfig.json',
|
|
62
|
+
content: JSON.stringify(tsconfig, null, 2)
|
|
63
|
+
});
|
|
64
|
+
// 3. vite.config.ts (关键:配置 external 排除全局底图引擎)
|
|
65
|
+
const viteConfig = `import { defineConfig } from 'vite';
|
|
66
|
+
import vue from '@vitejs/plugin-vue';
|
|
67
|
+
import { resolve } from 'path';
|
|
68
|
+
|
|
69
|
+
export default defineConfig({
|
|
70
|
+
plugins: [vue()],
|
|
71
|
+
build: {
|
|
72
|
+
lib: {
|
|
73
|
+
entry: resolve(__dirname, 'src/index.vue'),
|
|
74
|
+
name: 'ComponentEntry',
|
|
75
|
+
formats: ['es'],
|
|
76
|
+
fileName: () => 'index.js'
|
|
77
|
+
},
|
|
78
|
+
rollupOptions: {
|
|
79
|
+
external: [
|
|
80
|
+
'vue',
|
|
81
|
+
'element-plus',
|
|
82
|
+
'@element-plus/icons-vue',
|
|
83
|
+
'pinia',
|
|
84
|
+
'cesium',
|
|
85
|
+
'three',
|
|
86
|
+
'echarts',
|
|
87
|
+
'ol',
|
|
88
|
+
'mapbox-gl'
|
|
89
|
+
],
|
|
90
|
+
output: {
|
|
91
|
+
assetFileNames: (assetInfo) => {
|
|
92
|
+
if (assetInfo.name && assetInfo.name.endsWith('.css')) {
|
|
93
|
+
return 'index.css';
|
|
94
|
+
}
|
|
95
|
+
return 'assets/[name]-[hash][extname]';
|
|
96
|
+
},
|
|
97
|
+
globals: {
|
|
98
|
+
vue: 'Vue',
|
|
99
|
+
'element-plus': 'ElementPlus',
|
|
100
|
+
'@element-plus/icons-vue': 'ElementPlusIconsVue',
|
|
101
|
+
pinia: 'Pinia',
|
|
102
|
+
cesium: 'Cesium',
|
|
103
|
+
three: 'THREE',
|
|
104
|
+
echarts: 'echarts',
|
|
105
|
+
ol: 'ol',
|
|
106
|
+
'mapbox-gl': 'mapboxgl'
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
`;
|
|
113
|
+
files.push({
|
|
114
|
+
relativePath: 'vite.config.ts',
|
|
115
|
+
content: viteConfig
|
|
116
|
+
});
|
|
117
|
+
// 4. project.json (平台核心清单)
|
|
118
|
+
const projectJson = {
|
|
119
|
+
name: projectName,
|
|
120
|
+
version,
|
|
121
|
+
title,
|
|
122
|
+
description: description || `${title} 可视化组件`,
|
|
123
|
+
pageType,
|
|
124
|
+
author,
|
|
125
|
+
entry: 'dist/index.js',
|
|
126
|
+
entry_sfc: 'src/index.vue',
|
|
127
|
+
libraries: libraries || [],
|
|
128
|
+
tags: [pageType, 'visualization', 'hud']
|
|
129
|
+
};
|
|
130
|
+
files.push({
|
|
131
|
+
relativePath: 'project.json',
|
|
132
|
+
content: JSON.stringify(projectJson, null, 2)
|
|
133
|
+
});
|
|
134
|
+
// 5. env.d.ts
|
|
135
|
+
const envDeclaration = `/// <reference types="vite/client" />
|
|
136
|
+
declare module '*.vue' {
|
|
137
|
+
import type { DefineComponent } from 'vue';
|
|
138
|
+
const component: DefineComponent<{}, {}, any>;
|
|
139
|
+
export default component;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
declare interface Window {
|
|
143
|
+
viewer?: any;
|
|
144
|
+
Cesium?: any;
|
|
145
|
+
scene?: any;
|
|
146
|
+
camera?: any;
|
|
147
|
+
THREE?: any;
|
|
148
|
+
ol?: any;
|
|
149
|
+
mapboxgl?: any;
|
|
150
|
+
map?: any;
|
|
151
|
+
echarts?: any;
|
|
152
|
+
chart?: any;
|
|
153
|
+
__SANDBOX_CONTEXT__?: any;
|
|
154
|
+
}
|
|
155
|
+
`;
|
|
156
|
+
files.push({
|
|
157
|
+
relativePath: 'src/env.d.ts',
|
|
158
|
+
content: envDeclaration
|
|
159
|
+
});
|
|
160
|
+
// 6. src/util.ts
|
|
161
|
+
const utilTs = `/**
|
|
162
|
+
* 组件数据持久化与工具纯函数
|
|
163
|
+
* 约束:增删改查统一使用 localStorage 模拟持久化,严禁直连外部数据库
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
const STORAGE_KEY = '${projectName}_data';
|
|
167
|
+
|
|
168
|
+
export interface IRecordItem {
|
|
169
|
+
id: string;
|
|
170
|
+
name: string;
|
|
171
|
+
timestamp: number;
|
|
172
|
+
status: 'active' | 'inactive';
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export function loadDataList(): IRecordItem[] {
|
|
176
|
+
try {
|
|
177
|
+
const raw = localStorage.getItem(STORAGE_KEY);
|
|
178
|
+
if (!raw) return [];
|
|
179
|
+
return JSON.parse(raw);
|
|
180
|
+
} catch (e) {
|
|
181
|
+
console.error('加载本地数据失败:', e);
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function saveDataList(list: IRecordItem[]): void {
|
|
187
|
+
try {
|
|
188
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(list));
|
|
189
|
+
} catch (e) {
|
|
190
|
+
console.error('保存本地数据失败:', e);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
`;
|
|
194
|
+
files.push({
|
|
195
|
+
relativePath: 'src/util.ts',
|
|
196
|
+
content: utilTs
|
|
197
|
+
});
|
|
198
|
+
// 7. src/index.less (严格遵守 pointer-events: auto !important 与左上角定位)
|
|
199
|
+
const indexLess = `/* ${title} 组件作用域样式表 */
|
|
200
|
+
.hud-container {
|
|
201
|
+
position: absolute;
|
|
202
|
+
top: 16px;
|
|
203
|
+
left: 16px;
|
|
204
|
+
z-index: 100;
|
|
205
|
+
pointer-events: auto !important; /* 必需:穿透至底图沙箱并保证 HUD 可交互 */
|
|
206
|
+
|
|
207
|
+
.hud-panel {
|
|
208
|
+
background: rgba(13, 22, 38, 0.85);
|
|
209
|
+
backdrop-filter: blur(12px);
|
|
210
|
+
border: 1px solid rgba(0, 229, 255, 0.35);
|
|
211
|
+
border-radius: 8px;
|
|
212
|
+
padding: 16px;
|
|
213
|
+
color: #ffffff;
|
|
214
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.45);
|
|
215
|
+
min-width: 280px;
|
|
216
|
+
|
|
217
|
+
.hud-title {
|
|
218
|
+
font-size: 16px;
|
|
219
|
+
font-weight: 600;
|
|
220
|
+
color: #00e5ff;
|
|
221
|
+
margin-bottom: 12px;
|
|
222
|
+
display: flex;
|
|
223
|
+
align-items: center;
|
|
224
|
+
gap: 8px;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.hud-content {
|
|
228
|
+
font-size: 13px;
|
|
229
|
+
line-height: 1.6;
|
|
230
|
+
color: #cbd5e1;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.hud-actions {
|
|
234
|
+
margin-top: 16px;
|
|
235
|
+
display: flex;
|
|
236
|
+
gap: 8px;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
`;
|
|
241
|
+
files.push({
|
|
242
|
+
relativePath: 'src/index.less',
|
|
243
|
+
content: indexLess
|
|
244
|
+
});
|
|
245
|
+
// 8. src/index.ts (业务逻辑与生命周期)
|
|
246
|
+
const indexTs = `import { ref, onMounted, onUnmounted } from 'vue';
|
|
247
|
+
import { loadDataList, saveDataList, IRecordItem } from './util';
|
|
248
|
+
|
|
249
|
+
export function useComponentLogic() {
|
|
250
|
+
const isRunning = ref(false);
|
|
251
|
+
const dataList = ref<IRecordItem[]>([]);
|
|
252
|
+
let updateTimer: any = null;
|
|
253
|
+
|
|
254
|
+
function handleStart() {
|
|
255
|
+
isRunning.value = true;
|
|
256
|
+
updateTimer = setInterval(() => {
|
|
257
|
+
// 模拟状态轮询
|
|
258
|
+
}, 1000);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function handleStop() {
|
|
262
|
+
isRunning.value = false;
|
|
263
|
+
if (updateTimer) {
|
|
264
|
+
clearInterval(updateTimer);
|
|
265
|
+
updateTimer = null;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
onMounted(() => {
|
|
270
|
+
dataList.value = loadDataList();
|
|
271
|
+
// 监听沙箱场景就绪事件 (保障底图初始化完成)
|
|
272
|
+
if (window.viewer || window.__SANDBOX_CONTEXT__) {
|
|
273
|
+
console.log('[HUD] 场景已就绪');
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
onUnmounted(() => {
|
|
278
|
+
// 必需:销毁所有定时器与场景实体监听,杜绝内存泄漏
|
|
279
|
+
handleStop();
|
|
280
|
+
console.log('[HUD] 资源已释放销毁');
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
return {
|
|
284
|
+
isRunning,
|
|
285
|
+
dataList,
|
|
286
|
+
handleStart,
|
|
287
|
+
handleStop
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
`;
|
|
291
|
+
files.push({
|
|
292
|
+
relativePath: 'src/index.ts',
|
|
293
|
+
content: indexTs
|
|
294
|
+
});
|
|
295
|
+
// 9. src/index.vue (主模板视图:禁止 emoji,使用 Element Plus 图标)
|
|
296
|
+
const indexVue = `<template>
|
|
297
|
+
<div class="hud-container">
|
|
298
|
+
<div class="hud-panel">
|
|
299
|
+
<div class="hud-title">
|
|
300
|
+
<el-icon><Monitor /></el-icon>
|
|
301
|
+
<span>${title}</span>
|
|
302
|
+
</div>
|
|
303
|
+
|
|
304
|
+
<div class="hud-content">
|
|
305
|
+
<p>技术栈: <strong>${pageType.toUpperCase()}</strong></p>
|
|
306
|
+
<p>运行状态: <span>{{ isRunning ? '运行中' : '就绪' }}</span></p>
|
|
307
|
+
</div>
|
|
308
|
+
|
|
309
|
+
<div class="hud-actions">
|
|
310
|
+
<el-button
|
|
311
|
+
type="primary"
|
|
312
|
+
size="small"
|
|
313
|
+
:icon="VideoPlay"
|
|
314
|
+
:disabled="isRunning"
|
|
315
|
+
@click="handleStart"
|
|
316
|
+
>
|
|
317
|
+
启动
|
|
318
|
+
</el-button>
|
|
319
|
+
<el-button
|
|
320
|
+
type="danger"
|
|
321
|
+
size="small"
|
|
322
|
+
:icon="VideoPause"
|
|
323
|
+
:disabled="!isRunning"
|
|
324
|
+
@click="handleStop"
|
|
325
|
+
>
|
|
326
|
+
停止
|
|
327
|
+
</el-button>
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
</div>
|
|
331
|
+
</template>
|
|
332
|
+
|
|
333
|
+
<script setup lang="ts">
|
|
334
|
+
import { Monitor, VideoPlay, VideoPause } from '@element-plus/icons-vue';
|
|
335
|
+
import { useComponentLogic } from './index';
|
|
336
|
+
|
|
337
|
+
const { isRunning, dataList, handleStart, handleStop } = useComponentLogic();
|
|
338
|
+
</script>
|
|
339
|
+
|
|
340
|
+
<style scoped lang="less">
|
|
341
|
+
@import './index.less';
|
|
342
|
+
</style>
|
|
343
|
+
`;
|
|
344
|
+
files.push({
|
|
345
|
+
relativePath: 'src/index.vue',
|
|
346
|
+
content: indexVue
|
|
347
|
+
});
|
|
348
|
+
return files;
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=template-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../../src/templates/template-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ITemplateOptions {
|
|
2
|
+
projectName: string;
|
|
3
|
+
pageType: string;
|
|
4
|
+
title: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
libraries?: string[];
|
|
7
|
+
author?: string;
|
|
8
|
+
version?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface IGeneratedFile {
|
|
11
|
+
relativePath: string;
|
|
12
|
+
content: string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface IBuildProjectArgs {
|
|
2
|
+
projectDir: string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* build_component_project: 本地调用内置 Vite 引擎构建生成沙箱专属 dist/index.js 与 dist/index.css 产物
|
|
6
|
+
* 具备自包含编译能力,目标组件目录即使无本地 node_modules 亦可秒级打包
|
|
7
|
+
*/
|
|
8
|
+
export declare function handleBuildComponentProject(args: IBuildProjectArgs): Promise<{
|
|
9
|
+
success: boolean;
|
|
10
|
+
message: string;
|
|
11
|
+
project_dir: string;
|
|
12
|
+
duration_ms: number;
|
|
13
|
+
artifacts: {
|
|
14
|
+
'dist/index.js': string;
|
|
15
|
+
'dist/index.css': string;
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=builder.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.tool.d.ts","sourceRoot":"","sources":["../../src/tools/builder.tool.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,iBAAiB;;;;;;;;;GAmGxE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.handleBuildComponentProject = handleBuildComponentProject;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const vite_1 = require("vite");
|
|
10
|
+
const plugin_vue_1 = __importDefault(require("@vitejs/plugin-vue"));
|
|
11
|
+
/**
|
|
12
|
+
* build_component_project: 本地调用内置 Vite 引擎构建生成沙箱专属 dist/index.js 与 dist/index.css 产物
|
|
13
|
+
* 具备自包含编译能力,目标组件目录即使无本地 node_modules 亦可秒级打包
|
|
14
|
+
*/
|
|
15
|
+
async function handleBuildComponentProject(args) {
|
|
16
|
+
const { projectDir } = args;
|
|
17
|
+
if (!projectDir) {
|
|
18
|
+
throw new Error('[参数错误] projectDir 为必填项');
|
|
19
|
+
}
|
|
20
|
+
const absDir = path_1.default.resolve(projectDir);
|
|
21
|
+
if (!fs_1.default.existsSync(absDir)) {
|
|
22
|
+
throw new Error(`[路径错误] 目标工程目录不存在: ${absDir}`);
|
|
23
|
+
}
|
|
24
|
+
const startTime = Date.now();
|
|
25
|
+
const distDir = path_1.default.join(absDir, 'dist');
|
|
26
|
+
// 1. 动态智能探测入口文件
|
|
27
|
+
let entryFile = '';
|
|
28
|
+
const candidates = ['src/index.vue', 'index.vue', 'src/index.ts', 'src/index.js', 'index.js'];
|
|
29
|
+
for (const c of candidates) {
|
|
30
|
+
const full = path_1.default.join(absDir, c);
|
|
31
|
+
if (fs_1.default.existsSync(full)) {
|
|
32
|
+
entryFile = full;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!entryFile) {
|
|
37
|
+
throw new Error(`[入口缺失] 未在 ${absDir} 中找到有效的组件入口文件 (index.vue 或 src/index.vue)`);
|
|
38
|
+
}
|
|
39
|
+
// 2. 配置自包含 Vite 构建选项
|
|
40
|
+
const viteConfig = {
|
|
41
|
+
root: absDir,
|
|
42
|
+
configFile: false, // 保证完全基于开发者 MCP 内置编译器进行独立可靠构建
|
|
43
|
+
plugins: [(0, plugin_vue_1.default)()],
|
|
44
|
+
build: {
|
|
45
|
+
outDir: distDir,
|
|
46
|
+
emptyOutDir: true,
|
|
47
|
+
minify: true,
|
|
48
|
+
lib: {
|
|
49
|
+
entry: entryFile,
|
|
50
|
+
name: 'ComponentBundle',
|
|
51
|
+
fileName: () => 'index.js',
|
|
52
|
+
formats: ['es']
|
|
53
|
+
},
|
|
54
|
+
rollupOptions: {
|
|
55
|
+
external: [
|
|
56
|
+
'vue',
|
|
57
|
+
'element-plus',
|
|
58
|
+
'cesium',
|
|
59
|
+
'three',
|
|
60
|
+
'echarts',
|
|
61
|
+
'mapbox-gl',
|
|
62
|
+
'maplibre-gl',
|
|
63
|
+
'ol',
|
|
64
|
+
'@element-plus/icons-vue'
|
|
65
|
+
],
|
|
66
|
+
output: {
|
|
67
|
+
assetFileNames: (assetInfo) => {
|
|
68
|
+
if (assetInfo.name && assetInfo.name.endsWith('.css')) {
|
|
69
|
+
return 'index.css';
|
|
70
|
+
}
|
|
71
|
+
return assetInfo.name || 'asset';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
logLevel: 'warn'
|
|
77
|
+
};
|
|
78
|
+
// 3. 执行 Programmatic Vite Build
|
|
79
|
+
try {
|
|
80
|
+
await (0, vite_1.build)(viteConfig);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
throw new Error(`[本地构建编译异常]: ${err.message || err}`);
|
|
84
|
+
}
|
|
85
|
+
const distJsPath = path_1.default.join(distDir, 'index.js');
|
|
86
|
+
const distCssPath = path_1.default.join(distDir, 'index.css');
|
|
87
|
+
if (!fs_1.default.existsSync(distJsPath)) {
|
|
88
|
+
throw new Error(`[构建异常] 未能生成必需的产物文件: ${distJsPath}`);
|
|
89
|
+
}
|
|
90
|
+
const jsStat = fs_1.default.statSync(distJsPath);
|
|
91
|
+
const hasCss = fs_1.default.existsSync(distCssPath);
|
|
92
|
+
const cssStat = hasCss ? fs_1.default.statSync(distCssPath) : null;
|
|
93
|
+
const durationMs = Date.now() - startTime;
|
|
94
|
+
return {
|
|
95
|
+
success: true,
|
|
96
|
+
message: `工程本地构建成功 (耗时 ${(durationMs / 1000).toFixed(2)}s)`,
|
|
97
|
+
project_dir: absDir,
|
|
98
|
+
duration_ms: durationMs,
|
|
99
|
+
artifacts: {
|
|
100
|
+
'dist/index.js': `${(jsStat.size / 1024).toFixed(2)} KB`,
|
|
101
|
+
'dist/index.css': cssStat ? `${(cssStat.size / 1024).toFixed(2)} KB` : '未提取独立CSS (已内联或无样式)'
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=builder.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.tool.js","sourceRoot":"","sources":["../../src/tools/builder.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface IComplianceCheckArgs {
|
|
2
|
+
projectDir: string;
|
|
3
|
+
}
|
|
4
|
+
export interface ICheckItemResult {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
status: 'PASS' | 'WARN' | 'FAIL';
|
|
8
|
+
score: number;
|
|
9
|
+
message: string;
|
|
10
|
+
fix_suggestion?: string;
|
|
11
|
+
violating_files?: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* check_sandbox_compliance: 自动化对本地工程进行 13 项沙箱与编码合规静态代码扫描
|
|
15
|
+
*/
|
|
16
|
+
export declare function handleCheckSandboxCompliance(args: IComplianceCheckArgs): Promise<{
|
|
17
|
+
total_score: number;
|
|
18
|
+
max_score: number;
|
|
19
|
+
is_eligible_for_upload: boolean;
|
|
20
|
+
overall_status: string;
|
|
21
|
+
project_dir: string;
|
|
22
|
+
check_items: ICheckItemResult[];
|
|
23
|
+
recommendations: string[];
|
|
24
|
+
}>;
|
|
25
|
+
//# sourceMappingURL=compliance.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.tool.d.ts","sourceRoot":"","sources":["../../src/tools/compliance.tool.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,oBAAoB;;;;;;;;GAkS5E"}
|