@meng-xi/vite-plugin 0.1.6 → 0.1.8

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 (66) hide show
  1. package/README-en.md +42 -16
  2. package/README.md +55 -29
  3. package/dist/common/concurrency/index.cjs +1 -0
  4. package/dist/common/concurrency/index.d.cts +26 -0
  5. package/dist/common/concurrency/index.d.mts +26 -0
  6. package/dist/common/concurrency/index.d.ts +26 -0
  7. package/dist/common/concurrency/index.mjs +1 -0
  8. package/dist/common/format/index.cjs +1 -1
  9. package/dist/common/format/index.d.cts +19 -1
  10. package/dist/common/format/index.d.mts +19 -1
  11. package/dist/common/format/index.d.ts +19 -1
  12. package/dist/common/format/index.mjs +1 -1
  13. package/dist/common/fs/index.cjs +1 -1
  14. package/dist/common/fs/index.d.cts +19 -1
  15. package/dist/common/fs/index.d.mts +19 -1
  16. package/dist/common/fs/index.d.ts +19 -1
  17. package/dist/common/fs/index.mjs +1 -1
  18. package/dist/common/index.cjs +1 -1
  19. package/dist/common/index.d.cts +4 -2
  20. package/dist/common/index.d.mts +4 -2
  21. package/dist/common/index.d.ts +4 -2
  22. package/dist/common/index.mjs +1 -1
  23. package/dist/common/path/index.cjs +1 -0
  24. package/dist/common/path/index.d.cts +103 -0
  25. package/dist/common/path/index.d.mts +103 -0
  26. package/dist/common/path/index.d.ts +103 -0
  27. package/dist/common/path/index.mjs +1 -0
  28. package/dist/index.cjs +1 -1
  29. package/dist/index.d.cts +6 -2
  30. package/dist/index.d.mts +6 -2
  31. package/dist/index.d.ts +6 -2
  32. package/dist/index.mjs +1 -1
  33. package/dist/plugins/assetManifest/index.cjs +1 -0
  34. package/dist/plugins/assetManifest/index.d.cts +162 -0
  35. package/dist/plugins/assetManifest/index.d.mts +162 -0
  36. package/dist/plugins/assetManifest/index.d.ts +162 -0
  37. package/dist/plugins/assetManifest/index.mjs +1 -0
  38. package/dist/plugins/autoImport/index.cjs +13 -13
  39. package/dist/plugins/autoImport/index.mjs +8 -8
  40. package/dist/plugins/bundleAnalyzer/index.cjs +1 -1
  41. package/dist/plugins/bundleAnalyzer/index.mjs +2 -2
  42. package/dist/plugins/compressAssets/index.cjs +1 -1
  43. package/dist/plugins/compressAssets/index.mjs +1 -1
  44. package/dist/plugins/copyFile/index.cjs +1 -1
  45. package/dist/plugins/copyFile/index.mjs +1 -1
  46. package/dist/plugins/envGuard/index.cjs +1 -1
  47. package/dist/plugins/envGuard/index.mjs +1 -1
  48. package/dist/plugins/faviconManager/index.cjs +1 -1
  49. package/dist/plugins/faviconManager/index.mjs +1 -1
  50. package/dist/plugins/generateRouter/index.cjs +3 -3
  51. package/dist/plugins/generateRouter/index.mjs +1 -1
  52. package/dist/plugins/generateVersion/index.cjs +1 -1
  53. package/dist/plugins/generateVersion/index.mjs +1 -1
  54. package/dist/plugins/htmlInject/index.cjs +7 -7
  55. package/dist/plugins/htmlInject/index.mjs +2 -2
  56. package/dist/plugins/imageOptimizer/index.cjs +5 -0
  57. package/dist/plugins/imageOptimizer/index.d.cts +242 -0
  58. package/dist/plugins/imageOptimizer/index.d.mts +242 -0
  59. package/dist/plugins/imageOptimizer/index.d.ts +242 -0
  60. package/dist/plugins/imageOptimizer/index.mjs +5 -0
  61. package/dist/plugins/index.cjs +1 -1
  62. package/dist/plugins/index.d.cts +2 -0
  63. package/dist/plugins/index.d.mts +2 -0
  64. package/dist/plugins/index.d.ts +2 -0
  65. package/dist/plugins/index.mjs +1 -1
  66. package/package.json +25 -1
@@ -1,4 +1,4 @@
1
- import{createPluginFactory as k,BasePlugin as I}from"../../factory/index.mjs";import f from"node:fs";import c from"node:path";import{shouldUpdateFileContent as E,writeFileSyncSafely as F}from"../../common/fs/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"path";function x(s,e){const t=v(s,e);if(t.length>0)return t;const n=c.isAbsolute(s)?s:c.resolve(e,s),o=["",".ts",".js",".mts",".mjs","/index.ts","/index.js"];for(const u of o){const r=n+u;if(f.existsSync(r)&&f.statSync(r).isFile()){const l=y(r);if(l&&l.exports.length>0)return l.exports}}const i=R(s,e);if(i){const u=y(i);if(u&&u.exports.length>0)return u.exports}return[]}function v(s,e){try{let t=null;try{const r=require.resolve(s,{paths:[e]});let l=c.dirname(r);for(;l!==c.dirname(l);){if(f.existsSync(c.join(l,"package.json"))){t=l;break}l=c.dirname(l)}}catch{}if(!t){const r=c.resolve(e,"node_modules",s);f.existsSync(c.join(r,"package.json"))&&(t=r)}if(!t)return[];const n=c.join(t,"package.json"),o=JSON.parse(f.readFileSync(n,"utf-8"));let i=null;const u=o.types||o.typings;if(u&&typeof u=="string"){const r=c.resolve(t,u);f.existsSync(r)&&(i=r)}if(!i&&o.exports){const r=o.exports["."];if(r){const l=typeof r=="string"?null:r.import?.types||r.types||r.default?.types;if(typeof l=="string"){const a=c.resolve(t,l);f.existsSync(a)&&(i=a)}}}if(!i){const r=["dist/index.d.ts","index.d.ts","dist/index.d.mts","index.d.mts"];for(const l of r){const a=c.resolve(t,l);if(f.existsSync(a)){i=a;break}}}return i?b(i,e,new Set):[]}catch{return[]}}function b(s,e,t){if(t.has(s))return[];t.add(s);const n=new Set;try{const o=f.readFileSync(s,"utf-8"),i=/export\s*\{([^}]+)\}/g;let u;for(;(u=i.exec(o))!==null;){const h=u[1].split(",").map(p=>{const m=p.trim().split(/\s+as\s+/);return m.length>1?m[m.length-1].trim():m[0].trim()});for(const p of h)p&&p!=="default"&&n.add(p)}const r=/export\s+declare\s+(?:const|let|var|function|class)\s+(\w+)/g;for(;(u=r.exec(o))!==null;)n.add(u[1]);const l=/export\s+(?:type|interface)\s+(\w+)/g;for(;(u=l.exec(o))!==null;)n.add(u[1]);const a=/export\s+\*\s+from\s+['"]([^'"]+)['"]/g;for(;(u=a.exec(o))!==null;){const h=u[1],p=D(h,s,e,t);for(const m of p)n.add(m)}}catch{}return[...n]}function D(s,e,t,n){if(s.startsWith(".")){const o=c.dirname(e),i=[".d.ts",".d.mts","/index.d.ts","/index.d.mts"];for(const u of i){const r=c.resolve(o,s+u);if(f.existsSync(r))return b(r,t,n)}}return v(s,t)}function R(s,e){try{const t=require.resolve(s,{paths:[e]});if(f.existsSync(t))return t}catch{}try{let t=null;try{const u=require.resolve(s,{paths:[e]});let r=c.dirname(u);for(;r!==c.dirname(r);){if(f.existsSync(c.join(r,"package.json"))){t=r;break}r=c.dirname(r)}}catch{}if(!t){const u=c.resolve(e,"node_modules",s);f.existsSync(c.join(u,"package.json"))&&(t=u)}if(!t)return null;const n=c.join(t,"package.json"),o=JSON.parse(f.readFileSync(n,"utf-8"));if(o.exports){const u=typeof o.exports=="string"?o.exports:o.exports["."]?.import||o.exports["."]?.default||o.exports["."];if(typeof u=="string"){const r=c.resolve(t,u);if(f.existsSync(r))return r}}if(o.main){const u=c.resolve(t,o.main);if(f.existsSync(u))return u}const i=c.resolve(t,"index.js");return f.existsSync(i)?i:null}catch{return null}}function C(s,e){if(!s)return[];const t=[];if(Array.isArray(s))for(const n of s)if("module"in n&&"names"in n){const o=n;if(o.names.includes("*")){const i=e||process.cwd(),u=x(o.module,i);for(const r of u)t.push({module:o.module,name:r,isDefault:o.defaultImport??!1})}else for(const i of o.names)t.push({module:o.module,name:i,isDefault:o.defaultImport??!1})}else{const o=n;for(const[i,u]of Object.entries(o))if(u.includes("*")){const r=e||process.cwd(),l=x(i,r);for(const a of l)t.push({module:i,name:a,isDefault:!1})}else for(const r of u)t.push({module:i,name:r,isDefault:!1})}else for(const[n,o]of Object.entries(s))if(o.includes("*")){const i=e||process.cwd(),u=x(n,i);for(const r of u)t.push({module:n,name:r,isDefault:!1})}else for(const i of o)t.push({module:n,name:i,isDefault:!1});return t}function B(s){const e=new Map;for(const t of s)e.set(t.name,t);return e}function _(s){const e=c.basename(s,c.extname(s));return e==="index"?c.basename(c.dirname(s)):e}function P(s,e){const t=[];for(const n of s){const o=c.isAbsolute(n)?n:c.resolve(e,n);!f.existsSync(o)||!f.statSync(o).isDirectory()||j(o,t)}return t}function j(s,e){const t=f.readdirSync(s,{withFileTypes:!0});for(const n of t){const o=c.join(s,n.name);if(n.isDirectory()){if(n.name==="node_modules"||n.name.startsWith("."))continue;j(o,e);continue}if(!n.isFile())continue;const i=c.extname(n.name).toLowerCase();if(![".ts",".js",".mts",".mjs"].includes(i)||n.name.endsWith(".d.ts"))continue;const u=y(o);u&&e.push(u)}}function y(s){try{const e=f.readFileSync(s,"utf-8"),t=[];let n=null;const o=/export\s+(?:async\s+)?function\s+(\w+)/g;let i;for(;(i=o.exec(e))!==null;)t.push(i[1]);const u=/export\s+(?:const|let|var)\s+(\w+)/g;for(;(i=u.exec(e))!==null;)t.push(i[1]);const r=/export\s+class\s+(\w+)/g;for(;(i=r.exec(e))!==null;)t.push(i[1]);const l=/export\s*\{([^}]+)\}/g;for(;(i=l.exec(e))!==null;){const m=i[1].split(",").map(g=>{const d=g.trim().split(/\s+as\s+/);return d.length>1?d[d.length-1].trim():d[0].trim()});for(const g of m)g&&g!=="default"&&t.push(g)}const a=/export\s+default\s+(?:function\s+(\w+)|class\s+(\w+)|(\w+))?/.exec(e);a&&(n=a[1]||a[2]||a[3]||_(s));const h=/export\s+(?:type|interface)\s+(\w+)/g;for(;(i=h.exec(e))!==null;)t.push(i[1]);const p=/^(?:exports\.(\w+)\s*=|module\.exports\s*=\s*\{)/gm;for(;(i=p.exec(e))!==null;)i[1]&&t.push(i[1]);return t.length===0&&n===null?null:{filePath:s,exports:t,defaultExport:n}}catch{return null}}function M(s){const e=[];for(const t of s){for(const n of t.exports)e.push({module:t.filePath,name:n,isDefault:!1});t.defaultExport&&e.push({module:t.filePath,name:t.defaultExport,isDefault:!0})}return e}const $=new Set(["break","case","catch","continue","debugger","default","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","with","class","const","enum","export","extends","import","super","implements","interface","let","package","private","protected","public","static","yield","async","await","of","true","false","null","undefined","NaN","Infinity","console","window","document","global","globalThis","process","require","module","exports","__dirname","__filename","Object","Array","String","Number","Boolean","Symbol","BigInt","Map","Set","WeakMap","WeakSet","Promise","Proxy","Reflect","Error","TypeError","RangeError","SyntaxError","ReferenceError","Date","RegExp","Math","JSON","Intl","ArrayBuffer","DataView","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Uint8ClampedArray"]);function L(s){const e=[];let t=0;const n=s.length;for(;t<n;){if(s[t]==="/"&&s[t+1]==="/"){for(;t<n&&s[t]!==`
1
+ import{createPluginFactory as A,BasePlugin as I}from"../../factory/index.mjs";import f from"node:fs";import l from"node:path";import{shouldUpdateFileContent as E,writeFileSyncSafely as F}from"../../common/fs/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"path";import"../../common/concurrency/index.mjs";function x(s,e){const t=S(s,e);if(t.length>0)return t;const n=l.isAbsolute(s)?s:l.resolve(e,s),o=["",".ts",".js",".mts",".mjs","/index.ts","/index.js"];for(const u of o){const r=n+u;if(f.existsSync(r)&&f.statSync(r).isFile()){const a=y(r);if(a&&a.exports.length>0)return a.exports}}const i=R(s,e);if(i){const u=y(i);if(u&&u.exports.length>0)return u.exports}return[]}function S(s,e){try{let t=null;try{const r=require.resolve(s,{paths:[e]});let a=l.dirname(r);for(;a!==l.dirname(a);){if(f.existsSync(l.join(a,"package.json"))){t=a;break}a=l.dirname(a)}}catch{}if(!t){const r=l.resolve(e,"node_modules",s);f.existsSync(l.join(r,"package.json"))&&(t=r)}if(!t)return[];const n=l.join(t,"package.json"),o=JSON.parse(f.readFileSync(n,"utf-8"));let i=null;const u=o.types||o.typings;if(u&&typeof u=="string"){const r=l.resolve(t,u);f.existsSync(r)&&(i=r)}if(!i&&o.exports){const r=o.exports["."];if(r){const a=typeof r=="string"?null:r.import?.types||r.types||r.default?.types;if(typeof a=="string"){const c=l.resolve(t,a);f.existsSync(c)&&(i=c)}}}if(!i){const r=["dist/index.d.ts","index.d.ts","dist/index.d.mts","index.d.mts"];for(const a of r){const c=l.resolve(t,a);if(f.existsSync(c)){i=c;break}}}return i?b(i,e,new Set):[]}catch{return[]}}function b(s,e,t){if(t.has(s))return[];t.add(s);const n=new Set;try{const o=f.readFileSync(s,"utf-8"),i=/export\s*\{([^}]+)\}/g;let u;for(;(u=i.exec(o))!==null;){const h=u[1].split(",").map(p=>{const m=p.trim().split(/\s+as\s+/);return m.length>1?m[m.length-1].trim():m[0].trim()});for(const p of h)p&&p!=="default"&&n.add(p)}const r=/export\s+declare\s+(?:const|let|var|function|class)\s+(\w+)/g;for(;(u=r.exec(o))!==null;)n.add(u[1]);const a=/export\s+(?:type|interface)\s+(\w+)/g;for(;(u=a.exec(o))!==null;)n.add(u[1]);const c=/export\s+\*\s+from\s+['"]([^'"]+)['"]/g;for(;(u=c.exec(o))!==null;){const h=u[1],p=D(h,s,e,t);for(const m of p)n.add(m)}}catch{}return[...n]}function D(s,e,t,n){if(s.startsWith(".")){const o=l.dirname(e),i=[".d.ts",".d.mts","/index.d.ts","/index.d.mts"];for(const u of i){const r=l.resolve(o,s+u);if(f.existsSync(r))return b(r,t,n)}}return S(s,t)}function R(s,e){try{const t=require.resolve(s,{paths:[e]});if(f.existsSync(t))return t}catch{}try{let t=null;try{const u=require.resolve(s,{paths:[e]});let r=l.dirname(u);for(;r!==l.dirname(r);){if(f.existsSync(l.join(r,"package.json"))){t=r;break}r=l.dirname(r)}}catch{}if(!t){const u=l.resolve(e,"node_modules",s);f.existsSync(l.join(u,"package.json"))&&(t=u)}if(!t)return null;const n=l.join(t,"package.json"),o=JSON.parse(f.readFileSync(n,"utf-8"));if(o.exports){const u=typeof o.exports=="string"?o.exports:o.exports["."]?.import||o.exports["."]?.default||o.exports["."];if(typeof u=="string"){const r=l.resolve(t,u);if(f.existsSync(r))return r}}if(o.main){const u=l.resolve(t,o.main);if(f.existsSync(u))return u}const i=l.resolve(t,"index.js");return f.existsSync(i)?i:null}catch{return null}}function C(s,e){if(!s)return[];const t=[];if(Array.isArray(s))for(const n of s)if("module"in n&&"names"in n){const o=n;if(o.names.includes("*")){const i=e||process.cwd(),u=x(o.module,i);for(const r of u)t.push({module:o.module,name:r,isDefault:o.defaultImport??!1})}else for(const i of o.names)t.push({module:o.module,name:i,isDefault:o.defaultImport??!1})}else{const o=n;for(const[i,u]of Object.entries(o))if(u.includes("*")){const r=e||process.cwd(),a=x(i,r);for(const c of a)t.push({module:i,name:c,isDefault:!1})}else for(const r of u)t.push({module:i,name:r,isDefault:!1})}else for(const[n,o]of Object.entries(s))if(o.includes("*")){const i=e||process.cwd(),u=x(n,i);for(const r of u)t.push({module:n,name:r,isDefault:!1})}else for(const i of o)t.push({module:n,name:i,isDefault:!1});return t}function B(s){const e=new Map;for(const t of s)e.set(t.name,t);return e}function _(s){const e=l.basename(s,l.extname(s));return e==="index"?l.basename(l.dirname(s)):e}function P(s,e){const t=[];for(const n of s){const o=l.isAbsolute(n)?n:l.resolve(e,n);!f.existsSync(o)||!f.statSync(o).isDirectory()||j(o,t)}return t}function j(s,e){const t=f.readdirSync(s,{withFileTypes:!0});for(const n of t){const o=l.join(s,n.name);if(n.isDirectory()){if(n.name==="node_modules"||n.name.startsWith("."))continue;j(o,e);continue}if(!n.isFile())continue;const i=l.extname(n.name).toLowerCase();if(![".ts",".js",".mts",".mjs"].includes(i)||n.name.endsWith(".d.ts"))continue;const u=y(o);u&&e.push(u)}}function y(s){try{const e=f.readFileSync(s,"utf-8"),t=[];let n=null;const o=/export\s+(?:async\s+)?function\s+(\w+)/g;let i;for(;(i=o.exec(e))!==null;)t.push(i[1]);const u=/export\s+(?:const|let|var)\s+(\w+)/g;for(;(i=u.exec(e))!==null;)t.push(i[1]);const r=/export\s+class\s+(\w+)/g;for(;(i=r.exec(e))!==null;)t.push(i[1]);const a=/export\s*\{([^}]+)\}/g;for(;(i=a.exec(e))!==null;){const m=i[1].split(",").map(g=>{const d=g.trim().split(/\s+as\s+/);return d.length>1?d[d.length-1].trim():d[0].trim()});for(const g of m)g&&g!=="default"&&t.push(g)}const c=/export\s+default\s+(?:function\s+(\w+)|class\s+(\w+)|(\w+))?/.exec(e);c&&(n=c[1]||c[2]||c[3]||_(s));const h=/export\s+(?:type|interface)\s+(\w+)/g;for(;(i=h.exec(e))!==null;)t.push(i[1]);const p=/^(?:exports\.(\w+)\s*=|module\.exports\s*=\s*\{)/gm;for(;(i=p.exec(e))!==null;)i[1]&&t.push(i[1]);return t.length===0&&n===null?null:{filePath:s,exports:t,defaultExport:n}}catch{return null}}function M(s){const e=[];for(const t of s){for(const n of t.exports)e.push({module:t.filePath,name:n,isDefault:!1});t.defaultExport&&e.push({module:t.filePath,name:t.defaultExport,isDefault:!0})}return e}const k=new Set(["break","case","catch","continue","debugger","default","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","with","class","const","enum","export","extends","import","super","implements","interface","let","package","private","protected","public","static","yield","async","await","of","true","false","null","undefined","NaN","Infinity","console","window","document","global","globalThis","process","require","module","exports","__dirname","__filename","Object","Array","String","Number","Boolean","Symbol","BigInt","Map","Set","WeakMap","WeakSet","Promise","Proxy","Reflect","Error","TypeError","RangeError","SyntaxError","ReferenceError","Date","RegExp","Math","JSON","Intl","ArrayBuffer","DataView","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Uint8ClampedArray"]);function L(s){const e=[];let t=0;const n=s.length;for(;t<n;){if(s[t]==="/"&&s[t+1]==="/"){for(;t<n&&s[t]!==`
2
2
  `;)e.push(" "),t++;continue}if(s[t]==="/"&&s[t+1]==="*"){for(e.push(" "),e.push(" "),t+=2;t<n&&!(s[t-1]==="*"&&s[t]==="/");)e.push(s[t]===`
3
3
  `?`
4
4
  `:" "),t++;t<n&&(e.push(" "),t++);continue}if(s[t]==="'"){for(e.push(" "),t++;t<n&&s[t]!=="'";){if(s[t]==="\\"&&t+1<n){e.push(" "),e.push(" "),t+=2;continue}e.push(s[t]===`
@@ -7,13 +7,13 @@ import{createPluginFactory as k,BasePlugin as I}from"../../factory/index.mjs";im
7
7
  `?`
8
8
  `:" "),t++}t<n&&(e.push(" "),t++);continue}if(s[t]==="`"){for(e.push(" "),t++;t<n&&s[t]!=="`";){if(s[t]==="\\"&&t+1<n){e.push(" "),e.push(" "),t+=2;continue}if(s[t]==="$"&&s[t+1]==="{"){e.push(" "),e.push(" "),t+=2;let o=1;for(;t<n&&o>0;)s[t]==="{"&&o++,s[t]==="}"&&o--,o>0&&(e.push(s[t]),t++);t<n&&(e.push(" "),t++);continue}e.push(s[t]===`
9
9
  `?`
10
- `:" "),t++}t<n&&(e.push(" "),t++);continue}e.push(s[t]),t++}return e.join("")}function w(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function N(s,e,t){const n=[],o=new Set,i=L(s),u=/(?<![.\w$])([a-zA-Z_$][\w$]*)(?=\s*[<(.,:;\n\r)\]}]|$)/g;let r;for(;(r=u.exec(i))!==null;){const l=r[1];if($.has(l)||o.has(l)||t.has(l))continue;const a=e.get(l);a&&(o.add(l),n.push(a))}return n}function O(s,e){return!!(new RegExp(`import\\s*\\{[^}]*\\b${w(e)}\\b[^}]*\\}\\s*from`,"m").test(s)||new RegExp(`import\\s+${w(e)}\\s+from`,"m").test(s)||new RegExp(`import\\s*\\*\\s*as\\s+${w(e)}\\s+from`,"m").test(s))}function z(s){const e=new Map;for(const n of s){e.has(n.module)||e.set(n.module,{named:[],default_:null});const o=e.get(n.module);n.isDefault?o.default_===null&&(o.default_=n.name):o.named.includes(n.name)||o.named.push(n.name)}const t=[];for(const[n,o]of e){const i=[];o.default_&&i.push(o.default_),o.named.length>0&&i.push(`{ ${o.named.join(", ")} }`),i.length>0&&t.push(`import ${i.join(", ")} from '${n}'`)}return t.join(`
11
- `)}function T(s,e,t){if(!e.trim())return s;if(t==="top")return A(s,e);const n=U(s);return n===-1?A(s,e):s.slice(0,n)+`
10
+ `:" "),t++}t<n&&(e.push(" "),t++);continue}e.push(s[t]),t++}return e.join("")}function w(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function N(s,e,t){const n=[],o=new Set,i=L(s),u=/(?<![.\w$])([a-zA-Z_$][\w$]*)(?=\s*[<(.,:;\n\r)\]}]|$)/g;let r;for(;(r=u.exec(i))!==null;){const a=r[1];if(k.has(a)||o.has(a)||t.has(a))continue;const c=e.get(a);c&&(o.add(a),n.push(c))}return n}function O(s,e){return!!(new RegExp(`import\\s*\\{[^}]*\\b${w(e)}\\b[^}]*\\}\\s*from`,"m").test(s)||new RegExp(`import\\s+${w(e)}\\s+from`,"m").test(s)||new RegExp(`import\\s*\\*\\s*as\\s+${w(e)}\\s+from`,"m").test(s))}function q(s){const e=new Map;for(const n of s){e.has(n.module)||e.set(n.module,{named:[],default_:null});const o=e.get(n.module);n.isDefault?o.default_===null&&(o.default_=n.name):o.named.includes(n.name)||o.named.push(n.name)}const t=[];for(const[n,o]of e){const i=[];o.default_&&i.push(o.default_),o.named.length>0&&i.push(`{ ${o.named.join(", ")} }`),i.length>0&&t.push(`import ${i.join(", ")} from '${n}'`)}return t.join(`
11
+ `)}function z(s,e,t){if(!e.trim())return s;if(t==="top")return $(s,e);const n=T(s);return n===-1?$(s,e):s.slice(0,n)+`
12
12
  `+e+`
