@meng-xi/vite-plugin 0.1.6 → 0.1.7

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.
@@ -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 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 h}from"node:fs";import{pipeline as g}from"node:stream/promises";import m from"node:path";import{scanDirectory as y,writeJsonReport as x}from"../../common/fs/index.mjs";import{normalizePath as E,isExtensionIncluded as b,isPathExcluded as w,isPreCompressed as B}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";async function C(e,i,t){const o=(await n.stat(e)).size,r=d({level:t});await g(p(e),r,h(i));const s=(await n.stat(i)).size;return{file:e,originalSize:o,compressedSize:s,ratio:o>0?Number(((1-s/o)*100).toFixed(1)):0,algorithm:"gzip"}}async function A(e,i,t){const o=(await n.stat(e)).size,r=z({params:{[S.BROTLI_PARAM_QUALITY]:t}});await g(p(e),r,h(i));const s=(await n.stat(i)).size;return{file:e,originalSize:o,compressedSize:s,ratio:o>0?Number(((1-s/o)*100).toFixed(1)):0,algorithm:"brotli"}}async function O(e,i,t,o){const r=e+(i==="gzip"?".gz":".br");return i==="gzip"?C(e,r,t):A(e,r,o)}function P(e,i,t,o){return!(t<o.threshold||!b(i,{includeExtensions:o.includeExtensions,excludeExtensions:o.excludeExtensions})||w(e,o.excludePaths)||B(i))}async function D(e,i){return(await y(e,{filter:(t,o,r)=>{const s=m.relative(e,t);return P(s,o,r,i)}})).map(t=>({filePath:t.filePath,relativePath:E(m.relative(e,t.filePath)),size:t.size,ext:t.extension}))}function $(e,i){const t=e.reduce((s,a)=>s+a.originalSize,0),o=e.reduce((s,a)=>s+a.compressedSize,0),r=t>0?Number(((1-o/t)*100).toFixed(1)):0;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 v(e,i,t){if(!i)return;const o=m.isAbsolute(i)?i:m.join(e,i),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 x(o,r)}async function R(e){const i=[...new Set(e.map(t=>t.file))];for(const t of i)try{await n.unlink(t)}catch{}}async function L(e,i,t){const o=[];let r=0;async function s(){for(;r<e.length;){const l=r++,u=await i(e[l]);o[l]=u}}const a=Array(Math.min(t,e.length)).fill(null).map(()=>s());return await Promise.all(a),o}class T 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(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 D(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 L(o,async u=>O(u.filePath,a,this.options.compressionLevel,this.options.brotliQuality),this.options.parallelLimit);this.allStats.push(...l)}const s=Date.now()-t;this.summary=$(this.allStats,s),this.options.deleteOriginalFile&&(await R(this.allStats),this.logger.info("\u5DF2\u5220\u9664\u539F\u59CB\u6587\u4EF6\uFF0C\u4EC5\u4FDD\u7559\u538B\u7F29\u7248\u672C")),this.options.reportOutput&&(await v(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: ${c(t)} \u2192 \u538B\u7F29\u540E: ${c(o)}\uFF0C\u538B\u7F29\u7387: ${r}%\uFF0C\u8017\u65F6: ${s}ms`);const a=[...this.allStats].sort((l,u)=>u.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}% ${c(l.originalSize)} \u2192 ${c(l.compressedSize)}`)}}getStats(){return[...this.allStats]}getSummary(){return this.summary}}const V=f(T);export{V as compressAssets};
@@ -1,7 +1,7 @@
1
- "use strict";const factory_index=require("../../factory/index.cjs"),security=require("../../shared/vite-plugin.CcvHfrL8.cjs"),common_format_index=require("../../common/format/index.cjs"),l$1=require("node:path");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const l__default=_interopDefaultCompat(l$1);function e(t){if(t){if(t.blockedTags&&!Array.isArray(t.blockedTags))throw new Error("security.blockedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(t.allowedTags&&!Array.isArray(t.allowedTags))throw new Error("security.allowedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(t.blockedAttributes&&!Array.isArray(t.blockedAttributes))throw new Error("security.blockedAttributes \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4")}}function validateRules(t){if(!t.rules||!Array.isArray(t.rules))throw new Error("rules \u5FC5\u987B\u662F\u975E\u7A7A\u6570\u7EC4");if(t.rules.length===0)throw new Error("rules \u4E0D\u80FD\u4E3A\u7A7A\u6570\u7EC4");for(let n=0;n<t.rules.length;n++)s(t.rules[n],n)}function s(t,n){if(!t.content||typeof t.content!="string")throw new Error(`rules[${n}].content \u5FC5\u987B\u662F\u975E\u7A7A\u5B57\u7B26\u4E32`);if(!t.position||typeof t.position!="string")throw new Error(`rules[${n}].position \u5FC5\u987B\u662F\u6709\u6548\u7684\u6CE8\u5165\u4F4D\u7F6E`);const o=["head-start","head-end","body-start","body-end","before-selector","after-selector","replace-selector"];if(!o.includes(t.position))throw new Error(`rules[${n}].position \u5FC5\u987B\u662F ${o.join(", ")} \u4E4B\u4E00`);if(t.position.includes("selector")&&!t.selector)throw new Error(`rules[${n}].position \u4E3A "${t.position}" \u65F6\uFF0Cselector \u4E3A\u5FC5\u586B\u9879`);if(t.priority!==void 0&&(typeof t.priority!="number"||t.priority<0))throw new Error(`rules[${n}].priority \u5FC5\u987B\u662F\u975E\u8D1F\u6570`);t.condition&&l(t.condition,n)}function l(t,n){if(!t)return;const o=["env","file-contains","custom"];if(!o.includes(t.type))throw new Error(`rules[${n}].condition.type \u5FC5\u987B\u662F ${o.join(", ")} \u4E4B\u4E00`);if(t.type==="custom"&&typeof t.value!="function")throw new Error(`rules[${n}].condition.type \u4E3A "custom" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u51FD\u6570`);if(t.type!=="custom"&&typeof t.value!="string")throw new Error(`rules[${n}].condition.type \u4E3A "${t.type}" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`)}function validateAll(t){validateRules(t),e(t.security)}function f(t,n,o){if(o==="regex"){try{const a=new RegExp(n),r=t.match(a);if(r&&r.index!==void 0)return{index:r.index,length:r[0].length}}catch{return null}return null}const i=t.indexOf(n);return i===-1?null:{index:i,length:n.length}}function p(t,n,o){const i={...o,...n};return common_format_index.parseTemplate(t,i)}function x(t,n){let o=!1;switch(t.type){case"env":{const i=t.value,a=process.env[i];o=!!a&&a!=="false"&&a!=="0";break}case"file-contains":{const i=t.value;o=n.includes(i);break}case"custom":{const i=t.value;try{o=!!i()}catch{o=!1}break}}return t.negate?!o:o}function h(t){return[...t].sort((n,o)=>(n.priority??100)-(o.priority??100))}function b(t,n,o,i,a){switch(o){case"head-start":{const r=t.match(/<head\b[^>]*>/i);if(!r)return{html:t,injected:!1,reason:"\u672A\u627E\u5230 <head> \u6807\u7B7E"};const c=(r.index??0)+r[0].length;return{html:t.slice(0,c)+`
2
- `+n+t.slice(c),injected:!0}}case"head-end":{const r=t.match(/<\/head\s*>/i);if(!r)return{html:t,injected:!1,reason:"\u672A\u627E\u5230 </head> \u6807\u7B7E"};const c=r.index;return{html:t.slice(0,c)+n+`
3
- `+t.slice(c),injected:!0}}case"body-start":{const r=t.match(/<body\b[^>]*>/i);if(!r)return{html:t,injected:!1,reason:"\u672A\u627E\u5230 <body> \u6807\u7B7E"};const c=(r.index??0)+r[0].length;return{html:t.slice(0,c)+`
4
- `+n+t.slice(c),injected:!0}}case"body-end":{const r=t.match(/<\/body\s*>/i);if(!r)return{html:t,injected:!1,reason:"\u672A\u627E\u5230 </body> \u6807\u7B7E"};const c=r.index;return{html:t.slice(0,c)+n+`
5
- `+t.slice(c),injected:!0}}case"before-selector":{if(!i)return{html:t,injected:!1,reason:"before-selector \u9700\u8981 selector \u53C2\u6570"};const r=f(t,i,a);return r?{html:t.slice(0,r.index)+n+`
6
- `+t.slice(r.index),injected:!0}:{html:t,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${i}"`}}case"after-selector":{if(!i)return{html:t,injected:!1,reason:"after-selector \u9700\u8981 selector \u53C2\u6570"};const r=f(t,i,a);if(!r)return{html:t,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${i}"`};const c=r.index+r.length;return{html:t.slice(0,c)+`
7
- `+n+t.slice(c),injected:!0}}case"replace-selector":{if(!i)return{html:t,injected:!1,reason:"replace-selector \u9700\u8981 selector \u53C2\u6570"};const r=f(t,i,a);if(!r)return{html:t,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${i}"`};const c=r.index+r.length;return{html:t.slice(0,r.index)+n+t.slice(c),injected:!0}}default:return{html:t,injected:!1,reason:`\u4E0D\u652F\u6301\u7684\u6CE8\u5165\u4F4D\u7F6E: ${o}`}}}function processRules(t,n,o,i,a){let r=t;const c=[],E=h(n);for(const d of E){const g={ruleId:d.id||"unnamed",position:d.position,selector:d.selector,injected:!1,timestamp:Date.now()};if(d.condition&&!x(d.condition,r)){g.injected=!1,g.reason="\u6761\u4EF6\u4E0D\u6EE1\u8DB3\uFF0C\u8DF3\u8FC7\u6CE8\u5165",c.push(g);continue}let m=p(d.content,d.templateVars,o);try{m=security.sanitizeContent(m,d,i,a)}catch(y){g.injected=!1,g.reason=y.message,c.push(g),a?.warn(`\u89C4\u5219 "${d.id||"unnamed"}" \u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${y.message}`);continue}const F=b(r,m,d.position,d.selector,d.selectorMatch);r=F.html,g.injected=F.injected,g.reason=F.reason,c.push(g)}return{html:r,logs:c}}class u extends factory_index.BasePlugin{injectionLogs=[];getDefaultOptions(){return{targetFile:"index.html",logInjection:!0,security:{blockDangerousTags:!0,blockDangerousAttributes:!0}}}validateOptions(){this.validator.field("targetFile").string().field("rules").required().field("logInjection").boolean().validate(),validateAll(this.options)}getPluginName(){return"html-inject"}isTargetFile(n,o){if(o==="index.html")return n.endsWith("index.html")||n.endsWith("index.htm");const i=o.replace(/\\/g,"/"),a=n.replace(/\\/g,"/");return a.endsWith(i)?!0:l__default.basename(a)===l__default.basename(i)}addPluginHooks(n){n.transformIndexHtml={order:"post",handler:(o,i)=>{const a=i.filename||"",r=this.options.targetFile||"index.html";if(!this.isTargetFile(a,r))return o;const c={warn:d=>this.logger.warn(d)},E=processRules(o,this.options.rules,this.options.templateVars,this.options.security,c);return this.injectionLogs=E.logs,this.options.logInjection&&this.logInjectionResults(E.logs),E.html}},n.buildEnd=()=>{this.options.logInjection&&this.injectionLogs.length>0&&this.logger.info(`\u6CE8\u5165\u5B8C\u6210\uFF0C\u5171\u5904\u7406 ${this.injectionLogs.length} \u6761\u89C4\u5219`)}}logInjectionResults(n){for(const o of n)o.injected?this.logger.success(`\u89C4\u5219 "${o.ruleId}" \u6CE8\u5165\u6210\u529F (\u4F4D\u7F6E: ${o.position}${o.selector?`, \u9009\u62E9\u5668: ${o.selector}`:""})`):this.logger.warn(`\u89C4\u5219 "${o.ruleId}" \u6CE8\u5165\u5931\u8D25: ${o.reason||"\u672A\u77E5\u539F\u56E0"}`)}getInjectionLogs(){return[...this.injectionLogs]}}const htmlInject=factory_index.createPluginFactory(u);exports.htmlInject=htmlInject;
1
+ "use strict";const factory_index=require("../../factory/index.cjs"),security=require("../../shared/vite-plugin.CcvHfrL8.cjs"),common_format_index=require("../../common/format/index.cjs"),l$1=require("node:path"),common_path_index=require("../../common/path/index.cjs");require("../../logger/index.cjs"),require("../../shared/vite-plugin.Bcg6RW2N.cjs");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const l__default=_interopDefaultCompat(l$1);function e(t){if(t){if(t.blockedTags&&!Array.isArray(t.blockedTags))throw new Error("security.blockedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(t.allowedTags&&!Array.isArray(t.allowedTags))throw new Error("security.allowedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(t.blockedAttributes&&!Array.isArray(t.blockedAttributes))throw new Error("security.blockedAttributes \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4")}}function validateRules(t){if(!t.rules||!Array.isArray(t.rules))throw new Error("rules \u5FC5\u987B\u662F\u975E\u7A7A\u6570\u7EC4");if(t.rules.length===0)throw new Error("rules \u4E0D\u80FD\u4E3A\u7A7A\u6570\u7EC4");for(let u=0;u<t.rules.length;u++)s(t.rules[u],u)}function s(t,u){if(!t.content||typeof t.content!="string")throw new Error(`rules[${u}].content \u5FC5\u987B\u662F\u975E\u7A7A\u5B57\u7B26\u4E32`);if(!t.position||typeof t.position!="string")throw new Error(`rules[${u}].position \u5FC5\u987B\u662F\u6709\u6548\u7684\u6CE8\u5165\u4F4D\u7F6E`);const r=["head-start","head-end","body-start","body-end","before-selector","after-selector","replace-selector"];if(!r.includes(t.position))throw new Error(`rules[${u}].position \u5FC5\u987B\u662F ${r.join(", ")} \u4E4B\u4E00`);if(t.position.includes("selector")&&!t.selector)throw new Error(`rules[${u}].position \u4E3A "${t.position}" \u65F6\uFF0Cselector \u4E3A\u5FC5\u586B\u9879`);if(t.priority!==void 0&&(typeof t.priority!="number"||t.priority<0))throw new Error(`rules[${u}].priority \u5FC5\u987B\u662F\u975E\u8D1F\u6570`);t.condition&&l(t.condition,u)}function l(t,u){if(!t)return;const r=["env","file-contains","custom"];if(!r.includes(t.type))throw new Error(`rules[${u}].condition.type \u5FC5\u987B\u662F ${r.join(", ")} \u4E4B\u4E00`);if(t.type==="custom"&&typeof t.value!="function")throw new Error(`rules[${u}].condition.type \u4E3A "custom" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u51FD\u6570`);if(t.type!=="custom"&&typeof t.value!="string")throw new Error(`rules[${u}].condition.type \u4E3A "${t.type}" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`)}function validateAll(t){validateRules(t),e(t.security)}function f(t,u,r){if(r==="regex"){try{const c=new RegExp(u),n=t.match(c);if(n&&n.index!==void 0)return{index:n.index,length:n[0].length}}catch{return null}return null}const o=t.indexOf(u);return o===-1?null:{index:o,length:u.length}}function p(t,u,r){const o={...r,...u};return common_format_index.parseTemplate(t,o)}function x(t,u){let r=!1;switch(t.type){case"env":{const o=t.value,c=process.env[o];r=!!c&&c!=="false"&&c!=="0";break}case"file-contains":{const o=t.value;r=u.includes(o);break}case"custom":{const o=t.value;try{r=!!o()}catch{r=!1}break}}return t.negate?!r:r}function h(t){return[...t].sort((u,r)=>(u.priority??100)-(r.priority??100))}function b(t,u,r,o,c){switch(r){case"head-start":{const n=t.match(/<head\b[^>]*>/i);if(!n)return{html:t,injected:!1,reason:"\u672A\u627E\u5230 <head> \u6807\u7B7E"};const i=(n.index??0)+n[0].length;return{html:t.slice(0,i)+`
2
+ `+u+t.slice(i),injected:!0}}case"head-end":{const n=t.match(/<\/head\s*>/i);if(!n)return{html:t,injected:!1,reason:"\u672A\u627E\u5230 </head> \u6807\u7B7E"};const i=n.index;return{html:t.slice(0,i)+u+`
3
+ `+t.slice(i),injected:!0}}case"body-start":{const n=t.match(/<body\b[^>]*>/i);if(!n)return{html:t,injected:!1,reason:"\u672A\u627E\u5230 <body> \u6807\u7B7E"};const i=(n.index??0)+n[0].length;return{html:t.slice(0,i)+`
4
+ `+u+t.slice(i),injected:!0}}case"body-end":{const n=t.match(/<\/body\s*>/i);if(!n)return{html:t,injected:!1,reason:"\u672A\u627E\u5230 </body> \u6807\u7B7E"};const i=n.index;return{html:t.slice(0,i)+u+`
5
+ `+t.slice(i),injected:!0}}case"before-selector":{if(!o)return{html:t,injected:!1,reason:"before-selector \u9700\u8981 selector \u53C2\u6570"};const n=f(t,o,c);return n?{html:t.slice(0,n.index)+u+`
6
+ `+t.slice(n.index),injected:!0}:{html:t,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${o}"`}}case"after-selector":{if(!o)return{html:t,injected:!1,reason:"after-selector \u9700\u8981 selector \u53C2\u6570"};const n=f(t,o,c);if(!n)return{html:t,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${o}"`};const i=n.index+n.length;return{html:t.slice(0,i)+`
7
+ `+u+t.slice(i),injected:!0}}case"replace-selector":{if(!o)return{html:t,injected:!1,reason:"replace-selector \u9700\u8981 selector \u53C2\u6570"};const n=f(t,o,c);if(!n)return{html:t,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${o}"`};const i=n.index+n.length;return{html:t.slice(0,n.index)+u+t.slice(i),injected:!0}}default:return{html:t,injected:!1,reason:`\u4E0D\u652F\u6301\u7684\u6CE8\u5165\u4F4D\u7F6E: ${r}`}}}function processRules(t,u,r,o,c){let n=t;const i=[],g=h(u);for(const a of g){const d={ruleId:a.id||"unnamed",position:a.position,selector:a.selector,injected:!1,timestamp:Date.now()};if(a.condition&&!x(a.condition,n)){d.injected=!1,d.reason="\u6761\u4EF6\u4E0D\u6EE1\u8DB3\uFF0C\u8DF3\u8FC7\u6CE8\u5165",i.push(d);continue}let E=p(a.content,a.templateVars,r);try{E=security.sanitizeContent(E,a,o,c)}catch(y){d.injected=!1,d.reason=y.message,i.push(d),c?.warn(`\u89C4\u5219 "${a.id||"unnamed"}" \u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${y.message}`);continue}const F=b(n,E,a.position,a.selector,a.selectorMatch);n=F.html,d.injected=F.injected,d.reason=F.reason,i.push(d)}return{html:n,logs:i}}class m extends factory_index.BasePlugin{injectionLogs=[];getDefaultOptions(){return{targetFile:"index.html",logInjection:!0,security:{blockDangerousTags:!0,blockDangerousAttributes:!0}}}validateOptions(){this.validator.field("targetFile").string().field("rules").required().field("logInjection").boolean().validate(),validateAll(this.options)}getPluginName(){return"html-inject"}isTargetFile(u,r){if(r==="index.html")return u.endsWith("index.html")||u.endsWith("index.htm");const o=common_path_index.normalizePath(r),c=common_path_index.normalizePath(u);return c.endsWith(o)?!0:l__default.basename(c)===l__default.basename(o)}addPluginHooks(u){u.transformIndexHtml={order:"post",handler:(r,o)=>{const c=o.filename||"",n=this.options.targetFile||"index.html";if(!this.isTargetFile(c,n))return r;const i={warn:a=>this.logger.warn(a)},g=processRules(r,this.options.rules,this.options.templateVars,this.options.security,i);return this.injectionLogs=g.logs,this.options.logInjection&&this.logInjectionResults(g.logs),g.html}},u.buildEnd=()=>{this.options.logInjection&&this.injectionLogs.length>0&&this.logger.info(`\u6CE8\u5165\u5B8C\u6210\uFF0C\u5171\u5904\u7406 ${this.injectionLogs.length} \u6761\u89C4\u5219`)}}logInjectionResults(u){for(const r of u)r.injected?this.logger.success(`\u89C4\u5219 "${r.ruleId}" \u6CE8\u5165\u6210\u529F (\u4F4D\u7F6E: ${r.position}${r.selector?`, \u9009\u62E9\u5668: ${r.selector}`:""})`):this.logger.warn(`\u89C4\u5219 "${r.ruleId}" \u6CE8\u5165\u5931\u8D25: ${r.reason||"\u672A\u77E5\u539F\u56E0"}`)}getInjectionLogs(){return[...this.injectionLogs]}}const htmlInject=factory_index.createPluginFactory(m);exports.htmlInject=htmlInject;
@@ -1,7 +1,7 @@
1
- import{createPluginFactory as g,BasePlugin as p}from"../../factory/index.mjs";import{s as m}from"../../shared/vite-plugin.CuXEJAWX.mjs";import{parseTemplate as F}from"../../common/format/index.mjs";import E from"node:path";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";function y(e){if(e){if(e.blockedTags&&!Array.isArray(e.blockedTags))throw new Error("security.blockedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(e.allowedTags&&!Array.isArray(e.allowedTags))throw new Error("security.allowedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(e.blockedAttributes&&!Array.isArray(e.blockedAttributes))throw new Error("security.blockedAttributes \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4")}}function j(e){if(!e.rules||!Array.isArray(e.rules))throw new Error("rules \u5FC5\u987B\u662F\u975E\u7A7A\u6570\u7EC4");if(e.rules.length===0)throw new Error("rules \u4E0D\u80FD\u4E3A\u7A7A\u6570\u7EC4");for(let t=0;t<e.rules.length;t++)C(e.rules[t],t)}function C(e,t){if(!e.content||typeof e.content!="string")throw new Error(`rules[${t}].content \u5FC5\u987B\u662F\u975E\u7A7A\u5B57\u7B26\u4E32`);if(!e.position||typeof e.position!="string")throw new Error(`rules[${t}].position \u5FC5\u987B\u662F\u6709\u6548\u7684\u6CE8\u5165\u4F4D\u7F6E`);const n=["head-start","head-end","body-start","body-end","before-selector","after-selector","replace-selector"];if(!n.includes(e.position))throw new Error(`rules[${t}].position \u5FC5\u987B\u662F ${n.join(", ")} \u4E4B\u4E00`);if(e.position.includes("selector")&&!e.selector)throw new Error(`rules[${t}].position \u4E3A "${e.position}" \u65F6\uFF0Cselector \u4E3A\u5FC5\u586B\u9879`);if(e.priority!==void 0&&(typeof e.priority!="number"||e.priority<0))throw new Error(`rules[${t}].priority \u5FC5\u987B\u662F\u975E\u8D1F\u6570`);e.condition&&w(e.condition,t)}function w(e,t){if(!e)return;const n=["env","file-contains","custom"];if(!n.includes(e.type))throw new Error(`rules[${t}].condition.type \u5FC5\u987B\u662F ${n.join(", ")} \u4E4B\u4E00`);if(e.type==="custom"&&typeof e.value!="function")throw new Error(`rules[${t}].condition.type \u4E3A "custom" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u51FD\u6570`);if(e.type!=="custom"&&typeof e.value!="string")throw new Error(`rules[${t}].condition.type \u4E3A "${e.type}" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`)}function b(e){j(e),y(e.security)}function h(e,t,n){if(n==="regex"){try{const i=new RegExp(t),u=e.match(i);if(u&&u.index!==void 0)return{index:u.index,length:u[0].length}}catch{return null}return null}const r=e.indexOf(t);return r===-1?null:{index:r,length:t.length}}function A(e,t,n){const r={...n,...t};return F(e,r)}function B(e,t){let n=!1;switch(e.type){case"env":{const r=e.value,i=process.env[r];n=!!i&&i!=="false"&&i!=="0";break}case"file-contains":{const r=e.value;n=t.includes(r);break}case"custom":{const r=e.value;try{n=!!r()}catch{n=!1}break}}return e.negate?!n:n}function $(e){return[...e].sort((t,n)=>(t.priority??100)-(n.priority??100))}function x(e,t,n,r,i){switch(n){case"head-start":{const u=e.match(/<head\b[^>]*>/i);if(!u)return{html:e,injected:!1,reason:"\u672A\u627E\u5230 <head> \u6807\u7B7E"};const o=(u.index??0)+u[0].length;return{html:e.slice(0,o)+`
1
+ import{createPluginFactory as g,BasePlugin as p}from"../../factory/index.mjs";import{s as F}from"../../shared/vite-plugin.CuXEJAWX.mjs";import{parseTemplate as y}from"../../common/format/index.mjs";import E from"node:path";import{normalizePath as m}from"../../common/path/index.mjs";import"../../logger/index.mjs";import"../../shared/vite-plugin.DcExl6jd.mjs";function j(e){if(e){if(e.blockedTags&&!Array.isArray(e.blockedTags))throw new Error("security.blockedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(e.allowedTags&&!Array.isArray(e.allowedTags))throw new Error("security.allowedTags \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4");if(e.blockedAttributes&&!Array.isArray(e.blockedAttributes))throw new Error("security.blockedAttributes \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4")}}function C(e){if(!e.rules||!Array.isArray(e.rules))throw new Error("rules \u5FC5\u987B\u662F\u975E\u7A7A\u6570\u7EC4");if(e.rules.length===0)throw new Error("rules \u4E0D\u80FD\u4E3A\u7A7A\u6570\u7EC4");for(let t=0;t<e.rules.length;t++)w(e.rules[t],t)}function w(e,t){if(!e.content||typeof e.content!="string")throw new Error(`rules[${t}].content \u5FC5\u987B\u662F\u975E\u7A7A\u5B57\u7B26\u4E32`);if(!e.position||typeof e.position!="string")throw new Error(`rules[${t}].position \u5FC5\u987B\u662F\u6709\u6548\u7684\u6CE8\u5165\u4F4D\u7F6E`);const n=["head-start","head-end","body-start","body-end","before-selector","after-selector","replace-selector"];if(!n.includes(e.position))throw new Error(`rules[${t}].position \u5FC5\u987B\u662F ${n.join(", ")} \u4E4B\u4E00`);if(e.position.includes("selector")&&!e.selector)throw new Error(`rules[${t}].position \u4E3A "${e.position}" \u65F6\uFF0Cselector \u4E3A\u5FC5\u586B\u9879`);if(e.priority!==void 0&&(typeof e.priority!="number"||e.priority<0))throw new Error(`rules[${t}].priority \u5FC5\u987B\u662F\u975E\u8D1F\u6570`);e.condition&&b(e.condition,t)}function b(e,t){if(!e)return;const n=["env","file-contains","custom"];if(!n.includes(e.type))throw new Error(`rules[${t}].condition.type \u5FC5\u987B\u662F ${n.join(", ")} \u4E4B\u4E00`);if(e.type==="custom"&&typeof e.value!="function")throw new Error(`rules[${t}].condition.type \u4E3A "custom" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u51FD\u6570`);if(e.type!=="custom"&&typeof e.value!="string")throw new Error(`rules[${t}].condition.type \u4E3A "${e.type}" \u65F6\uFF0Cvalue \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`)}function A(e){C(e),j(e.security)}function h(e,t,n){if(n==="regex"){try{const i=new RegExp(t),u=e.match(i);if(u&&u.index!==void 0)return{index:u.index,length:u[0].length}}catch{return null}return null}const r=e.indexOf(t);return r===-1?null:{index:r,length:t.length}}function B(e,t,n){const r={...n,...t};return y(e,r)}function $(e,t){let n=!1;switch(e.type){case"env":{const r=e.value,i=process.env[r];n=!!i&&i!=="false"&&i!=="0";break}case"file-contains":{const r=e.value;n=t.includes(r);break}case"custom":{const r=e.value;try{n=!!r()}catch{n=!1}break}}return e.negate?!n:n}function x(e){return[...e].sort((t,n)=>(t.priority??100)-(n.priority??100))}function v(e,t,n,r,i){switch(n){case"head-start":{const u=e.match(/<head\b[^>]*>/i);if(!u)return{html:e,injected:!1,reason:"\u672A\u627E\u5230 <head> \u6807\u7B7E"};const o=(u.index??0)+u[0].length;return{html:e.slice(0,o)+`
2
2
  `+t+e.slice(o),injected:!0}}case"head-end":{const u=e.match(/<\/head\s*>/i);if(!u)return{html:e,injected:!1,reason:"\u672A\u627E\u5230 </head> \u6807\u7B7E"};const o=u.index;return{html:e.slice(0,o)+t+`
3
3
  `+e.slice(o),injected:!0}}case"body-start":{const u=e.match(/<body\b[^>]*>/i);if(!u)return{html:e,injected:!1,reason:"\u672A\u627E\u5230 <body> \u6807\u7B7E"};const o=(u.index??0)+u[0].length;return{html:e.slice(0,o)+`
4
4
  `+t+e.slice(o),injected:!0}}case"body-end":{const u=e.match(/<\/body\s*>/i);if(!u)return{html:e,injected:!1,reason:"\u672A\u627E\u5230 </body> \u6807\u7B7E"};const o=u.index;return{html:e.slice(0,o)+t+`
5
5
  `+e.slice(o),injected:!0}}case"before-selector":{if(!r)return{html:e,injected:!1,reason:"before-selector \u9700\u8981 selector \u53C2\u6570"};const u=h(e,r,i);return u?{html:e.slice(0,u.index)+t+`
6
6
  `+e.slice(u.index),injected:!0}:{html:e,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${r}"`}}case"after-selector":{if(!r)return{html:e,injected:!1,reason:"after-selector \u9700\u8981 selector \u53C2\u6570"};const u=h(e,r,i);if(!u)return{html:e,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${r}"`};const o=u.index+u.length;return{html:e.slice(0,o)+`
7
- `+t+e.slice(o),injected:!0}}case"replace-selector":{if(!r)return{html:e,injected:!1,reason:"replace-selector \u9700\u8981 selector \u53C2\u6570"};const u=h(e,r,i);if(!u)return{html:e,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${r}"`};const o=u.index+u.length;return{html:e.slice(0,u.index)+t+e.slice(o),injected:!0}}default:return{html:e,injected:!1,reason:`\u4E0D\u652F\u6301\u7684\u6CE8\u5165\u4F4D\u7F6E: ${n}`}}}function v(e,t,n,r,i){let u=e;const o=[],c=$(t);for(const s of c){const l={ruleId:s.id||"unnamed",position:s.position,selector:s.selector,injected:!1,timestamp:Date.now()};if(s.condition&&!B(s.condition,u)){l.injected=!1,l.reason="\u6761\u4EF6\u4E0D\u6EE1\u8DB3\uFF0C\u8DF3\u8FC7\u6CE8\u5165",o.push(l);continue}let a=A(s.content,s.templateVars,n);try{a=m(a,s,r,i)}catch(f){l.injected=!1,l.reason=f.message,o.push(l),i?.warn(`\u89C4\u5219 "${s.id||"unnamed"}" \u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${f.message}`);continue}const d=x(u,a,s.position,s.selector,s.selectorMatch);u=d.html,l.injected=d.injected,l.reason=d.reason,o.push(l)}return{html:u,logs:o}}class D extends p{injectionLogs=[];getDefaultOptions(){return{targetFile:"index.html",logInjection:!0,security:{blockDangerousTags:!0,blockDangerousAttributes:!0}}}validateOptions(){this.validator.field("targetFile").string().field("rules").required().field("logInjection").boolean().validate(),b(this.options)}getPluginName(){return"html-inject"}isTargetFile(t,n){if(n==="index.html")return t.endsWith("index.html")||t.endsWith("index.htm");const r=n.replace(/\\/g,"/"),i=t.replace(/\\/g,"/");return i.endsWith(r)?!0:E.basename(i)===E.basename(r)}addPluginHooks(t){t.transformIndexHtml={order:"post",handler:(n,r)=>{const i=r.filename||"",u=this.options.targetFile||"index.html";if(!this.isTargetFile(i,u))return n;const o={warn:s=>this.logger.warn(s)},c=v(n,this.options.rules,this.options.templateVars,this.options.security,o);return this.injectionLogs=c.logs,this.options.logInjection&&this.logInjectionResults(c.logs),c.html}},t.buildEnd=()=>{this.options.logInjection&&this.injectionLogs.length>0&&this.logger.info(`\u6CE8\u5165\u5B8C\u6210\uFF0C\u5171\u5904\u7406 ${this.injectionLogs.length} \u6761\u89C4\u5219`)}}logInjectionResults(t){for(const n of t)n.injected?this.logger.success(`\u89C4\u5219 "${n.ruleId}" \u6CE8\u5165\u6210\u529F (\u4F4D\u7F6E: ${n.position}${n.selector?`, \u9009\u62E9\u5668: ${n.selector}`:""})`):this.logger.warn(`\u89C4\u5219 "${n.ruleId}" \u6CE8\u5165\u5931\u8D25: ${n.reason||"\u672A\u77E5\u539F\u56E0"}`)}getInjectionLogs(){return[...this.injectionLogs]}}const k=g(D);export{k as htmlInject};
7
+ `+t+e.slice(o),injected:!0}}case"replace-selector":{if(!r)return{html:e,injected:!1,reason:"replace-selector \u9700\u8981 selector \u53C2\u6570"};const u=h(e,r,i);if(!u)return{html:e,injected:!1,reason:`\u672A\u627E\u5230\u9009\u62E9\u5668 "${r}"`};const o=u.index+u.length;return{html:e.slice(0,u.index)+t+e.slice(o),injected:!0}}default:return{html:e,injected:!1,reason:`\u4E0D\u652F\u6301\u7684\u6CE8\u5165\u4F4D\u7F6E: ${n}`}}}function D(e,t,n,r,i){let u=e;const o=[],c=x(t);for(const s of c){const l={ruleId:s.id||"unnamed",position:s.position,selector:s.selector,injected:!1,timestamp:Date.now()};if(s.condition&&!$(s.condition,u)){l.injected=!1,l.reason="\u6761\u4EF6\u4E0D\u6EE1\u8DB3\uFF0C\u8DF3\u8FC7\u6CE8\u5165",o.push(l);continue}let a=B(s.content,s.templateVars,n);try{a=F(a,s,r,i)}catch(f){l.injected=!1,l.reason=f.message,o.push(l),i?.warn(`\u89C4\u5219 "${s.id||"unnamed"}" \u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${f.message}`);continue}const d=v(u,a,s.position,s.selector,s.selectorMatch);u=d.html,l.injected=d.injected,l.reason=d.reason,o.push(l)}return{html:u,logs:o}}class k extends p{injectionLogs=[];getDefaultOptions(){return{targetFile:"index.html",logInjection:!0,security:{blockDangerousTags:!0,blockDangerousAttributes:!0}}}validateOptions(){this.validator.field("targetFile").string().field("rules").required().field("logInjection").boolean().validate(),A(this.options)}getPluginName(){return"html-inject"}isTargetFile(t,n){if(n==="index.html")return t.endsWith("index.html")||t.endsWith("index.htm");const r=m(n),i=m(t);return i.endsWith(r)?!0:E.basename(i)===E.basename(r)}addPluginHooks(t){t.transformIndexHtml={order:"post",handler:(n,r)=>{const i=r.filename||"",u=this.options.targetFile||"index.html";if(!this.isTargetFile(i,u))return n;const o={warn:s=>this.logger.warn(s)},c=D(n,this.options.rules,this.options.templateVars,this.options.security,o);return this.injectionLogs=c.logs,this.options.logInjection&&this.logInjectionResults(c.logs),c.html}},t.buildEnd=()=>{this.options.logInjection&&this.injectionLogs.length>0&&this.logger.info(`\u6CE8\u5165\u5B8C\u6210\uFF0C\u5171\u5904\u7406 ${this.injectionLogs.length} \u6761\u89C4\u5219`)}}logInjectionResults(t){for(const n of t)n.injected?this.logger.success(`\u89C4\u5219 "${n.ruleId}" \u6CE8\u5165\u6210\u529F (\u4F4D\u7F6E: ${n.position}${n.selector?`, \u9009\u62E9\u5668: ${n.selector}`:""})`):this.logger.warn(`\u89C4\u5219 "${n.ruleId}" \u6CE8\u5165\u5931\u8D25: ${n.reason||"\u672A\u77E5\u539F\u56E0"}`)}getInjectionLogs(){return[...this.injectionLogs]}}const I=g(k);export{I as htmlInject};
@@ -1 +1 @@
1
- "use strict";const plugins_autoImport_index=require("./autoImport/index.cjs"),plugins_buildProgress_index=require("./buildProgress/index.cjs"),plugins_bundleAnalyzer_index=require("./bundleAnalyzer/index.cjs"),plugins_compressAssets_index=require("./compressAssets/index.cjs"),plugins_copyFile_index=require("./copyFile/index.cjs"),plugins_envGuard_index=require("./envGuard/index.cjs"),plugins_faviconManager_index=require("./faviconManager/index.cjs"),plugins_generateRouter_index=require("./generateRouter/index.cjs"),plugins_generateVersion_index=require("./generateVersion/index.cjs"),plugins_htmlInject_index=require("./htmlInject/index.cjs"),plugins_loadingManager_index=require("./loadingManager/index.cjs"),plugins_versionUpdateChecker_index=require("./versionUpdateChecker/index.cjs");require("../factory/index.cjs"),require("../logger/index.cjs"),require("../shared/vite-plugin.Bcg6RW2N.cjs"),require("node:fs"),require("node:path"),require("../common/fs/index.cjs"),require("fs"),require("path"),require("../common/ui/index.cjs"),require("node:zlib"),require("node:util"),require("../common/format/index.cjs"),require("node:stream/promises"),require("../common/html/index.cjs"),require("../shared/vite-plugin.CcvHfrL8.cjs"),require("crypto"),require("../common/script/index.cjs"),require("../common/validation/index.cjs"),exports.autoImport=plugins_autoImport_index.autoImport,exports.buildProgress=plugins_buildProgress_index.buildProgress,exports.bundleAnalyzer=plugins_bundleAnalyzer_index.bundleAnalyzer,exports.compressAssets=plugins_compressAssets_index.compressAssets,exports.copyFile=plugins_copyFile_index.copyFile,exports.envGuard=plugins_envGuard_index.envGuard,exports.faviconManager=plugins_faviconManager_index.faviconManager,exports.generateRouter=plugins_generateRouter_index.generateRouter,exports.generateVersion=plugins_generateVersion_index.generateVersion,exports.htmlInject=plugins_htmlInject_index.htmlInject,exports.loadingManager=plugins_loadingManager_index.loadingManager,exports.versionUpdateChecker=plugins_versionUpdateChecker_index.versionUpdateChecker;
1
+ "use strict";const plugins_assetManifest_index=require("./assetManifest/index.cjs"),plugins_autoImport_index=require("./autoImport/index.cjs"),plugins_buildProgress_index=require("./buildProgress/index.cjs"),plugins_bundleAnalyzer_index=require("./bundleAnalyzer/index.cjs"),plugins_compressAssets_index=require("./compressAssets/index.cjs"),plugins_copyFile_index=require("./copyFile/index.cjs"),plugins_envGuard_index=require("./envGuard/index.cjs"),plugins_faviconManager_index=require("./faviconManager/index.cjs"),plugins_generateRouter_index=require("./generateRouter/index.cjs"),plugins_generateVersion_index=require("./generateVersion/index.cjs"),plugins_htmlInject_index=require("./htmlInject/index.cjs"),plugins_loadingManager_index=require("./loadingManager/index.cjs"),plugins_versionUpdateChecker_index=require("./versionUpdateChecker/index.cjs");require("node:path"),require("node:fs"),require("../factory/index.cjs"),require("../logger/index.cjs"),require("../shared/vite-plugin.Bcg6RW2N.cjs"),require("../common/fs/index.cjs"),require("fs"),require("path"),require("../common/path/index.cjs"),require("../common/html/index.cjs"),require("../shared/vite-plugin.CcvHfrL8.cjs"),require("../common/validation/index.cjs"),require("../common/ui/index.cjs"),require("node:zlib"),require("node:util"),require("../common/format/index.cjs"),require("node:stream/promises"),require("crypto"),require("../common/script/index.cjs"),exports.assetManifest=plugins_assetManifest_index.assetManifest,exports.autoImport=plugins_autoImport_index.autoImport,exports.buildProgress=plugins_buildProgress_index.buildProgress,exports.bundleAnalyzer=plugins_bundleAnalyzer_index.bundleAnalyzer,exports.compressAssets=plugins_compressAssets_index.compressAssets,exports.copyFile=plugins_copyFile_index.copyFile,exports.envGuard=plugins_envGuard_index.envGuard,exports.faviconManager=plugins_faviconManager_index.faviconManager,exports.generateRouter=plugins_generateRouter_index.generateRouter,exports.generateVersion=plugins_generateVersion_index.generateVersion,exports.htmlInject=plugins_htmlInject_index.htmlInject,exports.loadingManager=plugins_loadingManager_index.loadingManager,exports.versionUpdateChecker=plugins_versionUpdateChecker_index.versionUpdateChecker;
@@ -1,3 +1,4 @@
1
+ export { AssetGroup, AssetManifestOptions, AssetManifestResult, AssetMap, CustomFormatter, ManifestOutputFormat, WebpackEntryAsset, WebpackManifestOutput, assetManifest } from './assetManifest/index.cjs';
1
2
  export { AutoImportOptions, ImportMapping, ResolvedImport, ScannedModule, TransformResult, autoImport } from './autoImport/index.cjs';
2
3
  export { BuildPhase, BuildProgressOptions, ProgressFormat, ProgressTheme, buildProgress } from './buildProgress/index.cjs';
3
4
  export { BundleAnalysisResult, BundleAnalyzerOptions, BundleOutputFormat, ChunkStats, ComparisonDiff, FileTypeDistribution, ModuleStats, SizeWarning, bundleAnalyzer } from './bundleAnalyzer/index.cjs';
@@ -1,3 +1,4 @@
1
+ export { AssetGroup, AssetManifestOptions, AssetManifestResult, AssetMap, CustomFormatter, ManifestOutputFormat, WebpackEntryAsset, WebpackManifestOutput, assetManifest } from './assetManifest/index.mjs';
1
2
  export { AutoImportOptions, ImportMapping, ResolvedImport, ScannedModule, TransformResult, autoImport } from './autoImport/index.mjs';
2
3
  export { BuildPhase, BuildProgressOptions, ProgressFormat, ProgressTheme, buildProgress } from './buildProgress/index.mjs';
3
4
  export { BundleAnalysisResult, BundleAnalyzerOptions, BundleOutputFormat, ChunkStats, ComparisonDiff, FileTypeDistribution, ModuleStats, SizeWarning, bundleAnalyzer } from './bundleAnalyzer/index.mjs';
@@ -1,3 +1,4 @@
1
+ export { AssetGroup, AssetManifestOptions, AssetManifestResult, AssetMap, CustomFormatter, ManifestOutputFormat, WebpackEntryAsset, WebpackManifestOutput, assetManifest } from './assetManifest/index.js';
1
2
  export { AutoImportOptions, ImportMapping, ResolvedImport, ScannedModule, TransformResult, autoImport } from './autoImport/index.js';
2
3
  export { BuildPhase, BuildProgressOptions, ProgressFormat, ProgressTheme, buildProgress } from './buildProgress/index.js';
3
4
  export { BundleAnalysisResult, BundleAnalyzerOptions, BundleOutputFormat, ChunkStats, ComparisonDiff, FileTypeDistribution, ModuleStats, SizeWarning, bundleAnalyzer } from './bundleAnalyzer/index.js';
@@ -1 +1 @@
1
- export{autoImport}from"./autoImport/index.mjs";export{buildProgress}from"./buildProgress/index.mjs";export{bundleAnalyzer}from"./bundleAnalyzer/index.mjs";export{compressAssets}from"./compressAssets/index.mjs";export{copyFile}from"./copyFile/index.mjs";export{envGuard}from"./envGuard/index.mjs";export{faviconManager}from"./faviconManager/index.mjs";export{generateRouter}from"./generateRouter/index.mjs";export{generateVersion}from"./generateVersion/index.mjs";export{htmlInject}from"./htmlInject/index.mjs";export{loadingManager}from"./loadingManager/index.mjs";export{versionUpdateChecker}from"./versionUpdateChecker/index.mjs";import"../factory/index.mjs";import"../logger/index.mjs";import"../shared/vite-plugin.DcExl6jd.mjs";import"node:fs";import"node:path";import"../common/fs/index.mjs";import"fs";import"path";import"../common/ui/index.mjs";import"node:zlib";import"node:util";import"../common/format/index.mjs";import"node:stream/promises";import"../common/html/index.mjs";import"../shared/vite-plugin.CuXEJAWX.mjs";import"crypto";import"../common/script/index.mjs";import"../common/validation/index.mjs";
1
+ export{assetManifest}from"./assetManifest/index.mjs";export{autoImport}from"./autoImport/index.mjs";export{buildProgress}from"./buildProgress/index.mjs";export{bundleAnalyzer}from"./bundleAnalyzer/index.mjs";export{compressAssets}from"./compressAssets/index.mjs";export{copyFile}from"./copyFile/index.mjs";export{envGuard}from"./envGuard/index.mjs";export{faviconManager}from"./faviconManager/index.mjs";export{generateRouter}from"./generateRouter/index.mjs";export{generateVersion}from"./generateVersion/index.mjs";export{htmlInject}from"./htmlInject/index.mjs";export{loadingManager}from"./loadingManager/index.mjs";export{versionUpdateChecker}from"./versionUpdateChecker/index.mjs";import"node:path";import"node:fs";import"../factory/index.mjs";import"../logger/index.mjs";import"../shared/vite-plugin.DcExl6jd.mjs";import"../common/fs/index.mjs";import"fs";import"path";import"../common/path/index.mjs";import"../common/html/index.mjs";import"../shared/vite-plugin.CuXEJAWX.mjs";import"../common/validation/index.mjs";import"../common/ui/index.mjs";import"node:zlib";import"node:util";import"../common/format/index.mjs";import"node:stream/promises";import"crypto";import"../common/script/index.mjs";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meng-xi/vite-plugin",
3
3
  "type": "module",
4
- "version": "0.1.6",
4
+ "version": "0.1.7",
5
5
  "private": false,
6
6
  "description": "一个为 Vite 提供实用插件的工具包,同时也是一个完整的插件开发框架",
7
7
  "keywords": [
@@ -40,6 +40,11 @@
40
40
  "import": "./dist/common/html/index.mjs",
41
41
  "types": "./dist/common/html/index.d.ts"
42
42
  },
43
+ "./common/path": {
44
+ "require": "./dist/common/path/index.cjs",
45
+ "import": "./dist/common/path/index.mjs",
46
+ "types": "./dist/common/path/index.d.ts"
47
+ },
43
48
  "./common/script": {
44
49
  "require": "./dist/common/script/index.cjs",
45
50
  "import": "./dist/common/script/index.mjs",
@@ -70,6 +75,11 @@
70
75
  "import": "./dist/plugins/index.mjs",
71
76
  "types": "./dist/plugins/index.d.ts"
72
77
  },
78
+ "./plugins/asset-manifest": {
79
+ "require": "./dist/plugins/assetManifest/index.cjs",
80
+ "import": "./dist/plugins/assetManifest/index.mjs",
81
+ "types": "./dist/plugins/assetManifest/index.d.ts"
82
+ },
73
83
  "./plugins/auto-import": {
74
84
  "require": "./dist/plugins/autoImport/index.cjs",
75
85
  "import": "./dist/plugins/autoImport/index.mjs",