@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.
- package/README-en.md +5 -1
- package/README.md +5 -1
- package/dist/common/index.cjs +1 -1
- package/dist/common/index.d.cts +1 -0
- package/dist/common/index.d.mts +1 -0
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.mjs +1 -1
- package/dist/common/path/index.cjs +1 -0
- package/dist/common/path/index.d.cts +103 -0
- package/dist/common/path/index.d.mts +103 -0
- package/dist/common/path/index.d.ts +103 -0
- package/dist/common/path/index.mjs +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +1 -1
- package/dist/plugins/assetManifest/index.cjs +1 -0
- package/dist/plugins/assetManifest/index.d.cts +162 -0
- package/dist/plugins/assetManifest/index.d.mts +162 -0
- package/dist/plugins/assetManifest/index.d.ts +162 -0
- package/dist/plugins/assetManifest/index.mjs +1 -0
- package/dist/plugins/bundleAnalyzer/index.cjs +1 -1
- package/dist/plugins/bundleAnalyzer/index.mjs +2 -2
- package/dist/plugins/compressAssets/index.cjs +1 -1
- package/dist/plugins/compressAssets/index.mjs +1 -1
- package/dist/plugins/htmlInject/index.cjs +7 -7
- package/dist/plugins/htmlInject/index.mjs +2 -2
- package/dist/plugins/index.cjs +1 -1
- package/dist/plugins/index.d.cts +1 -0
- package/dist/plugins/index.d.mts +1 -0
- package/dist/plugins/index.d.ts +1 -0
- package/dist/plugins/index.mjs +1 -1
- package/package.json +11 -1
|
@@ -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
|
|
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
|
|
2
|
-
`+
|
|
3
|
-
`+t.slice(
|
|
4
|
-
`+
|
|
5
|
-
`+t.slice(
|
|
6
|
-
`+t.slice(
|
|
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"),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
|
|
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
|
|
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};
|
package/dist/plugins/index.cjs
CHANGED
|
@@ -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("
|
|
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;
|
package/dist/plugins/index.d.cts
CHANGED
|
@@ -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';
|
package/dist/plugins/index.d.mts
CHANGED
|
@@ -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';
|
package/dist/plugins/index.d.ts
CHANGED
|
@@ -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';
|
package/dist/plugins/index.mjs
CHANGED
|
@@ -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"
|
|
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.
|
|
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",
|