13
- `+s.slice(n)}function A(s,e){let t=0;if(s.startsWith("#!")){const o=s.indexOf(`
13
+ `+s.slice(n)}function $(s,e){let t=0;if(s.startsWith("#!")){const o=s.indexOf(`
14
14
  `);o!==-1?t=o+1:t=s.length}const n=s.slice(t).match(/^\s*["']use strict["'];?\s*\n?/);return n&&(t+=n[0].length),s.slice(0,t)+e+`
15
- `+s.slice(t)}function U(s){let e=-1;const t=/^import\s+[\s\S]+?from\s+['"][^'"]+['"];?\s*$/gm;let n;for(;(n=t.exec(s))!==null;){const o=n.index+n[0].length;o>e&&(e=o)}return e}function W(s,e,t){const n=s.match(/<template[^>]*>([\s\S]*?)<\/template>/);if(!n)return[];const o=n[1],i=[],u=/\{\{([\s\S]*?)\}\}/g;let r;for(;(r=u.exec(o))!==null;)i.push(r[1]);const l=/(?:v-[\w-]+|:[\w-]+|@[\w-]+)(?:\.[\w-]+)*="([^"]*)"/g;for(;(r=l.exec(o))!==null;)i.push(r[1]);const a=/v-model="([^"]*)"/g;for(;(r=a.exec(o))!==null;)i.push(r[1]);if(i.length===0)return[];const h=i.join(`
16
- `),p=[],m=new Set,g=/(?<![.\w$])([a-zA-Z_$][\w$]*)(?=\s*[<(.,:;\n\r)\]}]|$)/g;for(;(r=g.exec(h))!==null;){const d=r[1];if(m.has(d)||t.has(d)||$.has(d)||J(d)||H(d))continue;const S=e.get(d);S&&(m.add(d),p.push(S))}return p}const q=new Set(["div","span","p","a","img","ul","ol","li","h1","h2","h3","h4","h5","h6","table","tr","td","th","thead","tbody","form","input","button","select","option","textarea","label","section","article","header","footer","nav","main","aside","script","style","link","meta","title","head","body","html","br","hr","pre","code","em","strong","b","i","u","sub","sup","small","mark","del","ins","blockquote","q","cite","abbr","dfn","kbd","samp","var","time","figure","figcaption","details","summary","dialog","menu","template","slot","component","transition","transition-group","keep-alive","teleport","suspense","video","audio","source","canvas","svg","path","circle","rect","line","polygon","iframe","embed","object","picture","area","map","base","col","colgroup","datalist","fieldset","legend","meter","optgroup","output","progress","ruby","rt","rp","wbr"]);function J(s){return q.has(s.toLowerCase())}function V(s,e){if(!e.trim())return s;const t=s.match(/<script\s+setup[^>]*>/);if(!t)return s;const n=t.index+t[0].length;return s.slice(0,n)+`
15
+ `+s.slice(t)}function T(s){let e=-1;const t=/^import\s+[\s\S]+?from\s+['"][^'"]+['"];?\s*$/gm;let n;for(;(n=t.exec(s))!==null;){const o=n.index+n[0].length;o>e&&(e=o)}return e}function U(s,e,t){const n=s.match(/<template[^>]*>([\s\S]*?)<\/template>/);if(!n)return[];const o=n[1],i=[],u=/\{\{([\s\S]*?)\}\}/g;let r;for(;(r=u.exec(o))!==null;)i.push(r[1]);const a=/(?:v-[\w-]+|:[\w-]+|@[\w-]+)(?:\.[\w-]+)*="([^"]*)"/g;for(;(r=a.exec(o))!==null;)i.push(r[1]);const c=/v-model="([^"]*)"/g;for(;(r=c.exec(o))!==null;)i.push(r[1]);if(i.length===0)return[];const h=i.join(`
16
+ `),p=[],m=new Set,g=/(?<![.\w$])([a-zA-Z_$][\w$]*)(?=\s*[<(.,:;\n\r)\]}]|$)/g;for(;(r=g.exec(h))!==null;){const d=r[1];if(m.has(d)||t.has(d)||k.has(d)||J(d)||H(d))continue;const v=e.get(d);v&&(m.add(d),p.push(v))}return p}const W=new Set(["div","span","p","a","img","ul","ol","li","h1","h2","h3","h4","h5","h6","table","tr","td","th","thead","tbody","form","input","button","select","option","textarea","label","section","article","header","footer","nav","main","aside","script","style","link","meta","title","head","body","html","br","hr","pre","code","em","strong","b","i","u","sub","sup","small","mark","del","ins","blockquote","q","cite","abbr","dfn","kbd","samp","var","time","figure","figcaption","details","summary","dialog","menu","template","slot","component","transition","transition-group","keep-alive","teleport","suspense","video","audio","source","canvas","svg","path","circle","rect","line","polygon","iframe","embed","object","picture","area","map","base","col","colgroup","datalist","fieldset","legend","meter","optgroup","output","progress","ruby","rt","rp","wbr"]);function J(s){return W.has(s.toLowerCase())}function V(s,e){if(!e.trim())return s;const t=s.match(/<script\s+setup[^>]*>/);if(!t)return s;const n=t.index+t[0].length;return s.slice(0,n)+`
17
17
  `+e+`
