@meng-xi/vite-plugin 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README-en.md +48 -774
  2. package/README.md +45 -769
  3. package/dist/common/html/index.cjs +2 -2
  4. package/dist/common/html/index.d.cts +268 -19
  5. package/dist/common/html/index.d.mts +268 -19
  6. package/dist/common/html/index.d.ts +268 -19
  7. package/dist/common/html/index.mjs +2 -2
  8. package/dist/common/index.cjs +1 -1
  9. package/dist/common/index.d.cts +4 -1
  10. package/dist/common/index.d.mts +4 -1
  11. package/dist/common/index.d.ts +4 -1
  12. package/dist/common/index.mjs +1 -1
  13. package/dist/common/ui/index.cjs +1 -0
  14. package/dist/common/ui/index.d.cts +132 -0
  15. package/dist/common/ui/index.d.mts +132 -0
  16. package/dist/common/ui/index.d.ts +132 -0
  17. package/dist/common/ui/index.mjs +1 -0
  18. package/dist/common/validation/index.cjs +1 -1
  19. package/dist/common/validation/index.d.cts +1 -0
  20. package/dist/common/validation/index.d.mts +1 -0
  21. package/dist/common/validation/index.d.ts +1 -0
  22. package/dist/common/validation/index.mjs +1 -1
  23. package/dist/index.cjs +1 -1
  24. package/dist/index.d.cts +6 -2
  25. package/dist/index.d.mts +6 -2
  26. package/dist/index.d.ts +6 -2
  27. package/dist/index.mjs +1 -1
  28. package/dist/plugins/buildProgress/index.cjs +2 -2
  29. package/dist/plugins/buildProgress/index.mjs +2 -2
  30. package/dist/plugins/copyFile/index.d.cts +20 -2
  31. package/dist/plugins/copyFile/index.d.mts +20 -2
  32. package/dist/plugins/copyFile/index.d.ts +20 -2
  33. package/dist/plugins/envGuard/index.cjs +67 -0
  34. package/dist/plugins/envGuard/index.d.cts +156 -0
  35. package/dist/plugins/envGuard/index.d.mts +156 -0
  36. package/dist/plugins/envGuard/index.d.ts +156 -0
  37. package/dist/plugins/envGuard/index.mjs +67 -0
  38. package/dist/plugins/faviconManager/index.cjs +1 -1
  39. package/dist/plugins/faviconManager/index.d.cts +43 -5
  40. package/dist/plugins/faviconManager/index.d.mts +43 -5
  41. package/dist/plugins/faviconManager/index.d.ts +43 -5
  42. package/dist/plugins/faviconManager/index.mjs +1 -1
  43. package/dist/plugins/generateRouter/index.d.cts +61 -14
  44. package/dist/plugins/generateRouter/index.d.mts +61 -14
  45. package/dist/plugins/generateRouter/index.d.ts +61 -14
  46. package/dist/plugins/generateVersion/index.d.cts +12 -0
  47. package/dist/plugins/generateVersion/index.d.mts +12 -0
  48. package/dist/plugins/generateVersion/index.d.ts +12 -0
  49. package/dist/plugins/htmlInject/index.cjs +1 -7
  50. package/dist/plugins/htmlInject/index.d.cts +49 -194
  51. package/dist/plugins/htmlInject/index.d.mts +49 -194
  52. package/dist/plugins/htmlInject/index.d.ts +49 -194
  53. package/dist/plugins/htmlInject/index.mjs +1 -7
  54. package/dist/plugins/index.cjs +1 -1
  55. package/dist/plugins/index.d.cts +4 -1
  56. package/dist/plugins/index.d.mts +4 -1
  57. package/dist/plugins/index.d.ts +4 -1
  58. package/dist/plugins/index.mjs +1 -1
  59. package/dist/plugins/loadingManager/index.cjs +2 -2
  60. package/dist/plugins/loadingManager/index.mjs +1 -1
  61. package/dist/plugins/versionUpdateChecker/index.cjs +2 -2
  62. package/dist/plugins/versionUpdateChecker/index.mjs +3 -3
  63. package/dist/shared/vite-plugin.BCuhU1au.mjs +7 -0
  64. package/dist/shared/vite-plugin.BrI73DHA.cjs +7 -0
  65. package/dist/shared/vite-plugin.CmtcnItg.d.cts +261 -0
  66. package/dist/shared/vite-plugin.CmtcnItg.d.mts +261 -0
  67. package/dist/shared/vite-plugin.CmtcnItg.d.ts +261 -0
  68. package/dist/shared/vite-plugin.DnFDPjNf.mjs +1 -0
  69. package/dist/shared/vite-plugin.Dumot0up.mjs +1 -0
  70. package/dist/shared/vite-plugin.FfJ-Wwfu.d.cts +143 -0
  71. package/dist/shared/vite-plugin.FfJ-Wwfu.d.mts +143 -0
  72. package/dist/shared/vite-plugin.FfJ-Wwfu.d.ts +143 -0
  73. package/dist/shared/vite-plugin.soT9a-KD.cjs +1 -0
  74. package/dist/shared/vite-plugin.vwox4bU0.cjs +1 -0
  75. package/package.json +11 -1
@@ -1,239 +1,94 @@
1
1
  import { BasePluginOptions, PluginFactory } from '../../factory/index.js';
2
+ import { a as InjectPosition, b as SelectorMatch, I as InjectCondition, S as SecurityConfig } from '../../shared/vite-plugin.FfJ-Wwfu.js';
2
3
  import 'vite';
3
4
  import '../../shared/vite-plugin.CLr0ttuO.js';
4
5
  import '../../shared/vite-plugin.DRRlWY8P.js';
5
6
 
6
7
  /**
7
- * 选择器匹配模式
8
- *
9
- * @description
10
- * - 'string': 使用字符串精确匹配(默认)
11
- * - 'regex': 使用正则表达式匹配,支持更灵活的模式
12
- */
13
- type SelectorMatch = 'string' | 'regex';
14
- /**
15
- * HTML 内容注入位置
16
- *
17
- * @description
18
- * - 'head-start': 注入到 `<head>` 标签开始之后
19
- * - 'head-end': 注入到 `</head>` 标签之前
20
- * - 'body-start': 注入到 `<body>` 标签开始之后
21
- * - 'body-end': 注入到 `</body>` 标签之前
22
- * - 'before-selector': 注入到指定选择器之前
23
- * - 'after-selector': 注入到指定选择器之后
24
- * - 'replace-selector': 替换指定选择器匹配的内容
25
- */
26
- type InjectPosition = 'head-start' | 'head-end' | 'body-start' | 'body-end' | 'before-selector' | 'after-selector' | 'replace-selector';
27
- /**
28
- * 条件类型
29
- *
30
- * @description
31
- * - 'env': 基于环境变量判断
32
- * - 'file-contains': 基于 HTML 文件内容判断
33
- * - 'custom': 基于自定义函数判断
34
- */
35
- type ConditionType = 'env' | 'file-contains' | 'custom';
36
- /**
37
- * 注入条件接口
38
- *
39
- * @interface InjectCondition
40
- * @description 定义内容注入的触发条件,支持环境变量检测、文件内容检测和自定义函数
41
- */
42
- interface InjectCondition {
43
- /**
44
- * 条件类型
45
- */
46
- type: ConditionType;
47
- /**
48
- * 条件值
49
- *
50
- * @description
51
- * - 当 type 为 'env' 时,为环境变量名(字符串)
52
- * - 当 type 为 'file-contains' 时,为要搜索的字符串(字符串)
53
- * - 当 type 为 'custom' 时,为返回布尔值的判断函数
54
- */
55
- value: string | ((...args: any[]) => boolean);
56
- /**
57
- * 是否对条件结果取反
58
- *
59
- * @default false
60
- */
61
- negate?: boolean;
62
- }
63
- /**
64
- * 注入规则接口
8
+ * HTML 注入规则接口
65
9
  *
66
10
  * @interface InjectRule
67
- * @description 定义单条 HTML 内容注入规则,包括注入内容、位置、条件、优先级等
11
+ * @description 定义单条 HTML 内容注入规则,包含注入内容、位置、条件和安全配置。
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * {
16
+ * id: 'meta-viewport',
17
+ * content: '<meta name="viewport" content="width=device-width">',
18
+ * position: 'head-end',
19
+ * priority: 10
20
+ * }
21
+ * ```
68
22
  */
69
23
  interface InjectRule {
70
- /**
71
- * 规则唯一标识符,用于日志记录和调试
72
- */
24
+ /** 规则唯一标识,用于日志输出和调试追踪 */
73
25
  id?: string;
74
- /**
75
- * 要注入的 HTML 内容
76
- *
77
- * @example '<meta name="description" content="My App">'
78
- */
26
+ /** 要注入的 HTML 内容字符串,支持模板变量占位符 `{{varName}}` */
79
27
  content: string;
80
- /**
81
- * 注入位置
82
- */
28
+ /** 注入位置,如 'head-start'、'head-end'、'body-start'、'body-end' 等 */
83
29
  position: InjectPosition;
84
- /**
85
- * 选择器字符串,当 position 为 selector 相关位置时必填
86
- *
87
- * @description 当 selectorMatch 为 'string' 时,使用字符串精确匹配;
88
- * 当 selectorMatch 为 'regex' 时,使用正则表达式匹配
89
- *
90
- * @example '<div id="app">'
91
- */
30
+ /** CSS 选择器,仅在 position 为 'before-selector' 或 'after-selector' 时需要 */
92
31
  selector?: string;
93
- /**
94
- * 选择器匹配模式
95
- *
96
- * @default 'string'
97
- */
32
+ /** 选择器匹配模式,仅在指定 selector 时有效 */
98
33
  selectorMatch?: SelectorMatch;
99
- /**
100
- * 规则优先级,数值越小优先级越高,越先执行
101
- *
102
- * @default 100
103
- */
34
+ /** 规则优先级,数值越大越先执行 */
104
35
  priority?: number;
105
- /**
106
- * 注入条件,满足条件时才执行注入
107
- */
36
+ /** 条件注入配置,满足条件时才执行注入 */
108
37
  condition?: InjectCondition;
109
- /**
110
- * 规则级模板变量,会覆盖全局模板变量
111
- *
112
- * @description 使用 `{{变量名}}` 语法在 content 中引用变量
113
- *
114
- * @example { greeting: 'Hello', name: 'World' }
115
- */
38
+ /** 规则级别的模板变量,会与全局 templateVars 合并 */
116
39
  templateVars?: Record<string, string>;
117
- /**
118
- * 是否允许注入脚本等危险内容
119
- *
120
- * @default false
121
- * @remarks 启用此选项将跳过安全检查,请确保注入内容来源可信
122
- */
40
+ /** 是否允许注入 `<script>` 标签,默认为 false 以防止 XSS 攻击 */
123
41
  allowScriptInjection?: boolean;
124
42
  }
