@meng-xi/vite-plugin 0.1.4 → 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 +8 -8
- package/README.md +7 -7
- 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 +4 -315
- package/dist/common/html/index.d.mts +4 -315
- package/dist/common/html/index.d.ts +4 -315
- package/dist/common/html/index.mjs +2 -2
- package/dist/common/index.cjs +1 -1
- package/dist/common/index.d.cts +7 -11
- package/dist/common/index.d.mts +7 -11
- package/dist/common/index.d.ts +7 -11
- 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 -1
- package/dist/common/ui/index.d.cts +1 -111
- package/dist/common/ui/index.d.mts +1 -111
- package/dist/common/ui/index.d.ts +1 -111
- package/dist/common/ui/index.mjs +1 -1
- package/dist/common/validation/index.cjs +1 -1
- package/dist/common/validation/index.d.cts +2 -80
- package/dist/common/validation/index.d.mts +2 -80
- package/dist/common/validation/index.d.ts +2 -80
- 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 +10 -12
- package/dist/index.d.mts +10 -12
- package/dist/index.d.ts +10 -12
- 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 +1 -1
- package/dist/plugins/copyFile/index.d.mts +1 -1
- package/dist/plugins/copyFile/index.d.ts +1 -1
- package/dist/plugins/copyFile/index.mjs +1 -1
- package/dist/plugins/envGuard/index.cjs +11 -11
- package/dist/plugins/envGuard/index.d.cts +101 -2
- package/dist/plugins/envGuard/index.d.mts +101 -2
- package/dist/plugins/envGuard/index.d.ts +101 -2
- package/dist/plugins/envGuard/index.mjs +8 -8
- package/dist/plugins/faviconManager/index.cjs +1 -1
- package/dist/plugins/faviconManager/index.d.cts +1 -1
- package/dist/plugins/faviconManager/index.d.mts +1 -1
- package/dist/plugins/faviconManager/index.d.ts +1 -1
- package/dist/plugins/faviconManager/index.mjs +1 -1
- package/dist/plugins/generateRouter/index.cjs +4 -4
- package/dist/plugins/generateRouter/index.d.cts +1 -1
- package/dist/plugins/generateRouter/index.d.mts +1 -1
- package/dist/plugins/generateRouter/index.d.ts +1 -1
- package/dist/plugins/generateRouter/index.mjs +4 -4
- package/dist/plugins/generateVersion/index.cjs +1 -1
- package/dist/plugins/generateVersion/index.d.cts +1 -1
- package/dist/plugins/generateVersion/index.d.mts +1 -1
- package/dist/plugins/generateVersion/index.d.ts +1 -1
- package/dist/plugins/generateVersion/index.mjs +1 -1
- package/dist/plugins/htmlInject/index.cjs +7 -1
- package/dist/plugins/htmlInject/index.d.cts +2 -2
- package/dist/plugins/htmlInject/index.d.mts +2 -2
- package/dist/plugins/htmlInject/index.d.ts +2 -2
- package/dist/plugins/htmlInject/index.mjs +7 -1
- package/dist/plugins/index.cjs +1 -1
- package/dist/plugins/index.d.cts +3 -3
- package/dist/plugins/index.d.mts +3 -3
- package/dist/plugins/index.d.ts +3 -3
- 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 +2 -2
- 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 +3 -3
- 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.FfJ-Wwfu.d.cts → vite-plugin.BI9taN75.d.cts} +1 -22
- package/dist/shared/{vite-plugin.FfJ-Wwfu.d.mts → vite-plugin.BI9taN75.d.mts} +1 -22
- package/dist/shared/{vite-plugin.FfJ-Wwfu.d.ts → vite-plugin.BI9taN75.d.ts} +1 -22
- package/dist/shared/vite-plugin.BPFqtmWa.mjs +1 -0
- package/dist/shared/vite-plugin.CnOy46d3.cjs +1 -0
- package/package.json +6 -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.BCuhU1au.mjs +0 -7
- package/dist/shared/vite-plugin.BrI73DHA.cjs +0 -7
- 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
- package/dist/shared/vite-plugin.CmtcnItg.d.cts +0 -261
- package/dist/shared/vite-plugin.CmtcnItg.d.mts +0 -261
- package/dist/shared/vite-plugin.CmtcnItg.d.ts +0 -261
- package/dist/shared/vite-plugin.DnFDPjNf.mjs +0 -1
- package/dist/shared/vite-plugin.Dumot0up.mjs +0 -1
- package/dist/shared/vite-plugin.soT9a-KD.cjs +0 -1
- package/dist/shared/vite-plugin.vwox4bU0.cjs +0 -1
|
@@ -45,75 +45,12 @@ interface CopyResult {
|
|
|
45
45
|
executionTime: number;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
/**
|
|
49
|
-
* 文件/目录条目信息
|
|
50
|
-
*/
|
|
51
|
-
interface FileEntry {
|
|
52
|
-
/** 完整路径 */
|
|
53
|
-
path: string;
|
|
54
|
-
/** 是否为文件 */
|
|
55
|
-
isFile: boolean;
|
|
56
|
-
/** 是否为目录 */
|
|
57
|
-
isDirectory: boolean;
|
|
58
|
-
}
|
|
59
48
|
/**
|
|
60
49
|
* 检查源文件是否存在
|
|
61
50
|
* @param sourcePath 源文件路径
|
|
62
51
|
* @throws 当源文件不存在或无法访问时抛出异常
|
|
63
52
|
*/
|
|
64
53
|
declare function checkSourceExists(sourcePath: string): Promise<void>;
|
|
65
|
-
/**
|
|
66
|
-
* 创建目标目录
|
|
67
|
-
* @param targetPath 目标目录路径
|
|
68
|
-
* @throws 当无法创建目标目录时抛出异常
|
|
69
|
-
*/
|
|
70
|
-
declare function ensureTargetDir(targetPath: string): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
* 读取目录内容(优化版:一次性获取文件类型信息)
|
|
73
|
-
* @param dirPath 目录路径
|
|
74
|
-
* @param recursive 是否递归读取
|
|
75
|
-
* @returns 文件和目录条目列表
|
|
76
|
-
*/
|
|
77
|
-
declare function readDirRecursive(dirPath: string, recursive: boolean): Promise<FileEntry[]>;
|
|
78
|
-
/**
|
|
79
|
-
* 检查文件是否需要更新
|
|
80
|
-
* @param sourceFile 源文件路径
|
|
81
|
-
* @param targetFile 目标文件路径
|
|
82
|
-
* @returns 是否需要更新
|
|
83
|
-
*/
|
|
84
|
-
declare function shouldUpdateFile(sourceFile: string, targetFile: string): Promise<boolean>;
|
|
85
|
-
/**
|
|
86
|
-
* 检查文件是否存在
|
|
87
|
-
* @param filePath 文件路径
|
|
88
|
-
* @returns 是否存在
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* ```typescript
|
|
92
|
-
* if (await fileExists('/path/to/file')) {
|
|
93
|
-
* console.log('文件存在')
|
|
94
|
-
* }
|
|
95
|
-
* ```
|
|
96
|
-
*/
|
|
97
|
-
declare function fileExists(filePath: string): Promise<boolean>;
|
|
98
|
-
/**
|
|
99
|
-
* 带并发限制的批量执行
|
|
100
|
-
*
|
|
101
|
-
* @param items 待处理项
|
|
102
|
-
* @param handler 处理函数
|
|
103
|
-
* @param concurrency 并发数
|
|
104
|
-
* @returns 处理结果数组,顺序与输入项对应
|
|
105
|
-
*
|
|
106
|
-
* @example
|
|
107
|
-
* ```typescript
|
|
108
|
-
* const urls = ['url1', 'url2', 'url3', 'url4', 'url5']
|
|
109
|
-
* const results = await runWithConcurrency(
|
|
110
|
-
* urls,
|
|
111
|
-
* async (url) => fetch(url),
|
|
112
|
-
* 3 // 最多同时处理3个请求
|
|
113
|
-
* )
|
|
114
|
-
* ```
|
|
115
|
-
*/
|
|
116
|
-
declare function runWithConcurrency<T, R>(items: T[], handler: (item: T) => Promise<R>, concurrency: number): Promise<R[]>;
|
|
117
54
|
/**
|
|
118
55
|
* 执行文件复制操作(优化版:并行IO)
|
|
119
56
|
* @param sourcePath 源文件或目录路径
|
|
@@ -130,21 +67,6 @@ declare function copySourceToTarget(sourcePath: string, targetPath: string, opti
|
|
|
130
67
|
* @throws 当写入过程中出现错误时抛出异常
|
|
131
68
|
*/
|
|
132
69
|
declare function writeFileContent(filePath: string, content: string): Promise<void>;
|
|
133
|
-
/**
|
|
134
|
-
* 读取文件内容
|
|
135
|
-
* @param filePath 文件路径
|
|
136
|
-
* @returns 文件内容字符串
|
|
137
|
-
* @throws 当读取过程中出现错误时抛出异常
|
|
138
|
-
*/
|
|
139
|
-
declare function readFileContent(filePath: string): Promise<string>;
|
|
140
|
-
/**
|
|
141
|
-
* 同步读取文件内容
|
|
142
|
-
* @param filePath 文件路径
|
|
143
|
-
* @returns 文件内容字符串
|
|
144
|
-
* @throws 当读取过程中出现错误时抛出异常
|
|
145
|
-
* @deprecated 请使用异步版本 readFileContent
|
|
146
|
-
*/
|
|
147
|
-
declare function readFileSync(filePath: string): string;
|
|
148
70
|
/**
|
|
149
71
|
* 扫描目录中的文件信息
|
|
150
72
|
*/
|
|
@@ -177,20 +99,11 @@ interface ScanDirectoryOptions {
|
|
|
177
99
|
*
|
|
178
100
|
* @description 递归遍历指定目录下的所有文件,收集每个文件的大小和扩展名信息,
|
|
179
101
|
* 支持按扩展名、路径模式和自定义过滤函数进行过滤。
|
|
180
|
-
* 这是通用的目录扫描函数,可被不同插件复用。
|
|
181
102
|
*
|
|
182
103
|
* @example
|
|
183
104
|
* ```typescript
|
|
184
|
-
* // 扫描所有 .js 文件
|
|
185
105
|
* const jsFiles = await scanDirectory('dist', { includeExtensions: ['.js'] })
|
|
186
|
-
*
|
|
187
|
-
* // 排除 node_modules
|
|
188
106
|
* const files = await scanDirectory('dist', { excludePatterns: ['node_modules'] })
|
|
189
|
-
*
|
|
190
|
-
* // 使用自定义过滤
|
|
191
|
-
* const largeFiles = await scanDirectory('dist', {
|
|
192
|
-
* filter: (filePath, ext, size) => size > 1024
|
|
193
|
-
* })
|
|
194
107
|
* ```
|
|
195
108
|
*/
|
|
196
109
|
declare function scanDirectory(dirPath: string, options?: ScanDirectoryOptions): Promise<ScannedFile[]>;
|
|
@@ -209,10 +122,9 @@ declare function scanDirectory(dirPath: string, options?: ScanDirectoryOptions):
|
|
|
209
122
|
* @example
|
|
210
123
|
* ```typescript
|
|
211
124
|
* await writeJsonReport('dist/report.json', { timestamp: Date.now(), stats: [] })
|
|
212
|
-
* await writeJsonReport('dist/report.json', data, 4)
|
|
213
125
|
* ```
|
|
214
126
|
*/
|
|
215
127
|
declare function writeJsonReport(filePath: string, data: object, indent?: number): Promise<void>;
|
|
216
128
|
|
|
217
|
-
export { checkSourceExists, copySourceToTarget,
|
|
129
|
+
export { checkSourceExists, copySourceToTarget, scanDirectory, writeFileContent, writeJsonReport };
|
|
218
130
|
export type { CopyOptions, CopyResult, ScanDirectoryOptions, ScannedFile };
|
|
@@ -45,75 +45,12 @@ interface CopyResult {
|
|
|
45
45
|
executionTime: number;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
/**
|
|
49
|
-
* 文件/目录条目信息
|
|
50
|
-
*/
|
|
51
|
-
interface FileEntry {
|
|
52
|
-
/** 完整路径 */
|
|
53
|
-
path: string;
|
|
54
|
-
/** 是否为文件 */
|
|
55
|
-
isFile: boolean;
|
|
56
|
-
/** 是否为目录 */
|
|
57
|
-
isDirectory: boolean;
|
|
58
|
-
}
|
|
59
48
|
/**
|
|
60
49
|
* 检查源文件是否存在
|
|
61
50
|
* @param sourcePath 源文件路径
|
|
62
51
|
* @throws 当源文件不存在或无法访问时抛出异常
|
|
63
52
|
*/
|
|
64
53
|
declare function checkSourceExists(sourcePath: string): Promise<void>;
|
|
65
|
-
/**
|
|
66
|
-
* 创建目标目录
|
|
67
|
-
* @param targetPath 目标目录路径
|
|
68
|
-
* @throws 当无法创建目标目录时抛出异常
|
|
69
|
-
*/
|
|
70
|
-
declare function ensureTargetDir(targetPath: string): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
* 读取目录内容(优化版:一次性获取文件类型信息)
|
|
73
|
-
* @param dirPath 目录路径
|
|
74
|
-
* @param recursive 是否递归读取
|
|
75
|
-
* @returns 文件和目录条目列表
|
|
76
|
-
*/
|
|
77
|
-
declare function readDirRecursive(dirPath: string, recursive: boolean): Promise<FileEntry[]>;
|
|
78
|
-
/**
|
|
79
|
-
* 检查文件是否需要更新
|
|
80
|
-
* @param sourceFile 源文件路径
|
|
81
|
-
* @param targetFile 目标文件路径
|
|
82
|
-
* @returns 是否需要更新
|
|
83
|
-
*/
|
|
84
|
-
declare function shouldUpdateFile(sourceFile: string, targetFile: string): Promise<boolean>;
|
|
85
|
-
/**
|
|
86
|
-
* 检查文件是否存在
|
|
87
|
-
* @param filePath 文件路径
|
|
88
|
-
* @returns 是否存在
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* ```typescript
|
|
92
|
-
* if (await fileExists('/path/to/file')) {
|
|
93
|
-
* console.log('文件存在')
|
|
94
|
-
* }
|
|
95
|
-
* ```
|
|
96
|
-
*/
|
|
97
|
-
declare function fileExists(filePath: string): Promise<boolean>;
|
|
98
|
-
/**
|
|
99
|
-
* 带并发限制的批量执行
|
|
100
|
-
*
|
|
101
|
-
* @param items 待处理项
|
|
102
|
-
* @param handler 处理函数
|
|
103
|
-
* @param concurrency 并发数
|
|
104
|
-
* @returns 处理结果数组,顺序与输入项对应
|
|
105
|
-
*
|
|
106
|
-
* @example
|
|
107
|
-
* ```typescript
|
|
108
|
-
* const urls = ['url1', 'url2', 'url3', 'url4', 'url5']
|
|
109
|
-
* const results = await runWithConcurrency(
|
|
110
|
-
* urls,
|
|
111
|
-
* async (url) => fetch(url),
|
|
112
|
-
* 3 // 最多同时处理3个请求
|
|
113
|
-
* )
|
|
114
|
-
* ```
|
|
115
|
-
*/
|
|
116
|
-
declare function runWithConcurrency<T, R>(items: T[], handler: (item: T) => Promise<R>, concurrency: number): Promise<R[]>;
|
|
117
54
|
/**
|
|
118
55
|
* 执行文件复制操作(优化版:并行IO)
|
|
119
56
|
* @param sourcePath 源文件或目录路径
|
|
@@ -130,21 +67,6 @@ declare function copySourceToTarget(sourcePath: string, targetPath: string, opti
|
|
|
130
67
|
* @throws 当写入过程中出现错误时抛出异常
|
|
131
68
|
*/
|
|
132
69
|
declare function writeFileContent(filePath: string, content: string): Promise<void>;
|
|
133
|
-
/**
|
|
134
|
-
* 读取文件内容
|
|
135
|
-
* @param filePath 文件路径
|
|
136
|
-
* @returns 文件内容字符串
|
|
137
|
-
* @throws 当读取过程中出现错误时抛出异常
|
|
138
|
-
*/
|
|
139
|
-
declare function readFileContent(filePath: string): Promise<string>;
|
|
140
|
-
/**
|
|
141
|
-
* 同步读取文件内容
|
|
142
|
-
* @param filePath 文件路径
|
|
143
|
-
* @returns 文件内容字符串
|
|
144
|
-
* @throws 当读取过程中出现错误时抛出异常
|
|
145
|
-
* @deprecated 请使用异步版本 readFileContent
|
|
146
|
-
*/
|
|
147
|
-
declare function readFileSync(filePath: string): string;
|
|
148
70
|
/**
|
|
149
71
|
* 扫描目录中的文件信息
|
|
150
72
|
*/
|
|
@@ -177,20 +99,11 @@ interface ScanDirectoryOptions {
|
|
|
177
99
|
*
|
|
178
100
|
* @description 递归遍历指定目录下的所有文件,收集每个文件的大小和扩展名信息,
|
|
179
101
|
* 支持按扩展名、路径模式和自定义过滤函数进行过滤。
|
|
180
|
-
* 这是通用的目录扫描函数,可被不同插件复用。
|
|
181
102
|
*
|
|
182
103
|
* @example
|
|
183
104
|
* ```typescript
|
|
184
|
-
* // 扫描所有 .js 文件
|
|
185
105
|
* const jsFiles = await scanDirectory('dist', { includeExtensions: ['.js'] })
|
|
186
|
-
*
|
|
187
|
-
* // 排除 node_modules
|
|
188
106
|
* const files = await scanDirectory('dist', { excludePatterns: ['node_modules'] })
|
|
189
|
-
*
|
|
190
|
-
* // 使用自定义过滤
|
|
191
|
-
* const largeFiles = await scanDirectory('dist', {
|
|
192
|
-
* filter: (filePath, ext, size) => size > 1024
|
|
193
|
-
* })
|
|
194
107
|
* ```
|
|
195
108
|
*/
|
|
196
109
|
declare function scanDirectory(dirPath: string, options?: ScanDirectoryOptions): Promise<ScannedFile[]>;
|
|
@@ -209,10 +122,9 @@ declare function scanDirectory(dirPath: string, options?: ScanDirectoryOptions):
|
|
|
209
122
|
* @example
|
|
210
123
|
* ```typescript
|
|
211
124
|
* await writeJsonReport('dist/report.json', { timestamp: Date.now(), stats: [] })
|
|
212
|
-
* await writeJsonReport('dist/report.json', data, 4)
|
|
213
125
|
* ```
|
|
214
126
|
*/
|
|
215
127
|
declare function writeJsonReport(filePath: string, data: object, indent?: number): Promise<void>;
|
|
216
128
|
|
|
217
|
-
export { checkSourceExists, copySourceToTarget,
|
|
129
|
+
export { checkSourceExists, copySourceToTarget, scanDirectory, writeFileContent, writeJsonReport };
|
|
218
130
|
export type { CopyOptions, CopyResult, ScanDirectoryOptions, ScannedFile };
|
|
@@ -45,75 +45,12 @@ interface CopyResult {
|
|
|
45
45
|
executionTime: number;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
/**
|
|
49
|
-
* 文件/目录条目信息
|
|
50
|
-
*/
|
|
51
|
-
interface FileEntry {
|
|
52
|
-
/** 完整路径 */
|
|
53
|
-
path: string;
|
|
54
|
-
/** 是否为文件 */
|
|
55
|
-
isFile: boolean;
|
|
56
|
-
/** 是否为目录 */
|
|
57
|
-
isDirectory: boolean;
|
|
58
|
-
}
|
|
59
48
|
/**
|
|
60
49
|
* 检查源文件是否存在
|
|
61
50
|
* @param sourcePath 源文件路径
|
|
62
51
|
* @throws 当源文件不存在或无法访问时抛出异常
|
|
63
52
|
*/
|
|
64
53
|
declare function checkSourceExists(sourcePath: string): Promise<void>;
|
|
65
|
-
/**
|
|
66
|
-
* 创建目标目录
|
|
67
|
-
* @param targetPath 目标目录路径
|
|
68
|
-
* @throws 当无法创建目标目录时抛出异常
|
|
69
|
-
*/
|
|
70
|
-
declare function ensureTargetDir(targetPath: string): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
* 读取目录内容(优化版:一次性获取文件类型信息)
|
|
73
|
-
* @param dirPath 目录路径
|
|
74
|
-
* @param recursive 是否递归读取
|
|
75
|
-
* @returns 文件和目录条目列表
|
|
76
|
-
*/
|
|
77
|
-
declare function readDirRecursive(dirPath: string, recursive: boolean): Promise<FileEntry[]>;
|
|
78
|
-
/**
|
|
79
|
-
* 检查文件是否需要更新
|
|
80
|
-
* @param sourceFile 源文件路径
|
|
81
|
-
* @param targetFile 目标文件路径
|
|
82
|
-
* @returns 是否需要更新
|
|
83
|
-
*/
|
|
84
|
-
declare function shouldUpdateFile(sourceFile: string, targetFile: string): Promise<boolean>;
|
|
85
|
-
/**
|
|
86
|
-
* 检查文件是否存在
|
|
87
|
-
* @param filePath 文件路径
|
|
88
|
-
* @returns 是否存在
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* ```typescript
|
|
92
|
-
* if (await fileExists('/path/to/file')) {
|
|
93
|
-
* console.log('文件存在')
|
|
94
|
-
* }
|
|
95
|
-
* ```
|
|
96
|
-
*/
|
|
97
|
-
declare function fileExists(filePath: string): Promise<boolean>;
|
|
98
|
-
/**
|
|
99
|
-
* 带并发限制的批量执行
|
|
100
|
-
*
|
|
101
|
-
* @param items 待处理项
|
|
102
|
-
* @param handler 处理函数
|
|
103
|
-
* @param concurrency 并发数
|
|
104
|
-
* @returns 处理结果数组,顺序与输入项对应
|
|
105
|
-
*
|
|
106
|
-
* @example
|
|
107
|
-
* ```typescript
|
|
108
|
-
* const urls = ['url1', 'url2', 'url3', 'url4', 'url5']
|
|
109
|
-
* const results = await runWithConcurrency(
|
|
110
|
-
* urls,
|
|
111
|
-
* async (url) => fetch(url),
|
|
112
|
-
* 3 // 最多同时处理3个请求
|
|
113
|
-
* )
|
|
114
|
-
* ```
|
|
115
|
-
*/
|
|
116
|
-
declare function runWithConcurrency<T, R>(items: T[], handler: (item: T) => Promise<R>, concurrency: number): Promise<R[]>;
|
|
117
54
|
/**
|
|
118
55
|
* 执行文件复制操作(优化版:并行IO)
|
|
119
56
|
* @param sourcePath 源文件或目录路径
|
|
@@ -130,21 +67,6 @@ declare function copySourceToTarget(sourcePath: string, targetPath: string, opti
|
|
|
130
67
|
* @throws 当写入过程中出现错误时抛出异常
|
|
131
68
|
*/
|
|
132
69
|
declare function writeFileContent(filePath: string, content: string): Promise<void>;
|
|
133
|
-
/**
|
|
134
|
-
* 读取文件内容
|
|
135
|
-
* @param filePath 文件路径
|
|
136
|
-
* @returns 文件内容字符串
|
|
137
|
-
* @throws 当读取过程中出现错误时抛出异常
|
|
138
|
-
*/
|
|
139
|
-
declare function readFileContent(filePath: string): Promise<string>;
|
|
140
|
-
/**
|
|
141
|
-
* 同步读取文件内容
|
|
142
|
-
* @param filePath 文件路径
|
|
143
|
-
* @returns 文件内容字符串
|
|
144
|
-
* @throws 当读取过程中出现错误时抛出异常
|
|
145
|
-
* @deprecated 请使用异步版本 readFileContent
|
|
146
|
-
*/
|
|
147
|
-
declare function readFileSync(filePath: string): string;
|
|
148
70
|
/**
|
|
149
71
|
* 扫描目录中的文件信息
|
|
150
72
|
*/
|
|
@@ -177,20 +99,11 @@ interface ScanDirectoryOptions {
|
|
|
177
99
|
*
|
|
178
100
|
* @description 递归遍历指定目录下的所有文件,收集每个文件的大小和扩展名信息,
|
|
179
101
|
* 支持按扩展名、路径模式和自定义过滤函数进行过滤。
|
|
180
|
-
* 这是通用的目录扫描函数,可被不同插件复用。
|
|
181
102
|
*
|
|
182
103
|
* @example
|
|
183
104
|
* ```typescript
|
|
184
|
-
* // 扫描所有 .js 文件
|
|
185
105
|
* const jsFiles = await scanDirectory('dist', { includeExtensions: ['.js'] })
|
|
186
|
-
*
|
|
187
|
-
* // 排除 node_modules
|
|
188
106
|
* const files = await scanDirectory('dist', { excludePatterns: ['node_modules'] })
|
|
189
|
-
*
|
|
190
|
-
* // 使用自定义过滤
|
|
191
|
-
* const largeFiles = await scanDirectory('dist', {
|
|
192
|
-
* filter: (filePath, ext, size) => size > 1024
|
|
193
|
-
* })
|
|
194
107
|
* ```
|
|
195
108
|
*/
|
|
196
109
|
declare function scanDirectory(dirPath: string, options?: ScanDirectoryOptions): Promise<ScannedFile[]>;
|
|
@@ -209,10 +122,9 @@ declare function scanDirectory(dirPath: string, options?: ScanDirectoryOptions):
|
|
|
209
122
|
* @example
|
|
210
123
|
* ```typescript
|
|
211
124
|
* await writeJsonReport('dist/report.json', { timestamp: Date.now(), stats: [] })
|
|
212
|
-
* await writeJsonReport('dist/report.json', data, 4)
|
|
213
125
|
* ```
|
|
214
126
|
*/
|
|
215
127
|
declare function writeJsonReport(filePath: string, data: object, indent?: number): Promise<void>;
|
|
216
128
|
|
|
217
|
-
export { checkSourceExists, copySourceToTarget,
|
|
129
|
+
export { checkSourceExists, copySourceToTarget, scanDirectory, writeFileContent, writeJsonReport };
|
|
218
130
|
export type { CopyOptions, CopyResult, ScanDirectoryOptions, ScannedFile };
|
package/dist/common/fs/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import n from"fs";import p from"path";const S=10;async function T(t){try{await n.promises.access(t,n.constants.F_OK)}catch(u){const e=u;throw e.code==="ENOENT"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728 - ${t}`):e.code==="EACCES"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6E90\u6587\u4EF6 - ${t}`):new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u68C0\u67E5\u6E90\u6587\u4EF6\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${e.message}`)}}async function D(t){try{await n.promises.mkdir(t,{recursive:!0})}catch(u){const e=u;throw e.code==="EACCES"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u521B\u5EFA\u76EE\u6807\u76EE\u5F55 - ${t}`):new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u521B\u5EFA\u76EE\u6807\u76EE\u5F55\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${e.message}`)}}async function C(t,u){const e=await n.promises.readdir(t,{withFileTypes:!0}),i=[];for(const o of e){const r=p.join(t,o.name),F=o.isFile(),c=o.isDirectory();if(i.push({path:r,isFile:F,isDirectory:c}),c&&u){const l=await C(r,u);i.push(...l)}}return i}async function g(t,u){try{const[e,i]=await Promise.all([n.promises.stat(t),n.promises.stat(u)]);return e.mtimeMs>i.mtimeMs||e.size!==i.size}catch{return!0}}async function $(t){try{return await n.promises.access(t,n.constants.F_OK),!0}catch{return!1}}async function k(t,u,e){const i=[];let o=0;async function r(){for(;o<t.length;){const c=o++,l=await u(t[c]);i[c]=l}}const F=Array(Math.min(e,t.length)).fill(null).map(()=>r());return await Promise.all(F),i}async function v(t,u,e){const i=Date.now(),{recursive:o,overwrite:r,incremental:F=!1,parallelLimit:c=S}=e;let l=0,w=0,E=0;if((await n.promises.stat(t)).isDirectory()){await D(u);const a=await C(t,o),f=a.filter(s=>s.isFile);E=a.filter(s=>s.isDirectory).length;const A=new Set;for(const s of f){const h=p.relative(t,s.path),y=p.dirname(p.join(u,h));A.add(y)}await Promise.all([...A].map(s=>D(s)));const B=await k(f,async s=>{const h=p.relative(t,s.path),y=p.join(u,h);let d=r;return d||(d=!await $(y)),F&&d&&(d=await g(s.path,y)),d?(await n.promises.copyFile(s.path,y),{copied:!0,skipped:!1}):{copied:!1,skipped:!0}},c);for(const s of B)s.copied&&l++,s.skipped&&w++}else{await D(p.dirname(u));let a=r;a||(a=!await $(u)),F&&a&&(a=await g(t,u)),a?(await n.promises.copyFile(t,u),l++):w++}const m=Date.now()-i;return{copiedFiles:l,skippedFiles:w,copiedDirs:E,executionTime:m}}async function x(t,u){try{await n.promises.writeFile(t,u,"utf-8")}catch(e){const i=e;throw i.code==="EACCES"?new Error(`\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u5199\u5165\u6587\u4EF6 - ${t}`):new Error(`\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A\u5199\u5165\u6587\u4EF6\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${i.message}`)}}async function z(t,u={}){const{includeExtensions:e=[],excludePatterns:i=[],filter:o}=u,r=[];async function F(c){const l=await n.promises.readdir(c,{withFileTypes:!0});for(const w of l){const E=p.join(c,w.name);if(w.isDirectory()){await F(E);continue}if(!w.isFile()||i.some(f=>f.startsWith("*")?E.endsWith(f.slice(1)):E.includes(f)))continue;const m=p.extname(w.name).toLowerCase();if(e.length>0&&!e.includes(m))continue;const a=await n.promises.stat(E);o&&!o(E,m,a.size)||r.push({filePath:E,size:a.size,extension:m})}}return await F(t),r}async function P(t,u,e=2){await x(t,JSON.stringify(u,null,e))}export{T as checkSourceExists,v as copySourceToTarget,z as scanDirectory,x as writeFileContent,P as writeJsonReport};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const security=require("../../shared/vite-plugin.
|
|
2
|
-
${t}`),injected:!0}:{html:e,injected:!1}}function
|
|
1
|
+
"use strict";const security=require("../../shared/vite-plugin.CnOy46d3.cjs");function injectBeforeTag(e,t,s){const n=new RegExp(t,"i");return n.test(e)?{html:e.replace(n,`${s}
|
|
2
|
+
${t}`),injected:!0}:{html:e,injected:!1}}function c(e,t,s){const n=injectBeforeTag(e,"</body>",t);if(n.injected)return{...n,usedFallback:!1};const i=injectBeforeTag(e,"</html>",t);return i.injected?{...i,usedFallback:!1}:{html:e+t,injected:!0,usedFallback:!0}}function injectHeadAndBody(e,t,s){let n=e,i=!1;if(t){const d=injectBeforeTag(n,"</head>",t);d.injected&&(n=d.html,i=!0)}const l=c(n,s);return{html:l.html,headInjected:i,bodyInjected:l.injected,usedFallback:l.usedFallback}}exports.sanitizeContent=security.sanitizeContent,exports.injectBeforeTag=injectBeforeTag,exports.injectHeadAndBody=injectHeadAndBody;
|