18
- `+s.slice(n)}function Z(s){return/<script[\s>]/.test(s)}function H(s){return s.startsWith("v")&&s.length>1&&s[1]===s[1].toUpperCase()}function G(s){const e=[];e.push("// Auto generated by @meng-xi/vite-plugin autoImport"),e.push("// @ts-nocheck"),e.push("export {}"),e.push("");const t=new Map;for(const u of s)t.has(u.module)||t.set(u.module,[]),t.get(u.module).push(u);const n=new Set,o=new Map,i=[...t.entries()].reverse();for(const[u,r]of i){const l=[];for(const a of r)n.has(a.name)||(n.add(a.name),l.push(a));l.length>0&&o.set(u,l)}e.push("declare global {");for(const u of t.keys()){const r=o.get(u);if(r){e.push(` // from '${u}'`);for(const l of r)l.isDefault?e.push(` const ${l.name}: typeof import('${u}')['default']`):e.push(` const ${l.name}: typeof import('${u}')['${l.name}']`);e.push("")}}return e.push("}"),e.join(`
19
- `)}function K(s,e){F(s,e)}function Q(s,e){return E(s,e)}class X extends I{nameLookup=new Map;allResolvedImports=[];ignoreSet=new Set;initialized=!1;getDefaultOptions(){return{imports:{},dirs:[],dts:"src/auto-imports.d.ts",vueTemplate:!1,ignore:[],fileFilter:/^(?!.*node_modules).*\.(vue|jsx|tsx|ts|js|mjs)$/,injectAtPosition:"top"}}validateOptions(){this.validator.field("dts").custom(e=>e===!1||e===!0||typeof e=="string","dts \u5FC5\u987B\u4E3A false\u3001true \u6216\u5B57\u7B26\u4E32\u8DEF\u5F84").field("vueTemplate").boolean().field("injectAtPosition").enum(["top","after-last-import"]).validate()}getPluginName(){return"auto-import"}addPluginHooks(e){e.configResolved=()=>{this.initialize()},e.transform={order:"pre",handler:(t,n)=>!this.initialized||!this.options.fileFilter.test(n)?null:this.transformCode(t,n)},e.buildEnd=()=>{this.options.dts&&this.initialized&&this.generateDts()}}initialize(){const e=this.viteConfig?.root||process.cwd(),t=C(this.options.imports,e),n=P(this.options.dirs,e),o=M(n);this.allResolvedImports=[...t,...o],this.nameLookup=B(this.allResolvedImports),this.ignoreSet=new Set(this.options.ignore),this.initialized=!0,this.logger.info(`\u521D\u59CB\u5316\u5B8C\u6210: ${this.allResolvedImports.length} \u4E2A\u81EA\u52A8\u5BFC\u5165\u6620\u5C04, ${n.length} \u4E2A\u626B\u63CF\u6A21\u5757`),this.options.dts&&this.generateDts()}transformCode(e,t){const n=t.endsWith(".vue")&&Z(e);let o=N(e,this.nameLookup,this.ignoreSet);if(this.options.vueTemplate&&n){const u=W(e,this.nameLookup,this.ignoreSet),r=new Set(o.map(l=>l.name));for(const l of u)r.has(l.name)||(r.add(l.name),o.push(l))}if(o=o.filter(u=>!O(e,u.name)),o.length===0)return null;const i=z(o);return{code:n?V(e,i):T(e,i,this.options.injectAtPosition)}}generateDts(){if(this.allResolvedImports.length===0)return;const e=this.viteConfig?.root||process.cwd(),t=typeof this.options.dts=="string"?this.options.dts:"src/auto-imports.d.ts",n=c.isAbsolute(t)?t:c.resolve(e,t),o=G(this.allResolvedImports);Q(n,o)&&this.safeExecuteSync(()=>{K(n,o),this.logger.info(`\u7C7B\u578B\u58F0\u660E\u6587\u4EF6\u5DF2\u751F\u6210: ${this.options.dts}`)},"\u751F\u6210\u7C7B\u578B\u58F0\u660E\u6587\u4EF6")}getResolvedImports(){return[...this.allResolvedImports]}getNameLookup(){return new Map(this.nameLookup)}}const Y=k(X);export{Y as autoImport};
18
+ `+s.slice(n)}function Z(s){return/<script[\s>]/.test(s)}function H(s){return s.startsWith("v")&&s.length>1&&s[1]===s[1].toUpperCase()}const G=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","import","in","instanceof","new","null","return","super","switch","this","throw","true","try","typeof","var","void","while","with","as","implements","interface","let","package","private","protected","public","static","yield","abstract","any","boolean","constructor","declare","get","infer","is","keyof","module","namespace","never","readonly","require","number","object","set","string","symbol","type","undefined","unique","unknown","from","of","async","await","global"]);function K(s){const e=[];e.push("// Auto generated by @meng-xi/vite-plugin autoImport"),e.push("// @ts-nocheck"),e.push("export {}"),e.push("");const t=new Map;for(const u of s)t.has(u.module)||t.set(u.module,[]),t.get(u.module).push(u);const n=new Set,o=new Map,i=[...t.entries()].reverse();for(const[u,r]of i){const a=[];for(const c of r)n.has(c.name)||(n.add(c.name),a.push(c));a.length>0&&o.set(u,a)}e.push("declare global {");for(const u of t.keys()){const r=o.get(u);if(r){e.push(` // from '${u}'`);for(const a of r)G.has(a.name)||(a.isDefault?e.push(` const ${a.name}: typeof import('${u}')['default']`):e.push(` const ${a.name}: typeof import('${u}')['${a.name}']`));e.push("")}}return e.push("}"),e.join(`
19
+ `)}function Q(s,e){F(s,e)}function X(s,e){return E(s,e)}class Y extends I{nameLookup=new Map;allResolvedImports=[];ignoreSet=new Set;initialized=!1;getDefaultOptions(){return{imports:{},dirs:[],dts:"src/auto-imports.d.ts",vueTemplate:!1,ignore:[],fileFilter:/^(?!.*node_modules).*\.(vue|jsx|tsx|ts|js|mjs)$/,injectAtPosition:"top"}}validateOptions(){this.validator.field("dts").custom(e=>e===!1||e===!0||typeof e=="string","dts \u5FC5\u987B\u4E3A false\u3001true \u6216\u5B57\u7B26\u4E32\u8DEF\u5F84").field("vueTemplate").boolean().field("injectAtPosition").enum(["top","after-last-import"]).validate()}getPluginName(){return"auto-import"}addPluginHooks(e){e.configResolved=()=>{this.initialize()},e.transform={order:"pre",handler:(t,n)=>!this.initialized||!this.options.fileFilter.test(n)?null:this.transformCode(t,n)},e.buildEnd=()=>{this.options.dts&&this.initialized&&this.generateDts()}}initialize(){const e=this.viteConfig?.root||process.cwd(),t=C(this.options.imports,e),n=P(this.options.dirs,e),o=M(n);this.allResolvedImports=[...t,...o],this.nameLookup=B(this.allResolvedImports),this.ignoreSet=new Set(this.options.ignore),this.initialized=!0,this.logger.info(`\u521D\u59CB\u5316\u5B8C\u6210: ${this.allResolvedImports.length} \u4E2A\u81EA\u52A8\u5BFC\u5165\u6620\u5C04, ${n.length} \u4E2A\u626B\u63CF\u6A21\u5757`),this.options.dts&&this.generateDts()}transformCode(e,t){const n=t.endsWith(".vue")&&Z(e);let o=N(e,this.nameLookup,this.ignoreSet);if(this.options.vueTemplate&&n){const u=U(e,this.nameLookup,this.ignoreSet),r=new Set(o.map(a=>a.name));for(const a of u)r.has(a.name)||(r.add(a.name),o.push(a))}if(o=o.filter(u=>!O(e,u.name)),o.length===0)return null;const i=q(o);return{code:n?V(e,i):z(e,i,this.options.injectAtPosition)}}generateDts(){if(this.allResolvedImports.length===0)return;const e=this.viteConfig?.root||process.cwd(),t=typeof this.options.dts=="string"?this.options.dts:"src/auto-imports.d.ts",n=l.isAbsolute(t)?t:l.resolve(e,t),o=K(this.allResolvedImports);X(n,o)&&this.safeExecuteSync(()=>{Q(n,o),this.logger.info(`\u7C7B\u578B\u58F0\u660E\u6587\u4EF6\u5DF2\u751F\u6210: ${this.options.dts}`)},"\u751F\u6210\u7C7B\u578B\u58F0\u660E\u6587\u4EF6")}getResolvedImports(){return[...this.allResolvedImports]}getNameLookup(){return new Map(this.nameLookup)}}const tt=A(Y);export{tt as autoImport};
@@ -1,4 +1,4 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),u=require("node:fs"),l=require("node:path"),g=require("node:zlib"),node_util=require("node:util"),common_fs_index=require("../../common/fs/index.cjs"),common_format_index=require("../../common/format/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs"),require("path");function _interopDefaultCompat(n){return n&&typeof n=="object"&&"default"in n?n.default:n}const u__default=_interopDefaultCompat(u),l__default=_interopDefaultCompat(l),g__default=_interopDefaultCompat(g),b=node_util.promisify(g__default.gzip);async function M(n){const i=Buffer.isBuffer(n)?n:Buffer.from(n,"utf-8");return(await b(i)).length}function p(n){return n.includes("node_modules")||n.startsWith("\0")||n.startsWith("virtual:")}async function scanOutputDirectory(n,i={}){return common_fs_index.scanDirectory(n,{includeExtensions:i.includeExtensions,excludePatterns:i.excludePatterns})}function analyzeFileTypeDistribution(n){const i=n.reduce((o,a)=>o+a.size,0),e=new Map;for(const o of n){const a=o.extension||"(no ext)",t=e.get(a)||{count:0,totalSize:0};t.count++,t.totalSize+=o.size,e.set(a,t)}return Array.from(e.entries()).map(([o,{count:a,totalSize:t}])=>({extension:o,count:a,totalSize:t,percentage:i>0?Number((t/i*100).toFixed(1)):0})).sort((o,a)=>a.totalSize-o.totalSize)}function checkSizeThresholds(n,i){const e=[],o=i*1024;for(const a of n){a.size>o&&e.push({level:"chunk",name:a.name,sizeKB:Number((a.size/1024).toFixed(1)),thresholdKB:i,message:`Chunk "${a.name}" \u8D85\u8FC7\u9608\u503C: ${(a.size/1024).toFixed(1)}KB > ${i}KB`});for(const t of a.modules)t.size>o&&e.push({level:"module",name:t.id,sizeKB:Number((t.size/1024).toFixed(1)),thresholdKB:i,message:`\u6A21\u5757 "${t.id}" \u8D85\u8FC7\u9608\u503C: ${(t.size/1024).toFixed(1)}KB > ${i}KB`})}return e}function getTopModules(n,i,e){const o=[];for(const a of n)for(const t of a.modules)e&&t.isNodeModule||o.push(t);return o.sort((a,t)=>t.size-a.size).slice(0,i)}async function buildChunkStats(n,i,e={}){const{gzipSize:o=!0,excludeNodeModules:a=!1}=e,t=[];for(const r of i){const d=l__default.relative(n,r.filePath),c=d.replace(/\\/g,"/"),s=r.extension;let h="chunk";s===".html"?h="entry":[".js",".mjs",".cjs",".css",".html"].includes(s)||(h="asset");let m=0;if(o)try{const y=await u__default.promises.readFile(r.filePath);m=await M(y)}catch{m=0}const f=p(d),z={id:c,size:r.size,gzipSize:m,chunks:[c],imports:[],isEntry:h==="entry",isNodeModule:f};a&&f||t.push({name:c,size:r.size,gzipSize:m,modules:[z],type:h,fileCount:1})}return t.sort((r,d)=>d.size-r.size)}async function analyzeBundle(n,i){const e=Date.now(),o=await scanOutputDirectory(n,{includeExtensions:i.includeExtensions,excludePatterns:i.excludePatterns}),a=await buildChunkStats(n,o,{gzipSize:i.gzipSize,excludeNodeModules:i.excludeNodeModules}),t=i.excludeNodeModules?o.filter(f=>!p(l__default.relative(n,f.filePath))):o,r=analyzeFileTypeDistribution(t),d=getTopModules(a,i.topModules,i.excludeNodeModules),c=checkSizeThresholds(a,i.sizeThreshold),s=a.reduce((f,z)=>f+z.size,0),h=a.reduce((f,z)=>f+z.gzipSize,0),m=Date.now()-e;return{timestamp:new Date().toISOString(),totalSize:s,totalGzipSize:h,chunks:a,topModules:d,fileTypeDistribution:r,warnings:c,comparisonDiffs:[],analysisTime:m}}async function loadPreviousReport(n){try{const i=l__default.isAbsolute(n)?n:l__default.resolve(process.cwd(),n);if(!await u__default.promises.access(i,u__default.constants.F_OK).then(()=>!0).catch(()=>!1))return null;const e=await u__default.promises.readFile(i,"utf-8");return JSON.parse(e)}catch{return null}}function compareWithPrevious(n,i){const e=[],o=new Map;for(const t of i.chunks)o.set(t.name,t.size);const a=new Map;for(const t of n.chunks)a.set(t.name,t.size);for(const[t,r]of a){const d=o.get(t);if(d===void 0)e.push({name:t,previousSize:-1,currentSize:r,diff:r,diffPercentage:100,trend:"added"});else{const c=r-d,s=d>0?Number((c/d*100).toFixed(1)):0;e.push({name:t,previousSize:d,currentSize:r,diff:c,diffPercentage:s,trend:c>0?"increased":c<0?"decreased":"unchanged"})}}for(const[t,r]of o)a.has(t)||e.push({name:t,previousSize:r,currentSize:-1,diff:-r,diffPercentage:-100,trend:"removed"});return e.sort((t,r)=>Math.abs(r.diff)-Math.abs(t.diff))}async function generateJsonReport(n,i,e){const o=l__default.join(n,`${i}.json`),a={timestamp:e.timestamp,summary:{totalSize:e.totalSize,totalGzipSize:e.totalGzipSize,totalSizeFormatted:common_format_index.formatFileSize(e.totalSize),totalGzipSizeFormatted:common_format_index.formatFileSize(e.totalGzipSize),chunkCount:e.chunks.length,warningCount:e.warnings.length,analysisTime:e.analysisTime},chunks:e.chunks.map(t=>({name:t.name,size:t.size,sizeFormatted:common_format_index.formatFileSize(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(t.gzipSize),type:t.type,fileCount:t.fileCount,modules:t.modules.map(r=>({id:r.id,size:r.size,sizeFormatted:common_format_index.formatFileSize(r.size),gzipSize:r.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(r.gzipSize),isEntry:r.isEntry,isNodeModule:r.isNodeModule,imports:r.imports}))})),topModules:e.topModules.map(t=>({id:t.id,size:t.size,sizeFormatted:common_format_index.formatFileSize(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(t.gzipSize),isNodeModule:t.isNodeModule})),fileTypeDistribution:e.fileTypeDistribution,warnings:e.warnings,comparisonDiffs:e.comparisonDiffs};return await common_fs_index.writeJsonReport(o,a),o}async function generateHtmlReport(n,i,e,o={}){const a=l__default.join(n,`${i}.html`),t=o.defaultChartType||"treemap",r=e.chunks.map(f=>({name:f.name,size:f.size,gzipSize:f.gzipSize,type:f.type})),d=e.fileTypeDistribution,c=e.warnings,s=e.comparisonDiffs,h=e.topModules.slice(0,10),m=x(e,r,d,c,s,h,t);return await common_fs_index.writeFileContent(a,m),a}function x(n,i,e,o,a,t,r){const d=common_format_index.formatFileSize(n.totalSize),c=common_format_index.formatFileSize(n.totalGzipSize);return`<!DOCTYPE html>
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),u=require("node:fs"),l=require("node:path"),g=require("node:zlib"),node_util=require("node:util"),common_fs_index=require("../../common/fs/index.cjs"),common_path_index=require("../../common/path/index.cjs"),common_format_index=require("../../common/format/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs"),require("path"),require("../../common/concurrency/index.cjs");function _interopDefaultCompat(n){return n&&typeof n=="object"&&"default"in n?n.default:n}const u__default=_interopDefaultCompat(u),l__default=_interopDefaultCompat(l),g__default=_interopDefaultCompat(g),M=node_util.promisify(g__default.gzip);async function k(n){const i=Buffer.isBuffer(n)?n:Buffer.from(n,"utf-8");return(await M(i)).length}function p(n){return n.includes("node_modules")||n.startsWith("\0")||n.startsWith("virtual:")}async function scanOutputDirectory(n,i={}){return common_fs_index.scanDirectory(n,{includeExtensions:i.includeExtensions,excludePatterns:i.excludePatterns})}function analyzeFileTypeDistribution(n){const i=n.reduce((o,a)=>o+a.size,0),e=new Map;for(const o of n){const a=o.extension||"(no ext)",t=e.get(a)||{count:0,totalSize:0};t.count++,t.totalSize+=o.size,e.set(a,t)}return Array.from(e.entries()).map(([o,{count:a,totalSize:t}])=>({extension:o,count:a,totalSize:t,percentage:i>0?Number((t/i*100).toFixed(1)):0})).sort((o,a)=>a.totalSize-o.totalSize)}function checkSizeThresholds(n,i){const e=[],o=i*1024;for(const a of n){a.size>o&&e.push({level:"chunk",name:a.name,sizeKB:Number((a.size/1024).toFixed(1)),thresholdKB:i,message:`Chunk "${a.name}" \u8D85\u8FC7\u9608\u503C: ${(a.size/1024).toFixed(1)}KB > ${i}KB`});for(const t of a.modules)t.size>o&&e.push({level:"module",name:t.id,sizeKB:Number((t.size/1024).toFixed(1)),thresholdKB:i,message:`\u6A21\u5757 "${t.id}" \u8D85\u8FC7\u9608\u503C: ${(t.size/1024).toFixed(1)}KB > ${i}KB`})}return e}function getTopModules(n,i,e){const o=[];for(const a of n)for(const t of a.modules)e&&t.isNodeModule||o.push(t);return o.sort((a,t)=>t.size-a.size).slice(0,i)}async function buildChunkStats(n,i,e={}){const{gzipSize:o=!0,excludeNodeModules:a=!1}=e,t=[];for(const r of i){const d=l__default.relative(n,r.filePath),c=common_path_index.normalizePath(d),s=r.extension;let h="chunk";s===".html"?h="entry":[".js",".mjs",".cjs",".css",".html"].includes(s)||(h="asset");let m=0;if(o)try{const y=await u__default.promises.readFile(r.filePath);m=await k(y)}catch{m=0}const f=p(d),z={id:c,size:r.size,gzipSize:m,chunks:[c],imports:[],isEntry:h==="entry",isNodeModule:f};a&&f||t.push({name:c,size:r.size,gzipSize:m,modules:[z],type:h,fileCount:1})}return t.sort((r,d)=>d.size-r.size)}async function analyzeBundle(n,i){const e=Date.now(),o=await scanOutputDirectory(n,{includeExtensions:i.includeExtensions,excludePatterns:i.excludePatterns}),a=await buildChunkStats(n,o,{gzipSize:i.gzipSize,excludeNodeModules:i.excludeNodeModules}),t=i.excludeNodeModules?o.filter(f=>!p(l__default.relative(n,f.filePath))):o,r=analyzeFileTypeDistribution(t),d=getTopModules(a,i.topModules,i.excludeNodeModules),c=checkSizeThresholds(a,i.sizeThreshold),s=a.reduce((f,z)=>f+z.size,0),h=a.reduce((f,z)=>f+z.gzipSize,0),m=Date.now()-e;return{timestamp:new Date().toISOString(),totalSize:s,totalGzipSize:h,chunks:a,topModules:d,fileTypeDistribution:r,warnings:c,comparisonDiffs:[],analysisTime:m}}async function loadPreviousReport(n){try{const i=l__default.isAbsolute(n)?n:l__default.resolve(process.cwd(),n);if(!await u__default.promises.access(i,u__default.constants.F_OK).then(()=>!0).catch(()=>!1))return null;const e=await u__default.promises.readFile(i,"utf-8");return JSON.parse(e)}catch{return null}}function compareWithPrevious(n,i){const e=[],o=new Map;for(const t of i.chunks)o.set(t.name,t.size);const a=new Map;for(const t of n.chunks)a.set(t.name,t.size);for(const[t,r]of a){const d=o.get(t);if(d===void 0)e.push({name:t,previousSize:-1,currentSize:r,diff:r,diffPercentage:100,trend:"added"});else{const c=r-d,s=d>0?Number((c/d*100).toFixed(1)):0;e.push({name:t,previousSize:d,currentSize:r,diff:c,diffPercentage:s,trend:c>0?"increased":c<0?"decreased":"unchanged"})}}for(const[t,r]of o)a.has(t)||e.push({name:t,previousSize:r,currentSize:-1,diff:-r,diffPercentage:-100,trend:"removed"});return e.sort((t,r)=>Math.abs(r.diff)-Math.abs(t.diff))}async function generateJsonReport(n,i,e){const o=l__default.join(n,`${i}.json`),a={timestamp:e.timestamp,summary:{totalSize:e.totalSize,totalGzipSize:e.totalGzipSize,totalSizeFormatted:common_format_index.formatFileSize(e.totalSize),totalGzipSizeFormatted:common_format_index.formatFileSize(e.totalGzipSize),chunkCount:e.chunks.length,warningCount:e.warnings.length,analysisTime:e.analysisTime},chunks:e.chunks.map(t=>({name:t.name,size:t.size,sizeFormatted:common_format_index.formatFileSize(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(t.gzipSize),type:t.type,fileCount:t.fileCount,modules:t.modules.map(r=>({id:r.id,size:r.size,sizeFormatted:common_format_index.formatFileSize(r.size),gzipSize:r.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(r.gzipSize),isEntry:r.isEntry,isNodeModule:r.isNodeModule,imports:r.imports}))})),topModules:e.topModules.map(t=>({id:t.id,size:t.size,sizeFormatted:common_format_index.formatFileSize(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:common_format_index.formatFileSize(t.gzipSize),isNodeModule:t.isNodeModule})),fileTypeDistribution:e.fileTypeDistribution,warnings:e.warnings,comparisonDiffs:e.comparisonDiffs};return await common_fs_index.writeJsonReport(o,a),o}async function generateHtmlReport(n,i,e,o={}){const a=l__default.join(n,`${i}.html`),t=o.defaultChartType||"treemap",r=e.chunks.map(f=>({name:f.name,size:f.size,gzipSize:f.gzipSize,type:f.type})),d=e.fileTypeDistribution,c=e.warnings,s=e.comparisonDiffs,h=e.topModules.slice(0,10),m=x(e,r,d,c,s,h,t);return await common_fs_index.writeFileContent(a,m),a}function x(n,i,e,o,a,t,r){const d=common_format_index.formatFileSize(n.totalSize),c=common_format_index.formatFileSize(n.totalGzipSize);return`<!DOCTYPE html>
2
2
  <html lang="zh-CN">
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -1,4 +1,4 @@
1
- import{createPluginFactory as x,BasePlugin as b}from"../../factory/index.mjs";import m from"node:fs";import f from"node:path";import v from"node:zlib";import{promisify as S}from"node:util";import{scanDirectory as w,writeJsonReport as $,writeFileContent as F}from"../../common/fs/index.mjs";import{formatFileSize as c}from"../../common/format/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"path";const A=S(v.gzip);async function M(a){const i=Buffer.isBuffer(a)?a:Buffer.from(a,"utf-8");return(await A(i)).length}function z(a){return a.includes("node_modules")||a.startsWith("\0")||a.startsWith("virtual:")}async function C(a,i={}){return w(a,{includeExtensions:i.includeExtensions,excludePatterns:i.excludePatterns})}function B(a){const i=a.reduce((o,n)=>o+n.size,0),e=new Map;for(const o of a){const n=o.extension||"(no ext)",t=e.get(n)||{count:0,totalSize:0};t.count++,t.totalSize+=o.size,e.set(n,t)}return Array.from(e.entries()).map(([o,{count:n,totalSize:t}])=>({extension:o,count:n,totalSize:t,percentage:i>0?Number((t/i*100).toFixed(1)):0})).sort((o,n)=>n.totalSize-o.totalSize)}function k(a,i){const e=[],o=i*1024;for(const n of a){n.size>o&&e.push({level:"chunk",name:n.name,sizeKB:Number((n.size/1024).toFixed(1)),thresholdKB:i,message:`Chunk "${n.name}" \u8D85\u8FC7\u9608\u503C: ${(n.size/1024).toFixed(1)}KB > ${i}KB`});for(const t of n.modules)t.size>o&&e.push({level:"module",name:t.id,sizeKB:Number((t.size/1024).toFixed(1)),thresholdKB:i,message:`\u6A21\u5757 "${t.id}" \u8D85\u8FC7\u9608\u503C: ${(t.size/1024).toFixed(1)}KB > ${i}KB`})}return e}function D(a,i,e){const o=[];for(const n of a)for(const t of n.modules)e&&t.isNodeModule||o.push(t);return o.sort((n,t)=>t.size-n.size).slice(0,i)}async function E(a,i,e={}){const{gzipSize:o=!0,excludeNodeModules:n=!1}=e,t=[];for(const r of i){const d=f.relative(a,r.filePath),l=d.replace(/\\/g,"/"),s=r.extension;let u="chunk";s===".html"?u="entry":[".js",".mjs",".cjs",".css",".html"].includes(s)||(u="asset");let h=0;if(o)try{const y=await m.promises.readFile(r.filePath);h=await M(y)}catch{h=0}const p=z(d),g={id:l,size:r.size,gzipSize:h,chunks:[l],imports:[],isEntry:u==="entry",isNodeModule:p};n&&p||t.push({name:l,size:r.size,gzipSize:h,modules:[g],type:u,fileCount:1})}return t.sort((r,d)=>d.size-r.size)}async function T(a,i){const e=Date.now(),o=await C(a,{includeExtensions:i.includeExtensions,excludePatterns:i.excludePatterns}),n=await E(a,o,{gzipSize:i.gzipSize,excludeNodeModules:i.excludeNodeModules}),t=i.excludeNodeModules?o.filter(p=>!z(f.relative(a,p.filePath))):o,r=B(t),d=D(n,i.topModules,i.excludeNodeModules),l=k(n,i.sizeThreshold),s=n.reduce((p,g)=>p+g.size,0),u=n.reduce((p,g)=>p+g.gzipSize,0),h=Date.now()-e;return{timestamp:new Date().toISOString(),totalSize:s,totalGzipSize:u,chunks:n,topModules:d,fileTypeDistribution:r,warnings:l,comparisonDiffs:[],analysisTime:h}}async function R(a){try{const i=f.isAbsolute(a)?a:f.resolve(process.cwd(),a);if(!await m.promises.access(i,m.constants.F_OK).then(()=>!0).catch(()=>!1))return null;const e=await m.promises.readFile(i,"utf-8");return JSON.parse(e)}catch{return null}}function P(a,i){const e=[],o=new Map;for(const t of i.chunks)o.set(t.name,t.size);const n=new Map;for(const t of a.chunks)n.set(t.name,t.size);for(const[t,r]of n){const d=o.get(t);if(d===void 0)e.push({name:t,previousSize:-1,currentSize:r,diff:r,diffPercentage:100,trend:"added"});else{const l=r-d,s=d>0?Number((l/d*100).toFixed(1)):0;e.push({name:t,previousSize:d,currentSize:r,diff:l,diffPercentage:s,trend:l>0?"increased":l<0?"decreased":"unchanged"})}}for(const[t,r]of o)n.has(t)||e.push({name:t,previousSize:r,currentSize:-1,diff:-r,diffPercentage:-100,trend:"removed"});return e.sort((t,r)=>Math.abs(r.diff)-Math.abs(t.diff))}async function N(a,i,e){const o=f.join(a,`${i}.json`),n={timestamp:e.timestamp,summary:{totalSize:e.totalSize,totalGzipSize:e.totalGzipSize,totalSizeFormatted:c(e.totalSize),totalGzipSizeFormatted:c(e.totalGzipSize),chunkCount:e.chunks.length,warningCount:e.warnings.length,analysisTime:e.analysisTime},chunks:e.chunks.map(t=>({name:t.name,size:t.size,sizeFormatted:c(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:c(t.gzipSize),type:t.type,fileCount:t.fileCount,modules:t.modules.map(r=>({id:r.id,size:r.size,sizeFormatted:c(r.size),gzipSize:r.gzipSize,gzipSizeFormatted:c(r.gzipSize),isEntry:r.isEntry,isNodeModule:r.isNodeModule,imports:r.imports}))})),topModules:e.topModules.map(t=>({id:t.id,size:t.size,sizeFormatted:c(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:c(t.gzipSize),isNodeModule:t.isNodeModule})),fileTypeDistribution:e.fileTypeDistribution,warnings:e.warnings,comparisonDiffs:e.comparisonDiffs};return await $(o,n),o}async function O(a,i,e,o={}){const n=f.join(a,`${i}.html`),t=o.defaultChartType||"treemap",r=e.chunks.map(p=>({name:p.name,size:p.size,gzipSize:p.gzipSize,type:p.type})),d=e.fileTypeDistribution,l=e.warnings,s=e.comparisonDiffs,u=e.topModules.slice(0,10),h=L(e,r,d,l,s,u,t);return await F(n,h),n}function L(a,i,e,o,n,t,r){const d=c(a.totalSize),l=c(a.totalGzipSize);return`<!DOCTYPE html>
1
+ import{createPluginFactory as x,BasePlugin as b}from"../../factory/index.mjs";import m from"node:fs";import f from"node:path";import v from"node:zlib";import{promisify as S}from"node:util";import{scanDirectory as w,writeJsonReport as $,writeFileContent as F}from"../../common/fs/index.mjs";import{normalizePath as A}from"../../common/path/index.mjs";import{formatFileSize as c}from"../../common/format/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"path";import"../../common/concurrency/index.mjs";const M=S(v.gzip);async function C(a){const i=Buffer.isBuffer(a)?a:Buffer.from(a,"utf-8");return(await M(i)).length}function z(a){return a.includes("node_modules")||a.startsWith("\0")||a.startsWith("virtual:")}async function B(a,i={}){return w(a,{includeExtensions:i.includeExtensions,excludePatterns:i.excludePatterns})}function k(a){const i=a.reduce((o,n)=>o+n.size,0),e=new Map;for(const o of a){const n=o.extension||"(no ext)",t=e.get(n)||{count:0,totalSize:0};t.count++,t.totalSize+=o.size,e.set(n,t)}return Array.from(e.entries()).map(([o,{count:n,totalSize:t}])=>({extension:o,count:n,totalSize:t,percentage:i>0?Number((t/i*100).toFixed(1)):0})).sort((o,n)=>n.totalSize-o.totalSize)}function D(a,i){const e=[],o=i*1024;for(const n of a){n.size>o&&e.push({level:"chunk",name:n.name,sizeKB:Number((n.size/1024).toFixed(1)),thresholdKB:i,message:`Chunk "${n.name}" \u8D85\u8FC7\u9608\u503C: ${(n.size/1024).toFixed(1)}KB > ${i}KB`});for(const t of n.modules)t.size>o&&e.push({level:"module",name:t.id,sizeKB:Number((t.size/1024).toFixed(1)),thresholdKB:i,message:`\u6A21\u5757 "${t.id}" \u8D85\u8FC7\u9608\u503C: ${(t.size/1024).toFixed(1)}KB > ${i}KB`})}return e}function E(a,i,e){const o=[];for(const n of a)for(const t of n.modules)e&&t.isNodeModule||o.push(t);return o.sort((n,t)=>t.size-n.size).slice(0,i)}async function T(a,i,e={}){const{gzipSize:o=!0,excludeNodeModules:n=!1}=e,t=[];for(const r of i){const d=f.relative(a,r.filePath),l=A(d),s=r.extension;let u="chunk";s===".html"?u="entry":[".js",".mjs",".cjs",".css",".html"].includes(s)||(u="asset");let h=0;if(o)try{const y=await m.promises.readFile(r.filePath);h=await C(y)}catch{h=0}const p=z(d),g={id:l,size:r.size,gzipSize:h,chunks:[l],imports:[],isEntry:u==="entry",isNodeModule:p};n&&p||t.push({name:l,size:r.size,gzipSize:h,modules:[g],type:u,fileCount:1})}return t.sort((r,d)=>d.size-r.size)}async function R(a,i){const e=Date.now(),o=await B(a,{includeExtensions:i.includeExtensions,excludePatterns:i.excludePatterns}),n=await T(a,o,{gzipSize:i.gzipSize,excludeNodeModules:i.excludeNodeModules}),t=i.excludeNodeModules?o.filter(p=>!z(f.relative(a,p.filePath))):o,r=k(t),d=E(n,i.topModules,i.excludeNodeModules),l=D(n,i.sizeThreshold),s=n.reduce((p,g)=>p+g.size,0),u=n.reduce((p,g)=>p+g.gzipSize,0),h=Date.now()-e;return{timestamp:new Date().toISOString(),totalSize:s,totalGzipSize:u,chunks:n,topModules:d,fileTypeDistribution:r,warnings:l,comparisonDiffs:[],analysisTime:h}}async function P(a){try{const i=f.isAbsolute(a)?a:f.resolve(process.cwd(),a);if(!await m.promises.access(i,m.constants.F_OK).then(()=>!0).catch(()=>!1))return null;const e=await m.promises.readFile(i,"utf-8");return JSON.parse(e)}catch{return null}}function N(a,i){const e=[],o=new Map;for(const t of i.chunks)o.set(t.name,t.size);const n=new Map;for(const t of a.chunks)n.set(t.name,t.size);for(const[t,r]of n){const d=o.get(t);if(d===void 0)e.push({name:t,previousSize:-1,currentSize:r,diff:r,diffPercentage:100,trend:"added"});else{const l=r-d,s=d>0?Number((l/d*100).toFixed(1)):0;e.push({name:t,previousSize:d,currentSize:r,diff:l,diffPercentage:s,trend:l>0?"increased":l<0?"decreased":"unchanged"})}}for(const[t,r]of o)n.has(t)||e.push({name:t,previousSize:r,currentSize:-1,diff:-r,diffPercentage:-100,trend:"removed"});return e.sort((t,r)=>Math.abs(r.diff)-Math.abs(t.diff))}async function O(a,i,e){const o=f.join(a,`${i}.json`),n={timestamp:e.timestamp,summary:{totalSize:e.totalSize,totalGzipSize:e.totalGzipSize,totalSizeFormatted:c(e.totalSize),totalGzipSizeFormatted:c(e.totalGzipSize),chunkCount:e.chunks.length,warningCount:e.warnings.length,analysisTime:e.analysisTime},chunks:e.chunks.map(t=>({name:t.name,size:t.size,sizeFormatted:c(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:c(t.gzipSize),type:t.type,fileCount:t.fileCount,modules:t.modules.map(r=>({id:r.id,size:r.size,sizeFormatted:c(r.size),gzipSize:r.gzipSize,gzipSizeFormatted:c(r.gzipSize),isEntry:r.isEntry,isNodeModule:r.isNodeModule,imports:r.imports}))})),topModules:e.topModules.map(t=>({id:t.id,size:t.size,sizeFormatted:c(t.size),gzipSize:t.gzipSize,gzipSizeFormatted:c(t.gzipSize),isNodeModule:t.isNodeModule})),fileTypeDistribution:e.fileTypeDistribution,warnings:e.warnings,comparisonDiffs:e.comparisonDiffs};return await $(o,n),o}async function L(a,i,e,o={}){const n=f.join(a,`${i}.html`),t=o.defaultChartType||"treemap",r=e.chunks.map(p=>({name:p.name,size:p.size,gzipSize:p.gzipSize,type:p.type})),d=e.fileTypeDistribution,l=e.warnings,s=e.comparisonDiffs,u=e.topModules.slice(0,10),h=j(e,r,d,l,s,u,t);return await F(n,h),n}function j(a,i,e,o,n,t,r){const d=c(a.totalSize),l=c(a.totalGzipSize);return`<!DOCTYPE html>
2
2
  <html lang="zh-CN">
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -232,4 +232,4 @@ renderChart('${r}');
232
232
  renderPieChart();
233
233
  <\/script>
234
234
  </body>
235
- </html>`}class j extends b{analysisResult=null;getDefaultOptions(){return{outputFormat:"json",outputFile:"bundle-analysis",openAnalyzer:!1,sizeThreshold:100,topModules:20,compareWith:null,gzipSize:!0,excludeNodeModules:!1,excludePatterns:[],includeExtensions:[],defaultChartType:"treemap"}}validateOptions(){this.validator.field("outputFormat").enum(["json","html","both"]).field("openAnalyzer").boolean().field("sizeThreshold").number().minValue(0).field("topModules").number().minValue(1).field("gzipSize").boolean().field("excludeNodeModules").boolean().field("defaultChartType").enum(["treemap","sunburst","list"]).validate()}getPluginName(){return"bundle-analyzer"}getEnforce(){return"post"}addPluginHooks(i){i.writeBundle={order:"post",handler:async()=>{await this.safeExecute(()=>this.runAnalysis(),"\u5206\u6790\u6784\u5EFA\u4EA7\u7269")}}}async runAnalysis(){if(!this.viteConfig)return;const i=this.viteConfig.build.outDir;this.analysisResult=await T(i,this.options),this.options.compareWith&&await this.performComparison(),this.logSummary(),this.logWarnings(),await this.generateReports(i),this.options.openAnalyzer&&(this.options.outputFormat==="html"||this.options.outputFormat==="both")&&await this.openHtmlReport(i)}async performComparison(){if(!this.analysisResult||!this.options.compareWith)return;const i=await R(this.options.compareWith);if(!i){this.logger.info(`\u672A\u627E\u5230\u5BF9\u6BD4\u62A5\u544A: ${this.options.compareWith}\uFF0C\u8DF3\u8FC7\u5BF9\u6BD4\u5206\u6790`);return}const e=P(this.analysisResult,i);if(this.analysisResult.comparisonDiffs=e,e.length>0){const o=e.filter(d=>d.trend==="increased").length,n=e.filter(d=>d.trend==="decreased").length,t=e.filter(d=>d.trend==="added").length,r=e.filter(d=>d.trend==="removed").length;this.logger.info(`\u6784\u5EFA\u5BF9\u6BD4: ${o} \u4E2A\u589E\u5927, ${n} \u4E2A\u51CF\u5C0F, ${t} \u4E2A\u65B0\u589E, ${r} \u4E2A\u79FB\u9664`)}}async generateReports(i){if(!this.analysisResult)return;const{outputFormat:e,outputFile:o}=this.options;if(e==="json"||e==="both"){const n=await N(i,o,this.analysisResult);this.logger.info(`JSON \u62A5\u544A\u5DF2\u751F\u6210: ${n}`)}if(e==="html"||e==="both"){const n=await O(i,o,this.analysisResult,{defaultChartType:this.options.defaultChartType});this.logger.info(`HTML \u62A5\u544A\u5DF2\u751F\u6210: ${n}`)}}async openHtmlReport(i){const e=`${i}/${this.options.outputFile}.html`;try{const{exec:o}=await import("node:child_process"),n=process.platform;o(n==="win32"?`start "" "${e}"`:n==="darwin"?`open "${e}"`:`xdg-open "${e}"`),this.logger.info(`\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u62A5\u544A: ${e}`)}catch{this.logger.warn(`\u65E0\u6CD5\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668\uFF0C\u8BF7\u624B\u52A8\u6253\u5F00: ${e}`)}}logSummary(){if(!this.analysisResult)return;const{chunks:i,totalSize:e,totalGzipSize:o,analysisTime:n}=this.analysisResult;this.logger.success(`\u4EA7\u7269\u5206\u6790\u5B8C\u6210: ${i.length} \u4E2A chunk, \u603B\u4F53\u79EF: ${c(e)} (gzip: ${c(o)}), \u5206\u6790\u8017\u65F6: ${n}ms`);const t=i.filter(l=>l.type==="entry").length,r=i.filter(l=>l.type==="chunk").length,d=i.filter(l=>l.type==="asset").length;if((t>0||r>0||d>0)&&this.logger.info(` \u5165\u53E3: ${t} | \u4EE3\u7801\u5757: ${r} | \u8D44\u6E90: ${d}`),this.analysisResult.topModules.length>0){this.logger.info("\u4F53\u79EF Top 5 \u6A21\u5757:");const l=this.analysisResult.topModules.slice(0,5);for(let s=0;s<l.length;s++){const u=l[s],h=u.isNodeModule?"node_modules":"source";this.logger.info(` ${s+1}. ${c(u.size)} (${h}) ${u.id}`)}}}logWarnings(){if(!(!this.analysisResult||this.analysisResult.warnings.length===0)){this.logger.warn(`\u53D1\u73B0 ${this.analysisResult.warnings.length} \u4E2A\u4F53\u79EF\u544A\u8B66:`);for(const i of this.analysisResult.warnings){const e=i.sizeKB>i.thresholdKB*2?"\u{1F534}":"\u{1F7E1}";this.logger.warn(` ${e} ${i.message}`)}}}getResult(){return this.analysisResult}}const K=x(j);export{K as bundleAnalyzer};
235
+ </html>`}class K extends b{analysisResult=null;getDefaultOptions(){return{outputFormat:"json",outputFile:"bundle-analysis",openAnalyzer:!1,sizeThreshold:100,topModules:20,compareWith:null,gzipSize:!0,excludeNodeModules:!1,excludePatterns:[],includeExtensions:[],defaultChartType:"treemap"}}validateOptions(){this.validator.field("outputFormat").enum(["json","html","both"]).field("openAnalyzer").boolean().field("sizeThreshold").number().minValue(0).field("topModules").number().minValue(1).field("gzipSize").boolean().field("excludeNodeModules").boolean().field("defaultChartType").enum(["treemap","sunburst","list"]).validate()}getPluginName(){return"bundle-analyzer"}getEnforce(){return"post"}addPluginHooks(i){i.writeBundle={order:"post",handler:async()=>{await this.safeExecute(()=>this.runAnalysis(),"\u5206\u6790\u6784\u5EFA\u4EA7\u7269")}}}async runAnalysis(){if(!this.viteConfig)return;const i=this.viteConfig.build.outDir;this.analysisResult=await R(i,this.options),this.options.compareWith&&await this.performComparison(),this.logSummary(),this.logWarnings(),await this.generateReports(i),this.options.openAnalyzer&&(this.options.outputFormat==="html"||this.options.outputFormat==="both")&&await this.openHtmlReport(i)}async performComparison(){if(!this.analysisResult||!this.options.compareWith)return;const i=await P(this.options.compareWith);if(!i){this.logger.info(`\u672A\u627E\u5230\u5BF9\u6BD4\u62A5\u544A: ${this.options.compareWith}\uFF0C\u8DF3\u8FC7\u5BF9\u6BD4\u5206\u6790`);return}const e=N(this.analysisResult,i);if(this.analysisResult.comparisonDiffs=e,e.length>0){const o=e.filter(d=>d.trend==="increased").length,n=e.filter(d=>d.trend==="decreased").length,t=e.filter(d=>d.trend==="added").length,r=e.filter(d=>d.trend==="removed").length;this.logger.info(`\u6784\u5EFA\u5BF9\u6BD4: ${o} \u4E2A\u589E\u5927, ${n} \u4E2A\u51CF\u5C0F, ${t} \u4E2A\u65B0\u589E, ${r} \u4E2A\u79FB\u9664`)}}async generateReports(i){if(!this.analysisResult)return;const{outputFormat:e,outputFile:o}=this.options;if(e==="json"||e==="both"){const n=await O(i,o,this.analysisResult);this.logger.info(`JSON \u62A5\u544A\u5DF2\u751F\u6210: ${n}`)}if(e==="html"||e==="both"){const n=await L(i,o,this.analysisResult,{defaultChartType:this.options.defaultChartType});this.logger.info(`HTML \u62A5\u544A\u5DF2\u751F\u6210: ${n}`)}}async openHtmlReport(i){const e=`${i}/${this.options.outputFile}.html`;try{const{exec:o}=await import("node:child_process"),n=process.platform;o(n==="win32"?`start "" "${e}"`:n==="darwin"?`open "${e}"`:`xdg-open "${e}"`),this.logger.info(`\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u62A5\u544A: ${e}`)}catch{this.logger.warn(`\u65E0\u6CD5\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668\uFF0C\u8BF7\u624B\u52A8\u6253\u5F00: ${e}`)}}logSummary(){if(!this.analysisResult)return;const{chunks:i,totalSize:e,totalGzipSize:o,analysisTime:n}=this.analysisResult;this.logger.success(`\u4EA7\u7269\u5206\u6790\u5B8C\u6210: ${i.length} \u4E2A chunk, \u603B\u4F53\u79EF: ${c(e)} (gzip: ${c(o)}), \u5206\u6790\u8017\u65F6: ${n}ms`);const t=i.filter(l=>l.type==="entry").length,r=i.filter(l=>l.type==="chunk").length,d=i.filter(l=>l.type==="asset").length;if((t>0||r>0||d>0)&&this.logger.info(` \u5165\u53E3: ${t} | \u4EE3\u7801\u5757: ${r} | \u8D44\u6E90: ${d}`),this.analysisResult.topModules.length>0){this.logger.info("\u4F53\u79EF Top 5 \u6A21\u5757:");const l=this.analysisResult.topModules.slice(0,5);for(let s=0;s<l.length;s++){const u=l[s],h=u.isNodeModule?"node_modules":"source";this.logger.info(` ${s+1}. ${c(u.size)} (${h}) ${u.id}`)}}}logWarnings(){if(!(!this.analysisResult||this.analysisResult.warnings.length===0)){this.logger.warn(`\u53D1\u73B0 ${this.analysisResult.warnings.length} \u4E2A\u4F53\u79EF\u544A\u8B66:`);for(const i of this.analysisResult.warnings){const e=i.sizeKB>i.thresholdKB*2?"\u{1F534}":"\u{1F7E1}";this.logger.warn(` ${e} ${i.message}`)}}}getResult(){return this.analysisResult}}const W=x(K);export{W as bundleAnalyzer};
@@ -1 +1 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),g=require("node:zlib"),u=require("node:fs"),promises=require("node:stream/promises"),l=require("node:path"),common_fs_index=require("../../common/fs/index.cjs"),common_format_index=require("../../common/format/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs"),require("path");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const l__default=_interopDefaultCompat(l);async function compressFileGzip(e,t,i){const s=(await u.promises.stat(e)).size,r=g.createGzip({level:i});await promises.pipeline(u.createReadStream(e),r,u.createWriteStream(t));const o=(await u.promises.stat(t)).size;return{file:e,originalSize:s,compressedSize:o,ratio:s>0?Number(((1-o/s)*100).toFixed(1)):0,algorithm:"gzip"}}async function compressFileBrotli(e,t,i){const s=(await u.promises.stat(e)).size,r=g.createBrotliCompress({params:{[g.constants.BROTLI_PARAM_QUALITY]:i}});await promises.pipeline(u.createReadStream(e),r,u.createWriteStream(t));const o=(await u.promises.stat(t)).size;return{file:e,originalSize:s,compressedSize:o,ratio:s>0?Number(((1-o/s)*100).toFixed(1)):0,algorithm:"brotli"}}async function compressFile(e,t,i,s){const r=e+(t==="gzip"?".gz":".br");return t==="gzip"?compressFileGzip(e,r,i):compressFileBrotli(e,r,s)}function shouldCompressFile(e,t,i,s){const r=e.replace(/\\/g,"/");if(i<s.threshold||s.excludeExtensions.length>0&&s.excludeExtensions.includes(t)||s.includeExtensions.length>0&&!s.includeExtensions.includes(t))return!1;if(s.excludePaths.length>0)for(const o of s.excludePaths){const a=o.replace(/\\/g,"/");if(r.startsWith(a)||r.includes(a))return!1}return!(t===".gz"||t===".br")}async function scanDirectory(e,t){return(await common_fs_index.scanDirectory(e,{filter:(i,s,r)=>{const o=l__default.relative(e,i);return shouldCompressFile(o,s,r,t)}})).map(i=>({filePath:i.filePath,relativePath:l__default.relative(e,i.filePath),size:i.size,ext:i.extension}))}function buildSummary(e,t){const i=e.reduce((o,a)=>o+a.originalSize,0),s=e.reduce((o,a)=>o+a.compressedSize,0),r=i>0?Number(((1-s/i)*100).toFixed(1)):0;return{totalFiles:e.length,totalOriginalSize:i,totalCompressedSize:s,totalRatio:r,gzipFiles:e.filter(o=>o.algorithm==="gzip").length,brotliFiles:e.filter(o=>o.algorithm==="brotli").length,executionTime:t,stats:e}}async function writeReport(e,t,i){if(!t)return;const s=l__default.isAbsolute(t)?t:l__default.join(e,t),r={timestamp:new Date().toISOString(),summary:{totalFiles:i.totalFiles,totalOriginalSize:i.totalOriginalSize,totalCompressedSize:i.totalCompressedSize,totalRatio:i.totalRatio,gzipFiles:i.gzipFiles,brotliFiles:i.brotliFiles,executionTime:i.executionTime},files:i.stats.map(o=>({file:o.file,originalSize:o.originalSize,compressedSize:o.compressedSize,ratio:o.ratio,algorithm:o.algorithm}))};await common_fs_index.writeJsonReport(s,r)}async function deleteOriginalFiles(e){const t=[...new Set(e.map(i=>i.file))];for(const i of t)try{await u.promises.unlink(i)}catch{}}async function y(e,t,i){const s=[];let r=0;async function o(){for(;r<e.length;){const n=r++,c=await t(e[n]);s[n]=c}}const a=Array(Math.min(i,e.length)).fill(null).map(()=>o());return await Promise.all(a),s}class S extends factory_index.BasePlugin{allStats=[];summary=null;getDefaultOptions(){return{algorithm:"gzip",threshold:1024,deleteOriginalFile:!1,includeExtensions:[".js",".css",".html",".svg",".json",".xml",".txt"],excludeExtensions:[],excludePaths:[],compressionLevel:9,brotliQuality:11,reportOutput:"compress-report.json",parallelLimit:10}}validateOptions(){this.validator.field("algorithm").enum(["gzip","brotli","both"]).field("threshold").number().minValue(0).field("deleteOriginalFile").boolean().field("includeExtensions").array().field("excludeExtensions").array().field("excludePaths").array().field("compressionLevel").number().minValue(1).maxValue(9).field("brotliQuality").number().minValue(1).maxValue(11).field("reportOutput").custom(t=>t===!1||typeof t=="string","reportOutput \u5FC5\u987B\u4E3A false \u6216\u5B57\u7B26\u4E32\u8DEF\u5F84").field("parallelLimit").number().minValue(1).maxValue(50).validate()}getPluginName(){return"compress-assets"}getEnforce(){return"post"}addPluginHooks(t){t.writeBundle=async()=>{await this.safeExecute(()=>this.compressAllFiles(),"\u538B\u7F29\u6784\u5EFA\u4EA7\u7269")}}async compressAllFiles(){if(!this.viteConfig)return;const t=this.viteConfig.build.outDir,i=Date.now();this.logger.info(`\u5F00\u59CB\u626B\u63CF\u6784\u5EFA\u4EA7\u7269\u76EE\u5F55: ${t}`);const s=await scanDirectory(t,this.options);if(s.length===0){this.logger.info("\u672A\u627E\u5230\u9700\u8981\u538B\u7F29\u7684\u6587\u4EF6");return}this.logger.info(`\u53D1\u73B0 ${s.length} \u4E2A\u5F85\u538B\u7F29\u6587\u4EF6`),this.allStats=[];const r=this.options.algorithm==="both"?["gzip","brotli"]:[this.options.algorithm];for(const a of r){const n=await y(s,async c=>compressFile(c.filePath,a,this.options.compressionLevel,this.options.brotliQuality),this.options.parallelLimit);this.allStats.push(...n)}const o=Date.now()-i;this.summary=buildSummary(this.allStats,o),this.options.deleteOriginalFile&&(await deleteOriginalFiles(this.allStats),this.logger.info("\u5DF2\u5220\u9664\u539F\u59CB\u6587\u4EF6\uFF0C\u4EC5\u4FDD\u7559\u538B\u7F29\u7248\u672C")),this.options.reportOutput&&(await writeReport(t,this.options.reportOutput,this.summary),this.logger.info(`\u538B\u7F29\u62A5\u544A\u5DF2\u751F\u6210: ${this.options.reportOutput}`)),this.logSummary()}logSummary(){if(!this.summary)return;const{totalFiles:t,totalOriginalSize:i,totalCompressedSize:s,totalRatio:r,executionTime:o}=this.summary;this.logger.success(`\u538B\u7F29\u5B8C\u6210: ${t} \u4E2A\u6587\u4EF6`,`\u539F\u59CB\u4F53\u79EF: ${common_format_index.formatFileSize(i)} \u2192 \u538B\u7F29\u540E: ${common_format_index.formatFileSize(s)}\uFF0C\u538B\u7F29\u7387: ${r}%\uFF0C\u8017\u65F6: ${o}ms`);const a=[...this.allStats].sort((n,c)=>c.ratio-n.ratio).slice(0,5);if(a.length>0){this.logger.info("\u538B\u7F29\u7387 Top 5:");for(const n of a)this.logger.info(` ${n.algorithm.toUpperCase().padEnd(6)} ${n.ratio}% ${common_format_index.formatFileSize(n.originalSize)} \u2192 ${common_format_index.formatFileSize(n.compressedSize)}`)}}getStats(){return[...this.allStats]}getSummary(){return this.summary}}const compressAssets=factory_index.createPluginFactory(S);exports.compressAssets=compressAssets;
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),g=require("node:zlib"),u=require("node:fs"),promises=require("node:stream/promises"),common_format_index=require("../../common/format/index.cjs"),l=require("node:path"),common_fs_index=require("../../common/fs/index.cjs"),common_path_index=require("../../common/path/index.cjs"),common_concurrency_index=require("../../common/concurrency/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs"),require("path");function _interopDefaultCompat(e){return e&&typeof e=="object"&&"default"in e?e.default:e}const l__default=_interopDefaultCompat(l);async function compressFileGzip(e,i,t){const s=(await u.promises.stat(e)).size,r=g.createGzip({level:t});await promises.pipeline(u.createReadStream(e),r,u.createWriteStream(i));const o=(await u.promises.stat(i)).size;return{file:e,originalSize:s,compressedSize:o,ratio:common_format_index.calcRatio(s,o),algorithm:"gzip"}}async function compressFileBrotli(e,i,t){const s=(await u.promises.stat(e)).size,r=g.createBrotliCompress({params:{[g.constants.BROTLI_PARAM_QUALITY]:t}});await promises.pipeline(u.createReadStream(e),r,u.createWriteStream(i));const o=(await u.promises.stat(i)).size;return{file:e,originalSize:s,compressedSize:o,ratio:common_format_index.calcRatio(s,o),algorithm:"brotli"}}async function compressFile(e,i,t,s){const r=e+(i==="gzip"?".gz":".br");return i==="gzip"?compressFileGzip(e,r,t):compressFileBrotli(e,r,s)}function shouldCompressFile(e,i,t,s){return!(t<s.threshold||!common_path_index.isExtensionIncluded(i,{includeExtensions:s.includeExtensions,excludeExtensions:s.excludeExtensions})||common_path_index.isPathExcluded(e,s.excludePaths)||common_path_index.isPreCompressed(i))}async function scanDirectory(e,i){return(await common_fs_index.scanDirectory(e,{filter:(t,s,r)=>{const o=l__default.relative(e,t);return shouldCompressFile(o,s,r,i)}})).map(t=>({filePath:t.filePath,relativePath:common_path_index.normalizePath(l__default.relative(e,t.filePath)),size:t.size,ext:t.extension}))}function buildSummary(e,i){const t=e.reduce((o,a)=>o+a.originalSize,0),s=e.reduce((o,a)=>o+a.compressedSize,0),r=common_format_index.calcRatio(t,s);return{totalFiles:e.length,totalOriginalSize:t,totalCompressedSize:s,totalRatio:r,gzipFiles:e.filter(o=>o.algorithm==="gzip").length,brotliFiles:e.filter(o=>o.algorithm==="brotli").length,executionTime:i,stats:e}}async function writeReport(e,i,t){const s=common_fs_index.resolveReportPath(e,i);if(!s)return;const r={timestamp:new Date().toISOString(),summary:{totalFiles:t.totalFiles,totalOriginalSize:t.totalOriginalSize,totalCompressedSize:t.totalCompressedSize,totalRatio:t.totalRatio,gzipFiles:t.gzipFiles,brotliFiles:t.brotliFiles,executionTime:t.executionTime},files:t.stats.map(o=>({file:o.file,originalSize:o.originalSize,compressedSize:o.compressedSize,ratio:o.ratio,algorithm:o.algorithm}))};await common_fs_index.writeJsonReport(s,r)}async function deleteOriginalFiles(e){const i=[...new Set(e.map(t=>t.file))];for(const t of i)try{await u.promises.unlink(t)}catch{}}class y extends factory_index.BasePlugin{allStats=[];summary=null;getDefaultOptions(){return{algorithm:"gzip",threshold:1024,deleteOriginalFile:!1,includeExtensions:[".js",".css",".html",".svg",".json",".xml",".txt"],excludeExtensions:[],excludePaths:[],compressionLevel:9,brotliQuality:11,reportOutput:"compress-report.json",parallelLimit:10}}validateOptions(){this.validator.field("algorithm").enum(["gzip","brotli","both"]).field("threshold").number().minValue(0).field("deleteOriginalFile").boolean().field("includeExtensions").array().field("excludeExtensions").array().field("excludePaths").array().field("compressionLevel").number().minValue(1).maxValue(9).field("brotliQuality").number().minValue(1).maxValue(11).field("reportOutput").custom(i=>i===!1||typeof i=="string","reportOutput \u5FC5\u987B\u4E3A false \u6216\u5B57\u7B26\u4E32\u8DEF\u5F84").field("parallelLimit").number().minValue(1).maxValue(50).validate()}getPluginName(){return"compress-assets"}getEnforce(){return"post"}addPluginHooks(i){i.writeBundle=async()=>{await this.safeExecute(()=>this.compressAllFiles(),"\u538B\u7F29\u6784\u5EFA\u4EA7\u7269")}}async compressAllFiles(){if(!this.viteConfig)return;const i=this.viteConfig.build.outDir,t=Date.now();this.logger.info(`\u5F00\u59CB\u626B\u63CF\u6784\u5EFA\u4EA7\u7269\u76EE\u5F55: ${i}`);const s=await scanDirectory(i,this.options);if(s.length===0){this.logger.info("\u672A\u627E\u5230\u9700\u8981\u538B\u7F29\u7684\u6587\u4EF6");return}this.logger.info(`\u53D1\u73B0 ${s.length} \u4E2A\u5F85\u538B\u7F29\u6587\u4EF6`),this.allStats=[];const r=this.options.algorithm==="both"?["gzip","brotli"]:[this.options.algorithm];for(const a of r){const n=await common_concurrency_index.runWithConcurrency(s,async c=>compressFile(c.filePath,a,this.options.compressionLevel,this.options.brotliQuality),this.options.parallelLimit);this.allStats.push(...n)}const o=Date.now()-t;this.summary=buildSummary(this.allStats,o),this.options.deleteOriginalFile&&(await deleteOriginalFiles(this.allStats),this.logger.info("\u5DF2\u5220\u9664\u539F\u59CB\u6587\u4EF6\uFF0C\u4EC5\u4FDD\u7559\u538B\u7F29\u7248\u672C")),this.options.reportOutput&&(await writeReport(i,this.options.reportOutput,this.summary),this.logger.info(`\u538B\u7F29\u62A5\u544A\u5DF2\u751F\u6210: ${this.options.reportOutput}`)),this.logSummary()}logSummary(){if(!this.summary)return;const{totalFiles:i,totalOriginalSize:t,totalCompressedSize:s,totalRatio:r,executionTime:o}=this.summary;this.logger.success(`\u538B\u7F29\u5B8C\u6210: ${i} \u4E2A\u6587\u4EF6`,`\u539F\u59CB\u4F53\u79EF: ${common_format_index.formatFileSize(t)} \u2192 \u538B\u7F29\u540E: ${common_format_index.formatFileSize(s)}\uFF0C\u538B\u7F29\u7387: ${r}%\uFF0C\u8017\u65F6: ${o}ms`);const a=[...this.allStats].sort((n,c)=>c.ratio-n.ratio).slice(0,5);if(a.length>0){this.logger.info("\u538B\u7F29\u7387 Top 5:");for(const n of a)this.logger.info(` ${n.algorithm.toUpperCase().padEnd(6)} ${n.ratio}% ${common_format_index.formatFileSize(n.originalSize)} \u2192 ${common_format_index.formatFileSize(n.compressedSize)}`)}}getStats(){return[...this.allStats]}getSummary(){return this.summary}}const compressAssets=factory_index.createPluginFactory(y);exports.compressAssets=compressAssets;
@@ -1 +1 @@
1
- import{createPluginFactory as f,BasePlugin as F}from"../../factory/index.mjs";import{createGzip as d,createBrotliCompress as z,constants as S}from"node:zlib";import{promises as n,createReadStream as p,createWriteStream as g}from"node:fs";import{pipeline as h}from"node:stream/promises";import m from"node:path";import{scanDirectory as y,writeJsonReport as x}from"../../common/fs/index.mjs";import{formatFileSize as c}from"../../common/format/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"path";async function E(e,t,i){const s=(await n.stat(e)).size,l=d({level:i});await h(p(e),l,g(t));const o=(await n.stat(t)).size;return{file:e,originalSize:s,compressedSize:o,ratio:s>0?Number(((1-o/s)*100).toFixed(1)):0,algorithm:"gzip"}}async function b(e,t,i){const s=(await n.stat(e)).size,l=z({params:{[S.BROTLI_PARAM_QUALITY]:i}});await h(p(e),l,g(t));const o=(await n.stat(t)).size;return{file:e,originalSize:s,compressedSize:o,ratio:s>0?Number(((1-o/s)*100).toFixed(1)):0,algorithm:"brotli"}}async function w(e,t,i,s){const l=e+(t==="gzip"?".gz":".br");return t==="gzip"?E(e,l,i):b(e,l,s)}function B(e,t,i,s){const l=e.replace(/\\/g,"/");if(i<s.threshold||s.excludeExtensions.length>0&&s.excludeExtensions.includes(t)||s.includeExtensions.length>0&&!s.includeExtensions.includes(t))return!1;if(s.excludePaths.length>0)for(const o of s.excludePaths){const r=o.replace(/\\/g,"/");if(l.startsWith(r)||l.includes(r))return!1}return!(t===".gz"||t===".br")}async function C(e,t){return(await y(e,{filter:(i,s,l)=>{const o=m.relative(e,i);return B(o,s,l,t)}})).map(i=>({filePath:i.filePath,relativePath:m.relative(e,i.filePath),size:i.size,ext:i.extension}))}function A(e,t){const i=e.reduce((o,r)=>o+r.originalSize,0),s=e.reduce((o,r)=>o+r.compressedSize,0),l=i>0?Number(((1-s/i)*100).toFixed(1)):0;return{totalFiles:e.length,totalOriginalSize:i,totalCompressedSize:s,totalRatio:l,gzipFiles:e.filter(o=>o.algorithm==="gzip").length,brotliFiles:e.filter(o=>o.algorithm==="brotli").length,executionTime:t,stats:e}}async function O(e,t,i){if(!t)return;const s=m.isAbsolute(t)?t:m.join(e,t),l={timestamp:new Date().toISOString(),summary:{totalFiles:i.totalFiles,totalOriginalSize:i.totalOriginalSize,totalCompressedSize:i.totalCompressedSize,totalRatio:i.totalRatio,gzipFiles:i.gzipFiles,brotliFiles:i.brotliFiles,executionTime:i.executionTime},files:i.stats.map(o=>({file:o.file,originalSize:o.originalSize,compressedSize:o.compressedSize,ratio:o.ratio,algorithm:o.algorithm}))};await x(s,l)}async function P(e){const t=[...new Set(e.map(i=>i.file))];for(const i of t)try{await n.unlink(i)}catch{}}async function D(e,t,i){const s=[];let l=0;async function o(){for(;l<e.length;){const a=l++,u=await t(e[a]);s[a]=u}}const r=Array(Math.min(i,e.length)).fill(null).map(()=>o());return await Promise.all(r),s}class $ extends F{allStats=[];summary=null;getDefaultOptions(){return{algorithm:"gzip",threshold:1024,deleteOriginalFile:!1,includeExtensions:[".js",".css",".html",".svg",".json",".xml",".txt"],excludeExtensions:[],excludePaths:[],compressionLevel:9,brotliQuality:11,reportOutput:"compress-report.json",parallelLimit:10}}validateOptions(){this.validator.field("algorithm").enum(["gzip","brotli","both"]).field("threshold").number().minValue(0).field("deleteOriginalFile").boolean().field("includeExtensions").array().field("excludeExtensions").array().field("excludePaths").array().field("compressionLevel").number().minValue(1).maxValue(9).field("brotliQuality").number().minValue(1).maxValue(11).field("reportOutput").custom(t=>t===!1||typeof t=="string","reportOutput \u5FC5\u987B\u4E3A false \u6216\u5B57\u7B26\u4E32\u8DEF\u5F84").field("parallelLimit").number().minValue(1).maxValue(50).validate()}getPluginName(){return"compress-assets"}getEnforce(){return"post"}addPluginHooks(t){t.writeBundle=async()=>{await this.safeExecute(()=>this.compressAllFiles(),"\u538B\u7F29\u6784\u5EFA\u4EA7\u7269")}}async compressAllFiles(){if(!this.viteConfig)return;const t=this.viteConfig.build.outDir,i=Date.now();this.logger.info(`\u5F00\u59CB\u626B\u63CF\u6784\u5EFA\u4EA7\u7269\u76EE\u5F55: ${t}`);const s=await C(t,this.options);if(s.length===0){this.logger.info("\u672A\u627E\u5230\u9700\u8981\u538B\u7F29\u7684\u6587\u4EF6");return}this.logger.info(`\u53D1\u73B0 ${s.length} \u4E2A\u5F85\u538B\u7F29\u6587\u4EF6`),this.allStats=[];const l=this.options.algorithm==="both"?["gzip","brotli"]:[this.options.algorithm];for(const r of l){const a=await D(s,async u=>w(u.filePath,r,this.options.compressionLevel,this.options.brotliQuality),this.options.parallelLimit);this.allStats.push(...a)}const o=Date.now()-i;this.summary=A(this.allStats,o),this.options.deleteOriginalFile&&(await P(this.allStats),this.logger.info("\u5DF2\u5220\u9664\u539F\u59CB\u6587\u4EF6\uFF0C\u4EC5\u4FDD\u7559\u538B\u7F29\u7248\u672C")),this.options.reportOutput&&(await O(t,this.options.reportOutput,this.summary),this.logger.info(`\u538B\u7F29\u62A5\u544A\u5DF2\u751F\u6210: ${this.options.reportOutput}`)),this.logSummary()}logSummary(){if(!this.summary)return;const{totalFiles:t,totalOriginalSize:i,totalCompressedSize:s,totalRatio:l,executionTime:o}=this.summary;this.logger.success(`\u538B\u7F29\u5B8C\u6210: ${t} \u4E2A\u6587\u4EF6`,`\u539F\u59CB\u4F53\u79EF: ${c(i)} \u2192 \u538B\u7F29\u540E: ${c(s)}\uFF0C\u538B\u7F29\u7387: ${l}%\uFF0C\u8017\u65F6: ${o}ms`);const r=[...this.allStats].sort((a,u)=>u.ratio-a.ratio).slice(0,5);if(r.length>0){this.logger.info("\u538B\u7F29\u7387 Top 5:");for(const a of r)this.logger.info(` ${a.algorithm.toUpperCase().padEnd(6)} ${a.ratio}% ${c(a.originalSize)} \u2192 ${c(a.compressedSize)}`)}}getStats(){return[...this.allStats]}getSummary(){return this.summary}}const v=f($);export{v as compressAssets};
1
+ import{createPluginFactory as F,BasePlugin as d}from"../../factory/index.mjs";import{createGzip as z,createBrotliCompress as S,constants as y}from"node:zlib";import{promises as u,createReadStream as p,createWriteStream as h}from"node:fs";import{pipeline as g}from"node:stream/promises";import{calcRatio as c,formatFileSize as n}from"../../common/format/index.mjs";import f from"node:path";import{scanDirectory as E,resolveReportPath as x,writeJsonReport as B}from"../../common/fs/index.mjs";import{normalizePath as C,isExtensionIncluded as w,isPathExcluded as b,isPreCompressed as O}from"../../common/path/index.mjs";import{runWithConcurrency as P}from"../../common/concurrency/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"path";async function A(e,i,t){const o=(await u.stat(e)).size,r=z({level:t});await g(p(e),r,h(i));const s=(await u.stat(i)).size;return{file:e,originalSize:o,compressedSize:s,ratio:c(o,s),algorithm:"gzip"}}async function v(e,i,t){const o=(await u.stat(e)).size,r=S({params:{[y.BROTLI_PARAM_QUALITY]:t}});await g(p(e),r,h(i));const s=(await u.stat(i)).size;return{file:e,originalSize:o,compressedSize:s,ratio:c(o,s),algorithm:"brotli"}}async function D(e,i,t,o){const r=e+(i==="gzip"?".gz":".br");return i==="gzip"?A(e,r,t):v(e,r,o)}function $(e,i,t,o){return!(t<o.threshold||!w(i,{includeExtensions:o.includeExtensions,excludeExtensions:o.excludeExtensions})||b(e,o.excludePaths)||O(i))}async function R(e,i){return(await E(e,{filter:(t,o,r)=>{const s=f.relative(e,t);return $(s,o,r,i)}})).map(t=>({filePath:t.filePath,relativePath:C(f.relative(e,t.filePath)),size:t.size,ext:t.extension}))}function L(e,i){const t=e.reduce((s,a)=>s+a.originalSize,0),o=e.reduce((s,a)=>s+a.compressedSize,0),r=c(t,o);return{totalFiles:e.length,totalOriginalSize:t,totalCompressedSize:o,totalRatio:r,gzipFiles:e.filter(s=>s.algorithm==="gzip").length,brotliFiles:e.filter(s=>s.algorithm==="brotli").length,executionTime:i,stats:e}}async function T(e,i,t){const o=x(e,i);if(!o)return;const r={timestamp:new Date().toISOString(),summary:{totalFiles:t.totalFiles,totalOriginalSize:t.totalOriginalSize,totalCompressedSize:t.totalCompressedSize,totalRatio:t.totalRatio,gzipFiles:t.gzipFiles,brotliFiles:t.brotliFiles,executionTime:t.executionTime},files:t.stats.map(s=>({file:s.file,originalSize:s.originalSize,compressedSize:s.compressedSize,ratio:s.ratio,algorithm:s.algorithm}))};await B(o,r)}async function V(e){const i=[...new Set(e.map(t=>t.file))];for(const t of i)try{await u.unlink(t)}catch{}}class I extends d{allStats=[];summary=null;getDefaultOptions(){return{algorithm:"gzip",threshold:1024,deleteOriginalFile:!1,includeExtensions:[".js",".css",".html",".svg",".json",".xml",".txt"],excludeExtensions:[],excludePaths:[],compressionLevel:9,brotliQuality:11,reportOutput:"compress-report.json",parallelLimit:10}}validateOptions(){this.validator.field("algorithm").enum(["gzip","brotli","both"]).field("threshold").number().minValue(0).field("deleteOriginalFile").boolean().field("includeExtensions").array().field("excludeExtensions").array().field("excludePaths").array().field("compressionLevel").number().minValue(1).maxValue(9).field("brotliQuality").number().minValue(1).maxValue(11).field("reportOutput").custom(i=>i===!1||typeof i=="string","reportOutput \u5FC5\u987B\u4E3A false \u6216\u5B57\u7B26\u4E32\u8DEF\u5F84").field("parallelLimit").number().minValue(1).maxValue(50).validate()}getPluginName(){return"compress-assets"}getEnforce(){return"post"}addPluginHooks(i){i.writeBundle=async()=>{await this.safeExecute(()=>this.compressAllFiles(),"\u538B\u7F29\u6784\u5EFA\u4EA7\u7269")}}async compressAllFiles(){if(!this.viteConfig)return;const i=this.viteConfig.build.outDir,t=Date.now();this.logger.info(`\u5F00\u59CB\u626B\u63CF\u6784\u5EFA\u4EA7\u7269\u76EE\u5F55: ${i}`);const o=await R(i,this.options);if(o.length===0){this.logger.info("\u672A\u627E\u5230\u9700\u8981\u538B\u7F29\u7684\u6587\u4EF6");return}this.logger.info(`\u53D1\u73B0 ${o.length} \u4E2A\u5F85\u538B\u7F29\u6587\u4EF6`),this.allStats=[];const r=this.options.algorithm==="both"?["gzip","brotli"]:[this.options.algorithm];for(const a of r){const l=await P(o,async m=>D(m.filePath,a,this.options.compressionLevel,this.options.brotliQuality),this.options.parallelLimit);this.allStats.push(...l)}const s=Date.now()-t;this.summary=L(this.allStats,s),this.options.deleteOriginalFile&&(await V(this.allStats),this.logger.info("\u5DF2\u5220\u9664\u539F\u59CB\u6587\u4EF6\uFF0C\u4EC5\u4FDD\u7559\u538B\u7F29\u7248\u672C")),this.options.reportOutput&&(await T(i,this.options.reportOutput,this.summary),this.logger.info(`\u538B\u7F29\u62A5\u544A\u5DF2\u751F\u6210: ${this.options.reportOutput}`)),this.logSummary()}logSummary(){if(!this.summary)return;const{totalFiles:i,totalOriginalSize:t,totalCompressedSize:o,totalRatio:r,executionTime:s}=this.summary;this.logger.success(`\u538B\u7F29\u5B8C\u6210: ${i} \u4E2A\u6587\u4EF6`,`\u539F\u59CB\u4F53\u79EF: ${n(t)} \u2192 \u538B\u7F29\u540E: ${n(o)}\uFF0C\u538B\u7F29\u7387: ${r}%\uFF0C\u8017\u65F6: ${s}ms`);const a=[...this.allStats].sort((l,m)=>m.ratio-l.ratio).slice(0,5);if(a.length>0){this.logger.info("\u538B\u7F29\u7387 Top 5:");for(const l of a)this.logger.info(` ${l.algorithm.toUpperCase().padEnd(6)} ${l.ratio}% ${n(l.originalSize)} \u2192 ${n(l.compressedSize)}`)}}getStats(){return[...this.allStats]}getSummary(){return this.summary}}const Q=F(I);export{Q as compressAssets};
@@ -1 +1 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),common_fs_index=require("../../common/fs/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs"),require("path");class p extends factory_index.BasePlugin{getDefaultOptions(){return{overwrite:!0,recursive:!0,incremental:!0}}validateOptions(){this.validator.field("sourceDir").required().string().custom(e=>e.trim()!=="","sourceDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("targetDir").required().string().custom(e=>e.trim()!=="","targetDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("overwrite").boolean().field("recursive").boolean().field("incremental").boolean().validate()}getPluginName(){return"copy-file"}getEnforce(){return"post"}async copyFiles(){const{sourceDir:e,targetDir:u,overwrite:i=!0,recursive:t=!0,incremental:s=!0,enabled:o=!0}=this.options;if(!o){this.logger.info(`\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6267\u884C\uFF1A\u4ECE ${e} \u590D\u5236\u5230 ${u}`);return}await common_fs_index.checkSourceExists(e);const r=await common_fs_index.copySourceToTarget(e,u,{recursive:t,overwrite:i,incremental:s});this.logger.success(`\u590D\u5236\u6587\u4EF6\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${u}`,`\u590D\u5236\u4E86 ${r.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${r.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${r.executionTime}ms`)}addPluginHooks(e){e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u590D\u5236\u6587\u4EF6")}}}const copyFile=factory_index.createPluginFactory(p);exports.copyFile=copyFile;
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),common_fs_index=require("../../common/fs/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs"),require("path"),require("../../common/concurrency/index.cjs");class p extends factory_index.BasePlugin{getDefaultOptions(){return{overwrite:!0,recursive:!0,incremental:!0}}validateOptions(){this.validator.field("sourceDir").required().string().custom(e=>e.trim()!=="","sourceDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("targetDir").required().string().custom(e=>e.trim()!=="","targetDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("overwrite").boolean().field("recursive").boolean().field("incremental").boolean().validate()}getPluginName(){return"copy-file"}getEnforce(){return"post"}async copyFiles(){const{sourceDir:e,targetDir:u,overwrite:i=!0,recursive:t=!0,incremental:s=!0,enabled:o=!0}=this.options;if(!o){this.logger.info(`\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6267\u884C\uFF1A\u4ECE ${e} \u590D\u5236\u5230 ${u}`);return}await common_fs_index.checkSourceExists(e);const r=await common_fs_index.copySourceToTarget(e,u,{recursive:t,overwrite:i,incremental:s});this.logger.success(`\u590D\u5236\u6587\u4EF6\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${u}`,`\u590D\u5236\u4E86 ${r.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${r.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${r.executionTime}ms`)}addPluginHooks(e){e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u590D\u5236\u6587\u4EF6")}}}const copyFile=factory_index.createPluginFactory(p);exports.copyFile=copyFile;
@@ -1 +1 @@
1
- import{createPluginFactory as c,BasePlugin as n}from"../../factory/index.mjs";import{checkSourceExists as a,copySourceToTarget as l}from"../../common/fs/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"path";class F extends n{getDefaultOptions(){return{overwrite:!0,recursive:!0,incremental:!0}}validateOptions(){this.validator.field("sourceDir").required().string().custom(e=>e.trim()!=="","sourceDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("targetDir").required().string().custom(e=>e.trim()!=="","targetDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("overwrite").boolean().field("recursive").boolean().field("incremental").boolean().validate()}getPluginName(){return"copy-file"}getEnforce(){return"post"}async copyFiles(){const{sourceDir:e,targetDir:u,overwrite:t=!0,recursive:i=!0,incremental:o=!0,enabled:s=!0}=this.options;if(!s){this.logger.info(`\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6267\u884C\uFF1A\u4ECE ${e} \u590D\u5236\u5230 ${u}`);return}await a(e);const r=await l(e,u,{recursive:i,overwrite:t,incremental:o});this.logger.success(`\u590D\u5236\u6587\u4EF6\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${u}`,`\u590D\u5236\u4E86 ${r.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${r.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${r.executionTime}ms`)}addPluginHooks(e){e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u590D\u5236\u6587\u4EF6")}}}const E=c(F);export{E as copyFile};
1
+ import{createPluginFactory as c,BasePlugin as n}from"../../factory/index.mjs";import{checkSourceExists as a,copySourceToTarget as l}from"../../common/fs/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"path";import"../../common/concurrency/index.mjs";class F extends n{getDefaultOptions(){return{overwrite:!0,recursive:!0,incremental:!0}}validateOptions(){this.validator.field("sourceDir").required().string().custom(e=>e.trim()!=="","sourceDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("targetDir").required().string().custom(e=>e.trim()!=="","targetDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("overwrite").boolean().field("recursive").boolean().field("incremental").boolean().validate()}getPluginName(){return"copy-file"}getEnforce(){return"post"}async copyFiles(){const{sourceDir:e,targetDir:u,overwrite:t=!0,recursive:i=!0,incremental:o=!0,enabled:s=!0}=this.options;if(!s){this.logger.info(`\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6267\u884C\uFF1A\u4ECE ${e} \u590D\u5236\u5230 ${u}`);return}await a(e);const r=await l(e,u,{recursive:i,overwrite:t,incremental:o});this.logger.success(`\u590D\u5236\u6587\u4EF6\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${u}`,`\u590D\u5236\u4E86 ${r.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${r.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${r.executionTime}ms`)}addPluginHooks(e){e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u590D\u5236\u6587\u4EF6")}}}const E=c(F);export{E as copyFile};
@@ -1,4 +1,4 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),common_format_index=require("../../common/format/index.cjs"),common_html_index=require("../../common/html/index.cjs"),common_fs_index=require("../../common/fs/index.cjs"),l$1=require("node:path"),u=require("node:fs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("../../shared/vite-plugin.CcvHfrL8.cjs"),require("fs"),require("path");function _interopDefaultCompat(s){return s&&typeof s=="object"&&"default"in s?s.default:s}const l__default=_interopDefaultCompat(l$1),u__default=_interopDefaultCompat(u),g=new Set(["string","url","path","enum","semver",void 0]);function o$1(s,e){switch(e.type){case"number":{if(isNaN(Number(s))||s.trim()==="")return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5\u6570\u5B57`};break}case"url":{try{new URL(s)}catch{return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5 URL`}}break}case"boolean":{const r=s.toLowerCase();if(!["true","false","1","0","yes","no"].includes(r))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5\u5E03\u5C14\u503C (true/false/1/0/yes/no)`};break}case"enum":{if(!e.enumValues||e.enumValues.length===0)return{valid:!1,status:"enum_mismatch",message:"enum \u7C7B\u578B\u5FC5\u987B\u6307\u5B9A enumValues"};if(!e.enumValues.includes(s))return{valid:!1,status:"enum_mismatch",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u5728\u5141\u8BB8\u7684\u679A\u4E3E\u503C\u4E2D: ${e.enumValues.join(", ")}`};break}case"json":{try{JSON.parse(s)}catch{return{valid:!1,status:"type_error",message:"\u73AF\u5883\u53D8\u91CF\u503C\u4E0D\u662F\u5408\u6CD5 JSON"}}break}case"semver":{if(!/^\d+\.\d+\.\d+(-[\w.]+)?(\+[\w.]+)?$/.test(s))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5\u8BED\u4E49\u5316\u7248\u672C\u53F7 (x.y.z)`};break}case"path":{if(!/^(?:[./\\]|(?:[a-zA-Z]:))/.test(s))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5\u6587\u4EF6\u8DEF\u5F84`};break}}return{valid:!0,status:"pass",message:""}}function l(s,e){if(e.type!=="number")return{valid:!0,status:"pass",message:""};const r=Number(s);return e.minValue!==void 0&&r<e.minValue?{valid:!1,status:"range_error",message:`\u6570\u503C ${r} \u5C0F\u4E8E\u6700\u5C0F\u503C ${e.minValue}`}:e.maxValue!==void 0&&r>e.maxValue?{valid:!1,status:"range_error",message:`\u6570\u503C ${r} \u5927\u4E8E\u6700\u5927\u503C ${e.maxValue}`}:{valid:!0,status:"pass",message:""}}function d(s,e){return g.has(e.type)?e.minLength!==void 0&&s.length<e.minLength?{valid:!1,status:"length_error",message:`\u5B57\u7B26\u4E32\u957F\u5EA6 ${s.length} \u5C0F\u4E8E\u6700\u5C0F\u957F\u5EA6 ${e.minLength}`}:e.maxLength!==void 0&&s.length>e.maxLength?{valid:!1,status:"length_error",message:`\u5B57\u7B26\u4E32\u957F\u5EA6 ${s.length} \u5927\u4E8E\u6700\u5927\u957F\u5EA6 ${e.maxLength}`}:{valid:!0,status:"pass",message:""}:{valid:!0,status:"pass",message:""}}function validateValue(s,e,r){const t={type:"string",required:!0,...r};if(e===void 0||e==="")return t.required!==!1?{key:s,status:"missing",message:t.message||`\u7F3A\u5C11\u5FC5\u9700\u7684\u73AF\u5883\u53D8\u91CF: ${s}`,value:e,rule:t}:{key:s,status:"pass",message:"",value:t.default??e,rule:t};const i=o$1(e,t);if(!i.valid)return{key:s,status:i.status,message:t.message||i.message,value:e,rule:t};const n=l(e,t);if(!n.valid)return{key:s,status:n.status,message:t.message||n.message,value:e,rule:t};const m=d(e,t);if(!m.valid)return{key:s,status:m.status,message:t.message||m.message,value:e,rule:t};if(t.pattern&&!t.pattern.test(e))return{key:s,status:"custom_error",message:t.message||`\u73AF\u5883\u53D8\u91CF ${s} \u4E0D\u5339\u914D\u6B63\u5219: ${t.pattern.source}`,value:e,rule:t};if(t.validator){const a=t.validator(e);if(a!==!0){const h=typeof a=="string"?a:"";return{key:s,status:"custom_error",message:t.message||h||`\u73AF\u5883\u53D8\u91CF ${s} \u81EA\u5B9A\u4E49\u6821\u9A8C\u5931\u8D25`,value:e,rule:t}}}return{key:s,status:"pass",message:"",value:e,rule:t}}function validateEnvironment(s,e){const r=[];for(const[t,i]of Object.entries(e)){const n=s[t];r.push(validateValue(t,n,i))}return r}function generateTemplate(s){const e=new Map,r=[];for(const[i,n]of Object.entries(s)){const m={type:"string",required:!0,...n};if(m.group){const a=e.get(m.group)||[];a.push({key:i,rule:m}),e.set(m.group,a)}else r.push({key:i,rule:m})}const t=[];t.push("# \u73AF\u5883\u53D8\u91CF\u6A21\u677F\u6587\u4EF6"),t.push(`# \u751F\u6210\u65F6\u95F4: ${new Date().toISOString()}`),t.push("# \u7531 @meng-xi/vite-plugin envGuard \u81EA\u52A8\u751F\u6210"),t.push(""),r.length>0&&o(t,"\u901A\u7528\u914D\u7F6E",r);for(const[i,n]of e)o(t,i,n);return t.join(`
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),common_format_index=require("../../common/format/index.cjs"),common_html_index=require("../../common/html/index.cjs"),common_fs_index=require("../../common/fs/index.cjs"),l$1=require("node:path"),u=require("node:fs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("../../shared/vite-plugin.CcvHfrL8.cjs"),require("fs"),require("path"),require("../../common/concurrency/index.cjs");function _interopDefaultCompat(s){return s&&typeof s=="object"&&"default"in s?s.default:s}const l__default=_interopDefaultCompat(l$1),u__default=_interopDefaultCompat(u),g=new Set(["string","url","path","enum","semver",void 0]);function o$1(s,e){switch(e.type){case"number":{if(isNaN(Number(s))||s.trim()==="")return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5\u6570\u5B57`};break}case"url":{try{new URL(s)}catch{return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5 URL`}}break}case"boolean":{const r=s.toLowerCase();if(!["true","false","1","0","yes","no"].includes(r))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5\u5E03\u5C14\u503C (true/false/1/0/yes/no)`};break}case"enum":{if(!e.enumValues||e.enumValues.length===0)return{valid:!1,status:"enum_mismatch",message:"enum \u7C7B\u578B\u5FC5\u987B\u6307\u5B9A enumValues"};if(!e.enumValues.includes(s))return{valid:!1,status:"enum_mismatch",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u5728\u5141\u8BB8\u7684\u679A\u4E3E\u503C\u4E2D: ${e.enumValues.join(", ")}`};break}case"json":{try{JSON.parse(s)}catch{return{valid:!1,status:"type_error",message:"\u73AF\u5883\u53D8\u91CF\u503C\u4E0D\u662F\u5408\u6CD5 JSON"}}break}case"semver":{if(!/^\d+\.\d+\.\d+(-[\w.]+)?(\+[\w.]+)?$/.test(s))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5\u8BED\u4E49\u5316\u7248\u672C\u53F7 (x.y.z)`};break}case"path":{if(!/^(?:[./\\]|(?:[a-zA-Z]:))/.test(s))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${s}" \u4E0D\u662F\u5408\u6CD5\u6587\u4EF6\u8DEF\u5F84`};break}}return{valid:!0,status:"pass",message:""}}function l(s,e){if(e.type!=="number")return{valid:!0,status:"pass",message:""};const r=Number(s);return e.minValue!==void 0&&r<e.minValue?{valid:!1,status:"range_error",message:`\u6570\u503C ${r} \u5C0F\u4E8E\u6700\u5C0F\u503C ${e.minValue}`}:e.maxValue!==void 0&&r>e.maxValue?{valid:!1,status:"range_error",message:`\u6570\u503C ${r} \u5927\u4E8E\u6700\u5927\u503C ${e.maxValue}`}:{valid:!0,status:"pass",message:""}}function d(s,e){return g.has(e.type)?e.minLength!==void 0&&s.length<e.minLength?{valid:!1,status:"length_error",message:`\u5B57\u7B26\u4E32\u957F\u5EA6 ${s.length} \u5C0F\u4E8E\u6700\u5C0F\u957F\u5EA6 ${e.minLength}`}:e.maxLength!==void 0&&s.length>e.maxLength?{valid:!1,status:"length_error",message:`\u5B57\u7B26\u4E32\u957F\u5EA6 ${s.length} \u5927\u4E8E\u6700\u5927\u957F\u5EA6 ${e.maxLength}`}:{valid:!0,status:"pass",message:""}:{valid:!0,status:"pass",message:""}}function validateValue(s,e,r){const t={type:"string",required:!0,...r};if(e===void 0||e==="")return t.required!==!1?{key:s,status:"missing",message:t.message||`\u7F3A\u5C11\u5FC5\u9700\u7684\u73AF\u5883\u53D8\u91CF: ${s}`,value:e,rule:t}:{key:s,status:"pass",message:"",value:t.default??e,rule:t};const i=o$1(e,t);if(!i.valid)return{key:s,status:i.status,message:t.message||i.message,value:e,rule:t};const n=l(e,t);if(!n.valid)return{key:s,status:n.status,message:t.message||n.message,value:e,rule:t};const m=d(e,t);if(!m.valid)return{key:s,status:m.status,message:t.message||m.message,value:e,rule:t};if(t.pattern&&!t.pattern.test(e))return{key:s,status:"custom_error",message:t.message||`\u73AF\u5883\u53D8\u91CF ${s} \u4E0D\u5339\u914D\u6B63\u5219: ${t.pattern.source}`,value:e,rule:t};if(t.validator){const a=t.validator(e);if(a!==!0){const h=typeof a=="string"?a:"";return{key:s,status:"custom_error",message:t.message||h||`\u73AF\u5883\u53D8\u91CF ${s} \u81EA\u5B9A\u4E49\u6821\u9A8C\u5931\u8D25`,value:e,rule:t}}}return{key:s,status:"pass",message:"",value:e,rule:t}}function validateEnvironment(s,e){const r=[];for(const[t,i]of Object.entries(e)){const n=s[t];r.push(validateValue(t,n,i))}return r}function generateTemplate(s){const e=new Map,r=[];for(const[i,n]of Object.entries(s)){const m={type:"string",required:!0,...n};if(m.group){const a=e.get(m.group)||[];a.push({key:i,rule:m}),e.set(m.group,a)}else r.push({key:i,rule:m})}const t=[];t.push("# \u73AF\u5883\u53D8\u91CF\u6A21\u677F\u6587\u4EF6"),t.push(`# \u751F\u6210\u65F6\u95F4: ${new Date().toISOString()}`),t.push("# \u7531 @meng-xi/vite-plugin envGuard \u81EA\u52A8\u751F\u6210"),t.push(""),r.length>0&&o(t,"\u901A\u7528\u914D\u7F6E",r);for(const[i,n]of e)o(t,i,n);return t.join(`
2
2
  `)}function o(s,e,r){s.push("# =============================="),s.push(`# ${e}`),s.push("# =============================="),s.push("");for(const{key:t,rule:i}of r){i.description&&s.push(`# ${i.description}`);const n=[];n.push(`\u7C7B\u578B: ${i.type||"string"}`),n.push(i.required!==!1?"\u5FC5\u9700":"\u53EF\u9009"),i.enumValues&&i.enumValues.length>0&&n.push(`\u679A\u4E3E\u503C: ${i.enumValues.join(" | ")}`),i.minValue!==void 0&&n.push(`\u6700\u5C0F\u503C: ${i.minValue}`),i.maxValue!==void 0&&n.push(`\u6700\u5927\u503C: ${i.maxValue}`),i.minLength!==void 0&&n.push(`\u6700\u5C0F\u957F\u5EA6: ${i.minLength}`),i.maxLength!==void 0&&n.push(`\u6700\u5927\u957F\u5EA6: ${i.maxLength}`),i.sensitive&&n.push("\u26A0\uFE0F \u654F\u611F\u4FE1\u606F"),s.push(`# [${n.join(" | ")}]`),i.default!==void 0?s.push(`${t}=${i.sensitive?"********":i.default}`):s.push(`${t}=`),s.push("")}}function generateRuntimeGuard(s,e,r,t){const i=[];for(const[c,p]of Object.entries(s))p.required!==!1&&i.push({key:c,rule:{type:"string",required:!0,...p}});if(i.length===0)return"";const n=t.filter(c=>c.status!=="pass"),m=i.map(({key:c,rule:p})=>({key:c,type:p.type||"string",description:p.description||""})),a=JSON.stringify(m,null,2),h=n.map(c=>c.key),v=JSON.stringify(h),F=f(r);return`<script>
3
3
  ${`
4
4
  (function() {
@@ -1,4 +1,4 @@
1
- import{createPluginFactory as v,BasePlugin as F}from"../../factory/index.mjs";import{formatDate as A}from"../../common/format/index.mjs";import{injectBeforeTag as E}from"../../common/html/index.mjs";import{writeFileContent as g}from"../../common/fs/index.mjs";import m from"node:path";import p from"node:fs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"../../shared/vite-plugin.CuXEJAWX.mjs";import"fs";import"path";const C=new Set(["string","url","path","enum","semver",void 0]);function D(t,u){switch(u.type){case"number":{if(isNaN(Number(t))||t.trim()==="")return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5\u6570\u5B57`};break}case"url":{try{new URL(t)}catch{return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5 URL`}}break}case"boolean":{const r=t.toLowerCase();if(!["true","false","1","0","yes","no"].includes(r))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5\u5E03\u5C14\u503C (true/false/1/0/yes/no)`};break}case"enum":{if(!u.enumValues||u.enumValues.length===0)return{valid:!1,status:"enum_mismatch",message:"enum \u7C7B\u578B\u5FC5\u987B\u6307\u5B9A enumValues"};if(!u.enumValues.includes(t))return{valid:!1,status:"enum_mismatch",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u5728\u5141\u8BB8\u7684\u679A\u4E3E\u503C\u4E2D: ${u.enumValues.join(", ")}`};break}case"json":{try{JSON.parse(t)}catch{return{valid:!1,status:"type_error",message:"\u73AF\u5883\u53D8\u91CF\u503C\u4E0D\u662F\u5408\u6CD5 JSON"}}break}case"semver":{if(!/^\d+\.\d+\.\d+(-[\w.]+)?(\+[\w.]+)?$/.test(t))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5\u8BED\u4E49\u5316\u7248\u672C\u53F7 (x.y.z)`};break}case"path":{if(!/^(?:[./\\]|(?:[a-zA-Z]:))/.test(t))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5\u6587\u4EF6\u8DEF\u5F84`};break}}return{valid:!0,status:"pass",message:""}}function y(t,u){if(u.type!=="number")return{valid:!0,status:"pass",message:""};const r=Number(t);return u.minValue!==void 0&&r<u.minValue?{valid:!1,status:"range_error",message:`\u6570\u503C ${r} \u5C0F\u4E8E\u6700\u5C0F\u503C ${u.minValue}`}:u.maxValue!==void 0&&r>u.maxValue?{valid:!1,status:"range_error",message:`\u6570\u503C ${r} \u5927\u4E8E\u6700\u5927\u503C ${u.maxValue}`}:{valid:!0,status:"pass",message:""}}function $(t,u){return C.has(u.type)?u.minLength!==void 0&&t.length<u.minLength?{valid:!1,status:"length_error",message:`\u5B57\u7B26\u4E32\u957F\u5EA6 ${t.length} \u5C0F\u4E8E\u6700\u5C0F\u957F\u5EA6 ${u.minLength}`}:u.maxLength!==void 0&&t.length>u.maxLength?{valid:!1,status:"length_error",message:`\u5B57\u7B26\u4E32\u957F\u5EA6 ${t.length} \u5927\u4E8E\u6700\u5927\u957F\u5EA6 ${u.maxLength}`}:{valid:!0,status:"pass",message:""}:{valid:!0,status:"pass",message:""}}function R(t,u,r){const e={type:"string",required:!0,...r};if(u===void 0||u==="")return e.required!==!1?{key:t,status:"missing",message:e.message||`\u7F3A\u5C11\u5FC5\u9700\u7684\u73AF\u5883\u53D8\u91CF: ${t}`,value:u,rule:e}:{key:t,status:"pass",message:"",value:e.default??u,rule:e};const s=D(u,e);if(!s.valid)return{key:t,status:s.status,message:e.message||s.message,value:u,rule:e};const i=y(u,e);if(!i.valid)return{key:t,status:i.status,message:e.message||i.message,value:u,rule:e};const n=$(u,e);if(!n.valid)return{key:t,status:n.status,message:e.message||n.message,value:u,rule:e};if(e.pattern&&!e.pattern.test(u))return{key:t,status:"custom_error",message:e.message||`\u73AF\u5883\u53D8\u91CF ${t} \u4E0D\u5339\u914D\u6B63\u5219: ${e.pattern.source}`,value:u,rule:e};if(e.validator){const a=e.validator(u);if(a!==!0){const l=typeof a=="string"?a:"";return{key:t,status:"custom_error",message:e.message||l||`\u73AF\u5883\u53D8\u91CF ${t} \u81EA\u5B9A\u4E49\u6821\u9A8C\u5931\u8D25`,value:u,rule:e}}}return{key:t,status:"pass",message:"",value:u,rule:e}}function w(t,u){const r=[];for(const[e,s]of Object.entries(u)){const i=t[e];r.push(R(e,i,s))}return r}function _(t){const u=new Map,r=[];for(const[s,i]of Object.entries(t)){const n={type:"string",required:!0,...i};if(n.group){const a=u.get(n.group)||[];a.push({key:s,rule:n}),u.set(n.group,a)}else r.push({key:s,rule:n})}const e=[];e.push("# \u73AF\u5883\u53D8\u91CF\u6A21\u677F\u6587\u4EF6"),e.push(`# \u751F\u6210\u65F6\u95F4: ${new Date().toISOString()}`),e.push("# \u7531 @meng-xi/vite-plugin envGuard \u81EA\u52A8\u751F\u6210"),e.push(""),r.length>0&&h(e,"\u901A\u7528\u914D\u7F6E",r);for(const[s,i]of u)h(e,s,i);return e.join(`
1
+ import{createPluginFactory as v,BasePlugin as F}from"../../factory/index.mjs";import{formatDate as A}from"../../common/format/index.mjs";import{injectBeforeTag as E}from"../../common/html/index.mjs";import{writeFileContent as g}from"../../common/fs/index.mjs";import m from"node:path";import p from"node:fs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"../../shared/vite-plugin.CuXEJAWX.mjs";import"fs";import"path";import"../../common/concurrency/index.mjs";const C=new Set(["string","url","path","enum","semver",void 0]);function D(t,u){switch(u.type){case"number":{if(isNaN(Number(t))||t.trim()==="")return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5\u6570\u5B57`};break}case"url":{try{new URL(t)}catch{return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5 URL`}}break}case"boolean":{const r=t.toLowerCase();if(!["true","false","1","0","yes","no"].includes(r))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5\u5E03\u5C14\u503C (true/false/1/0/yes/no)`};break}case"enum":{if(!u.enumValues||u.enumValues.length===0)return{valid:!1,status:"enum_mismatch",message:"enum \u7C7B\u578B\u5FC5\u987B\u6307\u5B9A enumValues"};if(!u.enumValues.includes(t))return{valid:!1,status:"enum_mismatch",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u5728\u5141\u8BB8\u7684\u679A\u4E3E\u503C\u4E2D: ${u.enumValues.join(", ")}`};break}case"json":{try{JSON.parse(t)}catch{return{valid:!1,status:"type_error",message:"\u73AF\u5883\u53D8\u91CF\u503C\u4E0D\u662F\u5408\u6CD5 JSON"}}break}case"semver":{if(!/^\d+\.\d+\.\d+(-[\w.]+)?(\+[\w.]+)?$/.test(t))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5\u8BED\u4E49\u5316\u7248\u672C\u53F7 (x.y.z)`};break}case"path":{if(!/^(?:[./\\]|(?:[a-zA-Z]:))/.test(t))return{valid:!1,status:"type_error",message:`\u73AF\u5883\u53D8\u91CF\u503C "${t}" \u4E0D\u662F\u5408\u6CD5\u6587\u4EF6\u8DEF\u5F84`};break}}return{valid:!0,status:"pass",message:""}}function y(t,u){if(u.type!=="number")return{valid:!0,status:"pass",message:""};const r=Number(t);return u.minValue!==void 0&&r<u.minValue?{valid:!1,status:"range_error",message:`\u6570\u503C ${r} \u5C0F\u4E8E\u6700\u5C0F\u503C ${u.minValue}`}:u.maxValue!==void 0&&r>u.maxValue?{valid:!1,status:"range_error",message:`\u6570\u503C ${r} \u5927\u4E8E\u6700\u5927\u503C ${u.maxValue}`}:{valid:!0,status:"pass",message:""}}function $(t,u){return C.has(u.type)?u.minLength!==void 0&&t.length<u.minLength?{valid:!1,status:"length_error",message:`\u5B57\u7B26\u4E32\u957F\u5EA6 ${t.length} \u5C0F\u4E8E\u6700\u5C0F\u957F\u5EA6 ${u.minLength}`}:u.maxLength!==void 0&&t.length>u.maxLength?{valid:!1,status:"length_error",message:`\u5B57\u7B26\u4E32\u957F\u5EA6 ${t.length} \u5927\u4E8E\u6700\u5927\u957F\u5EA6 ${u.maxLength}`}:{valid:!0,status:"pass",message:""}:{valid:!0,status:"pass",message:""}}function R(t,u,r){const e={type:"string",required:!0,...r};if(u===void 0||u==="")return e.required!==!1?{key:t,status:"missing",message:e.message||`\u7F3A\u5C11\u5FC5\u9700\u7684\u73AF\u5883\u53D8\u91CF: ${t}`,value:u,rule:e}:{key:t,status:"pass",message:"",value:e.default??u,rule:e};const s=D(u,e);if(!s.valid)return{key:t,status:s.status,message:e.message||s.message,value:u,rule:e};const i=y(u,e);if(!i.valid)return{key:t,status:i.status,message:e.message||i.message,value:u,rule:e};const n=$(u,e);if(!n.valid)return{key:t,status:n.status,message:e.message||n.message,value:u,rule:e};if(e.pattern&&!e.pattern.test(u))return{key:t,status:"custom_error",message:e.message||`\u73AF\u5883\u53D8\u91CF ${t} \u4E0D\u5339\u914D\u6B63\u5219: ${e.pattern.source}`,value:u,rule:e};if(e.validator){const a=e.validator(u);if(a!==!0){const l=typeof a=="string"?a:"";return{key:t,status:"custom_error",message:e.message||l||`\u73AF\u5883\u53D8\u91CF ${t} \u81EA\u5B9A\u4E49\u6821\u9A8C\u5931\u8D25`,value:u,rule:e}}}return{key:t,status:"pass",message:"",value:u,rule:e}}function w(t,u){const r=[];for(const[e,s]of Object.entries(u)){const i=t[e];r.push(R(e,i,s))}return r}function _(t){const u=new Map,r=[];for(const[s,i]of Object.entries(t)){const n={type:"string",required:!0,...i};if(n.group){const a=u.get(n.group)||[];a.push({key:s,rule:n}),u.set(n.group,a)}else r.push({key:s,rule:n})}const e=[];e.push("# \u73AF\u5883\u53D8\u91CF\u6A21\u677F\u6587\u4EF6"),e.push(`# \u751F\u6210\u65F6\u95F4: ${new Date().toISOString()}`),e.push("# \u7531 @meng-xi/vite-plugin envGuard \u81EA\u52A8\u751F\u6210"),e.push(""),r.length>0&&h(e,"\u901A\u7528\u914D\u7F6E",r);for(const[s,i]of u)h(e,s,i);return e.join(`
2
2
  `)}function h(t,u,r){t.push("# =============================="),t.push(`# ${u}`),t.push("# =============================="),t.push("");for(const{key:e,rule:s}of r){s.description&&t.push(`# ${s.description}`);const i=[];i.push(`\u7C7B\u578B: ${s.type||"string"}`),i.push(s.required!==!1?"\u5FC5\u9700":"\u53EF\u9009"),s.enumValues&&s.enumValues.length>0&&i.push(`\u679A\u4E3E\u503C: ${s.enumValues.join(" | ")}`),s.minValue!==void 0&&i.push(`\u6700\u5C0F\u503C: ${s.minValue}`),s.maxValue!==void 0&&i.push(`\u6700\u5927\u503C: ${s.maxValue}`),s.minLength!==void 0&&i.push(`\u6700\u5C0F\u957F\u5EA6: ${s.minLength}`),s.maxLength!==void 0&&i.push(`\u6700\u5927\u957F\u5EA6: ${s.maxLength}`),s.sensitive&&i.push("\u26A0\uFE0F \u654F\u611F\u4FE1\u606F"),t.push(`# [${i.join(" | ")}]`),s.default!==void 0?t.push(`${e}=${s.sensitive?"********":s.default}`):t.push(`${e}=`),t.push("")}}function k(t,u,r,e){const s=[];for(const[o,d]of Object.entries(t))d.required!==!1&&s.push({key:o,rule:{type:"string",required:!0,...d}});if(s.length===0)return"";const i=e.filter(o=>o.status!=="pass"),n=s.map(({key:o,rule:d})=>({key:o,type:d.type||"string",description:d.description||""})),a=JSON.stringify(n,null,2),l=i.map(o=>o.key),f=JSON.stringify(l),c=B(r);return`<script>
3
3
  ${`
4
4
  (function() {
@@ -1 +1 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),common_fs_index=require("../../common/fs/index.cjs"),validator=require("../../shared/vite-plugin.Bcg6RW2N.cjs"),common_html_index=require("../../common/html/index.cjs");require("../../logger/index.cjs"),require("fs"),require("path"),require("../../shared/vite-plugin.CcvHfrL8.cjs");function generateIconTagDescriptors(u){const i=[];if(u.link)return[];if(u.icons&&u.icons.length>0)for(const e of u.icons){const t={rel:e.rel,href:e.href};e.sizes&&(t.sizes=e.sizes),e.type&&(t.type=e.type),i.push({tag:"link",attrs:t,injectTo:"head"})}else if(u.url)i.push({tag:"link",attrs:{rel:"icon",href:u.url},injectTo:"head"});else{const e=u.base||"/",t=e.endsWith("/")?`${e}favicon.ico`:`${e}/favicon.ico`;i.push({tag:"link",attrs:{rel:"icon",href:t},injectTo:"head"})}return i}class f extends factory_index.BasePlugin{getDefaultOptions(){return{base:"/"}}validateOptions(){this.validator.field("base").string().field("url").string().field("link").string().field("icons").array(),this.options?.copyOptions&&(this.validator.field("copyOptions").object(),new validator.Validator(this.options.copyOptions).field("sourceDir").required().string().field("targetDir").required().string().field("overwrite").boolean().field("recursive").boolean().validate()),this.validator.validate()}getPluginName(){return"favicon-manager"}getIconTagDescriptors(){if(!this.options.enabled)return this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),[];const i=generateIconTagDescriptors(this.options);return i.length>0&&this.logger.success(`\u6210\u529F\u6CE8\u5165 ${i.length} \u4E2A\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6`),i}injectCustomLinkTag(i){if(!this.options.enabled||!this.options.link)return i;const e=this.options.link,t=common_html_index.injectBeforeTag(i,"</head>",e);return t.injected?(this.logger.success("\u6210\u529F\u6CE8\u5165\u81EA\u5B9A\u4E49\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6"),this.logger.info(` - ${e}`),t.html):(this.logger.warn("\u672A\u627E\u5230 </head> \u6807\u7B7E\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),i)}async copyFiles(){if(!this.options.enabled){this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6587\u4EF6\u590D\u5236");return}const{copyOptions:i}=this.options;if(!i)return;const{sourceDir:e,targetDir:t,overwrite:r=!0,recursive:n=!0}=i;await common_fs_index.checkSourceExists(e);const s=await common_fs_index.copySourceToTarget(e,t,{recursive:n,overwrite:r,incremental:!0});this.logger.success(`\u56FE\u6807\u6587\u4EF6\u590D\u5236\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${t}`,`\u590D\u5236\u4E86 ${s.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${s.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${s.executionTime}ms`)}addPluginHooks(i){i.transformIndexHtml={order:"pre",handler:e=>{if(this.options.link)return this.injectCustomLinkTag(e);const t=this.getIconTagDescriptors();return t.length>0?{html:e,tags:t}:e}},i.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u56FE\u6807\u6587\u4EF6\u590D\u5236")}}}const faviconManager=factory_index.createPluginFactory(f,u=>typeof u=="string"?{base:u}:u||{});exports.faviconManager=faviconManager;
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),common_fs_index=require("../../common/fs/index.cjs"),validator=require("../../shared/vite-plugin.Bcg6RW2N.cjs"),common_html_index=require("../../common/html/index.cjs");require("../../logger/index.cjs"),require("fs"),require("path"),require("../../common/concurrency/index.cjs"),require("../../shared/vite-plugin.CcvHfrL8.cjs");function generateIconTagDescriptors(t){const i=[];if(t.link)return[];if(t.icons&&t.icons.length>0)for(const e of t.icons){const u={rel:e.rel,href:e.href};e.sizes&&(u.sizes=e.sizes),e.type&&(u.type=e.type),i.push({tag:"link",attrs:u,injectTo:"head"})}else if(t.url)i.push({tag:"link",attrs:{rel:"icon",href:t.url},injectTo:"head"});else{const e=t.base||"/",u=e.endsWith("/")?`${e}favicon.ico`:`${e}/favicon.ico`;i.push({tag:"link",attrs:{rel:"icon",href:u},injectTo:"head"})}return i}class f extends factory_index.BasePlugin{getDefaultOptions(){return{base:"/"}}validateOptions(){this.validator.field("base").string().field("url").string().field("link").string().field("icons").array(),this.options?.copyOptions&&(this.validator.field("copyOptions").object(),new validator.Validator(this.options.copyOptions).field("sourceDir").required().string().field("targetDir").required().string().field("overwrite").boolean().field("recursive").boolean().validate()),this.validator.validate()}getPluginName(){return"favicon-manager"}getIconTagDescriptors(){if(!this.options.enabled)return this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),[];const i=generateIconTagDescriptors(this.options);return i.length>0&&this.logger.success(`\u6210\u529F\u6CE8\u5165 ${i.length} \u4E2A\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6`),i}injectCustomLinkTag(i){if(!this.options.enabled||!this.options.link)return i;const e=this.options.link,u=common_html_index.injectBeforeTag(i,"</head>",e);return u.injected?(this.logger.success("\u6210\u529F\u6CE8\u5165\u81EA\u5B9A\u4E49\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6"),this.logger.info(` - ${e}`),u.html):(this.logger.warn("\u672A\u627E\u5230 </head> \u6807\u7B7E\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),i)}async copyFiles(){if(!this.options.enabled){this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6587\u4EF6\u590D\u5236");return}const{copyOptions:i}=this.options;if(!i)return;const{sourceDir:e,targetDir:u,overwrite:r=!0,recursive:n=!0}=i;await common_fs_index.checkSourceExists(e);const s=await common_fs_index.copySourceToTarget(e,u,{recursive:n,overwrite:r,incremental:!0});this.logger.success(`\u56FE\u6807\u6587\u4EF6\u590D\u5236\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${u}`,`\u590D\u5236\u4E86 ${s.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${s.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${s.executionTime}ms`)}addPluginHooks(i){i.transformIndexHtml={order:"pre",handler:e=>{if(this.options.link)return this.injectCustomLinkTag(e);const u=this.getIconTagDescriptors();return u.length>0?{html:e,tags:u}:e}},i.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u56FE\u6807\u6587\u4EF6\u590D\u5236")}}}const faviconManager=factory_index.createPluginFactory(f,t=>typeof t=="string"?{base:t}:t||{});exports.faviconManager=faviconManager;
@@ -1 +1 @@
1
- import{createPluginFactory as n,BasePlugin as a}from"../../factory/index.mjs";import{checkSourceExists as c,copySourceToTarget as l}from"../../common/fs/index.mjs";import{V as g}from"../../shared/vite-plugin.DcExl6jd.mjs";import{injectBeforeTag as p}from"../../common/html/index.mjs";import"../../logger/index.mjs";import"fs";import"path";import"../../shared/vite-plugin.CuXEJAWX.mjs";function F(u){const i=[];if(u.link)return[];if(u.icons&&u.icons.length>0)for(const e of u.icons){const t={rel:e.rel,href:e.href};e.sizes&&(t.sizes=e.sizes),e.type&&(t.type=e.type),i.push({tag:"link",attrs:t,injectTo:"head"})}else if(u.url)i.push({tag:"link",attrs:{rel:"icon",href:u.url},injectTo:"head"});else{const e=u.base||"/",t=e.endsWith("/")?`${e}favicon.ico`:`${e}/favicon.ico`;i.push({tag:"link",attrs:{rel:"icon",href:t},injectTo:"head"})}return i}class h extends a{getDefaultOptions(){return{base:"/"}}validateOptions(){this.validator.field("base").string().field("url").string().field("link").string().field("icons").array(),this.options?.copyOptions&&(this.validator.field("copyOptions").object(),new g(this.options.copyOptions).field("sourceDir").required().string().field("targetDir").required().string().field("overwrite").boolean().field("recursive").boolean().validate()),this.validator.validate()}getPluginName(){return"favicon-manager"}getIconTagDescriptors(){if(!this.options.enabled)return this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),[];const i=F(this.options);return i.length>0&&this.logger.success(`\u6210\u529F\u6CE8\u5165 ${i.length} \u4E2A\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6`),i}injectCustomLinkTag(i){if(!this.options.enabled||!this.options.link)return i;const e=this.options.link,t=p(i,"</head>",e);return t.injected?(this.logger.success("\u6210\u529F\u6CE8\u5165\u81EA\u5B9A\u4E49\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6"),this.logger.info(` - ${e}`),t.html):(this.logger.warn("\u672A\u627E\u5230 </head> \u6807\u7B7E\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),i)}async copyFiles(){if(!this.options.enabled){this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6587\u4EF6\u590D\u5236");return}const{copyOptions:i}=this.options;if(!i)return;const{sourceDir:e,targetDir:t,overwrite:s=!0,recursive:o=!0}=i;await c(e);const r=await l(e,t,{recursive:o,overwrite:s,incremental:!0});this.logger.success(`\u56FE\u6807\u6587\u4EF6\u590D\u5236\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${t}`,`\u590D\u5236\u4E86 ${r.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${r.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${r.executionTime}ms`)}addPluginHooks(i){i.transformIndexHtml={order:"pre",handler:e=>{if(this.options.link)return this.injectCustomLinkTag(e);const t=this.getIconTagDescriptors();return t.length>0?{html:e,tags:t}:e}},i.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u56FE\u6807\u6587\u4EF6\u590D\u5236")}}}const f=n(h,u=>typeof u=="string"?{base:u}:u||{});export{f as faviconManager};
1
+ import{createPluginFactory as n,BasePlugin as a}from"../../factory/index.mjs";import{checkSourceExists as c,copySourceToTarget as l}from"../../common/fs/index.mjs";import{V as g}from"../../shared/vite-plugin.DcExl6jd.mjs";import{injectBeforeTag as p}from"../../common/html/index.mjs";import"../../logger/index.mjs";import"fs";import"path";import"../../common/concurrency/index.mjs";import"../../shared/vite-plugin.CuXEJAWX.mjs";function F(u){const i=[];if(u.link)return[];if(u.icons&&u.icons.length>0)for(const e of u.icons){const t={rel:e.rel,href:e.href};e.sizes&&(t.sizes=e.sizes),e.type&&(t.type=e.type),i.push({tag:"link",attrs:t,injectTo:"head"})}else if(u.url)i.push({tag:"link",attrs:{rel:"icon",href:u.url},injectTo:"head"});else{const e=u.base||"/",t=e.endsWith("/")?`${e}favicon.ico`:`${e}/favicon.ico`;i.push({tag:"link",attrs:{rel:"icon",href:t},injectTo:"head"})}return i}class h extends a{getDefaultOptions(){return{base:"/"}}validateOptions(){this.validator.field("base").string().field("url").string().field("link").string().field("icons").array(),this.options?.copyOptions&&(this.validator.field("copyOptions").object(),new g(this.options.copyOptions).field("sourceDir").required().string().field("targetDir").required().string().field("overwrite").boolean().field("recursive").boolean().validate()),this.validator.validate()}getPluginName(){return"favicon-manager"}getIconTagDescriptors(){if(!this.options.enabled)return this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),[];const i=F(this.options);return i.length>0&&this.logger.success(`\u6210\u529F\u6CE8\u5165 ${i.length} \u4E2A\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6`),i}injectCustomLinkTag(i){if(!this.options.enabled||!this.options.link)return i;const e=this.options.link,t=p(i,"</head>",e);return t.injected?(this.logger.success("\u6210\u529F\u6CE8\u5165\u81EA\u5B9A\u4E49\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6"),this.logger.info(` - ${e}`),t.html):(this.logger.warn("\u672A\u627E\u5230 </head> \u6807\u7B7E\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),i)}async copyFiles(){if(!this.options.enabled){this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6587\u4EF6\u590D\u5236");return}const{copyOptions:i}=this.options;if(!i)return;const{sourceDir:e,targetDir:t,overwrite:s=!0,recursive:o=!0}=i;await c(e);const r=await l(e,t,{recursive:o,overwrite:s,incremental:!0});this.logger.success(`\u56FE\u6807\u6587\u4EF6\u590D\u5236\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${t}`,`\u590D\u5236\u4E86 ${r.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${r.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${r.executionTime}ms`)}addPluginHooks(i){i.transformIndexHtml={order:"pre",handler:e=>{if(this.options.link)return this.injectCustomLinkTag(e);const t=this.getIconTagDescriptors();return t.length>0?{html:e,tags:t}:e}},i.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u56FE\u6807\u6587\u4EF6\u590D\u5236")}}}const f=n(h,u=>typeof u=="string"?{base:u}:u||{});export{f as faviconManager};
@@ -1,5 +1,5 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),common_fs_index=require("../../common/fs/index.cjs"),u$1=require("path"),s$1=require("fs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs");function toCamelCase(i,e=/[/-]/){return i.replace(/^\/+/,"").split(e).filter(Boolean).map((t,r)=>r===0?t.toLowerCase():t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function toPascalCase(i,e=/[/-]/){return i.replace(/^\/+/,"").split(e).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function stripJsonComments(i){return i.replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"")}function s(i,e){return typeof e=="string"?"string":typeof e=="boolean"?e?"true":"false":typeof e=="number"?"number":"unknown"}function u(i){const e=Object.entries(i);return e.length===0?"{}":`{ ${e.map(([t,r])=>`${t}: ${s(t,r)}`).join("; ")} }`}function generateRouterDtsContent(i,e="@meng-xi/uni-router"){const t=[];t.push(`import '${e}'`),t.push(""),t.push(`declare module '${e}' {`),t.push(" interface RouteNameMap {");for(const r of i){const a=r.name||r.path;r.meta?.title&&t.push(` /** ${r.meta.title} */`);const o=r.meta?u(r.meta):"{}";t.push(` ${a}: { path: '${r.path}'; meta: ${o} }`)}return t.push(" }"),t.push("}"),t.join(`
2
- `)}class y extends factory_index.BasePlugin{projectRoot=process.cwd();tabBarPages=new Set;watcher=null;getDefaultOptions(){return{pagesJsonPath:"src/pages.json",outputPath:"src/router.config.ts",outputFormat:"ts",nameStrategy:"camelCase",includeSubPackages:!0,watch:!0,exportTypes:!0,preserveRouteChanges:!0,metaMapping:{navigationBarTitleText:"title",requireAuth:"requireAuth"},dts:!1}}validateOptions(){if(this.validator.field("pagesJsonPath").string().field("outputPath").string().field("outputFormat").enum(["ts","js"]).field("nameStrategy").enum(["path","camelCase","pascalCase","custom"]).validate(),this.options.nameStrategy==="custom"&&!this.options.customNameGenerator)throw new Error("\u5F53 nameStrategy \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customNameGenerator")}getPluginName(){return"generate-router"}generateRouteName(e){switch(this.options.nameStrategy){case"path":return e.replace(/\//g,"_").replace(/^_/,"");case"camelCase":return toCamelCase(e);case"pascalCase":return toPascalCase(e);case"custom":return this.options.customNameGenerator(e);default:return toCamelCase(e)}}extractMeta(e,t){const r={},a=e.style||{},o=this.options.metaMapping||{};for(const[n,c]of Object.entries(o))a[n]!==void 0&&(r[c]=a[n]);return this.tabBarPages.has(t)&&(r.isTab=!0),r}parsePageToRoute(e,t=""){const r=t?`/${t}/${e.path}`:`/${e.path}`,a=this.generateRouteName(r),o=this.extractMeta(e,r.replace(/^\//,"")),n={path:r,name:a};return Object.keys(o).length>0&&(n.meta=o),n}parsePagesJson(e){const t=[];if(!e.pages||!Array.isArray(e.pages)||e.pages.length===0)return this.logger.warn("pages.json \u4E2D\u6CA1\u6709\u6709\u6548\u7684\u9875\u9762\u914D\u7F6E"),t;if(this.tabBarPages.clear(),e.tabBar?.list)for(const r of e.tabBar.list)this.tabBarPages.add(r.pagePath);for(const r of e.pages)t.push(this.parsePageToRoute(r));if(this.options.includeSubPackages&&e.subPackages){for(const r of e.subPackages)if(r.pages&&Array.isArray(r.pages))for(const a of r.pages)t.push(this.parsePageToRoute(a,r.root))}return t}generateTypeDefinitions(){return!this.options.exportTypes||this.options.outputFormat==="js"?"":`
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),common_fs_index=require("../../common/fs/index.cjs"),o=require("path"),s$1=require("fs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("../../common/concurrency/index.cjs");function toCamelCase(c,e=/[/-]/){return c.replace(/^\/+/,"").split(e).filter(Boolean).map((t,r)=>r===0?t.toLowerCase():t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function toPascalCase(c,e=/[/-]/){return c.replace(/^\/+/,"").split(e).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function stripJsonComments(c){return c.replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"")}function s(c,e){return typeof e=="string"?"string":typeof e=="boolean"?e?"true":"false":typeof e=="number"?"number":"unknown"}function u(c){const e=Object.entries(c);return e.length===0?"{}":`{ ${e.map(([t,r])=>`${t}: ${s(t,r)}`).join("; ")} }`}function generateRouterDtsContent(c,e="@meng-xi/uni-router"){const t=[];t.push(`import '${e}'`),t.push(""),t.push(`declare module '${e}' {`),t.push(" interface RouteNameMap {");for(const r of c){const a=r.name||r.path;r.meta?.title&&t.push(` /** ${r.meta.title} */`);const n=r.meta?u(r.meta):"{}";t.push(` ${a}: { path: '${r.path}'; meta: ${n} }`)}return t.push(" }"),t.push("}"),t.join(`
2
+ `)}class y extends factory_index.BasePlugin{projectRoot=process.cwd();tabBarPages=new Set;watcher=null;getDefaultOptions(){return{pagesJsonPath:"src/pages.json",outputPath:"src/router.config.ts",outputFormat:"ts",nameStrategy:"camelCase",includeSubPackages:!0,watch:!0,exportTypes:!0,preserveRouteChanges:!0,metaMapping:{navigationBarTitleText:"title",requireAuth:"requireAuth"},dts:!1}}validateOptions(){if(this.validator.field("pagesJsonPath").string().field("outputPath").string().field("outputFormat").enum(["ts","js"]).field("nameStrategy").enum(["path","camelCase","pascalCase","custom"]).validate(),this.options.nameStrategy==="custom"&&!this.options.customNameGenerator)throw new Error("\u5F53 nameStrategy \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customNameGenerator")}getPluginName(){return"generate-router"}generateRouteName(e){switch(this.options.nameStrategy){case"path":return e.replace(/\//g,"_").replace(/^_/,"");case"camelCase":return toCamelCase(e);case"pascalCase":return toPascalCase(e);case"custom":return this.options.customNameGenerator(e);default:return toCamelCase(e)}}extractMeta(e,t){const r={},a=e.style||{},n=this.options.metaMapping||{};for(const[i,p]of Object.entries(n))a[i]!==void 0&&(r[p]=a[i]);return this.tabBarPages.has(t)&&(r.isTab=!0),r}parsePageToRoute(e,t=""){const r=t?`/${t}/${e.path}`:`/${e.path}`,a=this.generateRouteName(r),n=this.extractMeta(e,r.replace(/^\//,"")),i={path:r,name:a};return Object.keys(n).length>0&&(i.meta=n),i}parsePagesJson(e){const t=[];if(!e.pages||!Array.isArray(e.pages)||e.pages.length===0)return this.logger.warn("pages.json \u4E2D\u6CA1\u6709\u6709\u6548\u7684\u9875\u9762\u914D\u7F6E"),t;if(this.tabBarPages.clear(),e.tabBar?.list)for(const r of e.tabBar.list)this.tabBarPages.add(r.pagePath);for(const r of e.pages)t.push(this.parsePageToRoute(r));if(this.options.includeSubPackages&&e.subPackages){for(const r of e.subPackages)if(r.pages&&Array.isArray(r.pages))for(const a of r.pages)t.push(this.parsePageToRoute(a,r.root))}return t}generateTypeDefinitions(){return!this.options.exportTypes||this.options.outputFormat==="js"?"":`
3
3
  /**
4
4
  * \u8DEF\u7531\u5143\u4FE1\u606F
5
5
  */
@@ -33,4 +33,4 @@ export interface RouteConfig {
33
33
  export const routes${r?": RouteConfig[]":""} = ${a}
34
34
 
35
35
  export default routes
36
- `}async readPagesJson(){const e=u$1.resolve(this.projectRoot,this.options.pagesJsonPath);if(!s$1.existsSync(e))return this.logger.warn(`pages.json \u6587\u4EF6\u4E0D\u5B58\u5728: ${e}`),null;try{const t=await s$1.promises.readFile(e,"utf-8"),r=stripJsonComments(t);return JSON.parse(r)}catch(t){return this.logger.error(`\u89E3\u6790 pages.json \u5931\u8D25: ${t.message}`),null}}extractExistingRoutes(e){const t=new Map,r=e.match(/export const routes[^=]*=\s*(\[[\s\S]*?\](?=\s*\n|\s*$|\s*\/\/))/);if(!r)return t;try{let a=r[1].replace(/(\w+)(?=\s*:)/g,'"$1"').replace(/'([^']*)'/g,'"$1"').replace(/,\s*([\]\}])/g,"$1");const o=JSON.parse(a);for(const n of o)n.path&&t.set(n.path,n)}catch{this.logger.warn("\u89E3\u6790\u73B0\u6709 routes \u914D\u7F6E\u5931\u8D25\uFF0C\u5C06\u5B8C\u5168\u91CD\u65B0\u751F\u6210")}return t}mergeRoutes(e,t){return e.map(r=>{const a=t.get(r.path);if(!a)return r;const o={};return r.meta&&Object.assign(o,r.meta),a.meta&&Object.assign(o,a.meta),{...a,path:r.path,meta:Object.keys(o).length>0?o:void 0}})}async generateRouterConfig(){const e=await this.readPagesJson();if(!e)return;let t=this.parsePagesJson(e);const r=u$1.resolve(this.projectRoot,this.options.outputPath);if(this.options.preserveRouteChanges&&s$1.existsSync(r))try{const o=await s$1.promises.readFile(r,"utf-8"),n=this.extractExistingRoutes(o);n.size>0&&(t=this.mergeRoutes(t,n),this.logger.info("\u5DF2\u5408\u5E76\u7528\u6237\u5BF9\u8DEF\u7531\u914D\u7F6E\u7684\u4FEE\u6539"))}catch{}const a=this.generateFileContent(t);await common_fs_index.writeFileContent(r,a),this.logger.success(`\u8DEF\u7531\u914D\u7F6E\u6587\u4EF6\u5DF2\u751F\u6210: ${r}`),this.logger.info(`\u5171\u751F\u6210 ${t.length} \u6761\u8DEF\u7531\u914D\u7F6E`),await this.generateDtsFile(t)}async generateDtsFile(e){if(!this.options.dts)return;const t=u$1.resolve(this.projectRoot,typeof this.options.dts=="string"?this.options.dts:"src/router.d.ts"),r=generateRouterDtsContent(e);common_fs_index.shouldUpdateFileContent(t,r)&&(await common_fs_index.writeFileContent(t,r),this.logger.success(`\u8DEF\u7531\u7C7B\u578B\u58F0\u660E\u6587\u4EF6\u5DF2\u751F\u6210: ${t}`))}startWatching(){if(!this.options.watch)return;const e=u$1.resolve(this.projectRoot,this.options.pagesJsonPath);s$1.existsSync(e)&&(this.watcher=s$1.watch(e,async t=>{t==="change"&&(this.logger.info("\u68C0\u6D4B\u5230 pages.json \u53D8\u5316\uFF0C\u91CD\u65B0\u751F\u6210\u8DEF\u7531\u914D\u7F6E..."),await this.safeExecute(()=>this.generateRouterConfig(),"\u91CD\u65B0\u751F\u6210\u8DEF\u7531\u914D\u7F6E"))}),this.logger.info(`\u6B63\u5728\u76D1\u542C pages.json \u53D8\u5316: ${e}`))}stopWatching(){this.watcher&&(this.watcher.close(),this.watcher=null)}addPluginHooks(e){e.configResolved=async t=>{this.projectRoot=t.root,await this.safeExecute(()=>this.generateRouterConfig(),"\u751F\u6210\u8DEF\u7531\u914D\u7F6E"),t.command==="serve"&&this.startWatching()}}destroy(){super.destroy(),this.stopWatching()}}const generateRouter=factory_index.createPluginFactory(y);exports.generateRouter=generateRouter;
36
+ `}async readPagesJson(){const e=o.resolve(this.projectRoot,this.options.pagesJsonPath);if(!s$1.existsSync(e))return this.logger.warn(`pages.json \u6587\u4EF6\u4E0D\u5B58\u5728: ${e}`),null;try{const t=await s$1.promises.readFile(e,"utf-8"),r=stripJsonComments(t);return JSON.parse(r)}catch(t){return this.logger.error(`\u89E3\u6790 pages.json \u5931\u8D25: ${t.message}`),null}}extractExistingRoutes(e){const t=new Map,r=e.match(/export const routes[^=]*=\s*(\[[\s\S]*?\](?=\s*\n|\s*$|\s*\/\/))/);if(!r)return t;try{let a=r[1].replace(/(\w+)(?=\s*:)/g,'"$1"').replace(/'([^']*)'/g,'"$1"').replace(/,\s*([\]\}])/g,"$1");const n=JSON.parse(a);for(const i of n)i.path&&t.set(i.path,i)}catch{this.logger.warn("\u89E3\u6790\u73B0\u6709 routes \u914D\u7F6E\u5931\u8D25\uFF0C\u5C06\u5B8C\u5168\u91CD\u65B0\u751F\u6210")}return t}mergeRoutes(e,t){return e.map(r=>{const a=t.get(r.path);if(!a)return r;const n={};return r.meta&&Object.assign(n,r.meta),a.meta&&Object.assign(n,a.meta),{...a,path:r.path,meta:Object.keys(n).length>0?n:void 0}})}async generateRouterConfig(){const e=await this.readPagesJson();if(!e)return;let t=this.parsePagesJson(e);const r=o.resolve(this.projectRoot,this.options.outputPath);if(this.options.preserveRouteChanges&&s$1.existsSync(r))try{const n=await s$1.promises.readFile(r,"utf-8"),i=this.extractExistingRoutes(n);i.size>0&&(t=this.mergeRoutes(t,i),this.logger.info("\u5DF2\u5408\u5E76\u7528\u6237\u5BF9\u8DEF\u7531\u914D\u7F6E\u7684\u4FEE\u6539"))}catch{}const a=this.generateFileContent(t);await common_fs_index.writeFileContent(r,a),this.logger.success(`\u8DEF\u7531\u914D\u7F6E\u6587\u4EF6\u5DF2\u751F\u6210: ${r}`),this.logger.info(`\u5171\u751F\u6210 ${t.length} \u6761\u8DEF\u7531\u914D\u7F6E`),await this.generateDtsFile(t)}async generateDtsFile(e){if(!this.options.dts)return;const t=o.resolve(this.projectRoot,typeof this.options.dts=="string"?this.options.dts:"src/router.d.ts"),r=generateRouterDtsContent(e);common_fs_index.shouldUpdateFileContent(t,r)&&(await common_fs_index.writeFileContent(t,r),this.logger.success(`\u8DEF\u7531\u7C7B\u578B\u58F0\u660E\u6587\u4EF6\u5DF2\u751F\u6210: ${t}`))}startWatching(){if(!this.options.watch)return;const e=o.resolve(this.projectRoot,this.options.pagesJsonPath);s$1.existsSync(e)&&(this.watcher=s$1.watch(e,async t=>{t==="change"&&(this.logger.info("\u68C0\u6D4B\u5230 pages.json \u53D8\u5316\uFF0C\u91CD\u65B0\u751F\u6210\u8DEF\u7531\u914D\u7F6E..."),await this.safeExecute(()=>this.generateRouterConfig(),"\u91CD\u65B0\u751F\u6210\u8DEF\u7531\u914D\u7F6E"))}),this.logger.info(`\u6B63\u5728\u76D1\u542C pages.json \u53D8\u5316: ${e}`))}stopWatching(){this.watcher&&(this.watcher.close(),this.watcher=null)}addPluginHooks(e){e.configResolved=async t=>{this.projectRoot=t.root,await this.safeExecute(()=>this.generateRouterConfig(),"\u751F\u6210\u8DEF\u7531\u914D\u7F6E"),t.command==="serve"&&this.startWatching()}}destroy(){super.destroy(),this.stopWatching()}}const generateRouter=factory_index.createPluginFactory(y);exports.generateRouter=generateRouter;
@@ -1,4 +1,4 @@
1
- import{createPluginFactory as l,BasePlugin as F}from"../../factory/index.mjs";import{writeFileContent as p,shouldUpdateFileContent as m}from"../../common/fs/index.mjs";import{resolve as n}from"path";import{existsSync as i,promises as c,watch as f}from"fs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";function g(r,t=/[/-]/){return r.replace(/^\/+/,"").split(t).filter(Boolean).map((e,u)=>u===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function E(r,t=/[/-]/){return r.replace(/^\/+/,"").split(t).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function D(r){return r.replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"")}function C(r,t){return typeof t=="string"?"string":typeof t=="boolean"?t?"true":"false":typeof t=="number"?"number":"unknown"}function d(r){const t=Object.entries(r);return t.length===0?"{}":`{ ${t.map(([e,u])=>`${e}: ${C(e,u)}`).join("; ")} }`}function y(r,t="@meng-xi/uni-router"){const e=[];e.push(`import '${t}'`),e.push(""),e.push(`declare module '${t}' {`),e.push(" interface RouteNameMap {");for(const u of r){const s=u.name||u.path;u.meta?.title&&e.push(` /** ${u.meta.title} */`);const a=u.meta?d(u.meta):"{}";e.push(` ${s}: { path: '${u.path}'; meta: ${a} }`)}return e.push(" }"),e.push("}"),e.join(`
1
+ import{createPluginFactory as l,BasePlugin as F}from"../../factory/index.mjs";import{writeFileContent as p,shouldUpdateFileContent as m}from"../../common/fs/index.mjs";import{resolve as n}from"path";import{existsSync as i,promises as c,watch as f}from"fs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"../../common/concurrency/index.mjs";function g(r,t=/[/-]/){return r.replace(/^\/+/,"").split(t).filter(Boolean).map((e,u)=>u===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function E(r,t=/[/-]/){return r.replace(/^\/+/,"").split(t).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function D(r){return r.replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"")}function C(r,t){return typeof t=="string"?"string":typeof t=="boolean"?t?"true":"false":typeof t=="number"?"number":"unknown"}function d(r){const t=Object.entries(r);return t.length===0?"{}":`{ ${t.map(([e,u])=>`${e}: ${C(e,u)}`).join("; ")} }`}function y(r,t="@meng-xi/uni-router"){const e=[];e.push(`import '${t}'`),e.push(""),e.push(`declare module '${t}' {`),e.push(" interface RouteNameMap {");for(const u of r){const s=u.name||u.path;u.meta?.title&&e.push(` /** ${u.meta.title} */`);const a=u.meta?d(u.meta):"{}";e.push(` ${s}: { path: '${u.path}'; meta: ${a} }`)}return e.push(" }"),e.push("}"),e.join(`
2
2
  `)}class w extends F{projectRoot=process.cwd();tabBarPages=new Set;watcher=null;getDefaultOptions(){return{pagesJsonPath:"src/pages.json",outputPath:"src/router.config.ts",outputFormat:"ts",nameStrategy:"camelCase",includeSubPackages:!0,watch:!0,exportTypes:!0,preserveRouteChanges:!0,metaMapping:{navigationBarTitleText:"title",requireAuth:"requireAuth"},dts:!1}}validateOptions(){if(this.validator.field("pagesJsonPath").string().field("outputPath").string().field("outputFormat").enum(["ts","js"]).field("nameStrategy").enum(["path","camelCase","pascalCase","custom"]).validate(),this.options.nameStrategy==="custom"&&!this.options.customNameGenerator)throw new Error("\u5F53 nameStrategy \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customNameGenerator")}getPluginName(){return"generate-router"}generateRouteName(t){switch(this.options.nameStrategy){case"path":return t.replace(/\//g,"_").replace(/^_/,"");case"camelCase":return g(t);case"pascalCase":return E(t);case"custom":return this.options.customNameGenerator(t);default:return g(t)}}extractMeta(t,e){const u={},s=t.style||{},a=this.options.metaMapping||{};for(const[o,h]of Object.entries(a))s[o]!==void 0&&(u[h]=s[o]);return this.tabBarPages.has(e)&&(u.isTab=!0),u}parsePageToRoute(t,e=""){const u=e?`/${e}/${t.path}`:`/${t.path}`,s=this.generateRouteName(u),a=this.extractMeta(t,u.replace(/^\//,"")),o={path:u,name:s};return Object.keys(a).length>0&&(o.meta=a),o}parsePagesJson(t){const e=[];if(!t.pages||!Array.isArray(t.pages)||t.pages.length===0)return this.logger.warn("pages.json \u4E2D\u6CA1\u6709\u6709\u6548\u7684\u9875\u9762\u914D\u7F6E"),e;if(this.tabBarPages.clear(),t.tabBar?.list)for(const u of t.tabBar.list)this.tabBarPages.add(u.pagePath);for(const u of t.pages)e.push(this.parsePageToRoute(u));if(this.options.includeSubPackages&&t.subPackages){for(const u of t.subPackages)if(u.pages&&Array.isArray(u.pages))for(const s of u.pages)e.push(this.parsePageToRoute(s,u.root))}return e}generateTypeDefinitions(){return!this.options.exportTypes||this.options.outputFormat==="js"?"":`
3
3
  /**
4
4
  * \u8DEF\u7531\u5143\u4FE1\u606F
@@ -1 +1 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),crypto=require("crypto"),common_format_index=require("../../common/format/index.cjs"),common_fs_index=require("../../common/fs/index.cjs"),u=require("path");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs");function generateRandomHash(o=8){const e=Math.max(1,Math.min(64,o));return crypto.randomBytes(Math.ceil(e/2)).toString("hex").slice(0,e)}function parseTemplate(o,e){let t=o;for(const[i,s]of Object.entries(e))t=t.replace(new RegExp(`\\{${i}\\}`,"g"),s);return t}class f extends factory_index.BasePlugin{version="";buildTime=new Date;getDefaultOptions(){return{format:"timestamp",semverBase:"1.0.0",outputType:"file",outputFile:"version.json",defineName:"__APP_VERSION__",hashLength:8,prefix:"",suffix:""}}validateOptions(){if(this.validator.field("format").enum(["timestamp","date","datetime","semver","hash","custom"]).field("outputType").enum(["file","define","both"]).field("hashLength").number().minValue(1).maxValue(32).validate(),this.options.format==="custom"&&!this.options.customFormat)throw new Error("\u5F53 format \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customFormat")}getPluginName(){return"generate-version"}generateVersion(){const e=common_format_index.getDateFormatParams(this.buildTime),t=generateRandomHash(this.options.hashLength);let i;switch(this.options.format){case"timestamp":i=`${e.YYYY}${e.MM}${e.DD}${e.HH}${e.mm}${e.ss}`;break;case"date":i=`${e.YYYY}.${e.MM}.${e.DD}`;break;case"datetime":i=`${e.YYYY}.${e.MM}.${e.DD}.${e.HH}${e.mm}${e.ss}`;break;case"semver":i=this.options.semverBase||"1.0.0";break;case"hash":i=t;break;case"custom":i=this.parseCustomFormat({...e,hash:t});break;default:i=e.timestamp}const s=this.options.prefix||"",n=this.options.suffix||"";return`${s}${i}${n}`}parseCustomFormat(e){const t={...e};if(this.options.semverBase){const[i,s,n]=this.options.semverBase.split(".");t.major=i||"1",t.minor=s||"0",t.patch=n||"0"}return parseTemplate(this.options.customFormat||"",t)}generateVersionInfo(){return{version:this.version,buildTime:this.buildTime.toISOString(),timestamp:this.buildTime.getTime(),format:this.options.format,...this.options.extra}}async writeVersionFile(e){const t=u.join(e,this.options.outputFile||"version.json"),i=this.generateVersionInfo();await common_fs_index.writeFileContent(t,JSON.stringify(i,null,2)),this.logger.success(`\u7248\u672C\u6587\u4EF6\u5DF2\u751F\u6210: ${t}`)}addPluginHooks(e){e.configResolved=()=>{this.buildTime=new Date,this.version=this.generateVersion(),this.logger.info(`\u751F\u6210\u7248\u672C\u53F7: ${this.version}`)},(this.options.outputType==="define"||this.options.outputType==="both")&&(e.config=()=>{this.version||(this.buildTime=new Date,this.version=this.generateVersion());const t=this.options.defineName||"__APP_VERSION__";return this.logger.info(`\u6CE8\u5165\u5168\u5C40\u53D8\u91CF: ${t} = "${this.version}"`),{define:{[t]:JSON.stringify(this.version),[`${t}_INFO`]:JSON.stringify(this.generateVersionInfo())}}}),(this.options.outputType==="file"||this.options.outputType==="both")&&(e.writeBundle=async()=>{this.viteConfig&&await this.safeExecute(async()=>{const t=this.viteConfig.build.outDir;await this.writeVersionFile(t)},"\u5199\u5165\u7248\u672C\u6587\u4EF6")})}}const generateVersion=factory_index.createPluginFactory(f);exports.generateVersion=generateVersion;
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),crypto=require("crypto"),common_format_index=require("../../common/format/index.cjs"),common_fs_index=require("../../common/fs/index.cjs"),o=require("path");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs"),require("fs"),require("../../common/concurrency/index.cjs");function generateRandomHash(n=8){const e=Math.max(1,Math.min(64,n));return crypto.randomBytes(Math.ceil(e/2)).toString("hex").slice(0,e)}function parseTemplate(n,e){let t=n;for(const[i,s]of Object.entries(e))t=t.replace(new RegExp(`\\{${i}\\}`,"g"),s);return t}class f extends factory_index.BasePlugin{version="";buildTime=new Date;getDefaultOptions(){return{format:"timestamp",semverBase:"1.0.0",outputType:"file",outputFile:"version.json",defineName:"__APP_VERSION__",hashLength:8,prefix:"",suffix:""}}validateOptions(){if(this.validator.field("format").enum(["timestamp","date","datetime","semver","hash","custom"]).field("outputType").enum(["file","define","both"]).field("hashLength").number().minValue(1).maxValue(32).validate(),this.options.format==="custom"&&!this.options.customFormat)throw new Error("\u5F53 format \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customFormat")}getPluginName(){return"generate-version"}generateVersion(){const e=common_format_index.getDateFormatParams(this.buildTime),t=generateRandomHash(this.options.hashLength);let i;switch(this.options.format){case"timestamp":i=`${e.YYYY}${e.MM}${e.DD}${e.HH}${e.mm}${e.ss}`;break;case"date":i=`${e.YYYY}.${e.MM}.${e.DD}`;break;case"datetime":i=`${e.YYYY}.${e.MM}.${e.DD}.${e.HH}${e.mm}${e.ss}`;break;case"semver":i=this.options.semverBase||"1.0.0";break;case"hash":i=t;break;case"custom":i=this.parseCustomFormat({...e,hash:t});break;default:i=e.timestamp}const s=this.options.prefix||"",r=this.options.suffix||"";return`${s}${i}${r}`}parseCustomFormat(e){const t={...e};if(this.options.semverBase){const[i,s,r]=this.options.semverBase.split(".");t.major=i||"1",t.minor=s||"0",t.patch=r||"0"}return parseTemplate(this.options.customFormat||"",t)}generateVersionInfo(){return{version:this.version,buildTime:this.buildTime.toISOString(),timestamp:this.buildTime.getTime(),format:this.options.format,...this.options.extra}}async writeVersionFile(e){const t=o.join(e,this.options.outputFile||"version.json"),i=this.generateVersionInfo();await common_fs_index.writeFileContent(t,JSON.stringify(i,null,2)),this.logger.success(`\u7248\u672C\u6587\u4EF6\u5DF2\u751F\u6210: ${t}`)}addPluginHooks(e){e.configResolved=()=>{this.buildTime=new Date,this.version=this.generateVersion(),this.logger.info(`\u751F\u6210\u7248\u672C\u53F7: ${this.version}`)},(this.options.outputType==="define"||this.options.outputType==="both")&&(e.config=()=>{this.version||(this.buildTime=new Date,this.version=this.generateVersion());const t=this.options.defineName||"__APP_VERSION__";return this.logger.info(`\u6CE8\u5165\u5168\u5C40\u53D8\u91CF: ${t} = "${this.version}"`),{define:{[t]:JSON.stringify(this.version),[`${t}_INFO`]:JSON.stringify(this.generateVersionInfo())}}}),(this.options.outputType==="file"||this.options.outputType==="both")&&(e.writeBundle=async()=>{this.viteConfig&&await this.safeExecute(async()=>{const t=this.viteConfig.build.outDir;await this.writeVersionFile(t)},"\u5199\u5165\u7248\u672C\u6587\u4EF6")})}}const generateVersion=factory_index.createPluginFactory(f);exports.generateVersion=generateVersion;
@@ -1 +1 @@
1
- import{createPluginFactory as r,BasePlugin as a}from"../../factory/index.mjs";import{randomBytes as u}from"crypto";import{getDateFormatParams as m}from"../../common/format/index.mjs";import{writeFileContent as h}from"../../common/fs/index.mjs";import{join as p}from"path";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";function f(o=8){const t=Math.max(1,Math.min(64,o));return u(Math.ceil(t/2)).toString("hex").slice(0,t)}function l(o,t){let e=o;for(const[i,s]of Object.entries(t))e=e.replace(new RegExp(`\\{${i}\\}`,"g"),s);return e}class c extends a{version="";buildTime=new Date;getDefaultOptions(){return{format:"timestamp",semverBase:"1.0.0",outputType:"file",outputFile:"version.json",defineName:"__APP_VERSION__",hashLength:8,prefix:"",suffix:""}}validateOptions(){if(this.validator.field("format").enum(["timestamp","date","datetime","semver","hash","custom"]).field("outputType").enum(["file","define","both"]).field("hashLength").number().minValue(1).maxValue(32).validate(),this.options.format==="custom"&&!this.options.customFormat)throw new Error("\u5F53 format \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customFormat")}getPluginName(){return"generate-version"}generateVersion(){const t=m(this.buildTime),e=f(this.options.hashLength);let i;switch(this.options.format){case"timestamp":i=`${t.YYYY}${t.MM}${t.DD}${t.HH}${t.mm}${t.ss}`;break;case"date":i=`${t.YYYY}.${t.MM}.${t.DD}`;break;case"datetime":i=`${t.YYYY}.${t.MM}.${t.DD}.${t.HH}${t.mm}${t.ss}`;break;case"semver":i=this.options.semverBase||"1.0.0";break;case"hash":i=e;break;case"custom":i=this.parseCustomFormat({...t,hash:e});break;default:i=t.timestamp}const s=this.options.prefix||"",n=this.options.suffix||"";return`${s}${i}${n}`}parseCustomFormat(t){const e={...t};if(this.options.semverBase){const[i,s,n]=this.options.semverBase.split(".");e.major=i||"1",e.minor=s||"0",e.patch=n||"0"}return l(this.options.customFormat||"",e)}generateVersionInfo(){return{version:this.version,buildTime:this.buildTime.toISOString(),timestamp:this.buildTime.getTime(),format:this.options.format,...this.options.extra}}async writeVersionFile(t){const e=p(t,this.options.outputFile||"version.json"),i=this.generateVersionInfo();await h(e,JSON.stringify(i,null,2)),this.logger.success(`\u7248\u672C\u6587\u4EF6\u5DF2\u751F\u6210: ${e}`)}addPluginHooks(t){t.configResolved=()=>{this.buildTime=new Date,this.version=this.generateVersion(),this.logger.info(`\u751F\u6210\u7248\u672C\u53F7: ${this.version}`)},(this.options.outputType==="define"||this.options.outputType==="both")&&(t.config=()=>{this.version||(this.buildTime=new Date,this.version=this.generateVersion());const e=this.options.defineName||"__APP_VERSION__";return this.logger.info(`\u6CE8\u5165\u5168\u5C40\u53D8\u91CF: ${e} = "${this.version}"`),{define:{[e]:JSON.stringify(this.version),[`${e}_INFO`]:JSON.stringify(this.generateVersionInfo())}}}),(this.options.outputType==="file"||this.options.outputType==="both")&&(t.writeBundle=async()=>{this.viteConfig&&await this.safeExecute(async()=>{const e=this.viteConfig.build.outDir;await this.writeVersionFile(e)},"\u5199\u5165\u7248\u672C\u6587\u4EF6")})}}const g=r(c);export{g as generateVersion};
1
+ import{createPluginFactory as r,BasePlugin as a}from"../../factory/index.mjs";import{randomBytes as u}from"crypto";import{getDateFormatParams as m}from"../../common/format/index.mjs";import{writeFileContent as h}from"../../common/fs/index.mjs";import{join as p}from"path";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";import"fs";import"../../common/concurrency/index.mjs";function f(o=8){const t=Math.max(1,Math.min(64,o));return u(Math.ceil(t/2)).toString("hex").slice(0,t)}function l(o,t){let e=o;for(const[i,s]of Object.entries(t))e=e.replace(new RegExp(`\\{${i}\\}`,"g"),s);return e}class c extends a{version="";buildTime=new Date;getDefaultOptions(){return{format:"timestamp",semverBase:"1.0.0",outputType:"file",outputFile:"version.json",defineName:"__APP_VERSION__",hashLength:8,prefix:"",suffix:""}}validateOptions(){if(this.validator.field("format").enum(["timestamp","date","datetime","semver","hash","custom"]).field("outputType").enum(["file","define","both"]).field("hashLength").number().minValue(1).maxValue(32).validate(),this.options.format==="custom"&&!this.options.customFormat)throw new Error("\u5F53 format \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customFormat")}getPluginName(){return"generate-version"}generateVersion(){const t=m(this.buildTime),e=f(this.options.hashLength);let i;switch(this.options.format){case"timestamp":i=`${t.YYYY}${t.MM}${t.DD}${t.HH}${t.mm}${t.ss}`;break;case"date":i=`${t.YYYY}.${t.MM}.${t.DD}`;break;case"datetime":i=`${t.YYYY}.${t.MM}.${t.DD}.${t.HH}${t.mm}${t.ss}`;break;case"semver":i=this.options.semverBase||"1.0.0";break;case"hash":i=e;break;case"custom":i=this.parseCustomFormat({...t,hash:e});break;default:i=t.timestamp}const s=this.options.prefix||"",n=this.options.suffix||"";return`${s}${i}${n}`}parseCustomFormat(t){const e={...t};if(this.options.semverBase){const[i,s,n]=this.options.semverBase.split(".");e.major=i||"1",e.minor=s||"0",e.patch=n||"0"}return l(this.options.customFormat||"",e)}generateVersionInfo(){return{version:this.version,buildTime:this.buildTime.toISOString(),timestamp:this.buildTime.getTime(),format:this.options.format,...this.options.extra}}async writeVersionFile(t){const e=p(t,this.options.outputFile||"version.json"),i=this.generateVersionInfo();await h(e,JSON.stringify(i,null,2)),this.logger.success(`\u7248\u672C\u6587\u4EF6\u5DF2\u751F\u6210: ${e}`)}addPluginHooks(t){t.configResolved=()=>{this.buildTime=new Date,this.version=this.generateVersion(),this.logger.info(`\u751F\u6210\u7248\u672C\u53F7: ${this.version}`)},(this.options.outputType==="define"||this.options.outputType==="both")&&(t.config=()=>{this.version||(this.buildTime=new Date,this.version=this.generateVersion());const e=this.options.defineName||"__APP_VERSION__";return this.logger.info(`\u6CE8\u5165\u5168\u5C40\u53D8\u91CF: ${e} = "${this.version}"`),{define:{[e]:JSON.stringify(this.version),[`${e}_INFO`]:JSON.stringify(this.generateVersionInfo())}}}),(this.options.outputType==="file"||this.options.outputType==="both")&&(t.writeBundle=async()=>{this.viteConfig&&await this.safeExecute(async()=>{const e=this.viteConfig.build.outDir;await this.writeVersionFile(e)},"\u5199\u5165\u7248\u672C\u6587\u4EF6")})}}const g=r(c);export{g as generateVersion};