125
- /**
126
- * 安全配置接口
127
- *
128
- * @interface SecurityConfig
129
- * @description 控制 HTML 注入内容的安全过滤行为,防止 XSS 攻击
130
- */
131
- interface SecurityConfig {
132
- /**
133
- * 是否阻止危险标签(script、iframe、object 等)
134
- *
135
- * @default true
136
- */
137
- blockDangerousTags?: boolean;
138
- /**
139
- * 是否阻止危险属性(onclick、onload 等事件处理器)
140
- *
141
- * @default true
142
- */
143
- blockDangerousAttributes?: boolean;
144
- /**
145
- * 允许通过的标签白名单,白名单中的标签不会被阻止
146
- *
147
- * @example ['iframe', 'object']
148
- */
149
- allowedTags?: string[];
150
- /**
151
- * 自定义阻止标签列表,覆盖默认阻止列表
152
- *
153
- * @example ['div', 'span']
154
- */
155
- blockedTags?: string[];
156
- /**
157
- * 自定义阻止属性列表,覆盖默认阻止列表
158
- *
159
- * @example ['data-custom', 'data-track']
160
- */
161
- blockedAttributes?: string[];
162
- }
163
43
  /**
164
44
  * 注入日志条目接口
165
45
  *
166
46
  * @interface InjectionLogEntry
167
- * @description 记录单条注入规则的执行结果,用于调试和问题排查
47
+ * @description 记录单条注入规则的执行结果,用于调试和统计。
168
48
  */
169
49
  interface InjectionLogEntry {
170
- /**
171
- * 规则标识符
172
- */
50
+ /** 规则标识 */
173
51
  ruleId: string;
174
- /**
175
- * 注入位置
176
- */
52
+ /** 注入位置 */
177
53
  position: InjectPosition;
178
- /**
179
- * 使用的选择器
180
- */
54
+ /** 使用的 CSS 选择器(如果有) */
181
55
  selector?: string;
182
- /**
183
- * 是否注入成功
184
- */
56
+ /** 是否注入成功 */
185
57
  injected: boolean;
186
- /**
187
- * 注入失败原因
188
- */
58
+ /** 注入失败原因(如果失败) */
189
59
  reason?: string;
190
- /**
191
- * 日志时间戳
192
- */
60
+ /** 日志记录时间戳(毫秒) */
193
61
  timestamp: number;
194
62
  }
195
63
  /**
196
- * HTML 注入插件的配置选项接口
64
+ * HTML 内容注入插件的配置选项接口
197
65
  *
198
66
  * @interface HtmlInjectOptions
199
67
  * @extends {BasePluginOptions}
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * htmlInject({
72
+ * targetFile: 'index.html',
73
+ * rules: [
74
+ * { content: '<meta name="description" content="My App">', position: 'head-end' }
75
+ * ],
76
+ * security: { blockDangerousTags: true },
77
+ * templateVars: { appName: 'My App' },
78
+ * logInjection: true
79
+ * })
80
+ * ```
200
81
  */
201
82
  interface HtmlInjectOptions extends BasePluginOptions {
202
- /**
203
- * 目标 HTML 文件路径或文件名
204
- *
205
- * @default 'index.html'
206
- * @description 支持相对路径和文件名匹配,默认匹配所有 index.html 文件
207
- *
208
- * @example 'index.html'
209
- * @example 'src/views/home.html'
210
- */
83
+ /** 目标 HTML 文件路径或文件名,默认为 'index.html' */
211
84
  targetFile?: string;
212
- /**
213
- * 注入规则数组
214
- *
215
- * @description 定义要注入的 HTML 内容及其注入位置和条件,规则按 priority 升序执行
216
- */
85
+ /** 注入规则数组,至少包含一条规则 */
217
86
  rules: InjectRule[];
218
- /**
219
- * 安全配置
220
- *
221
- * @description 控制注入内容的安全过滤行为,防止 XSS 攻击
222
- */
87
+ /** 安全过滤配置,控制危险标签和属性的过滤行为 */
223
88
  security?: SecurityConfig;
224
- /**
225
- * 全局模板变量,可被规则级 templateVars 覆盖
226
- *
227
- * @description 使用 `{{变量名}}` 语法在 content 中引用变量
228
- *
229
- * @example { appName: 'My App', version: '1.0.0' }
230
- */
89
+ /** 全局模板变量映射,用于替换内容中的 `{{varName}}` 占位符 */
231
90
  templateVars?: Record<string, string>;
232
- /**
233
- * 是否在控制台输出注入日志
234
- *
235
- * @default true
236
- */
91
+ /** 是否在控制台输出注入结果日志 */
237
92
  logInjection?: boolean;
238
93
  }
239
94
 
