@meng-xi/vite-plugin 0.1.3 → 0.1.5
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-en.md +49 -775
- package/README.md +46 -770
- package/dist/common/format/index.cjs +1 -1
- package/dist/common/format/index.d.cts +1 -130
- package/dist/common/format/index.d.mts +1 -130
- package/dist/common/format/index.d.ts +1 -130
- package/dist/common/format/index.mjs +1 -1
- package/dist/common/fs/index.cjs +1 -1
- package/dist/common/fs/index.d.cts +1 -89
- package/dist/common/fs/index.d.mts +1 -89
- package/dist/common/fs/index.d.ts +1 -89
- package/dist/common/fs/index.mjs +1 -1
- package/dist/common/html/index.cjs +2 -2
- package/dist/common/html/index.d.cts +19 -81
- package/dist/common/html/index.d.mts +19 -81
- package/dist/common/html/index.d.ts +19 -81
- package/dist/common/html/index.mjs +2 -2
- package/dist/common/index.cjs +1 -1
- package/dist/common/index.d.cts +7 -8
- package/dist/common/index.d.mts +7 -8
- package/dist/common/index.d.ts +7 -8
- package/dist/common/index.mjs +1 -1
- package/dist/common/script/index.cjs +1 -1
- package/dist/common/script/index.d.cts +1 -44
- package/dist/common/script/index.d.mts +1 -44
- package/dist/common/script/index.d.ts +1 -44
- package/dist/common/script/index.mjs +1 -1
- package/dist/common/ui/index.cjs +1 -0
- package/dist/common/ui/index.d.cts +22 -0
- package/dist/common/ui/index.d.mts +22 -0
- package/dist/common/ui/index.d.ts +22 -0
- package/dist/common/ui/index.mjs +1 -0
- package/dist/common/validation/index.cjs +1 -1
- package/dist/common/validation/index.d.cts +2 -79
- package/dist/common/validation/index.d.mts +2 -79
- package/dist/common/validation/index.d.ts +2 -79
- package/dist/common/validation/index.mjs +1 -1
- package/dist/factory/index.cjs +1 -1
- package/dist/factory/index.d.cts +1 -1
- package/dist/factory/index.d.mts +1 -1
- package/dist/factory/index.d.ts +1 -1
- package/dist/factory/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +12 -10
- package/dist/index.d.mts +12 -10
- package/dist/index.d.ts +12 -10
- package/dist/index.mjs +1 -1
- package/dist/logger/index.d.cts +92 -1
- package/dist/logger/index.d.mts +92 -1
- package/dist/logger/index.d.ts +92 -1
- package/dist/plugins/autoImport/index.cjs +17 -0
- package/dist/plugins/autoImport/index.d.cts +291 -0
- package/dist/plugins/autoImport/index.d.mts +291 -0
- package/dist/plugins/autoImport/index.d.ts +291 -0
- package/dist/plugins/autoImport/index.mjs +17 -0
- package/dist/plugins/buildProgress/index.cjs +2 -2
- package/dist/plugins/buildProgress/index.d.cts +1 -1
- package/dist/plugins/buildProgress/index.d.mts +1 -1
- package/dist/plugins/buildProgress/index.d.ts +1 -1
- package/dist/plugins/buildProgress/index.mjs +2 -2
- package/dist/plugins/bundleAnalyzer/index.cjs +11 -11
- package/dist/plugins/bundleAnalyzer/index.d.cts +1 -1
- package/dist/plugins/bundleAnalyzer/index.d.mts +1 -1
- package/dist/plugins/bundleAnalyzer/index.d.ts +1 -1
- package/dist/plugins/bundleAnalyzer/index.mjs +18 -18
- package/dist/plugins/compressAssets/index.cjs +1 -1
- package/dist/plugins/compressAssets/index.d.cts +1 -1
- package/dist/plugins/compressAssets/index.d.mts +1 -1
- package/dist/plugins/compressAssets/index.d.ts +1 -1
- package/dist/plugins/compressAssets/index.mjs +1 -1
- package/dist/plugins/copyFile/index.cjs +1 -1
- package/dist/plugins/copyFile/index.d.cts +21 -3
- package/dist/plugins/copyFile/index.d.mts +21 -3
- package/dist/plugins/copyFile/index.d.ts +21 -3
- package/dist/plugins/copyFile/index.mjs +1 -1
- package/dist/plugins/envGuard/index.cjs +67 -0
- package/dist/plugins/envGuard/index.d.cts +255 -0
- package/dist/plugins/envGuard/index.d.mts +255 -0
- package/dist/plugins/envGuard/index.d.ts +255 -0
- package/dist/plugins/envGuard/index.mjs +67 -0
- package/dist/plugins/faviconManager/index.cjs +1 -1
- package/dist/plugins/faviconManager/index.d.cts +44 -6
- package/dist/plugins/faviconManager/index.d.mts +44 -6
- package/dist/plugins/faviconManager/index.d.ts +44 -6
- package/dist/plugins/faviconManager/index.mjs +1 -1
- package/dist/plugins/generateRouter/index.cjs +4 -4
- package/dist/plugins/generateRouter/index.d.cts +62 -15
- package/dist/plugins/generateRouter/index.d.mts +62 -15
- package/dist/plugins/generateRouter/index.d.ts +62 -15
- package/dist/plugins/generateRouter/index.mjs +4 -4
- package/dist/plugins/generateVersion/index.cjs +1 -1
- package/dist/plugins/generateVersion/index.d.cts +13 -1
- package/dist/plugins/generateVersion/index.d.mts +13 -1
- package/dist/plugins/generateVersion/index.d.ts +13 -1
- package/dist/plugins/generateVersion/index.mjs +1 -1
- package/dist/plugins/htmlInject/index.cjs +7 -7
- package/dist/plugins/htmlInject/index.d.cts +50 -195
- package/dist/plugins/htmlInject/index.d.mts +50 -195
- package/dist/plugins/htmlInject/index.d.ts +50 -195
- package/dist/plugins/htmlInject/index.mjs +7 -7
- package/dist/plugins/index.cjs +1 -1
- package/dist/plugins/index.d.cts +5 -2
- package/dist/plugins/index.d.mts +5 -2
- package/dist/plugins/index.d.ts +5 -2
- package/dist/plugins/index.mjs +1 -1
- package/dist/plugins/loadingManager/index.cjs +26 -26
- package/dist/plugins/loadingManager/index.d.cts +1 -1
- package/dist/plugins/loadingManager/index.d.mts +1 -1
- package/dist/plugins/loadingManager/index.d.ts +1 -1
- package/dist/plugins/loadingManager/index.mjs +11 -11
- package/dist/plugins/versionUpdateChecker/index.cjs +1 -1
- package/dist/plugins/versionUpdateChecker/index.d.cts +1 -1
- package/dist/plugins/versionUpdateChecker/index.d.mts +1 -1
- package/dist/plugins/versionUpdateChecker/index.d.ts +1 -1
- package/dist/plugins/versionUpdateChecker/index.mjs +1 -1
- package/dist/shared/vite-plugin.B8FuZce1.d.cts +45 -0
- package/dist/shared/vite-plugin.B8FuZce1.d.mts +45 -0
- package/dist/shared/vite-plugin.B8FuZce1.d.ts +45 -0
- package/dist/shared/vite-plugin.BI9taN75.d.cts +122 -0
- package/dist/shared/vite-plugin.BI9taN75.d.mts +122 -0
- package/dist/shared/vite-plugin.BI9taN75.d.ts +122 -0
- package/dist/shared/vite-plugin.BPFqtmWa.mjs +1 -0
- package/dist/shared/vite-plugin.CnOy46d3.cjs +1 -0
- package/package.json +16 -16
- package/dist/common/compress/index.cjs +0 -1
- package/dist/common/compress/index.d.cts +0 -23
- package/dist/common/compress/index.d.mts +0 -23
- package/dist/common/compress/index.d.ts +0 -23
- package/dist/common/compress/index.mjs +0 -1
- package/dist/common/object/index.cjs +0 -1
- package/dist/common/object/index.d.cts +0 -30
- package/dist/common/object/index.d.mts +0 -30
- package/dist/common/object/index.d.ts +0 -30
- package/dist/common/object/index.mjs +0 -1
- package/dist/common/path/index.cjs +0 -1
- package/dist/common/path/index.d.cts +0 -22
- package/dist/common/path/index.d.mts +0 -22
- package/dist/common/path/index.d.ts +0 -22
- package/dist/common/path/index.mjs +0 -1
- package/dist/shared/vite-plugin.CLr0ttuO.d.cts +0 -135
- package/dist/shared/vite-plugin.CLr0ttuO.d.mts +0 -135
- package/dist/shared/vite-plugin.CLr0ttuO.d.ts +0 -135
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { BasePluginOptions, PluginFactory } from '../../factory/index.js';
|
|
2
|
+
import 'vite';
|
|
3
|
+
import '../../shared/vite-plugin.B8FuZce1.js';
|
|
4
|
+
import '../../shared/vite-plugin.DRRlWY8P.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 单个导入映射项
|
|
8
|
+
*
|
|
9
|
+
* @description 定义从某个模块导入的名称列表,
|
|
10
|
+
* 支持命名导入和默认导入两种方式。
|
|
11
|
+
* 用于 `AutoImportOptions.imports` 数组格式中。
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const mapping: ImportMapping = {
|
|
16
|
+
* module: 'lodash',
|
|
17
|
+
* names: ['debounce', 'throttle'],
|
|
18
|
+
* defaultImport: false
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
interface ImportMapping {
|
|
23
|
+
/**
|
|
24
|
+
* 模块路径
|
|
25
|
+
*
|
|
26
|
+
* @description 可以是 npm 包名(如 `'vue'`、`'vue-router'`)
|
|
27
|
+
* 或相对/绝对文件路径(如 `'./utils/helper'`)
|
|
28
|
+
*/
|
|
29
|
+
module: string;
|
|
30
|
+
/**
|
|
31
|
+
* 要导入的名称列表
|
|
32
|
+
*
|
|
33
|
+
* @description 从指定模块导入的标识符名称数组。
|
|
34
|
+
* 当 `defaultImport` 为 `true` 时,列表中的名称将作为默认导入的别名。
|
|
35
|
+
*/
|
|
36
|
+
names: string[];
|
|
37
|
+
/**
|
|
38
|
+
* 是否为默认导入
|
|
39
|
+
*
|
|
40
|
+
* @default false
|
|
41
|
+
*
|
|
42
|
+
* @description 设为 `true` 时,生成的 import 语句形式为
|
|
43
|
+
* `import name from 'module'` 而非 `import { name } from 'module'`
|
|
44
|
+
*/
|
|
45
|
+
defaultImport?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 自动导入插件的配置选项
|
|
49
|
+
*
|
|
50
|
+
* @interface AutoImportOptions
|
|
51
|
+
* @extends {BasePluginOptions}
|
|
52
|
+
*
|
|
53
|
+
* @description 配置自动导入插件的行为,包括导入映射、目录扫描、
|
|
54
|
+
* 类型声明生成、Vue 模板支持等。
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* autoImport({
|
|
59
|
+
* imports: {
|
|
60
|
+
* vue: ['ref', 'reactive', 'computed', 'watch', 'onMounted'],
|
|
61
|
+
* 'vue-router': ['useRouter', 'useRoute']
|
|
62
|
+
* },
|
|
63
|
+
* dirs: ['src/composables', 'src/stores'],
|
|
64
|
+
* dts: 'src/auto-imports.d.ts',
|
|
65
|
+
* vueTemplate: true,
|
|
66
|
+
* injectAtPosition: 'top'
|
|
67
|
+
* })
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
interface AutoImportOptions extends BasePluginOptions {
|
|
71
|
+
/**
|
|
72
|
+
* 导入映射配置
|
|
73
|
+
*
|
|
74
|
+
* @description 支持三种格式:
|
|
75
|
+
* 1. **简写格式**:`Record<string, string[]>` — 键为模块路径,值为导入名称数组
|
|
76
|
+
* ```typescript
|
|
77
|
+
* { vue: ['ref', 'reactive'] }
|
|
78
|
+
* ```
|
|
79
|
+
* 2. **完整格式**:`ImportMapping[]` — 支持默认导入配置
|
|
80
|
+
* ```typescript
|
|
81
|
+
* [{ module: 'lodash', names: ['debounce'], defaultImport: true }]
|
|
82
|
+
* ```
|
|
83
|
+
* 3. **混合格式**:两种格式可以在数组中混合使用
|
|
84
|
+
*
|
|
85
|
+
* @default {}
|
|
86
|
+
*/
|
|
87
|
+
imports?: Record<string, string[]> | ImportMapping[] | Array<Record<string, string[]> | ImportMapping>;
|
|
88
|
+
/**
|
|
89
|
+
* 需要扫描的目录列表
|
|
90
|
+
*
|
|
91
|
+
* @description 自动扫描这些目录下的 `.ts`/`.js`/`.mts`/`.mjs` 文件,
|
|
92
|
+
* 将导出的函数、变量、类等注册为可自动导入的标识符。
|
|
93
|
+
* 支持绝对路径和相对路径(相对于项目根目录)。
|
|
94
|
+
*
|
|
95
|
+
* **扫描规则:**
|
|
96
|
+
* - 递归扫描子目录
|
|
97
|
+
* - 跳过 `node_modules` 和隐藏目录(以 `.` 开头)
|
|
98
|
+
* - 跳过 `.d.ts` 类型声明文件
|
|
99
|
+
*
|
|
100
|
+
* @default []
|
|
101
|
+
*/
|
|
102
|
+
dirs?: string[];
|
|
103
|
+
/**
|
|
104
|
+
* TypeScript 类型声明文件输出路径
|
|
105
|
+
*
|
|
106
|
+
* @description 控制是否生成 `.d.ts` 类型声明文件:
|
|
107
|
+
* - `string`:在指定路径生成类型声明文件
|
|
108
|
+
* - `false`:不生成类型声明文件
|
|
109
|
+
*
|
|
110
|
+
* 路径可以是相对路径(相对于项目根目录)或绝对路径。
|
|
111
|
+
*
|
|
112
|
+
* @default 'auto-imports.d.ts'
|
|
113
|
+
*/
|
|
114
|
+
dts?: string | boolean;
|
|
115
|
+
/**
|
|
116
|
+
* 是否为 Vue 模板启用自动导入
|
|
117
|
+
*
|
|
118
|
+
* @description 开启后,Vue SFC 文件 `<template>` 中使用的 API
|
|
119
|
+
* (如 `ref`、`computed`)也会被自动导入,
|
|
120
|
+
* 无需在 `<script>` 中显式 `import`。
|
|
121
|
+
*
|
|
122
|
+
* **检测范围:**
|
|
123
|
+
* - 插值表达式 `{{ }}` 中的标识符
|
|
124
|
+
* - 指令绑定 `v-if`、`v-show`、`v-model` 等中的表达式
|
|
125
|
+
* - 属性绑定 `:prop="expr"` 中的表达式
|
|
126
|
+
* - 事件绑定 `@event="handler"` 中的表达式
|
|
127
|
+
*
|
|
128
|
+
* @default false
|
|
129
|
+
*/
|
|
130
|
+
vueTemplate?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* 需要忽略的标识符列表
|
|
133
|
+
*
|
|
134
|
+
* @description 这些标识符即使匹配到映射规则也不会被自动导入。
|
|
135
|
+
* 适用于与全局变量冲突的场景,例如某些标识符在运行时已通过
|
|
136
|
+
* 其他方式全局注册。
|
|
137
|
+
*
|
|
138
|
+
* @default []
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* ignore: ['React'] // 如果 React 已通过 CDN 全局注入
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
ignore?: string[];
|
|
146
|
+
/**
|
|
147
|
+
* 文件过滤正则表达式
|
|
148
|
+
*
|
|
149
|
+
* @description 只有文件路径匹配此正则的文件才会被 `transform` 钩子处理。
|
|
150
|
+
* 不匹配的文件将被跳过,不进行自动导入注入。
|
|
151
|
+
*
|
|
152
|
+
* @default /\.(vue|jsx|tsx|ts|js|mjs)$/
|
|
153
|
+
*/
|
|
154
|
+
fileFilter?: RegExp;
|
|
155
|
+
/**
|
|
156
|
+
* import 语句注入位置
|
|
157
|
+
*
|
|
158
|
+
* @description 控制自动生成的 import 语句在文件中的插入位置:
|
|
159
|
+
* - `'top'`:注入到文件有效代码最顶部(自动跳过 shebang 和 `"use strict"`)
|
|
160
|
+
* - `'after-last-import'`:注入到最后一个已有 import 语句之后;
|
|
161
|
+
* 若无已有 import,回退到顶部注入
|
|
162
|
+
*
|
|
163
|
+
* @default 'top'
|
|
164
|
+
*/
|
|
165
|
+
injectAtPosition?: 'top' | 'after-last-import';
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 内部使用的解析后映射项
|
|
169
|
+
*
|
|
170
|
+
* @description 统一的导入映射结构,由用户配置(`imports` 和 `dirs` 扫描结果)
|
|
171
|
+
* 解析而来。所有格式的导入配置最终都会转换为这个统一结构。
|
|
172
|
+
*/
|
|
173
|
+
interface ResolvedImport {
|
|
174
|
+
/**
|
|
175
|
+
* 模块路径
|
|
176
|
+
*
|
|
177
|
+
* @description 可以是 npm 包名(如 `'vue'`)或文件绝对路径
|
|
178
|
+
* (目录扫描结果使用绝对路径)
|
|
179
|
+
*/
|
|
180
|
+
module: string;
|
|
181
|
+
/**
|
|
182
|
+
* 导入标识符名称
|
|
183
|
+
*
|
|
184
|
+
* @description 在代码中检测到此名称使用时,将自动从对应模块导入
|
|
185
|
+
*/
|
|
186
|
+
name: string;
|
|
187
|
+
/**
|
|
188
|
+
* 是否为默认导入
|
|
189
|
+
*
|
|
190
|
+
* @description `true` 时生成 `import name from 'module'`,
|
|
191
|
+
* `false` 时生成 `import { name } from 'module'`
|
|
192
|
+
*/
|
|
193
|
+
isDefault: boolean;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* 扫描到的模块信息
|
|
197
|
+
*
|
|
198
|
+
* @description 从目录中扫描到的文件导出信息,
|
|
199
|
+
* 由 {@link parseModuleExports} 函数解析生成
|
|
200
|
+
*/
|
|
201
|
+
interface ScannedModule {
|
|
202
|
+
/**
|
|
203
|
+
* 模块文件的绝对路径
|
|
204
|
+
*
|
|
205
|
+
* @description 用于生成 import 语句中的模块来源路径
|
|
206
|
+
*/
|
|
207
|
+
filePath: string;
|
|
208
|
+
/**
|
|
209
|
+
* 命名导出名称列表
|
|
210
|
+
*
|
|
211
|
+
* @description 包含所有通过 `export function`、`export const`、
|
|
212
|
+
* `export class`、`export { ... }`、`export type`、`export interface`
|
|
213
|
+
* 等语法导出的标识符名称
|
|
214
|
+
*/
|
|
215
|
+
exports: string[];
|
|
216
|
+
/**
|
|
217
|
+
* 默认导出名称
|
|
218
|
+
*
|
|
219
|
+
* @description 通过 `export default` 导出的标识符名称。
|
|
220
|
+
* 如果默认导出没有命名(如 `export default {}`),
|
|
221
|
+
* 则使用文件名作为标识符名称。无默认导出时为 `null`。
|
|
222
|
+
*/
|
|
223
|
+
defaultExport: string | null;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* 代码转换结果
|
|
227
|
+
*
|
|
228
|
+
* @description `transformCode` 方法的返回类型,
|
|
229
|
+
* 包含转换后的代码和可选的 source map
|
|
230
|
+
*/
|
|
231
|
+
interface TransformResult {
|
|
232
|
+
/**
|
|
233
|
+
* 转换后的代码字符串
|
|
234
|
+
*
|
|
235
|
+
* @description 注入了自动 import 语句后的完整源代码
|
|
236
|
+
*/
|
|
237
|
+
code: string;
|
|
238
|
+
/**
|
|
239
|
+
* Source map 信息(可选)
|
|
240
|
+
*
|
|
241
|
+
* @description 用于支持调试时映射回原始源代码位置,
|
|
242
|
+
* 当前实现中暂未生成 source map
|
|
243
|
+
*/
|
|
244
|
+
map?: any;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* 创建自动导入插件
|
|
249
|
+
*
|
|
250
|
+
* @function autoImport
|
|
251
|
+
* @param {AutoImportOptions} [options] - 插件配置选项
|
|
252
|
+
* @returns {Plugin} Vite 插件实例
|
|
253
|
+
*
|
|
254
|
+
* @description 自动注入 import 语句的 Vite 插件工厂函数。
|
|
255
|
+
* 支持预设映射和目录扫描两种方式发现可自动导入的标识符,
|
|
256
|
+
* 可选生成 TypeScript 类型声明文件,支持 Vue 模板自动导入。
|
|
257
|
+
*
|
|
258
|
+
* **特性:**
|
|
259
|
+
* - 多格式导入映射配置(简写 / 完整 / 混合)
|
|
260
|
+
* - 递归目录扫描,自动发现导出
|
|
261
|
+
* - 智能去重,跳过已显式导入的标识符
|
|
262
|
+
* - Vue SFC 模板自动导入支持
|
|
263
|
+
* - TypeScript 类型声明自动生成
|
|
264
|
+
* - 可配置注入位置(顶部 / 最后 import 后)
|
|
265
|
+
* - 自动跳过 shebang 和 `"use strict"`
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* // vite.config.ts
|
|
270
|
+
* import { autoImport } from '@meng-xi/vite-plugin'
|
|
271
|
+
*
|
|
272
|
+
* export default defineConfig({
|
|
273
|
+
* plugins: [
|
|
274
|
+
* autoImport({
|
|
275
|
+
* imports: {
|
|
276
|
+
* vue: ['ref', 'reactive', 'computed', 'watch', 'onMounted'],
|
|
277
|
+
* 'vue-router': ['useRouter', 'useRoute']
|
|
278
|
+
* },
|
|
279
|
+
* dirs: ['src/composables'],
|
|
280
|
+
* dts: 'src/auto-imports.d.ts',
|
|
281
|
+
* vueTemplate: true,
|
|
282
|
+
* injectAtPosition: 'after-last-import'
|
|
283
|
+
* })
|
|
284
|
+
* ]
|
|
285
|
+
* })
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
declare const autoImport: PluginFactory<AutoImportOptions, AutoImportOptions>;
|
|
289
|
+
|
|
290
|
+
export { autoImport };
|
|
291
|
+
export type { AutoImportOptions, ImportMapping, ResolvedImport, ScannedModule, TransformResult };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import{createPluginFactory as S,BasePlugin as $}from"../../factory/index.mjs";import p from"node:fs";import a from"node:path";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";function A(s){if(!s)return[];const e=[];if(Array.isArray(s))for(const t of s)if("module"in t&&"names"in t){const n=t;for(const o of n.names)e.push({module:n.module,name:o,isDefault:n.defaultImport??!1})}else{const n=t;for(const[o,r]of Object.entries(n))for(const u of r)e.push({module:o,name:u,isDefault:!1})}else for(const[t,n]of Object.entries(s))for(const o of n)e.push({module:t,name:o,isDefault:!1});return e}function E(s){const e=new Map;for(const t of s)e.set(t.name,t);return e}function I(s){const e=a.basename(s,a.extname(s));return e==="index"?a.basename(a.dirname(s)):e}function F(s,e){const t=[];for(const n of s){const o=a.isAbsolute(n)?n:a.resolve(e,n);!p.existsSync(o)||!p.statSync(o).isDirectory()||w(o,t)}return t}function w(s,e){const t=p.readdirSync(s,{withFileTypes:!0});for(const n of t){const o=a.join(s,n.name);if(n.isDirectory()){if(n.name==="node_modules"||n.name.startsWith("."))continue;w(o,e);continue}if(!n.isFile())continue;const r=a.extname(n.name).toLowerCase();if(![".ts",".js",".mts",".mjs"].includes(r)||n.name.endsWith(".d.ts"))continue;const u=D(o);u&&e.push(u)}}function D(s){try{const e=p.readFileSync(s,"utf-8"),t=[];let n=null;const o=/export\s+(?:async\s+)?function\s+(\w+)/g;let r;for(;(r=o.exec(e))!==null;)t.push(r[1]);const u=/export\s+(?:const|let|var)\s+(\w+)/g;for(;(r=u.exec(e))!==null;)t.push(r[1]);const i=/export\s+class\s+(\w+)/g;for(;(r=i.exec(e))!==null;)t.push(r[1]);const l=/export\s*\{([^}]+)\}/g;for(;(r=l.exec(e))!==null;){const d=r[1].split(",").map(f=>{const h=f.trim().split(/\s+as\s+/);return h.length>1?h[h.length-1].trim():h[0].trim()});for(const f of d)f&&f!=="default"&&t.push(f)}const c=/export\s+default\s+(?:function\s+(\w+)|class\s+(\w+)|(\w+))?/.exec(e);c&&(n=c[1]||c[2]||c[3]||I(s));const g=/export\s+(?:type|interface)\s+(\w+)/g;for(;(r=g.exec(e))!==null;)t.push(r[1]);return t.length===0&&n===null?null:{filePath:s,exports:t,defaultExport:n}}catch{return null}}function j(s){const e=[];for(const t of s){for(const n of t.exports)e.push({module:t.filePath,name:n,isDefault:!1});t.defaultExport&&e.push({module:t.filePath,name:t.defaultExport,isDefault:!0})}return e}const b=new Set(["break","case","catch","continue","debugger","default","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","with","class","const","enum","export","extends","import","super","implements","interface","let","package","private","protected","public","static","yield","async","await","of","true","false","null","undefined","NaN","Infinity","console","window","document","global","globalThis","process","require","module","exports","__dirname","__filename","Object","Array","String","Number","Boolean","Symbol","BigInt","Map","Set","WeakMap","WeakSet","Promise","Proxy","Reflect","Error","TypeError","RangeError","SyntaxError","ReferenceError","Date","RegExp","Math","JSON","Intl","ArrayBuffer","DataView","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Uint8ClampedArray"]);function k(s){const e=[];let t=0;const n=s.length;for(;t<n;){if(s[t]==="/"&&s[t+1]==="/"){for(;t<n&&s[t]!==`
|
|
2
|
+
`;)e.push(" "),t++;continue}if(s[t]==="/"&&s[t+1]==="*"){for(e.push(" "),e.push(" "),t+=2;t<n&&!(s[t-1]==="*"&&s[t]==="/");)e.push(s[t]===`
|
|
3
|
+
`?`
|
|
4
|
+
`:" "),t++;t<n&&(e.push(" "),t++);continue}if(s[t]==="'"){for(e.push(" "),t++;t<n&&s[t]!=="'";){if(s[t]==="\\"&&t+1<n){e.push(" "),e.push(" "),t+=2;continue}e.push(s[t]===`
|
|
5
|
+
`?`
|
|
6
|
+
`:" "),t++}t<n&&(e.push(" "),t++);continue}if(s[t]==='"'){for(e.push(" "),t++;t<n&&s[t]!=='"';){if(s[t]==="\\"&&t+1<n){e.push(" "),e.push(" "),t+=2;continue}e.push(s[t]===`
|
|
7
|
+
`?`
|
|
8
|
+
`:" "),t++}t<n&&(e.push(" "),t++);continue}if(s[t]==="`"){for(e.push(" "),t++;t<n&&s[t]!=="`";){if(s[t]==="\\"&&t+1<n){e.push(" "),e.push(" "),t+=2;continue}if(s[t]==="$"&&s[t+1]==="{"){e.push(" "),e.push(" "),t+=2;let o=1;for(;t<n&&o>0;)s[t]==="{"&&o++,s[t]==="}"&&o--,o>0&&(e.push(s[t]),t++);t<n&&(e.push(" "),t++);continue}e.push(s[t]===`
|
|
9
|
+
`?`
|
|
10
|
+
`:" "),t++}t<n&&(e.push(" "),t++);continue}e.push(s[t]),t++}return e.join("")}function y(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function C(s,e,t){const n=[],o=new Set,r=k(s),u=/(?<![.\w$])([a-zA-Z_$][\w$]*)(?=\s*[<(.,:;\n\r)\]}]|$)/g;let i;for(;(i=u.exec(r))!==null;){const l=i[1];if(b.has(l)||o.has(l)||t.has(l))continue;const c=e.get(l);c&&(o.add(l),n.push(c))}return n}function R(s,e){return!!(new RegExp(`import\\s*\\{[^}]*\\b${y(e)}\\b[^}]*\\}\\s*from`,"m").test(s)||new RegExp(`import\\s+${y(e)}\\s+from`,"m").test(s)||new RegExp(`import\\s*\\*\\s*as\\s+${y(e)}\\s+from`,"m").test(s))}function B(s){const e=new Map;for(const n of s){e.has(n.module)||e.set(n.module,{named:[],default_:null});const o=e.get(n.module);n.isDefault?o.default_===null&&(o.default_=n.name):o.named.includes(n.name)||o.named.push(n.name)}const t=[];for(const[n,o]of e){const r=[];o.default_&&r.push(o.default_),o.named.length>0&&r.push(`{ ${o.named.join(", ")} }`),r.length>0&&t.push(`import ${r.join(", ")} from '${n}'`)}return t.join(`
|
|
11
|
+
`)}function P(s,e,t){if(!e.trim())return s;if(t==="top")return v(s,e);const n=_(s);return n===-1?v(s,e):s.slice(0,n)+`
|
|
12
|
+
`+e+`
|
|
13
|
+
`+s.slice(n)}function v(s,e){let t=0;if(s.startsWith("#!")){const o=s.indexOf(`
|
|
14
|
+
`);o!==-1?t=o+1:t=s.length}const n=s.slice(t).match(/^\s*["']use strict["'];?\s*\n?/);return n&&(t+=n[0].length),s.slice(0,t)+e+`
|
|
15
|
+
`+s.slice(t)}function _(s){let e=-1;const t=/^import\s+[\s\S]+?from\s+['"][^'"]+['"];?\s*$/gm;let n;for(;(n=t.exec(s))!==null;){const o=n.index+n[0].length;o>e&&(e=o)}return e}function L(s,e,t){const n=s.match(/<template[^>]*>([\s\S]*?)<\/template>/);if(!n)return[];const o=n[1],r=[],u=/\{\{([\s\S]*?)\}\}/g;let i;for(;(i=u.exec(o))!==null;)r.push(i[1]);const l=/(?:v-[\w-]+|:[\w-]+|@[\w-]+)(?:\.[\w-]+)*="([^"]*)"/g;for(;(i=l.exec(o))!==null;)r.push(i[1]);const c=/v-model="([^"]*)"/g;for(;(i=c.exec(o))!==null;)r.push(i[1]);if(r.length===0)return[];const g=r.join(`
|
|
16
|
+
`),d=[],f=new Set,h=/(?<![.\w$])([a-zA-Z_$][\w$]*)(?=\s*[<(.,:;\n\r)\]}]|$)/g;for(;(i=h.exec(g))!==null;){const m=i[1];if(f.has(m)||t.has(m)||b.has(m)||z(m)||T(m))continue;const x=e.get(m);x&&(f.add(m),d.push(x))}return d}const M=new Set(["div","span","p","a","img","ul","ol","li","h1","h2","h3","h4","h5","h6","table","tr","td","th","thead","tbody","form","input","button","select","option","textarea","label","section","article","header","footer","nav","main","aside","script","style","link","meta","title","head","body","html","br","hr","pre","code","em","strong","b","i","u","sub","sup","small","mark","del","ins","blockquote","q","cite","abbr","dfn","kbd","samp","var","time","figure","figcaption","details","summary","dialog","menu","template","slot","component","transition","transition-group","keep-alive","teleport","suspense","video","audio","source","canvas","svg","path","circle","rect","line","polygon","iframe","embed","object","picture","area","map","base","col","colgroup","datalist","fieldset","legend","meter","optgroup","output","progress","ruby","rt","rp","wbr"]);function z(s){return M.has(s.toLowerCase())}function T(s){return s.startsWith("v")&&s.length>1&&s[1]===s[1].toUpperCase()}function N(s){const e=[];e.push("// Auto generated by @meng-xi/vite-plugin autoImport"),e.push("// @ts-nocheck"),e.push("export {}"),e.push("");const t=new Map;for(const n of s)t.has(n.module)||t.set(n.module,[]),t.get(n.module).push(n);e.push("declare global {");for(const[n,o]of t){e.push(` // from '${n}'`);for(const r of o)r.isDefault?e.push(` const ${r.name}: typeof import('${n}')['default']`):e.push(` const ${r.name}: typeof import('${n}')['${r.name}']`);e.push("")}return e.push("}"),e.join(`
|
|
17
|
+
`)}function O(s,e){const t=a.dirname(s);p.existsSync(t)||p.mkdirSync(t,{recursive:!0}),p.writeFileSync(s,e,"utf-8")}function U(s,e){if(!p.existsSync(s))return!0;try{return p.readFileSync(s,"utf-8")!==e}catch{return!0}}class W extends ${nameLookup=new Map;allResolvedImports=[];ignoreSet=new Set;initialized=!1;getDefaultOptions(){return{imports:{},dirs:[],dts:"auto-imports.d.ts",vueTemplate:!1,ignore:[],fileFilter:/\.(vue|jsx|tsx|ts|js|mjs)$/,injectAtPosition:"top"}}validateOptions(){this.validator.field("dts").custom(e=>e===!1||typeof e=="string","dts \u5FC5\u987B\u4E3A false \u6216\u5B57\u7B26\u4E32\u8DEF\u5F84").field("vueTemplate").boolean().field("injectAtPosition").enum(["top","after-last-import"]).validate()}getPluginName(){return"auto-import"}addPluginHooks(e){e.configResolved=()=>{this.initialize()},e.transform={order:"pre",handler:(t,n)=>!this.initialized||!this.options.fileFilter.test(n)?null:this.transformCode(t,n)},e.buildEnd=()=>{this.options.dts&&this.initialized&&this.generateDts()}}initialize(){const e=A(this.options.imports),t=this.viteConfig?.root||process.cwd(),n=F(this.options.dirs,t),o=j(n);this.allResolvedImports=[...e,...o],this.nameLookup=E(this.allResolvedImports),this.ignoreSet=new Set(this.options.ignore),this.initialized=!0,this.logger.info(`\u521D\u59CB\u5316\u5B8C\u6210: ${this.allResolvedImports.length} \u4E2A\u81EA\u52A8\u5BFC\u5165\u6620\u5C04, ${n.length} \u4E2A\u626B\u63CF\u6A21\u5757`),this.options.dts&&this.generateDts()}transformCode(e,t){let n=C(e,this.nameLookup,this.ignoreSet);if(this.options.vueTemplate&&t.endsWith(".vue")){const r=L(e,this.nameLookup,this.ignoreSet),u=new Set(n.map(i=>i.name));for(const i of r)u.has(i.name)||(u.add(i.name),n.push(i))}if(n=n.filter(r=>!R(e,r.name)),n.length===0)return null;const o=B(n);return{code:P(e,o,this.options.injectAtPosition)}}generateDts(){if(this.allResolvedImports.length===0)return;const e=this.viteConfig?.root||process.cwd(),t=a.isAbsolute(this.options.dts)?this.options.dts:a.resolve(e,this.options.dts),n=N(this.allResolvedImports);U(t,n)&&this.safeExecuteSync(()=>{O(t,n),this.logger.info(`\u7C7B\u578B\u58F0\u660E\u6587\u4EF6\u5DF2\u751F\u6210: ${this.options.dts}`)},"\u751F\u6210\u7C7B\u578B\u58F0\u660E\u6587\u4EF6")}getResolvedImports(){return[...this.allResolvedImports]}getNameLookup(){return new Map(this.nameLookup)}}const q=S(W);export{q as autoImport};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const factory_index=require("../../factory/index.cjs")
|
|
2
|
-
`)},"\u8F93\u51FA\u5B8C\u6210\u8FDB\u5EA6")}this.safeExecuteSync(()=>{process.stdout.write(ANSI.showCursor)},"\u6062\u590D\u5149\u6807\u663E\u793A")}addPluginHooks(e){e.config=(t,{command:s})=>(this.isDev=s==="serve",null),e.configResolved=()=>{this.options.enabled&&(this.phase="config",process.stdout.isTTY&&this.safeExecuteSync(()=>{process.stdout.write(ANSI.hideCursor)},"\u9690\u85CF\u5149\u6807"),this.startSpinner())},e.buildStart=()=>{this.options.enabled&&(this.phase="resolve",this.totalModules=0,this.transformedModules=0)},e.resolveId={handler:t=>{this.options.enabled&&(t.includes("node_modules")||t.includes(".virtual")||this.totalModules++)}},e.transform={handler:(t,s)=>{this.options.enabled&&(s.includes("node_modules")||s.includes(".virtual")||(this.phase="transform",this.transformedModules++,this.currentModule=s))}},e.writeBundle=()=>{this.options.enabled&&(this.phase="write",this.update())},e.closeBundle=()=>{this.options.enabled&&this.complete()},e.buildEnd=()=>{this.options.enabled&&(this.isDev||(this.phase="bundle",this.update()))},e.configureServer=()=>{this.options.enabled&&this.isDev&&this.complete()}}destroy(){super.destroy(),this.stopSpinner(),process.stdout.isTTY&&this.safeExecuteSync(()=>{process.stdout.write(ANSI.showCursor)},"\u6062\u590D\u5149\u6807\u663E\u793A")}}const buildProgress=factory_index.createPluginFactory(
|
|
1
|
+
"use strict";const factory_index=require("../../factory/index.cjs"),common_ui_index=require("../../common/ui/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs");const DEFAULT_THEME={completeColor:common_ui_index.ANSI.green,incompleteColor:common_ui_index.ANSI.gray,percentageColor:common_ui_index.ANSI.bold,phaseColor:common_ui_index.ANSI.cyan,moduleColor:common_ui_index.ANSI.gray},PHASE_LABELS={idle:"\u7B49\u5F85\u4E2D",config:"\u8BFB\u53D6\u914D\u7F6E",resolve:"\u89E3\u6790\u6A21\u5757",transform:"\u8F6C\u6362\u6A21\u5757",bundle:"\u6253\u5305\u4E2D",write:"\u5199\u5165\u6587\u4EF6",done:"\u6784\u5EFA\u5B8C\u6210"},p=process.platform==="win32"?["|","/","-","\\"]:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],f=/\x1b\[[0-9;]*m/g;function g(n){return n.replace(f,"")}class v extends factory_index.BasePlugin{totalModules=0;transformedModules=0;currentModule="";phase="idle";spinnerIndex=0;spinnerTimer=null;isDev=!1;theme=DEFAULT_THEME;lastPercentage=0;getDefaultOptions(){return{width:30,format:"bar",completeChar:"\u2588",incompleteChar:"\u2591",clearOnComplete:!0,showModuleName:!0}}validateOptions(){this.validator.field("width").number().minValue(1).field("format").enum(["bar","spinner","minimal"]).field("completeChar").string().field("incompleteChar").string().field("clearOnComplete").boolean().field("showModuleName").boolean().validate()}getPluginName(){return"build-progress"}onConfigResolved(e){super.onConfigResolved(e),this.theme=this.options.theme||DEFAULT_THEME}getPercentage(){if(this.phase==="done")return this.lastPercentage=100;if(this.phase==="config")return this.lastPercentage=5;if(this.phase==="resolve")return this.lastPercentage=10;if(this.totalModules===0)return this.lastPercentage=15;const e=Math.min(this.transformedModules/this.totalModules*70,70),t=this.phase==="bundle"?10:0,s=this.phase==="write"?5:0,i=Math.min(Math.floor(15+e+t+s),99);return this.lastPercentage=Math.max(i,this.lastPercentage),this.lastPercentage}renderBar(e){const t=this.options.width||30,s=this.options.completeChar||"\u2588",i=this.options.incompleteChar||"\u2591",r=Math.round(e/100*t),o=t-r;return this.theme.completeColor(s.repeat(r))+this.theme.incompleteColor(i.repeat(o))}renderSpinner(){const e=p[this.spinnerIndex%p.length];return this.spinnerIndex++,this.theme.phaseColor(e)}render(e){const t=this.options.format||"bar",s=this.theme.phaseColor(PHASE_LABELS[this.phase]),i=this.theme.percentageColor(`${e}%`);let r="";if(t==="bar"?r=`${this.renderSpinner()} ${s} ${this.renderBar(e)} ${i}`:t==="spinner"?r=`${this.renderSpinner()} ${s} ${i}`:r=`${s} ${i}`,this.options.showModuleName&&this.currentModule&&this.phase==="transform"){const o=g(r).length,u=Math.max((process.stdout.columns||80)-o-3,20),l=this.currentModule.length>u?"..."+this.currentModule.slice(-u+3):this.currentModule;r+=` ${this.theme.moduleColor(l)}`}return r}update(){if(!process.stdout.isTTY)return;const e=this.getPercentage(),t=this.render(e);this.safeExecuteSync(()=>{process.stdout.write(common_ui_index.ANSI.clearLine+common_ui_index.ANSI.reset+t)},"\u66F4\u65B0\u8FDB\u5EA6\u663E\u793A")}startSpinner(){this.spinnerTimer||process.stdout.isTTY&&(this.spinnerTimer=setInterval(()=>this.update(),80))}stopSpinner(){this.spinnerTimer&&(clearInterval(this.spinnerTimer),this.spinnerTimer=null)}complete(){if(this.phase="done",this.stopSpinner(),!process.stdout.isTTY){this.logger.success("\u6784\u5EFA\u5B8C\u6210");return}if(this.options.clearOnComplete)this.safeExecuteSync(()=>{process.stdout.write(common_ui_index.ANSI.clearLine+common_ui_index.ANSI.reset)},"\u6E05\u9664\u8FDB\u5EA6\u884C");else{const e=this.render(100);this.safeExecuteSync(()=>{process.stdout.write(common_ui_index.ANSI.clearLine+common_ui_index.ANSI.reset+e+`
|
|
2
|
+
`)},"\u8F93\u51FA\u5B8C\u6210\u8FDB\u5EA6")}this.safeExecuteSync(()=>{process.stdout.write(common_ui_index.ANSI.showCursor)},"\u6062\u590D\u5149\u6807\u663E\u793A")}addPluginHooks(e){e.config=(t,{command:s})=>(this.isDev=s==="serve",null),e.configResolved=()=>{this.options.enabled&&(this.phase="config",process.stdout.isTTY&&this.safeExecuteSync(()=>{process.stdout.write(common_ui_index.ANSI.hideCursor)},"\u9690\u85CF\u5149\u6807"),this.startSpinner())},e.buildStart=()=>{this.options.enabled&&(this.phase="resolve",this.totalModules=0,this.transformedModules=0)},e.resolveId={handler:t=>{this.options.enabled&&(t.includes("node_modules")||t.includes(".virtual")||this.totalModules++)}},e.transform={handler:(t,s)=>{this.options.enabled&&(s.includes("node_modules")||s.includes(".virtual")||(this.phase="transform",this.transformedModules++,this.currentModule=s))}},e.writeBundle=()=>{this.options.enabled&&(this.phase="write",this.update())},e.closeBundle=()=>{this.options.enabled&&this.complete()},e.buildEnd=()=>{this.options.enabled&&(this.isDev||(this.phase="bundle",this.update()))},e.configureServer=()=>{this.options.enabled&&this.isDev&&this.complete()}}destroy(){super.destroy(),this.stopSpinner(),process.stdout.isTTY&&this.safeExecuteSync(()=>{process.stdout.write(common_ui_index.ANSI.showCursor)},"\u6062\u590D\u5149\u6807\u663E\u793A")}}const buildProgress=factory_index.createPluginFactory(v);exports.buildProgress=buildProgress;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createPluginFactory as
|
|
2
|
-
`)},"\u8F93\u51FA\u5B8C\u6210\u8FDB\u5EA6")}this.safeExecuteSync(()=>{process.stdout.write(s.showCursor)},"\u6062\u590D\u5149\u6807\u663E\u793A")}addPluginHooks(e){e.config=(t,{command:r})=>(this.isDev=r==="serve",null),e.configResolved=()=>{this.options.enabled&&(this.phase="config",process.stdout.isTTY&&this.safeExecuteSync(()=>{process.stdout.write(s.hideCursor)},"\u9690\u85CF\u5149\u6807"),this.startSpinner())},e.buildStart=()=>{this.options.enabled&&(this.phase="resolve",this.totalModules=0,this.transformedModules=0)},e.resolveId={handler:t=>{this.options.enabled&&(t.includes("node_modules")||t.includes(".virtual")||this.totalModules++)}},e.transform={handler:(t,r)=>{this.options.enabled&&(r.includes("node_modules")||r.includes(".virtual")||(this.phase="transform",this.transformedModules++,this.currentModule=r))}},e.writeBundle=()=>{this.options.enabled&&(this.phase="write",this.update())},e.closeBundle=()=>{this.options.enabled&&this.complete()},e.buildEnd=()=>{this.options.enabled&&(this.isDev||(this.phase="bundle",this.update()))},e.configureServer=()=>{this.options.enabled&&this.isDev&&this.complete()}}destroy(){super.destroy(),this.stopSpinner(),process.stdout.isTTY&&this.safeExecuteSync(()=>{process.stdout.write(s.showCursor)},"\u6062\u590D\u5149\u6807\u663E\u793A")}}const
|
|
1
|
+
import{createPluginFactory as p,BasePlugin as c}from"../../factory/index.mjs";import{ANSI as s}from"../../common/ui/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";const h={completeColor:s.green,incompleteColor:s.gray,percentageColor:s.bold,phaseColor:s.cyan,moduleColor:s.gray},m={idle:"\u7B49\u5F85\u4E2D",config:"\u8BFB\u53D6\u914D\u7F6E",resolve:"\u89E3\u6790\u6A21\u5757",transform:"\u8F6C\u6362\u6A21\u5757",bundle:"\u6253\u5305\u4E2D",write:"\u5199\u5165\u6587\u4EF6",done:"\u6784\u5EFA\u5B8C\u6210"},a=process.platform==="win32"?["|","/","-","\\"]:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],f=/\x1b\[[0-9;]*m/g;function g(u){return u.replace(f,"")}class C extends c{totalModules=0;transformedModules=0;currentModule="";phase="idle";spinnerIndex=0;spinnerTimer=null;isDev=!1;theme=h;lastPercentage=0;getDefaultOptions(){return{width:30,format:"bar",completeChar:"\u2588",incompleteChar:"\u2591",clearOnComplete:!0,showModuleName:!0}}validateOptions(){this.validator.field("width").number().minValue(1).field("format").enum(["bar","spinner","minimal"]).field("completeChar").string().field("incompleteChar").string().field("clearOnComplete").boolean().field("showModuleName").boolean().validate()}getPluginName(){return"build-progress"}onConfigResolved(e){super.onConfigResolved(e),this.theme=this.options.theme||h}getPercentage(){if(this.phase==="done")return this.lastPercentage=100;if(this.phase==="config")return this.lastPercentage=5;if(this.phase==="resolve")return this.lastPercentage=10;if(this.totalModules===0)return this.lastPercentage=15;const e=Math.min(this.transformedModules/this.totalModules*70,70),t=this.phase==="bundle"?10:0,r=this.phase==="write"?5:0,o=Math.min(Math.floor(15+e+t+r),99);return this.lastPercentage=Math.max(o,this.lastPercentage),this.lastPercentage}renderBar(e){const t=this.options.width||30,r=this.options.completeChar||"\u2588",o=this.options.incompleteChar||"\u2591",i=Math.round(e/100*t),n=t-i;return this.theme.completeColor(r.repeat(i))+this.theme.incompleteColor(o.repeat(n))}renderSpinner(){const e=a[this.spinnerIndex%a.length];return this.spinnerIndex++,this.theme.phaseColor(e)}render(e){const t=this.options.format||"bar",r=this.theme.phaseColor(m[this.phase]),o=this.theme.percentageColor(`${e}%`);let i="";if(t==="bar"?i=`${this.renderSpinner()} ${r} ${this.renderBar(e)} ${o}`:t==="spinner"?i=`${this.renderSpinner()} ${r} ${o}`:i=`${r} ${o}`,this.options.showModuleName&&this.currentModule&&this.phase==="transform"){const n=g(i).length,l=Math.max((process.stdout.columns||80)-n-3,20),d=this.currentModule.length>l?"..."+this.currentModule.slice(-l+3):this.currentModule;i+=` ${this.theme.moduleColor(d)}`}return i}update(){if(!process.stdout.isTTY)return;const e=this.getPercentage(),t=this.render(e);this.safeExecuteSync(()=>{process.stdout.write(s.clearLine+s.reset+t)},"\u66F4\u65B0\u8FDB\u5EA6\u663E\u793A")}startSpinner(){this.spinnerTimer||process.stdout.isTTY&&(this.spinnerTimer=setInterval(()=>this.update(),80))}stopSpinner(){this.spinnerTimer&&(clearInterval(this.spinnerTimer),this.spinnerTimer=null)}complete(){if(this.phase="done",this.stopSpinner(),!process.stdout.isTTY){this.logger.success("\u6784\u5EFA\u5B8C\u6210");return}if(this.options.clearOnComplete)this.safeExecuteSync(()=>{process.stdout.write(s.clearLine+s.reset)},"\u6E05\u9664\u8FDB\u5EA6\u884C");else{const e=this.render(100);this.safeExecuteSync(()=>{process.stdout.write(s.clearLine+s.reset+e+`
|
|
2
|
+
`)},"\u8F93\u51FA\u5B8C\u6210\u8FDB\u5EA6")}this.safeExecuteSync(()=>{process.stdout.write(s.showCursor)},"\u6062\u590D\u5149\u6807\u663E\u793A")}addPluginHooks(e){e.config=(t,{command:r})=>(this.isDev=r==="serve",null),e.configResolved=()=>{this.options.enabled&&(this.phase="config",process.stdout.isTTY&&this.safeExecuteSync(()=>{process.stdout.write(s.hideCursor)},"\u9690\u85CF\u5149\u6807"),this.startSpinner())},e.buildStart=()=>{this.options.enabled&&(this.phase="resolve",this.totalModules=0,this.transformedModules=0)},e.resolveId={handler:t=>{this.options.enabled&&(t.includes("node_modules")||t.includes(".virtual")||this.totalModules++)}},e.transform={handler:(t,r)=>{this.options.enabled&&(r.includes("node_modules")||r.includes(".virtual")||(this.phase="transform",this.transformedModules++,this.currentModule=r))}},e.writeBundle=()=>{this.options.enabled&&(this.phase="write",this.update())},e.closeBundle=()=>{this.options.enabled&&this.complete()},e.buildEnd=()=>{this.options.enabled&&(this.isDev||(this.phase="bundle",this.update()))},e.configureServer=()=>{this.options.enabled&&this.isDev&&this.complete()}}destroy(){super.destroy(),this.stopSpinner(),process.stdout.isTTY&&this.safeExecuteSync(()=>{process.stdout.write(s.showCursor)},"\u6062\u590D\u5149\u6807\u663E\u793A")}}const E=p(C);export{E as buildProgress};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const factory_index=require("../../factory/index.cjs"),
|
|
1
|
+
"use strict";const factory_index=require("../../factory/index.cjs"),p$1=require("node:fs"),i=require("node:path"),g=require("node:zlib"),node_util=require("node:util"),common_fs_index=require("../../common/fs/index.cjs"),common_format_index=require("../../common/format/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs"),require("path");function _interopDefaultCompat(a){return a&&typeof a=="object"&&"default"in a?a.default:a}const p__default=_interopDefaultCompat(p$1),i__default=_interopDefaultCompat(i),g__default=_interopDefaultCompat(g),b=node_util.promisify(g__default.gzip);async function M(a){const s=Buffer.isBuffer(a)?a:Buffer.from(a,"utf-8");return(await b(s)).length}function p(a){return a.includes("node_modules")||a.startsWith("\0")||a.startsWith("virtual:")}async function scanOutputDirectory(a,s={}){return common_fs_index.scanDirectory(a,{includeExtensions:s.includeExtensions,excludePatterns:s.excludePatterns})}function analyzeFileTypeDistribution(a){const s=a.reduce((r,o)=>r+o.size,0),e=new Map;for(const r of a){const o=r.extension||"(no ext)",t=e.get(o)||{count:0,totalSize:0};t.count++,t.totalSize+=r.size,e.set(o,t)}return Array.from(e.entries()).map(([r,{count:o,totalSize:t}])=>({extension:r,count:o,totalSize:t,percentage:s>0?Number((t/s*100).toFixed(1)):0})).sort((r,o)=>o.totalSize-r.totalSize)}function checkSizeThresholds(a,s){const e=[],r=s*1024;for(const o of a){o.size>r&&e.push({level:"chunk",name:o.name,sizeKB:Number((o.size/1024).toFixed(1)),thresholdKB:s,message:`Chunk "${o.name}" \u8D85\u8FC7\u9608\u503C: ${(o.size/1024).toFixed(1)}KB > ${s}KB`});for(const t of o.modules)t.size>r&&e.push({level:"module",name:t.id,sizeKB:Number((t.size/1024).toFixed(1)),thresholdKB:s,message:`\u6A21\u5757 "${t.id}" \u8D85\u8FC7\u9608\u503C: ${(t.size/1024).toFixed(1)}KB > ${s}KB`})}return e}function getTopModules(a,s,e){const r=[];for(const o of a)for(const t of o.modules)e&&t.isNodeModule||r.push(t);return r.sort((o,t)=>t.size-o.size).slice(0,s)}async function buildChunkStats(a,s,e={}){const{gzipSize:r=!0,excludeNodeModules:o=!1}=e,t=[];for(const d of s){const l=i__default.relative(a,d.filePath),c=l.replace(/\\/g,"/"),n=d.extension;let u="chunk";n===".html"?u="entry":[".js",".mjs",".cjs",".css",".html"].includes(n)||(u="asset");let f=0;if(r)try{const z=await p__default.promises.readFile(d.filePath);f=await M(z)}catch{f=0}const h=p(l),m={id:c,size:d.size,gzipSize:f,chunks:[c],imports:[],isEntry:u==="entry",isNodeModule:h};o&&h||t.push({name:c,size:d.size,gzipSize:f,modules:[m],type:u,fileCount:1})}return t.sort((d,l)=>l.size-d.size)}async function analyzeBundle(a,s){const e=Date.now(),r=await scanOutputDirectory(a,{includeExtensions:s.includeExtensions,excludePatterns:s.excludePatterns}),o=await buildChunkStats(a,r,{gzipSize:s.gzipSize,excludeNodeModules:s.excludeNodeModules}),t=s.excludeNodeModules?r.filter(h=>!p(i__default.relative(a,h.filePath))):r,d=analyzeFileTypeDistribution(t),l=getTopModules(o,s.topModules,s.excludeNodeModules),c=checkSizeThresholds(o,s.sizeThreshold),n=o.reduce((h,m)=>h+m.size,0),u=o.reduce((h,m)=>h+m.gzipSize,0),f=Date.now()-e;return{timestamp:new Date().toISOString(),totalSize:n,totalGzipSize:u,chunks:o,topModules:l,fileTypeDistribution:d,warnings:c,comparisonDiffs:[],analysisTime:f}}async function loadPreviousReport(a){try{const s=i__default.isAbsolute(a)?a:i__default.resolve(process.cwd(),a);if(!await p__default.promises.access(s,p__default.constants.F_OK).then(()=>!0).catch(()=>!1))return null;const e=await p__default.promises.readFile(s,"utf-8");return JSON.parse(e)}catch{return null}}function compareWithPrevious(a,s){const e=[],r=new Map;for(const t of s.chunks)r.set(t.name,t.size);const o=new Map;for(const t of a.chunks)o.set(t.name,t.size);for(const[t,d]of o){const l=r.get(t);if(l===void 0)e.push({name:t,previousSize:-1,currentSize:d,diff:d,diffPercentage:100,trend:"added"});else{const c=d-l,n=l>0?Number((c/l*100).toFixed(1)):0;e.push({name:t,previousSize:l,currentSize:d,diff:c,diffPercentage:n,trend:c>0?"increased":c<0?"decreased":"unchanged"})}}for(const[t,d]of r)o.has(t)||e.push({name:t,previousSize:d,currentSize:-1,diff:-d,diffPercentage:-100,trend:"removed"});return e.sort((t,d)=>Math.abs(d.diff)-Math.abs(t.diff))}async function generateJsonReport(a,s,e){const r=i__default.join(a,`${s}.json`),o={timestamp:e.timestamp,summary:{totalSize:e.totalSize,totalGzipSize:e.totalGzipSize,totalSizeFormatted:common_format_index.formatFileSize(e.totalSize),totalGzipSizeFormatted:common_format_index.formatFileSize(e.totalGzipSize),chunkCount:e.chunks.length,warningCount:e.warnings.length,analysisTime:e.analysisTime},chunks:e.chunks.map(t=>({name:t.name,size:t.size,sizeFormatted:common_format_index.formatFileSize(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(t.gzipSize),type:t.type,fileCount:t.fileCount,modules:t.modules.map(d=>({id:d.id,size:d.size,sizeFormatted:common_format_index.formatFileSize(d.size),gzipSize:d.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(d.gzipSize),isEntry:d.isEntry,isNodeModule:d.isNodeModule,imports:d.imports}))})),topModules:e.topModules.map(t=>({id:t.id,size:t.size,sizeFormatted:common_format_index.formatFileSize(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(t.gzipSize),isNodeModule:t.isNodeModule})),fileTypeDistribution:e.fileTypeDistribution,warnings:e.warnings,comparisonDiffs:e.comparisonDiffs};return await common_fs_index.writeJsonReport(r,o),r}async function generateHtmlReport(a,s,e,r={}){const o=i__default.join(a,`${s}.html`),t=r.defaultChartType||"treemap",d=e.chunks.map(h=>({name:h.name,size:h.size,gzipSize:h.gzipSize,type:h.type})),l=e.fileTypeDistribution,c=e.warnings,n=e.comparisonDiffs,u=e.topModules.slice(0,10),f=x(e,d,l,c,n,u,t);return await common_fs_index.writeFileContent(o,f),o}function x(a,s,e,r,o,t,d){const l=common_format_index.formatFileSize(a.totalSize),c=common_format_index.formatFileSize(a.totalGzipSize);return`<!DOCTYPE html>
|
|
2
2
|
<html lang="zh-CN">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
@@ -53,7 +53,7 @@ tr:hover { background: #f8f9ff; }
|
|
|
53
53
|
<div class="container">
|
|
54
54
|
<div class="header">
|
|
55
55
|
<h1>Bundle Analysis Report</h1>
|
|
56
|
-
<div class="meta">Generated: ${
|
|
56
|
+
<div class="meta">Generated: ${a.timestamp} | Analysis time: ${a.analysisTime}ms</div>
|
|
57
57
|
</div>
|
|
58
58
|
|
|
59
59
|
<div class="summary-cards">
|
|
@@ -64,8 +64,8 @@ tr:hover { background: #f8f9ff; }
|
|
|
64
64
|
</div>
|
|
65
65
|
<div class="card">
|
|
66
66
|
<div class="label">Chunks</div>
|
|
67
|
-
<div class="value">${
|
|
68
|
-
<div class="sub">entry: ${
|
|
67
|
+
<div class="value">${a.chunks.length}</div>
|
|
68
|
+
<div class="sub">entry: ${a.chunks.filter(n=>n.type==="entry").length} | chunk: ${a.chunks.filter(n=>n.type==="chunk").length} | asset: ${a.chunks.filter(n=>n.type==="asset").length}</div>
|
|
69
69
|
</div>
|
|
70
70
|
<div class="card">
|
|
71
71
|
<div class="label">Warnings</div>
|
|
@@ -82,7 +82,7 @@ tr:hover { background: #f8f9ff; }
|
|
|
82
82
|
${r.length>0?`
|
|
83
83
|
<div class="section">
|
|
84
84
|
<h2>Warnings</h2>
|
|
85
|
-
${r.map(
|
|
85
|
+
${r.map(n=>`<div class="warning ${n.sizeKB>n.thresholdKB*2?"critical":""}"><strong>${n.level.toUpperCase()}</strong>: ${n.message}</div>`).join("")}
|
|
86
86
|
</div>
|
|
87
87
|
`:""}
|
|
88
88
|
|
|
@@ -109,18 +109,18 @@ ${r.map(i=>`<div class="warning ${i.sizeKB>i.thresholdKB*2?"critical":""}"><stro
|
|
|
109
109
|
<table>
|
|
110
110
|
<thead><tr><th>#</th><th>Module</th><th>Size</th><th>gzip</th><th>Type</th></tr></thead>
|
|
111
111
|
<tbody>
|
|
112
|
-
${t.map((
|
|
112
|
+
${t.map((n,u)=>`<tr><td>${u+1}</td><td title="${n.id}">${n.id.length>60?n.id.slice(0,57)+"...":n.id}</td><td>${common_format_index.formatFileSize(n.size)}</td><td>${common_format_index.formatFileSize(n.gzipSize)}</td><td>${n.isNodeModule?"node_modules":"source"}</td></tr>`).join("")}
|
|
113
113
|
</tbody>
|
|
114
114
|
</table>
|
|
115
115
|
</div>
|
|
116
116
|
|
|
117
|
-
${
|
|
117
|
+
${o.length>0?`
|
|
118
118
|
<div class="section">
|
|
119
119
|
<h2>Comparison with Previous Build</h2>
|
|
120
120
|
<table>
|
|
121
121
|
<thead><tr><th>Name</th><th>Previous</th><th>Current</th><th>Diff</th><th>Trend</th></tr></thead>
|
|
122
122
|
<tbody>
|
|
123
|
-
${
|
|
123
|
+
${o.slice(0,20).map(n=>{const u=n.trend==="increased"?"diff-positive":n.trend==="decreased"?"diff-negative":n.trend==="added"?"diff-added":n.trend==="removed"?"diff-removed":"diff-unchanged",f=n.trend==="increased"?"▲":n.trend==="decreased"?"▼":n.trend==="added"?"✚":n.trend==="removed"?"✖":"▬";return`<tr><td>${n.name}</td><td>${n.previousSize>=0?common_format_index.formatFileSize(n.previousSize):"-"}</td><td>${n.currentSize>=0?common_format_index.formatFileSize(n.currentSize):"-"}</td><td class="${u}">${n.diff>=0?"+":""}${common_format_index.formatFileSize(Math.abs(n.diff))} (${n.diffPercentage}%)</td><td class="${u}">${f} ${n.trend}</td></tr>`}).join("")}
|
|
124
124
|
</tbody>
|
|
125
125
|
</table>
|
|
126
126
|
</div>
|
|
@@ -131,7 +131,7 @@ ${n.slice(0,20).map(i=>{const u=i.trend==="increased"?"diff-positive":i.trend===
|
|
|
131
131
|
<table>
|
|
132
132
|
<thead><tr><th>Name</th><th>Size</th><th>gzip</th><th>Type</th><th>Proportion</th></tr></thead>
|
|
133
133
|
<tbody>
|
|
134
|
-
${
|
|
134
|
+
${a.chunks.map(n=>{const u=a.totalSize>0?n.size/a.totalSize*100:0;return`<tr><td title="${n.name}">${n.name.length>50?n.name.slice(0,47)+"...":n.name}</td><td>${common_format_index.formatFileSize(n.size)}</td><td>${common_format_index.formatFileSize(n.gzipSize)}</td><td>${n.type}</td><td><div class="bar-bg"><div class="bar" style="width:${u}%"></div></div><span style="font-size:11px;color:#888;">${u.toFixed(1)}%</span></td></tr>`}).join("")}
|
|
135
135
|
</tbody>
|
|
136
136
|
</table>
|
|
137
137
|
</div>
|
|
@@ -139,7 +139,7 @@ ${o.chunks.map(i=>{const u=o.totalSize>0?i.size/o.totalSize*100:0;return`<tr><td
|
|
|
139
139
|
|
|
140
140
|
<script>
|
|
141
141
|
const chartData = ${JSON.stringify(s)};
|
|
142
|
-
const totalSize = ${
|
|
142
|
+
const totalSize = ${a.totalSize};
|
|
143
143
|
const distributionData = ${JSON.stringify(e)};
|
|
144
144
|
const COLORS = ['#667eea','#764ba2','#f093fb','#f5576c','#4facfe','#00f2fe','#43e97b','#fa709a','#fee140','#a18cd1','#fbc2eb','#a6c1ee','#ffecd2','#fcb69f','#ff9a9e','#fad0c4'];
|
|
145
145
|
|
|
@@ -232,4 +232,4 @@ renderChart('${d}');
|
|
|
232
232
|
renderPieChart();
|
|
233
233
|
<\/script>
|
|
234
234
|
</body>
|
|
235
|
-
</html>`}class $ extends factory_index.BasePlugin{analysisResult=null;getDefaultOptions(){return{outputFormat:"json",outputFile:"bundle-analysis",openAnalyzer:!1,sizeThreshold:100,topModules:20,compareWith:null,gzipSize:!0,excludeNodeModules:!1,excludePatterns:[],includeExtensions:[],defaultChartType:"treemap"}}validateOptions(){this.validator.field("outputFormat").enum(["json","html","both"]).field("openAnalyzer").boolean().field("sizeThreshold").number().minValue(0).field("topModules").number().minValue(1).field("gzipSize").boolean().field("excludeNodeModules").boolean().field("defaultChartType").enum(["treemap","sunburst","list"]).validate()}getPluginName(){return"bundle-analyzer"}getEnforce(){return"post"}addPluginHooks(s){s.writeBundle={order:"post",handler:async()=>{await this.safeExecute(()=>this.runAnalysis(),"\u5206\u6790\u6784\u5EFA\u4EA7\u7269")}}}async runAnalysis(){if(!this.viteConfig)return;const s=this.viteConfig.build.outDir;this.analysisResult=await analyzeBundle(s,this.options),this.options.compareWith&&await this.performComparison(),this.logSummary(),this.logWarnings(),await this.generateReports(s),this.options.openAnalyzer&&(this.options.outputFormat==="html"||this.options.outputFormat==="both")&&await this.openHtmlReport(s)}async performComparison(){if(!this.analysisResult||!this.options.compareWith)return;const s=await loadPreviousReport(this.options.compareWith);if(!s){this.logger.info(`\u672A\u627E\u5230\u5BF9\u6BD4\u62A5\u544A: ${this.options.compareWith}\uFF0C\u8DF3\u8FC7\u5BF9\u6BD4\u5206\u6790`);return}const e=compareWithPrevious(this.analysisResult,s);if(this.analysisResult.comparisonDiffs=e,e.length>0){const r=e.filter(l=>l.trend==="increased").length,
|
|
235
|
+
</html>`}class $ extends factory_index.BasePlugin{analysisResult=null;getDefaultOptions(){return{outputFormat:"json",outputFile:"bundle-analysis",openAnalyzer:!1,sizeThreshold:100,topModules:20,compareWith:null,gzipSize:!0,excludeNodeModules:!1,excludePatterns:[],includeExtensions:[],defaultChartType:"treemap"}}validateOptions(){this.validator.field("outputFormat").enum(["json","html","both"]).field("openAnalyzer").boolean().field("sizeThreshold").number().minValue(0).field("topModules").number().minValue(1).field("gzipSize").boolean().field("excludeNodeModules").boolean().field("defaultChartType").enum(["treemap","sunburst","list"]).validate()}getPluginName(){return"bundle-analyzer"}getEnforce(){return"post"}addPluginHooks(s){s.writeBundle={order:"post",handler:async()=>{await this.safeExecute(()=>this.runAnalysis(),"\u5206\u6790\u6784\u5EFA\u4EA7\u7269")}}}async runAnalysis(){if(!this.viteConfig)return;const s=this.viteConfig.build.outDir;this.analysisResult=await analyzeBundle(s,this.options),this.options.compareWith&&await this.performComparison(),this.logSummary(),this.logWarnings(),await this.generateReports(s),this.options.openAnalyzer&&(this.options.outputFormat==="html"||this.options.outputFormat==="both")&&await this.openHtmlReport(s)}async performComparison(){if(!this.analysisResult||!this.options.compareWith)return;const s=await loadPreviousReport(this.options.compareWith);if(!s){this.logger.info(`\u672A\u627E\u5230\u5BF9\u6BD4\u62A5\u544A: ${this.options.compareWith}\uFF0C\u8DF3\u8FC7\u5BF9\u6BD4\u5206\u6790`);return}const e=compareWithPrevious(this.analysisResult,s);if(this.analysisResult.comparisonDiffs=e,e.length>0){const r=e.filter(l=>l.trend==="increased").length,o=e.filter(l=>l.trend==="decreased").length,t=e.filter(l=>l.trend==="added").length,d=e.filter(l=>l.trend==="removed").length;this.logger.info(`\u6784\u5EFA\u5BF9\u6BD4: ${r} \u4E2A\u589E\u5927, ${o} \u4E2A\u51CF\u5C0F, ${t} \u4E2A\u65B0\u589E, ${d} \u4E2A\u79FB\u9664`)}}async generateReports(s){if(!this.analysisResult)return;const{outputFormat:e,outputFile:r}=this.options;if(e==="json"||e==="both"){const o=await generateJsonReport(s,r,this.analysisResult);this.logger.info(`JSON \u62A5\u544A\u5DF2\u751F\u6210: ${o}`)}if(e==="html"||e==="both"){const o=await generateHtmlReport(s,r,this.analysisResult,{defaultChartType:this.options.defaultChartType});this.logger.info(`HTML \u62A5\u544A\u5DF2\u751F\u6210: ${o}`)}}async openHtmlReport(s){const e=`${s}/${this.options.outputFile}.html`;try{const{exec:r}=await import("node:child_process"),o=process.platform;r(o==="win32"?`start "" "${e}"`:o==="darwin"?`open "${e}"`:`xdg-open "${e}"`),this.logger.info(`\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u62A5\u544A: ${e}`)}catch{this.logger.warn(`\u65E0\u6CD5\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668\uFF0C\u8BF7\u624B\u52A8\u6253\u5F00: ${e}`)}}logSummary(){if(!this.analysisResult)return;const{chunks:s,totalSize:e,totalGzipSize:r,analysisTime:o}=this.analysisResult;this.logger.success(`\u4EA7\u7269\u5206\u6790\u5B8C\u6210: ${s.length} \u4E2A chunk, \u603B\u4F53\u79EF: ${common_format_index.formatFileSize(e)} (gzip: ${common_format_index.formatFileSize(r)}), \u5206\u6790\u8017\u65F6: ${o}ms`);const t=s.filter(c=>c.type==="entry").length,d=s.filter(c=>c.type==="chunk").length,l=s.filter(c=>c.type==="asset").length;if((t>0||d>0||l>0)&&this.logger.info(` \u5165\u53E3: ${t} | \u4EE3\u7801\u5757: ${d} | \u8D44\u6E90: ${l}`),this.analysisResult.topModules.length>0){this.logger.info("\u4F53\u79EF Top 5 \u6A21\u5757:");const c=this.analysisResult.topModules.slice(0,5);for(let n=0;n<c.length;n++){const u=c[n],f=u.isNodeModule?"node_modules":"source";this.logger.info(` ${n+1}. ${common_format_index.formatFileSize(u.size)} (${f}) ${u.id}`)}}}logWarnings(){if(!(!this.analysisResult||this.analysisResult.warnings.length===0)){this.logger.warn(`\u53D1\u73B0 ${this.analysisResult.warnings.length} \u4E2A\u4F53\u79EF\u544A\u8B66:`);for(const s of this.analysisResult.warnings){const e=s.sizeKB>s.thresholdKB*2?"\u{1F534}":"\u{1F7E1}";this.logger.warn(` ${e} ${s.message}`)}}}getResult(){return this.analysisResult}}const bundleAnalyzer=factory_index.createPluginFactory($);exports.bundleAnalyzer=bundleAnalyzer;
|