@@ -275,4 +130,4 @@ interface HtmlInjectOptions extends BasePluginOptions {
275
130
  declare const htmlInject: PluginFactory<HtmlInjectOptions, HtmlInjectOptions>;
276
131
 
277
132
  export { htmlInject };
278
- export type { ConditionType, HtmlInjectOptions, InjectCondition, InjectPosition, InjectRule, InjectionLogEntry, SecurityConfig, SelectorMatch };
133
+ export type { HtmlInjectOptions, InjectRule, InjectionLogEntry };
@@ -1,7 +1 @@
1
- import{createPluginFactory as p,BasePlugin as g}from"../../factory/index.mjs";import{containsScriptTag as B}from"../../common/script/index.mjs";import h from"node:path";import"../../logger/index.mjs";import"../../common/object/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";const m=["script","iframe","object","embed","applet","form","input","textarea","select","button"],C=["onclick","ondblclick","onmouseover","onmouseout","onmousemove","onmousedown","onmouseup","onkeydown","onkeyup","onkeypress","onload","onerror","onfocus","onblur","onsubmit","onchange","oninput","oncontextmenu","ondrag","ondrop","onanimationend","ontransitionend"];function w(u){if(!u.rules||!Array.isArray(u.rules))throw new Error("rules \u5FC5\u987B\u662F\u975E\u7A7A\u6570\u7EC4");if(u.rules.length===0)throw new Error("rules \u4E0D\u80FD\u4E3A\u7A7A\u6570\u7EC4");for(let e=0;e<u.rules.length;e++)y(u.rules[e],e)}function y(u,e){if(!u.content||typeof u.content!="string")throw new Error(`rules[${e}].content \u5FC5\u987B\u662F\u975E\u7A7A\u5B57\u7B26\u4E32`);if(!u.position||typeof u.position!="string")throw new Error(`rules[${e}].position \u5FC5\u987B\u662F\u6709\u6548\u7684\u6CE8\u5165\u4F4D\u7F6E`);const t=["head-start","head-end","body-start","body-end","before-selector","after-selector","replace-selector"];if(!t.includes(u.position))throw new Error(`rules[${e}].position \u5FC5\u987B\u662F ${t.join(", ")} \u4E4B\u4E00`);if(u.position.includes("selector")&&!u.selector)throw new Error(`rules[${e}].position \u4E3A "${u.position}" \u65F6\uFF0Cselector \u4E3A\u5FC5\u586B\u9879`);if(u.priority!==void 0&&(typeof u.priority!="number"||u.priority<0))throw new Error(`rules[${e}].priority \u5FC5\u987B\u662F\u975E\u8D1F\u6570`);u.condition&&j(u.condition,e)}function j(u,e){if(!u)return;const t=["env","file-contains","custom"];if(!t.includes(u.type))throw new Error(`rules[${e}].condition.type \u5FC5\u987B\u662F ${t.join(", ")} \u4E4B\u4E00`);if(u.type==="custom"&&typeof u.value!="function")throw new Error(`rules[${e}].condition.type \u4E3A "custom" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u51FD\u6570`);if(u.type!=="custom"&&typeof u.value!="string")throw new Error(`rules[${e}].condition.type \u4E3A "${u.type}" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`)}function b(u){if(u){if(u.blockedTags&&!Array.isArray(u.blockedTags))throw new Error("security.blockedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(u.allowedTags&&!Array.isArray(u.allowedTags))throw new Error("security.allowedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(u.blockedAttributes&&!Array.isArray(u.blockedAttributes))throw new Error("security.blockedAttributes \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4")}}function $(u){w(u),b(u.security)}function A(u,e,t,r){const i=t?.blockDangerousTags!==!1,n=t?.blockDangerousAttributes!==!1,o=t?.blockedTags||m,a=t?.allowedTags,l=t?.blockedAttributes||C;let s=u;if(i){const d=a?o.filter(c=>!a.includes(c)):o;if(B(u))if(e.allowScriptInjection)r?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${e.id||"unnamed"}" \u5DF2\u542F\u7528\u811A\u672C\u6CE8\u5165(allowScriptInjection=true)\uFF0C\u8BF7\u786E\u4FDD\u6CE8\u5165\u5185\u5BB9\u6765\u6E90\u53EF\u4FE1\u3002\u6CE8\u5165\u811A\u672C\u53EF\u80FD\u5E26\u6765 XSS \u653B\u51FB\u98CE\u9669\u3002`);else throw new Error(`\u89C4\u5219 "${e.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B <script> \u6807\u7B7E\uFF0C\u9ED8\u8BA4\u88AB\u963B\u6B62\u3002\u5982\u9700\u6CE8\u5165\u811A\u672C\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true`);for(const c of d){if(c==="script")continue;const f=new RegExp(`<${c}\\b[^>]*>[\\s\\S]*?<\\/${c}>`,"gi"),F=new RegExp(`<${c}\\b[^>]*/?>`,"gi");if(f.test(s)||F.test(s))if(e.allowScriptInjection){r?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${e.id||"unnamed"}" \u5305\u542B\u88AB\u963B\u6B62\u7684\u6807\u7B7E <${c}>\uFF0C\u5DF2\u901A\u8FC7 allowScriptInjection \u8DF3\u8FC7\u5B89\u5168\u68C0\u67E5\uFF0C\u8BF7\u786E\u4FDD\u5185\u5BB9\u53EF\u4FE1\u3002`);continue}else throw new Error(`\u89C4\u5219 "${e.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B\u88AB\u963B\u6B62\u7684\u6807\u7B7E <${c}>\u3002\u5982\u9700\u6CE8\u5165\u6B64\u6807\u7B7E\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true \u6216\u5728 security.allowedTags \u4E2D\u6DFB\u52A0 "${c}"`);s=s.replace(f,""),s=s.replace(F,"")}}if(n)for(const d of l){const c=new RegExp(`\\s${d}\\s*=\\s*["'][^"']*["']`,"gi");if(c.test(s))if(e.allowScriptInjection){r?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${e.id||"unnamed"}" \u5305\u542B\u5371\u9669\u5C5E\u6027 ${d}\uFF0C\u5DF2\u901A\u8FC7 allowScriptInjection \u8DF3\u8FC7\u5B89\u5168\u68C0\u67E5\uFF0C\u8BF7\u786E\u4FDD\u5185\u5BB9\u53EF\u4FE1\u3002`);continue}else throw new Error(`\u89C4\u5219 "${e.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B\u5371\u9669\u5C5E\u6027 ${d}\u3002\u5982\u9700\u6CE8\u5165\u6B64\u5C5E\u6027\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true`);s=s.replace(c,"")}return s}function E(u,e,t){if(t==="regex"){try{const i=new RegExp(e),n=u.match(i);if(n&&n.index!==void 0)return{index:n.index,length:n[0].length}}catch{return null}return null}const r=u.indexOf(e);return r===-1?null:{index:r,length:e.length}}function D(u,e,t){let r=u;const i={...t,...e};for(const[n,o]of Object.entries(i)){const a=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=o.replace(/\$/g,"$$$$");r=r.replace(new RegExp(`\\{\\{${a}\\}\\}`,"g"),l)}return r}function x(u,e){let t=!1;switch(u.type){case"env":{const r=u.value,i=process.env[r];t=!!i&&i!=="false"&&i!=="0";break}case"file-contains":{const r=u.value;t=e.includes(r);break}case"custom":{const r=u.value;try{t=!!r()}catch{t=!1}break}}return u.negate?!t:t}function k(u){return[...u].sort((e,t)=>(e.priority??100)-(t.priority??100))}function v(u,e,t,r,i){switch(t){case"head-start":{const n=u.match(/<head\b[^>]*>/i);if(!n)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 <head> \u6807\u7B7E"};const o=(n.index??0)+n[0].length;return{html:u.slice(0,o)+`
2
- `+e+u.slice(o),injected:!0}}case"head-end":{const n=u.match(/<\/head\s*>/i);if(!n)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 </head> \u6807\u7B7E"};const o=n.index;return{html:u.slice(0,o)+e+`
3
- `+u.slice(o),injected:!0}}case"body-start":{const n=u.match(/<body\b[^>]*>/i);if(!n)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 <body> \u6807\u7B7E"};const o=(n.index??0)+n[0].length;return{html:u.slice(0,o)+`
4
- `+e+u.slice(o),injected:!0}}case"body-end":{const n=u.match(/<\/body\s*>/i);if(!n)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 </body> \u6807\u7B7E"};const o=n.index;return{html:u.slice(0,o)+e+`
5
- `+u.slice(o),injected:!0}}case"before-selector":{if(!r)return{html:u,injected:!1,reason:"before-selector \u9700\u8981 selector \u53C2\u6570"};const n=E(u,r,i);return n?{html:u.slice(0,n.index)+e+`
6
- `+u.slice(n.index),injected:!0}:{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${r}"`}}case"after-selector":{if(!r)return{html:u,injected:!1,reason:"after-selector \u9700\u8981 selector \u53C2\u6570"};const n=E(u,r,i);if(!n)return{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${r}"`};const o=n.index+n.length;return{html:u.slice(0,o)+`
7
- `+e+u.slice(o),injected:!0}}case"replace-selector":{if(!r)return{html:u,injected:!1,reason:"replace-selector \u9700\u8981 selector \u53C2\u6570"};const n=E(u,r,i);if(!n)return{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${r}"`};const o=n.index+n.length;return{html:u.slice(0,n.index)+e+u.slice(o),injected:!0}}default:return{html:u,injected:!1,reason:`\u4E0D\u652F\u6301\u7684\u6CE8\u5165\u4F4D\u7F6E: ${t}`}}}function I(u,e,t,r,i){let n=u;const o=[],a=k(e);for(const l of a){const s={ruleId:l.id||"unnamed",position:l.position,selector:l.selector,injected:!1,timestamp:Date.now()};if(l.condition&&!x(l.condition,n)){s.injected=!1,s.reason="\u6761\u4EF6\u4E0D\u6EE1\u8DB3\uFF0C\u8DF3\u8FC7\u6CE8\u5165",o.push(s);continue}let d=D(l.content,l.templateVars,t);try{d=A(d,l,r,i)}catch(f){s.injected=!1,s.reason=f.message,o.push(s),i?.warn(`\u89C4\u5219 "${l.id||"unnamed"}" \u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${f.message}`);continue}const c=v(n,d,l.position,l.selector,l.selectorMatch);n=c.html,s.injected=c.injected,s.reason=c.reason,o.push(s)}return{html:n,logs:o}}class T extends g{injectionLogs=[];getDefaultOptions(){return{targetFile:"index.html",logInjection:!0,security:{blockDangerousTags:!0,blockDangerousAttributes:!0}}}validateOptions(){this.validator.field("targetFile").string().field("rules").required().field("logInjection").boolean().validate(),$(this.options)}getPluginName(){return"html-inject"}isTargetFile(e,t){if(t==="index.html")return e.endsWith("index.html")||e.endsWith("index.htm");const r=t.replace(/\\/g,"/"),i=e.replace(/\\/g,"/");return i.endsWith(r)?!0:h.basename(i)===h.basename(r)}addPluginHooks(e){e.transformIndexHtml={order:"post",handler:(t,r)=>{const i=r.filename||"",n=this.options.targetFile||"index.html";if(!this.isTargetFile(i,n))return t;const o={warn:l=>this.logger.warn(l)},a=I(t,this.options.rules,this.options.templateVars,this.options.security,o);return this.injectionLogs=a.logs,this.options.logInjection&&this.logInjectionResults(a.logs),a.html}},e.buildEnd=()=>{this.options.logInjection&&this.injectionLogs.length>0&&this.logger.info(`\u6CE8\u5165\u5B8C\u6210\uFF0C\u5171\u5904\u7406 ${this.injectionLogs.length} \u6761\u89C4\u5219`)}}logInjectionResults(e){for(const t of e)t.injected?this.logger.success(`\u89C4\u5219 "${t.ruleId}" \u6CE8\u5165\u6210\u529F (\u4F4D\u7F6E: ${t.position}${t.selector?`, \u9009\u62E9\u5668: ${t.selector}`:""})`):this.logger.warn(`\u89C4\u5219 "${t.ruleId}" \u6CE8\u5165\u5931\u8D25: ${t.reason||"\u672A\u77E5\u539F\u56E0"}`)}getInjectionLogs(){return[...this.injectionLogs]}}const S=p(T);export{S as htmlInject};
1
+ import{createPluginFactory as g,BasePlugin as F}from"../../factory/index.mjs";import{v as f,c as E,e as m,b as C,s as y,i as w}from"../../shared/vite-plugin.BCuhU1au.mjs";import h from"node:path";import"../../logger/index.mjs";import"../../common/object/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"../../common/script/index.mjs";function j(e){if(!e.rules||!Array.isArray(e.rules))throw new Error("rules \u5FC5\u987B\u662F\u975E\u7A7A\u6570\u7EC4");if(e.rules.length===0)throw new Error("rules \u4E0D\u80FD\u4E3A\u7A7A\u6570\u7EC4");for(let t=0;t<e.rules.length;t++)$(e.rules[t],t)}function $(e,t){if(!e.content||typeof e.content!="string")throw new Error(`rules[${t}].content \u5FC5\u987B\u662F\u975E\u7A7A\u5B57\u7B26\u4E32`);if(!e.position||typeof e.position!="string")throw new Error(`rules[${t}].position \u5FC5\u987B\u662F\u6709\u6548\u7684\u6CE8\u5165\u4F4D\u7F6E`);const o=["head-start","head-end","body-start","body-end","before-selector","after-selector","replace-selector"];if(!o.includes(e.position))throw new Error(`rules[${t}].position \u5FC5\u987B\u662F ${o.join(", ")} \u4E4B\u4E00`);if(e.position.includes("selector")&&!e.selector)throw new Error(`rules[${t}].position \u4E3A "${e.position}" \u65F6\uFF0Cselector \u4E3A\u5FC5\u586B\u9879`);if(e.priority!==void 0&&(typeof e.priority!="number"||e.priority<0))throw new Error(`rules[${t}].priority \u5FC5\u987B\u662F\u975E\u8D1F\u6570`);e.condition&&B(e.condition,t)}function B(e,t){if(!e)return;const o=["env","file-contains","custom"];if(!o.includes(e.type))throw new Error(`rules[${t}].condition.type \u5FC5\u987B\u662F ${o.join(", ")} \u4E4B\u4E00`);if(e.type==="custom"&&typeof e.value!="function")throw new Error(`rules[${t}].condition.type \u4E3A "custom" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u51FD\u6570`);if(e.type!=="custom"&&typeof e.value!="string")throw new Error(`rules[${t}].condition.type \u4E3A "${e.type}" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`)}function A(e){j(e),f(e.security)}function D(e,t,o,r,n){let s=e;const l=[],c=E(t);for(const u of c){const i={ruleId:u.id||"unnamed",position:u.position,selector:u.selector,injected:!1,timestamp:Date.now()};if(u.condition&&!m(u.condition,s)){i.injected=!1,i.reason="\u6761\u4EF6\u4E0D\u6EE1\u8DB3\uFF0C\u8DF3\u8FC7\u6CE8\u5165",l.push(i);continue}let a=C(u.content,u.templateVars,o);try{a=y(a,u,r,n)}catch(d){i.injected=!1,i.reason=d.message,l.push(i),n?.warn(`\u89C4\u5219 "${u.id||"unnamed"}" \u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${d.message}`);continue}const p=w(s,a,u.position,u.selector,u.selectorMatch);s=p.html,i.injected=p.injected,i.reason=p.reason,l.push(i)}return{html:s,logs:l}}class v extends F{injectionLogs=[];getDefaultOptions(){return{targetFile:"index.html",logInjection:!0,security:{blockDangerousTags:!0,blockDangerousAttributes:!0}}}validateOptions(){this.validator.field("targetFile").string().field("rules").required().field("logInjection").boolean().validate(),A(this.options)}getPluginName(){return"html-inject"}isTargetFile(t,o){if(o==="index.html")return t.endsWith("index.html")||t.endsWith("index.htm");const r=o.replace(/\\/g,"/"),n=t.replace(/\\/g,"/");return n.endsWith(r)?!0:h.basename(n)===h.basename(r)}addPluginHooks(t){t.transformIndexHtml={order:"post",handler:(o,r)=>{const n=r.filename||"",s=this.options.targetFile||"index.html";if(!this.isTargetFile(n,s))return o;const l={warn:u=>this.logger.warn(u)},c=D(o,this.options.rules,this.options.templateVars,this.options.security,l);return this.injectionLogs=c.logs,this.options.logInjection&&this.logInjectionResults(c.logs),c.html}},t.buildEnd=()=>{this.options.logInjection&&this.injectionLogs.length>0&&this.logger.info(`\u6CE8\u5165\u5B8C\u6210\uFF0C\u5171\u5904\u7406 ${this.injectionLogs.length} \u6761\u89C4\u5219`)}}logInjectionResults(t){for(const o of t)o.injected?this.logger.success(`\u89C4\u5219 "${o.ruleId}" \u6CE8\u5165\u6210\u529F (\u4F4D\u7F6E: ${o.position}${o.selector?`, \u9009\u62E9\u5668: ${o.selector}`:""})`):this.logger.warn(`\u89C4\u5219 "${o.ruleId}" \u6CE8\u5165\u5931\u8D25: ${o.reason||"\u672A\u77E5\u539F\u56E0"}`)}getInjectionLogs(){return[...this.injectionLogs]}}const b=g(v);export{b as htmlInject};
@@ -1 +1 @@
1
- "use strict";const plugins_buildProgress_index=require("./buildProgress/index.cjs"),plugins_bundleAnalyzer_index=require("./bundleAnalyzer/index.cjs"),plugins_compressAssets_index=require("./compressAssets/index.cjs"),plugins_copyFile_index=require("./copyFile/index.cjs"),plugins_faviconManager_index=require("./faviconManager/index.cjs"),plugins_generateRouter_index=require("./generateRouter/index.cjs"),plugins_generateVersion_index=require("./generateVersion/index.cjs"),plugins_htmlInject_index=require("./htmlInject/index.cjs"),plugins_loadingManager_index=require("./loadingManager/index.cjs"),plugins_versionUpdateChecker_index=require("./versionUpdateChecker/index.cjs");require("../factory/index.cjs"),require("../logger/index.cjs"),require("../common/object/index.cjs"),require("../shared/vite-plugin.Bcg6RW2N.cjs"),require("node:fs"),require("node:path"),require("../common/compress/index.cjs"),require("node:zlib"),require("node:stream/promises"),require("node:stream"),require("../common/path/index.cjs"),require("../common/fs/index.cjs"),require("fs"),require("path"),require("../common/format/index.cjs"),require("crypto"),require("../common/html/index.cjs"),require("../common/script/index.cjs"),require("../common/validation/index.cjs"),exports.buildProgress=plugins_buildProgress_index.buildProgress,exports.bundleAnalyzer=plugins_bundleAnalyzer_index.bundleAnalyzer,exports.compressAssets=plugins_compressAssets_index.compressAssets,exports.copyFile=plugins_copyFile_index.copyFile,exports.faviconManager=plugins_faviconManager_index.faviconManager,exports.generateRouter=plugins_generateRouter_index.generateRouter,exports.generateVersion=plugins_generateVersion_index.generateVersion,exports.htmlInject=plugins_htmlInject_index.htmlInject,exports.loadingManager=plugins_loadingManager_index.loadingManager,exports.versionUpdateChecker=plugins_versionUpdateChecker_index.versionUpdateChecker;
1
+ "use strict";const plugins_buildProgress_index=require("./buildProgress/index.cjs"),plugins_bundleAnalyzer_index=require("./bundleAnalyzer/index.cjs"),plugins_compressAssets_index=require("./compressAssets/index.cjs"),plugins_copyFile_index=require("./copyFile/index.cjs"),plugins_envGuard_index=require("./envGuard/index.cjs"),plugins_faviconManager_index=require("./faviconManager/index.cjs"),plugins_generateRouter_index=require("./generateRouter/index.cjs"),plugins_generateVersion_index=require("./generateVersion/index.cjs"),plugins_htmlInject_index=require("./htmlInject/index.cjs"),plugins_loadingManager_index=require("./loadingManager/index.cjs"),plugins_versionUpdateChecker_index=require("./versionUpdateChecker/index.cjs");require("../factory/index.cjs"),require("../logger/index.cjs"),require("../common/object/index.cjs"),require("../shared/vite-plugin.Bcg6RW2N.cjs"),require("../common/ui/index.cjs"),require("node:fs"),require("node:path"),require("../common/compress/index.cjs"),require("node:zlib"),require("node:stream/promises"),require("node:stream"),require("../common/path/index.cjs"),require("../common/fs/index.cjs"),require("fs"),require("path"),require("../common/format/index.cjs"),require("crypto"),require("../shared/vite-plugin.vwox4bU0.cjs"),require("../common/html/index.cjs"),require("../shared/vite-plugin.BrI73DHA.cjs"),require("../common/script/index.cjs"),require("../shared/vite-plugin.soT9a-KD.cjs"),exports.buildProgress=plugins_buildProgress_index.buildProgress,exports.bundleAnalyzer=plugins_bundleAnalyzer_index.bundleAnalyzer,exports.compressAssets=plugins_compressAssets_index.compressAssets,exports.copyFile=plugins_copyFile_index.copyFile,exports.envGuard=plugins_envGuard_index.envGuard,exports.faviconManager=plugins_faviconManager_index.faviconManager,exports.generateRouter=plugins_generateRouter_index.generateRouter,exports.generateVersion=plugins_generateVersion_index.generateVersion,exports.htmlInject=plugins_htmlInject_index.htmlInject,exports.loadingManager=plugins_loadingManager_index.loadingManager,exports.versionUpdateChecker=plugins_versionUpdateChecker_index.versionUpdateChecker;
@@ -2,13 +2,16 @@ export { BuildPhase, BuildProgressOptions, ProgressFormat, ProgressTheme, buildP
2
2
  export { BundleAnalysisResult, BundleAnalyzerOptions, BundleOutputFormat, ChunkStats, ComparisonDiff, FileTypeDistribution, ModuleStats, SizeWarning, bundleAnalyzer } from './bundleAnalyzer/index.cjs';
3
3
  export { CompressAlgorithm, CompressAssetsOptions, CompressStats, CompressSummary, compressAssets } from './compressAssets/index.cjs';
4
4
  export { CopyFileOptions, copyFile } from './copyFile/index.cjs';
5
+ export { EnvFailAction, EnvGuardOptions, EnvGuardResult, RuntimeGuardMode, envGuard } from './envGuard/index.cjs';
5
6
  export { FaviconManagerOptions, Icon, faviconManager } from './faviconManager/index.cjs';
6
7
  export { GenerateRouterOptions, NameStrategy, OutputFormat, RouteConfig, RouteMeta, UniAppPageConfig, UniAppPagesJson, UniAppTabBarConfig, generateRouter } from './generateRouter/index.cjs';
7
8
  export { GenerateVersionOptions, OutputType, VersionFormat, VersionInfo, generateVersion } from './generateVersion/index.cjs';
8
- export { ConditionType, HtmlInjectOptions, InjectCondition, InjectPosition, InjectRule, InjectionLogEntry, SecurityConfig, SelectorMatch, htmlInject } from './htmlInject/index.cjs';
9
+ export { HtmlInjectOptions, InjectRule, InjectionLogEntry, htmlInject } from './htmlInject/index.cjs';
9
10
  export { AutoBindMode, AutoHideOn, DebounceHide, DelayShow, LoadingCallbacks, LoadingManager, LoadingManagerOptions, LoadingPosition, LoadingStyle, MinDisplayTime, RequestFilter, SpinnerType, TransitionConfig, loadingManager } from './loadingManager/index.cjs';
10
11
  export { PromptStyle, VersionSource, VersionUpdateCheckerOptions, versionUpdateChecker } from './versionUpdateChecker/index.cjs';
11
12
  import '../factory/index.cjs';
12
13
  import 'vite';
13
14
  import '../shared/vite-plugin.CLr0ttuO.cjs';
14
15
  import '../shared/vite-plugin.DRRlWY8P.cjs';
16
+ import '../shared/vite-plugin.CmtcnItg.cjs';
17
+ import '../shared/vite-plugin.FfJ-Wwfu.cjs';
@@ -2,13 +2,16 @@ export { BuildPhase, BuildProgressOptions, ProgressFormat, ProgressTheme, buildP
2
2
  export { BundleAnalysisResult, BundleAnalyzerOptions, BundleOutputFormat, ChunkStats, ComparisonDiff, FileTypeDistribution, ModuleStats, SizeWarning, bundleAnalyzer } from './bundleAnalyzer/index.mjs';
3
3
  export { CompressAlgorithm, CompressAssetsOptions, CompressStats, CompressSummary, compressAssets } from './compressAssets/index.mjs';
4
4
  export { CopyFileOptions, copyFile } from './copyFile/index.mjs';
5
+ export { EnvFailAction, EnvGuardOptions, EnvGuardResult, RuntimeGuardMode, envGuard } from './envGuard/index.mjs';
5
6
  export { FaviconManagerOptions, Icon, faviconManager } from './faviconManager/index.mjs';
6
7
  export { GenerateRouterOptions, NameStrategy, OutputFormat, RouteConfig, RouteMeta, UniAppPageConfig, UniAppPagesJson, UniAppTabBarConfig, generateRouter } from './generateRouter/index.mjs';
7
8
  export { GenerateVersionOptions, OutputType, VersionFormat, VersionInfo, generateVersion } from './generateVersion/index.mjs';
8
- export { ConditionType, HtmlInjectOptions, InjectCondition, InjectPosition, InjectRule, InjectionLogEntry, SecurityConfig, SelectorMatch, htmlInject } from './htmlInject/index.mjs';
9
+ export { HtmlInjectOptions, InjectRule, InjectionLogEntry, htmlInject } from './htmlInject/index.mjs';
9
10
  export { AutoBindMode, AutoHideOn, DebounceHide, DelayShow, LoadingCallbacks, LoadingManager, LoadingManagerOptions, LoadingPosition, LoadingStyle, MinDisplayTime, RequestFilter, SpinnerType, TransitionConfig, loadingManager } from './loadingManager/index.mjs';
10
11
  export { PromptStyle, VersionSource, VersionUpdateCheckerOptions, versionUpdateChecker } from './versionUpdateChecker/index.mjs';
11
12
  import '../factory/index.mjs';
12
13
  import 'vite';
13
14
  import '../shared/vite-plugin.CLr0ttuO.mjs';
14
15
  import '../shared/vite-plugin.DRRlWY8P.mjs';
16
+ import '../shared/vite-plugin.CmtcnItg.mjs';
17
+ import '../shared/vite-plugin.FfJ-Wwfu.mjs';
@@ -2,13 +2,16 @@ export { BuildPhase, BuildProgressOptions, ProgressFormat, ProgressTheme, buildP
2
2
  export { BundleAnalysisResult, BundleAnalyzerOptions, BundleOutputFormat, ChunkStats, ComparisonDiff, FileTypeDistribution, ModuleStats, SizeWarning, bundleAnalyzer } from './bundleAnalyzer/index.js';
3
3
  export { CompressAlgorithm, CompressAssetsOptions, CompressStats, CompressSummary, compressAssets } from './compressAssets/index.js';
4
4
  export { CopyFileOptions, copyFile } from './copyFile/index.js';
5
+ export { EnvFailAction, EnvGuardOptions, EnvGuardResult, RuntimeGuardMode, envGuard } from './envGuard/index.js';
5
6
  export { FaviconManagerOptions, Icon, faviconManager } from './faviconManager/index.js';
6
7
  export { GenerateRouterOptions, NameStrategy, OutputFormat, RouteConfig, RouteMeta, UniAppPageConfig, UniAppPagesJson, UniAppTabBarConfig, generateRouter } from './generateRouter/index.js';
7
8
  export { GenerateVersionOptions, OutputType, VersionFormat, VersionInfo, generateVersion } from './generateVersion/index.js';
8
- export { ConditionType, HtmlInjectOptions, InjectCondition, InjectPosition, InjectRule, InjectionLogEntry, SecurityConfig, SelectorMatch, htmlInject } from './htmlInject/index.js';
9
+ export { HtmlInjectOptions, InjectRule, InjectionLogEntry, htmlInject } from './htmlInject/index.js';
9
10
  export { AutoBindMode, AutoHideOn, DebounceHide, DelayShow, LoadingCallbacks, LoadingManager, LoadingManagerOptions, LoadingPosition, LoadingStyle, MinDisplayTime, RequestFilter, SpinnerType, TransitionConfig, loadingManager } from './loadingManager/index.js';
10
11
  export { PromptStyle, VersionSource, VersionUpdateCheckerOptions, versionUpdateChecker } from './versionUpdateChecker/index.js';
11
12
  import '../factory/index.js';
12
13
  import 'vite';
13
14
  import '../shared/vite-plugin.CLr0ttuO.js';
14
15
  import '../shared/vite-plugin.DRRlWY8P.js';
16
+ import '../shared/vite-plugin.CmtcnItg.js';
17
+ import '../shared/vite-plugin.FfJ-Wwfu.js';
@@ -1 +1 @@
1
- export{buildProgress}from"./buildProgress/index.mjs";export{bundleAnalyzer}from"./bundleAnalyzer/index.mjs";export{compressAssets}from"./compressAssets/index.mjs";export{copyFile}from"./copyFile/index.mjs";export{faviconManager}from"./faviconManager/index.mjs";export{generateRouter}from"./generateRouter/index.mjs";export{generateVersion}from"./generateVersion/index.mjs";export{htmlInject}from"./htmlInject/index.mjs";export{loadingManager}from"./loadingManager/index.mjs";export{versionUpdateChecker}from"./versionUpdateChecker/index.mjs";import"../factory/index.mjs";import"../logger/index.mjs";import"../common/object/index.mjs";import"../shared/vite-plugin.DcExl6jd.mjs";import"node:fs";import"node:path";import"../common/compress/index.mjs";import"node:zlib";import"node:stream/promises";import"node:stream";import"../common/path/index.mjs";import"../common/fs/index.mjs";import"fs";import"path";import"../common/format/index.mjs";import"crypto";import"../common/html/index.mjs";import"../common/script/index.mjs";import"../common/validation/index.mjs";
1
+ export{buildProgress}from"./buildProgress/index.mjs";export{bundleAnalyzer}from"./bundleAnalyzer/index.mjs";export{compressAssets}from"./compressAssets/index.mjs";export{copyFile}from"./copyFile/index.mjs";export{envGuard}from"./envGuard/index.mjs";export{faviconManager}from"./faviconManager/index.mjs";export{generateRouter}from"./generateRouter/index.mjs";export{generateVersion}from"./generateVersion/index.mjs";export{htmlInject}from"./htmlInject/index.mjs";export{loadingManager}from"./loadingManager/index.mjs";export{versionUpdateChecker}from"./versionUpdateChecker/index.mjs";import"../factory/index.mjs";import"../logger/index.mjs";import"../common/object/index.mjs";import"../shared/vite-plugin.DcExl6jd.mjs";import"../common/ui/index.mjs";import"node:fs";import"node:path";import"../common/compress/index.mjs";import"node:zlib";import"node:stream/promises";import"node:stream";import"../common/path/index.mjs";import"../common/fs/index.mjs";import"fs";import"path";import"../common/format/index.mjs";import"crypto";import"../shared/vite-plugin.DnFDPjNf.mjs";import"../common/html/index.mjs";import"../shared/vite-plugin.BCuhU1au.mjs";import"../common/script/index.mjs";import"../shared/vite-plugin.Dumot0up.mjs";
@@ -1,4 +1,4 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),common_format_index=require("../../common/format/index.cjs"),common_script_index=require("../../common/script/index.cjs"),common_validation_index=require("../../common/validation/index.cjs"),common_html_index=require("../../common/html/index.cjs");require("../../logger/index.cjs"),require("../../common/object/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("crypto"),require("node:path");const CLS_OVERLAY="__loading-overlay__",CLS_HIDDEN="__loading-hidden__",CLS_VISIBLE="__loading-visible__",CLS_TOP="__loading-top__",CLS_CENTER="__loading-center__",CLS_BOTTOM="__loading-bottom__",CLS_SPINNER="__loading-spinner__",CLS_TEXT="__loading-text__",CLS_DOT="__loading-dot__",ID_ROOT="__loading-root__",ATTR_TEXT="data-loading-text",ANIM_SPIN="__loading-spin__",ANIM_DOTS="__loading-dots__",ANIM_PULSE="__loading-pulse__",ANIM_BAR="__loading-bar__",POSITION_CLASS_MAP={center:CLS_CENTER,top:CLS_TOP,bottom:CLS_BOTTOM};function generateCSS(e,t="spinner",n){const{overlayColor:i="rgba(255, 255, 255, 0.7)",spinnerColor:r="#4361ee",spinnerSize:l="40px",textColor:o="#333",textSize:a="14px",zIndex:d=9999,pointerEvents:g=!0,backdropBlur:u=!1,backdropBlurAmount:s=4}=e,p=g?"":"pointer-events: none;",m=u?`backdrop-filter: blur(${s}px);-webkit-backdrop-filter: blur(${s}px);`:"",h=getSpinnerCSS(t,r,l),y=n?.enabled!==!1,c=n?.duration??200,_=n?.easing??"ease-out",f=y?`transition: opacity ${c}ms ${_}, visibility ${c}ms ${_};`:"";return`
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),common_format_index=require("../../common/format/index.cjs"),common_script_index=require("../../common/script/index.cjs"),validators=require("../../shared/vite-plugin.soT9a-KD.cjs"),common_html_index=require("../../common/html/index.cjs");require("../../logger/index.cjs"),require("../../common/object/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("crypto"),require("node:path"),require("../../shared/vite-plugin.BrI73DHA.cjs");const CLS_OVERLAY="__loading-overlay__",CLS_HIDDEN="__loading-hidden__",CLS_VISIBLE="__loading-visible__",CLS_TOP="__loading-top__",CLS_CENTER="__loading-center__",CLS_BOTTOM="__loading-bottom__",CLS_SPINNER="__loading-spinner__",CLS_TEXT="__loading-text__",CLS_DOT="__loading-dot__",ID_ROOT="__loading-root__",ATTR_TEXT="data-loading-text",ANIM_SPIN="__loading-spin__",ANIM_DOTS="__loading-dots__",ANIM_PULSE="__loading-pulse__",ANIM_BAR="__loading-bar__",POSITION_CLASS_MAP={center:CLS_CENTER,top:CLS_TOP,bottom:CLS_BOTTOM};function generateCSS(e,t="spinner",n){const{overlayColor:i="rgba(255, 255, 255, 0.7)",spinnerColor:r="#4361ee",spinnerSize:l="40px",textColor:o="#333",textSize:a="14px",zIndex:d=9999,pointerEvents:g=!0,backdropBlur:u=!1,backdropBlurAmount:s=4}=e,p=g?"":"pointer-events: none;",m=u?`backdrop-filter: blur(${s}px);-webkit-backdrop-filter: blur(${s}px);`:"",h=getSpinnerCSS(t,r,l),y=n?.enabled!==!1,c=n?.duration??200,_=n?.easing??"ease-out",f=y?`transition: opacity ${c}ms ${_}, visibility ${c}ms ${_};`:"";return`
2
2
  .${CLS_OVERLAY} {
3
3
  position: fixed;
4
4
  top: 0;
@@ -449,7 +449,7 @@ ${T}
449
449
  ${w}
450
450
 
451
451
  ${x}
452
- })();`}function validateStyle(e){if(!e)return;const{zIndex:t,pointerEvents:n,backdropBlurAmount:i}=e;if(common_validation_index.validateNonNegativeNumber(t,"style.zIndex"),n!==void 0&&typeof n!="boolean")throw new Error("style.pointerEvents \u5FC5\u987B\u662F\u5E03\u5C14\u503C");common_validation_index.validateNonNegativeNumber(i,"style.backdropBlurAmount")}function validateTransition(e){if(!e)return;const{duration:t,easing:n}=e;if(common_validation_index.validateNonNegativeNumber(t,"transition.duration"),n!==void 0&&typeof n!="string")throw new Error("transition.easing \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u7C7B\u578B")}function validateCallbacks(e){e&&common_validation_index.validateCallbackFields(e,["onBeforeShow","onShow","onBeforeHide","onHide","onDestroy"],"callbacks")}function validateDefaultText(e){return e===""?"defaultText \u4E3A\u7A7A\u5B57\u7B26\u4E32\uFF0Cloading \u5C06\u4E0D\u663E\u793A\u6587\u672C\u5185\u5BB9":null}function validateAutoHideOn(e,t){return!e&&t?"autoHideOn \u4EC5\u5728 defaultVisible \u4E3A true \u65F6\u751F\u6548\uFF0C\u5F53\u524D defaultVisible \u4E3A false\uFF0CautoHideOn \u914D\u7F6E\u5C06\u88AB\u5FFD\u7565":null}class C extends factory_index.BasePlugin{getDefaultOptions(){return{position:"center",defaultText:"\u52A0\u8F7D\u4E2D...",spinnerType:"spinner",autoBind:"none",globalName:"__LOADING_MANAGER__",defaultVisible:!1,autoHideOn:"DOMContentLoaded",style:{overlayColor:"rgba(255, 255, 255, 0.7)",spinnerColor:"#4361ee",spinnerSize:"40px",textColor:"#333",textSize:"14px",zIndex:9999,pointerEvents:!0,backdropBlur:!1,backdropBlurAmount:4},transition:{enabled:!0,duration:200,easing:"ease-out"},minDisplayTime:{enabled:!0,duration:300},delayShow:{enabled:!0,duration:200},debounceHide:{enabled:!1,duration:100}}}validateOptions(){this.validator.field("position").enum(["center","top","bottom"]).field("defaultText").string().field("spinnerType").enum(["spinner","dots","pulse","bar"]).field("autoBind").enum(["fetch","xhr","all","none"]).field("globalName").string().field("customTemplate").string().field("defaultVisible").boolean().field("autoHideOn").enum(["DOMContentLoaded","load","manual"]).validate(),common_validation_index.validateNoScriptInTemplate(this.options.customTemplate,"customTemplate");const t=validateDefaultText(this.options.defaultText);t&&this.logger.warn(t),common_validation_index.validateGlobalName(this.options.globalName,"globalName"),validateStyle(this.options.style),common_validation_index.validateNestedDuration(this.options.minDisplayTime,"minDisplayTime.duration \u5FC5\u987B\u662F\u975E\u8D1F\u6570"),common_validation_index.validateNestedDuration(this.options.delayShow,"delayShow.duration \u5FC5\u987B\u662F\u975E\u8D1F\u6570"),common_validation_index.validateNestedDuration(this.options.debounceHide,"debounceHide.duration \u5FC5\u987B\u662F\u975E\u8D1F\u6570"),validateTransition(this.options.transition),validateCallbacks(this.options.callbacks);const n=validateAutoHideOn(this.options.defaultVisible,this.options.autoHideOn);n&&this.logger.warn(n)}getPluginName(){return"loading-manager"}generateLoadingManager(t){return generateLoadingManagerCode(t)}generateHeadInjectCode(){const{css:t,html:n}=this.getCachedAssets();return`<!-- loading-manager: head start -->
452
+ })();`}function validateStyle(e){if(!e)return;const{zIndex:t,pointerEvents:n,backdropBlurAmount:i}=e;if(validators.validateNonNegativeNumber(t,"style.zIndex"),n!==void 0&&typeof n!="boolean")throw new Error("style.pointerEvents \u5FC5\u987B\u662F\u5E03\u5C14\u503C");validators.validateNonNegativeNumber(i,"style.backdropBlurAmount")}function validateTransition(e){if(!e)return;const{duration:t,easing:n}=e;if(validators.validateNonNegativeNumber(t,"transition.duration"),n!==void 0&&typeof n!="string")throw new Error("transition.easing \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u7C7B\u578B")}function validateCallbacks(e){e&&validators.validateCallbackFields(e,["onBeforeShow","onShow","onBeforeHide","onHide","onDestroy"],"callbacks")}function validateDefaultText(e){return e===""?"defaultText \u4E3A\u7A7A\u5B57\u7B26\u4E32\uFF0Cloading \u5C06\u4E0D\u663E\u793A\u6587\u672C\u5185\u5BB9":null}function validateAutoHideOn(e,t){return!e&&t?"autoHideOn \u4EC5\u5728 defaultVisible \u4E3A true \u65F6\u751F\u6548\uFF0C\u5F53\u524D defaultVisible \u4E3A false\uFF0CautoHideOn \u914D\u7F6E\u5C06\u88AB\u5FFD\u7565":null}class C extends factory_index.BasePlugin{getDefaultOptions(){return{position:"center",defaultText:"\u52A0\u8F7D\u4E2D...",spinnerType:"spinner",autoBind:"none",globalName:"__LOADING_MANAGER__",defaultVisible:!1,autoHideOn:"DOMContentLoaded",style:{overlayColor:"rgba(255, 255, 255, 0.7)",spinnerColor:"#4361ee",spinnerSize:"40px",textColor:"#333",textSize:"14px",zIndex:9999,pointerEvents:!0,backdropBlur:!1,backdropBlurAmount:4},transition:{enabled:!0,duration:200,easing:"ease-out"},minDisplayTime:{enabled:!0,duration:300},delayShow:{enabled:!0,duration:200},debounceHide:{enabled:!1,duration:100}}}validateOptions(){this.validator.field("position").enum(["center","top","bottom"]).field("defaultText").string().field("spinnerType").enum(["spinner","dots","pulse","bar"]).field("autoBind").enum(["fetch","xhr","all","none"]).field("globalName").string().field("customTemplate").string().field("defaultVisible").boolean().field("autoHideOn").enum(["DOMContentLoaded","load","manual"]).validate(),validators.validateNoScriptInTemplate(this.options.customTemplate,"customTemplate");const t=validateDefaultText(this.options.defaultText);t&&this.logger.warn(t),validators.validateGlobalName(this.options.globalName,"globalName"),validateStyle(this.options.style),validators.validateNestedDuration(this.options.minDisplayTime,"minDisplayTime.duration \u5FC5\u987B\u662F\u975E\u8D1F\u6570"),validators.validateNestedDuration(this.options.delayShow,"delayShow.duration \u5FC5\u987B\u662F\u975E\u8D1F\u6570"),validators.validateNestedDuration(this.options.debounceHide,"debounceHide.duration \u5FC5\u987B\u662F\u975E\u8D1F\u6570"),validateTransition(this.options.transition),validateCallbacks(this.options.callbacks);const n=validateAutoHideOn(this.options.defaultVisible,this.options.autoHideOn);n&&this.logger.warn(n)}getPluginName(){return"loading-manager"}generateLoadingManager(t){return generateLoadingManagerCode(t)}generateHeadInjectCode(){const{css:t,html:n}=this.getCachedAssets();return`<!-- loading-manager: head start -->
453
453
  <style data-loading-style data-loading-id="${this.options.globalName||"__LOADING_MANAGER__"}">${t}</style>
454
454
  ${n}
455
455
  <!-- loading-manager: head end -->`}generateBodyInjectCode(t){const n=this.generateLoadingManager(this.options);if(t)return`<!-- loading-manager: body start -->
@@ -1,4 +1,4 @@
1
- import{createPluginFactory as V,BasePlugin as j}from"../../factory/index.mjs";import{escapeHtmlAttr as G}from"../../common/format/index.mjs";import{makeCallback as g}from"../../common/script/index.mjs";import{validateNonNegativeNumber as C,validateCallbackFields as J,validateNoScriptInTemplate as z,validateGlobalName as Y,validateNestedDuration as x}from"../../common/validation/index.mjs";import{injectHeadAndBody as K}from"../../common/html/index.mjs";import"../../logger/index.mjs";import"../../common/object/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"crypto";import"node:path";const o="__loading-overlay__",c="__loading-hidden__",f="__loading-visible__",H="__loading-top__",F="__loading-center__",A="__loading-bottom__",r="__loading-spinner__",B="__loading-text__",s="__loading-dot__",S="__loading-root__",D="data-loading-text",M="__loading-spin__",L="__loading-dots__",O="__loading-pulse__",N="__loading-bar__",Q={center:F,top:H,bottom:A};function W(e,t="spinner",n){const{overlayColor:i="rgba(255, 255, 255, 0.7)",spinnerColor:l="#4361ee",spinnerSize:d="40px",textColor:a="#333",textSize:u="14px",zIndex:p=9999,pointerEvents:$=!0,backdropBlur:_=!1,backdropBlurAmount:m=4}=e,b=$?"":"pointer-events: none;",v=_?`backdrop-filter: blur(${m}px);-webkit-backdrop-filter: blur(${m}px);`:"",T=Z(t,l,d),w=n?.enabled!==!1,h=n?.duration??200,y=n?.easing??"ease-out",E=w?`transition: opacity ${h}ms ${y}, visibility ${h}ms ${y};`:"";return`
1
+ import{createPluginFactory as V,BasePlugin as j}from"../../factory/index.mjs";import{escapeHtmlAttr as G}from"../../common/format/index.mjs";import{makeCallback as g}from"../../common/script/index.mjs";import{e as C,v as J,d as z,b as Y,c as x}from"../../shared/vite-plugin.Dumot0up.mjs";import{injectHeadAndBody as K}from"../../common/html/index.mjs";import"../../logger/index.mjs";import"../../common/object/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"crypto";import"node:path";import"../../shared/vite-plugin.BCuhU1au.mjs";const o="__loading-overlay__",c="__loading-hidden__",f="__loading-visible__",H="__loading-top__",F="__loading-center__",A="__loading-bottom__",r="__loading-spinner__",B="__loading-text__",s="__loading-dot__",S="__loading-root__",D="data-loading-text",M="__loading-spin__",L="__loading-dots__",O="__loading-pulse__",N="__loading-bar__",Q={center:F,top:H,bottom:A};function W(e,t="spinner",n){const{overlayColor:i="rgba(255, 255, 255, 0.7)",spinnerColor:l="#4361ee",spinnerSize:d="40px",textColor:a="#333",textSize:u="14px",zIndex:p=9999,pointerEvents:$=!0,backdropBlur:_=!1,backdropBlurAmount:m=4}=e,b=$?"":"pointer-events: none;",v=_?`backdrop-filter: blur(${m}px);-webkit-backdrop-filter: blur(${m}px);`:"",T=Z(t,l,d),w=n?.enabled!==!1,h=n?.duration??200,y=n?.easing??"ease-out",E=w?`transition: opacity ${h}ms ${y}, visibility ${h}ms ${y};`:"";return`
2
2
  .${o} {
3
3
  position: fixed;
4
4
  top: 0;
@@ -1,4 +1,4 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),common_script_index=require("../../common/script/index.cjs"),common_validation_index=require("../../common/validation/index.cjs"),common_html_index=require("../../common/html/index.cjs");require("../../logger/index.cjs"),require("../../common/object/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs");function generateCSS(e,n){const u=".__vuc-overlay__{position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;pointer-events:none;}";let t="";switch(e){case"modal":t=`.__vuc-modal__{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,0.15);padding:32px;max-width:420px;width:90%;z-index:100000;pointer-events:auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;text-align:center;}
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),common_script_index=require("../../common/script/index.cjs"),validators=require("../../shared/vite-plugin.soT9a-KD.cjs"),common_html_index=require("../../common/html/index.cjs");require("../../logger/index.cjs"),require("../../common/object/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("../../shared/vite-plugin.BrI73DHA.cjs");function generateCSS(e,n){const u=".__vuc-overlay__{position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;pointer-events:none;}";let t="";switch(e){case"modal":t=`.__vuc-modal__{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,0.15);padding:32px;max-width:420px;width:90%;z-index:100000;pointer-events:auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;text-align:center;}
2
2
  .__vuc-modal-title__{font-size:18px;font-weight:600;color:#1a1a2e;margin:0 0 12px 0;}
3
3
  .__vuc-modal-body__{font-size:14px;color:#555;line-height:1.6;margin:0 0 8px 0;}
4
4
  .__vuc-modal-version__{font-size:12px;color:#999;margin:0 0 24px 0;}
@@ -182,4 +182,4 @@
182
182
  }
183
183
  })();`}function generateMetaTag(e){const n=e.versionSource||"auto";return n!=="file"&&n!=="auto"?"":`<meta name="app-version" content="${e.defineName||"__APP_VERSION__"}">`}function generateFullInjectCode(e){const n=generateCSS(e.promptStyle||"modal",e.customStyle),u=generateHTMLTemplate(e),t=generateCheckerCode(e);return`${n}
184
184
  <div id="__vuc-root__" style="display:none">${u}</div>
185
- <script>${t}<\/script>`}function validateCallbacks(e){common_validation_index.validateCallbackFields(e,["onUpdateAvailable","onRefresh","onDismiss"],"callbacks")}function validateAll(e){common_validation_index.validateNoScriptInTemplate(e.customPromptTemplate,"customPromptTemplate"),validateCallbacks(e),common_validation_index.validateGlobalName(e.defineName,"defineName")}class p extends factory_index.BasePlugin{getDefaultOptions(){return{versionSource:"auto",defineName:"__APP_VERSION__",checkUrl:"/version.json",checkInterval:3e5,checkOnVisibilityChange:!0,enableInDev:!1,promptStyle:"modal",promptMessage:"\u53D1\u73B0\u65B0\u7248\u672C\uFF0C\u662F\u5426\u7ACB\u5373\u5237\u65B0\u83B7\u53D6\u6700\u65B0\u5185\u5BB9\uFF1F",refreshButtonText:"\u7ACB\u5373\u5237\u65B0",dismissButtonText:"\u7A0D\u540E\u518D\u8BF4"}}validateOptions(){this.validator.field("versionSource").enum(["define","file","auto"]).field("promptStyle").enum(["modal","banner","toast"]).field("checkInterval").number().minValue(5e3).validate(),validateAll(this.options)}getPluginName(){return"version-update-checker"}addPluginHooks(n){const u=generateFullInjectCode(this.options),t=generateMetaTag(this.options);n.transformIndexHtml={order:"post",handler:r=>{const o=common_html_index.injectHeadAndBody(r,t,u);return o.usedFallback&&this.logger.warn("\u672A\u627E\u5230 </body> \u6216 </html> \u6807\u7B7E\uFF0C\u7248\u672C\u66F4\u65B0\u68C0\u67E5\u4EE3\u7801\u8FFD\u52A0\u5230\u6587\u4EF6\u672B\u5C3E"),o.bodyInjected&&this.logger.success("\u6210\u529F\u6CE8\u5165\u7248\u672C\u66F4\u65B0\u68C0\u67E5\u4EE3\u7801\u5230 HTML \u6587\u4EF6"),o.html}}}}const versionUpdateChecker=factory_index.createPluginFactory(p);exports.versionUpdateChecker=versionUpdateChecker;
185
+ <script>${t}<\/script>`}function validateCallbacks(e){validators.validateCallbackFields(e,["onUpdateAvailable","onRefresh","onDismiss"],"callbacks")}function validateAll(e){validators.validateNoScriptInTemplate(e.customPromptTemplate,"customPromptTemplate"),validateCallbacks(e),validators.validateGlobalName(e.defineName,"defineName")}class p extends factory_index.BasePlugin{getDefaultOptions(){return{versionSource:"auto",defineName:"__APP_VERSION__",checkUrl:"/version.json",checkInterval:3e5,checkOnVisibilityChange:!0,enableInDev:!1,promptStyle:"modal",promptMessage:"\u53D1\u73B0\u65B0\u7248\u672C\uFF0C\u662F\u5426\u7ACB\u5373\u5237\u65B0\u83B7\u53D6\u6700\u65B0\u5185\u5BB9\uFF1F",refreshButtonText:"\u7ACB\u5373\u5237\u65B0",dismissButtonText:"\u7A0D\u540E\u518D\u8BF4"}}validateOptions(){this.validator.field("versionSource").enum(["define","file","auto"]).field("promptStyle").enum(["modal","banner","toast"]).field("checkInterval").number().minValue(5e3).validate(),validateAll(this.options)}getPluginName(){return"version-update-checker"}addPluginHooks(n){const u=generateFullInjectCode(this.options),t=generateMetaTag(this.options);n.transformIndexHtml={order:"post",handler:r=>{const o=common_html_index.injectHeadAndBody(r,t,u);return o.usedFallback&&this.logger.warn("\u672A\u627E\u5230 </body> \u6216 </html> \u6807\u7B7E\uFF0C\u7248\u672C\u66F4\u65B0\u68C0\u67E5\u4EE3\u7801\u8FFD\u52A0\u5230\u6587\u4EF6\u672B\u5C3E"),o.bodyInjected&&this.logger.success("\u6210\u529F\u6CE8\u5165\u7248\u672C\u66F4\u65B0\u68C0\u67E5\u4EE3\u7801\u5230 HTML \u6587\u4EF6"),o.html}}}}const versionUpdateChecker=factory_index.createPluginFactory(p);exports.versionUpdateChecker=versionUpdateChecker;
@@ -1,4 +1,4 @@
1
- import{createPluginFactory as d,BasePlugin as p}from"../../factory/index.mjs";import{makeCallback as i}from"../../common/script/index.mjs";import{validateNoScriptInTemplate as v,validateGlobalName as f,validateCallbackFields as m}from"../../common/validation/index.mjs";import{injectHeadAndBody as b}from"../../common/html/index.mjs";import"../../logger/index.mjs";import"../../common/object/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";function F(e,n){const u=".__vuc-overlay__{position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;pointer-events:none;}";let t="";switch(e){case"modal":t=`.__vuc-modal__{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,0.15);padding:32px;max-width:420px;width:90%;z-index:100000;pointer-events:auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;text-align:center;}
1
+ import{createPluginFactory as d,BasePlugin as p}from"../../factory/index.mjs";import{makeCallback as a}from"../../common/script/index.mjs";import{d as v,b as f,v as m}from"../../shared/vite-plugin.Dumot0up.mjs";import{injectHeadAndBody as b}from"../../common/html/index.mjs";import"../../logger/index.mjs";import"../../common/object/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"../../shared/vite-plugin.BCuhU1au.mjs";function F(e,n){const u=".__vuc-overlay__{position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;pointer-events:none;}";let t="";switch(e){case"modal":t=`.__vuc-modal__{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,0.15);padding:32px;max-width:420px;width:90%;z-index:100000;pointer-events:auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;text-align:center;}
2
2
  .__vuc-modal-title__{font-size:18px;font-weight:600;color:#1a1a2e;margin:0 0 12px 0;}
3
3
  .__vuc-modal-body__{font-size:14px;color:#555;line-height:1.6;margin:0 0 8px 0;}
4
4
  .__vuc-modal-version__{font-size:12px;color:#999;margin:0 0 24px 0;}
@@ -42,7 +42,7 @@ import{createPluginFactory as d,BasePlugin as p}from"../../factory/index.mjs";im
42
42
  <div class="__vuc-modal-actions__">
43
43
  <button class="__vuc-btn__ __vuc-btn-dismiss__" onclick="window.__VUC_DISMISS__()">${r}</button>
44
44
  <button class="__vuc-btn__ __vuc-btn-refresh__" onclick="window.__VUC_REFRESH__()">${t}</button>
45
- </div></div></div>`}}function h(e){const n=e.versionSource||"auto",u=e.defineName||"__APP_VERSION__",t=e.checkUrl||"/version.json",r=e.checkInterval||3e5,o=e.checkOnVisibilityChange!==!1,a=e.enableInDev||!1,_=i(e.onUpdateAvailable,"versionUpdateChecker","currentVersion, newVersion"),c=i(e.onRefresh,"versionUpdateChecker","currentVersion, newVersion"),l=i(e.onDismiss,"versionUpdateChecker","currentVersion, newVersion");let s="";return(n==="define"||n==="auto")&&(s=`
45
+ </div></div></div>`}}function h(e){const n=e.versionSource||"auto",u=e.defineName||"__APP_VERSION__",t=e.checkUrl||"/version.json",r=e.checkInterval||3e5,o=e.checkOnVisibilityChange!==!1,i=e.enableInDev||!1,_=a(e.onUpdateAvailable,"versionUpdateChecker","currentVersion, newVersion"),c=a(e.onRefresh,"versionUpdateChecker","currentVersion, newVersion"),l=a(e.onDismiss,"versionUpdateChecker","currentVersion, newVersion");let s="";return(n==="define"||n==="auto")&&(s=`
46
46
  // \u4F18\u5148\u4ECE define \u5168\u5C40\u53D8\u91CF\u8BFB\u53D6
47
47
  if (typeof ${u} !== 'undefined') return ${u};`),(n==="file"||n==="auto")&&(s+=`
48
48
  // \u4ECE\u9875\u9762 meta \u6807\u7B7E\u8BFB\u53D6
@@ -56,7 +56,7 @@ import{createPluginFactory as d,BasePlugin as p}from"../../factory/index.mjs";im
56
56
 
57
57
  // \u5F00\u53D1\u6A21\u5F0F\u68C0\u6D4B
58
58
  var _isDev = typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'development';
59
- if (_isDev && !${JSON.stringify(a)}) return;
59
+ if (_isDev && !${JSON.stringify(i)}) return;
60
60
 
61
61
  // \u72B6\u6001
62
62
  var _currentVersion = null;
@@ -0,0 +1,7 @@
1
+ import{containsScriptTag as C}from"../common/script/index.mjs";function d(u,t,r){if(r==="regex"){try{const c=new RegExp(t),e=u.match(c);if(e&&e.index!==void 0)return{index:e.index,length:e[0].length}}catch{return null}return null}const n=u.indexOf(t);return n===-1?null:{index:n,length:t.length}}function m(u,t,r){let n=u;const c={...r,...t};for(const[e,o]of Object.entries(c)){const a=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),E=o.replace(/\$/g,"$$$$");n=n.replace(new RegExp(`\\{\\{${a}\\}\\}`,"g"),E)}return n}function p(u,t){let r=!1;switch(u.type){case"env":{const n=u.value,c=process.env[n];r=!!c&&c!=="false"&&c!=="0";break}case"file-contains":{const n=u.value;r=t.includes(n);break}case"custom":{const n=u.value;try{r=!!n()}catch{r=!1}break}}return u.negate?!r:r}function w(u){return[...u].sort((t,r)=>(t.priority??100)-(r.priority??100))}function b(u,t,r,n,c){switch(r){case"head-start":{const e=u.match(/<head\b[^>]*>/i);if(!e)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 <head> \u6807\u7B7E"};const o=(e.index??0)+e[0].length;return{html:u.slice(0,o)+`
2
+ `+t+u.slice(o),injected:!0}}case"head-end":{const e=u.match(/<\/head\s*>/i);if(!e)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 </head> \u6807\u7B7E"};const o=e.index;return{html:u.slice(0,o)+t+`
3
+ `+u.slice(o),injected:!0}}case"body-start":{const e=u.match(/<body\b[^>]*>/i);if(!e)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 <body> \u6807\u7B7E"};const o=(e.index??0)+e[0].length;return{html:u.slice(0,o)+`
4
+ `+t+u.slice(o),injected:!0}}case"body-end":{const e=u.match(/<\/body\s*>/i);if(!e)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 </body> \u6807\u7B7E"};const o=e.index;return{html:u.slice(0,o)+t+`
5
+ `+u.slice(o),injected:!0}}case"before-selector":{if(!n)return{html:u,injected:!1,reason:"before-selector \u9700\u8981 selector \u53C2\u6570"};const e=d(u,n,c);return e?{html:u.slice(0,e.index)+t+`
6
+ `+u.slice(e.index),injected:!0}:{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${n}"`}}case"after-selector":{if(!n)return{html:u,injected:!1,reason:"after-selector \u9700\u8981 selector \u53C2\u6570"};const e=d(u,n,c);if(!e)return{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${n}"`};const o=e.index+e.length;return{html:u.slice(0,o)+`
7
+ `+t+u.slice(o),injected:!0}}case"replace-selector":{if(!n)return{html:u,injected:!1,reason:"replace-selector \u9700\u8981 selector \u53C2\u6570"};const e=d(u,n,c);if(!e)return{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${n}"`};const o=e.index+e.length;return{html:u.slice(0,e.index)+t+u.slice(o),injected:!0}}default:return{html:u,injected:!1,reason:`\u4E0D\u652F\u6301\u7684\u6CE8\u5165\u4F4D\u7F6E: ${r}`}}}const F=["script","iframe","object","embed","applet","form","input","textarea","select","button"],h=["onclick","ondblclick","onmouseover","onmouseout","onmousemove","onmousedown","onmouseup","onkeydown","onkeyup","onkeypress","onload","onerror","onfocus","onblur","onsubmit","onchange","oninput","oncontextmenu","ondrag","ondrop","onanimationend","ontransitionend"];function g(u){if(u){if(u.blockedTags&&!Array.isArray(u.blockedTags))throw new Error("security.blockedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(u.allowedTags&&!Array.isArray(u.allowedTags))throw new Error("security.allowedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(u.blockedAttributes&&!Array.isArray(u.blockedAttributes))throw new Error("security.blockedAttributes \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4")}}function A(u,t,r,n){const c=r?.blockDangerousTags!==!1,e=r?.blockDangerousAttributes!==!1,o=r?.blockedTags||F,a=r?.allowedTags,E=r?.blockedAttributes||h;let s=u;if(c){const l=a?o.filter(i=>!a.includes(i)):o;if(C(u))if(t.allowScriptInjection)n?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${t.id||"unnamed"}" \u5DF2\u542F\u7528\u811A\u672C\u6CE8\u5165(allowScriptInjection=true)\uFF0C\u8BF7\u786E\u4FDD\u6CE8\u5165\u5185\u5BB9\u6765\u6E90\u53EF\u4FE1\u3002\u6CE8\u5165\u811A\u672C\u53EF\u80FD\u5E26\u6765 XSS \u653B\u51FB\u98CE\u9669\u3002`);else throw new Error(`\u89C4\u5219 "${t.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B <script> \u6807\u7B7E\uFF0C\u9ED8\u8BA4\u88AB\u963B\u6B62\u3002\u5982\u9700\u6CE8\u5165\u811A\u672C\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true`);for(const i of l){if(i==="script")continue;const B=new RegExp(`<${i}\\b[^>]*>[\\s\\S]*?<\\/${i}>`,"gi"),f=new RegExp(`<${i}\\b[^>]*/?>`,"gi");if(B.test(s)||f.test(s))if(t.allowScriptInjection){n?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${t.id||"unnamed"}" \u5305\u542B\u88AB\u963B\u6B62\u7684\u6807\u7B7E <${i}>\uFF0C\u5DF2\u901A\u8FC7 allowScriptInjection \u8DF3\u8FC7\u5B89\u5168\u68C0\u67E5\uFF0C\u8BF7\u786E\u4FDD\u5185\u5BB9\u53EF\u4FE1\u3002`);continue}else throw new Error(`\u89C4\u5219 "${t.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B\u88AB\u963B\u6B62\u7684\u6807\u7B7E <${i}>\u3002\u5982\u9700\u6CE8\u5165\u6B64\u6807\u7B7E\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true \u6216\u5728 security.allowedTags \u4E2D\u6DFB\u52A0 "${i}"`);s=s.replace(B,""),s=s.replace(f,"")}}if(e)for(const l of E){const i=new RegExp(`\\s${l}\\s*=\\s*["'][^"']*["']`,"gi");if(i.test(s))if(t.allowScriptInjection){n?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${t.id||"unnamed"}" \u5305\u542B\u5371\u9669\u5C5E\u6027 ${l}\uFF0C\u5DF2\u901A\u8FC7 allowScriptInjection \u8DF3\u8FC7\u5B89\u5168\u68C0\u67E5\uFF0C\u8BF7\u786E\u4FDD\u5185\u5BB9\u53EF\u4FE1\u3002`);continue}else throw new Error(`\u89C4\u5219 "${t.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B\u5371\u9669\u5C5E\u6027 ${l}\u3002\u5982\u9700\u6CE8\u5165\u6B64\u5C5E\u6027\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true`);s=s.replace(i,"")}return s}export{h as D,F as a,m as b,w as c,p as e,d as f,b as i,A as s,g as v};
@@ -0,0 +1,7 @@
1
+ "use strict";const common_script_index=require("../common/script/index.cjs");function findSelectorMatch(u,t,r){if(r==="regex"){try{const i=new RegExp(t),e=u.match(i);if(e&&e.index!==void 0)return{index:e.index,length:e[0].length}}catch{return null}return null}const n=u.indexOf(t);return n===-1?null:{index:n,length:t.length}}function applyTemplateVars(u,t,r){let n=u;const i={...r,...t};for(const[e,o]of Object.entries(i)){const a=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=o.replace(/\$/g,"$$$$");n=n.replace(new RegExp(`\\{\\{${a}\\}\\}`,"g"),d)}return n}function evaluateCondition(u,t){let r=!1;switch(u.type){case"env":{const n=u.value,i=process.env[n];r=!!i&&i!=="false"&&i!=="0";break}case"file-contains":{const n=u.value;r=t.includes(n);break}case"custom":{const n=u.value;try{r=!!n()}catch{r=!1}break}}return u.negate?!r:r}function sortRulesByPriority(u){return[...u].sort((t,r)=>(t.priority??100)-(r.priority??100))}function injectAtPosition(u,t,r,n,i){switch(r){case"head-start":{const e=u.match(/<head\b[^>]*>/i);if(!e)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 <head> \u6807\u7B7E"};const o=(e.index??0)+e[0].length;return{html:u.slice(0,o)+`
2
+ `+t+u.slice(o),injected:!0}}case"head-end":{const e=u.match(/<\/head\s*>/i);if(!e)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 </head> \u6807\u7B7E"};const o=e.index;return{html:u.slice(0,o)+t+`
3
+ `+u.slice(o),injected:!0}}case"body-start":{const e=u.match(/<body\b[^>]*>/i);if(!e)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 <body> \u6807\u7B7E"};const o=(e.index??0)+e[0].length;return{html:u.slice(0,o)+`
4
+ `+t+u.slice(o),injected:!0}}case"body-end":{const e=u.match(/<\/body\s*>/i);if(!e)return{html:u,injected:!1,reason:"\u672A\u627E\u5230 </body> \u6807\u7B7E"};const o=e.index;return{html:u.slice(0,o)+t+`
5
+ `+u.slice(o),injected:!0}}case"before-selector":{if(!n)return{html:u,injected:!1,reason:"before-selector \u9700\u8981 selector \u53C2\u6570"};const e=findSelectorMatch(u,n,i);return e?{html:u.slice(0,e.index)+t+`
6
+ `+u.slice(e.index),injected:!0}:{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${n}"`}}case"after-selector":{if(!n)return{html:u,injected:!1,reason:"after-selector \u9700\u8981 selector \u53C2\u6570"};const e=findSelectorMatch(u,n,i);if(!e)return{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${n}"`};const o=e.index+e.length;return{html:u.slice(0,o)+`
7
+ `+t+u.slice(o),injected:!0}}case"replace-selector":{if(!n)return{html:u,injected:!1,reason:"replace-selector \u9700\u8981 selector \u53C2\u6570"};const e=findSelectorMatch(u,n,i);if(!e)return{html:u,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${n}"`};const o=e.index+e.length;return{html:u.slice(0,e.index)+t+u.slice(o),injected:!0}}default:return{html:u,injected:!1,reason:`\u4E0D\u652F\u6301\u7684\u6CE8\u5165\u4F4D\u7F6E: ${r}`}}}const DEFAULT_BLOCKED_TAGS=["script","iframe","object","embed","applet","form","input","textarea","select","button"],DEFAULT_BLOCKED_ATTRIBUTES=["onclick","ondblclick","onmouseover","onmouseout","onmousemove","onmousedown","onmouseup","onkeydown","onkeyup","onkeypress","onload","onerror","onfocus","onblur","onsubmit","onchange","oninput","oncontextmenu","ondrag","ondrop","onanimationend","ontransitionend"];function validateSecurityConfig(u){if(u){if(u.blockedTags&&!Array.isArray(u.blockedTags))throw new Error("security.blockedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(u.allowedTags&&!Array.isArray(u.allowedTags))throw new Error("security.allowedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(u.blockedAttributes&&!Array.isArray(u.blockedAttributes))throw new Error("security.blockedAttributes \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4")}}function sanitizeContent(u,t,r,n){const i=r?.blockDangerousTags!==!1,e=r?.blockDangerousAttributes!==!1,o=r?.blockedTags||DEFAULT_BLOCKED_TAGS,a=r?.allowedTags,d=r?.blockedAttributes||DEFAULT_BLOCKED_ATTRIBUTES;let s=u;if(i){const l=a?o.filter(c=>!a.includes(c)):o;if(common_script_index.containsScriptTag(u))if(t.allowScriptInjection)n?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${t.id||"unnamed"}" \u5DF2\u542F\u7528\u811A\u672C\u6CE8\u5165(allowScriptInjection=true)\uFF0C\u8BF7\u786E\u4FDD\u6CE8\u5165\u5185\u5BB9\u6765\u6E90\u53EF\u4FE1\u3002\u6CE8\u5165\u811A\u672C\u53EF\u80FD\u5E26\u6765 XSS \u653B\u51FB\u98CE\u9669\u3002`);else throw new Error(`\u89C4\u5219 "${t.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B <script> \u6807\u7B7E\uFF0C\u9ED8\u8BA4\u88AB\u963B\u6B62\u3002\u5982\u9700\u6CE8\u5165\u811A\u672C\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true`);for(const c of l){if(c==="script")continue;const E=new RegExp(`<${c}\\b[^>]*>[\\s\\S]*?<\\/${c}>`,"gi"),B=new RegExp(`<${c}\\b[^>]*/?>`,"gi");if(E.test(s)||B.test(s))if(t.allowScriptInjection){n?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${t.id||"unnamed"}" \u5305\u542B\u88AB\u963B\u6B62\u7684\u6807\u7B7E <${c}>\uFF0C\u5DF2\u901A\u8FC7 allowScriptInjection \u8DF3\u8FC7\u5B89\u5168\u68C0\u67E5\uFF0C\u8BF7\u786E\u4FDD\u5185\u5BB9\u53EF\u4FE1\u3002`);continue}else throw new Error(`\u89C4\u5219 "${t.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B\u88AB\u963B\u6B62\u7684\u6807\u7B7E <${c}>\u3002\u5982\u9700\u6CE8\u5165\u6B64\u6807\u7B7E\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true \u6216\u5728 security.allowedTags \u4E2D\u6DFB\u52A0 "${c}"`);s=s.replace(E,""),s=s.replace(B,"")}}if(e)for(const l of d){const c=new RegExp(`\\s${l}\\s*=\\s*["'][^"']*["']`,"gi");if(c.test(s))if(t.allowScriptInjection){n?.warn(`[\u5B89\u5168\u8B66\u544A] \u89C4\u5219 "${t.id||"unnamed"}" \u5305\u542B\u5371\u9669\u5C5E\u6027 ${l}\uFF0C\u5DF2\u901A\u8FC7 allowScriptInjection \u8DF3\u8FC7\u5B89\u5168\u68C0\u67E5\uFF0C\u8BF7\u786E\u4FDD\u5185\u5BB9\u53EF\u4FE1\u3002`);continue}else throw new Error(`\u89C4\u5219 "${t.id||"unnamed"}" \u7684\u5185\u5BB9\u5305\u542B\u5371\u9669\u5C5E\u6027 ${l}\u3002\u5982\u9700\u6CE8\u5165\u6B64\u5C5E\u6027\uFF0C\u8BF7\u8BBE\u7F6E allowScriptInjection: true`);s=s.replace(c,"")}return s}exports.DEFAULT_BLOCKED_ATTRIBUTES=DEFAULT_BLOCKED_ATTRIBUTES,exports.DEFAULT_BLOCKED_TAGS=DEFAULT_BLOCKED_TAGS,exports.applyTemplateVars=applyTemplateVars,exports.evaluateCondition=evaluateCondition,exports.findSelectorMatch=findSelectorMatch,exports.injectAtPosition=injectAtPosition,exports.sanitizeContent=sanitizeContent,exports.sortRulesByPriority=sortRulesByPriority,exports.validateSecurityConfig=validateSecurityConfig;