g-ui-web 1.4.38 → 1.4.39
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/lib/g-ui-web.cjs +1 -1
- package/lib/g-ui-web.iife.js +1 -1
- package/lib/g-ui-web.iife.js.gz +0 -0
- package/lib/g-ui-web.js +2 -2
- package/lib/g-ui-web.js.gz +0 -0
- package/lib/g-ui-web.umd.cjs +1 -1
- package/lib/plugins/index.cjs +2 -2
- package/lib/plugins/index.mjs +2 -2
- package/package.json +1 -1
package/lib/g-ui-web.cjs
CHANGED
|
@@ -99,7 +99,7 @@ https://www.w3ctech.com/topic/2226`));let k=x(..._);return k.postcssPlugin=S,k.p
|
|
|
99
99
|
* @vue/compiler-core v3.5.18
|
|
100
100
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
101
101
|
* @license MIT
|
|
102
|
-
**/const hIe={ROOT:0,0:"ROOT",ELEMENT:1,1:"ELEMENT",TEXT:2,2:"TEXT",COMMENT:3,3:"COMMENT",SIMPLE_EXPRESSION:4,4:"SIMPLE_EXPRESSION",INTERPOLATION:5,5:"INTERPOLATION",ATTRIBUTE:6,6:"ATTRIBUTE",DIRECTIVE:7,7:"DIRECTIVE",COMPOUND_EXPRESSION:8,8:"COMPOUND_EXPRESSION",IF:9,9:"IF",IF_BRANCH:10,10:"IF_BRANCH",FOR:11,11:"FOR",TEXT_CALL:12,12:"TEXT_CALL",VNODE_CALL:13,13:"VNODE_CALL",JS_CALL_EXPRESSION:14,14:"JS_CALL_EXPRESSION",JS_OBJECT_EXPRESSION:15,15:"JS_OBJECT_EXPRESSION",JS_PROPERTY:16,16:"JS_PROPERTY",JS_ARRAY_EXPRESSION:17,17:"JS_ARRAY_EXPRESSION",JS_FUNCTION_EXPRESSION:18,18:"JS_FUNCTION_EXPRESSION",JS_CONDITIONAL_EXPRESSION:19,19:"JS_CONDITIONAL_EXPRESSION",JS_CACHE_EXPRESSION:20,20:"JS_CACHE_EXPRESSION",JS_BLOCK_STATEMENT:21,21:"JS_BLOCK_STATEMENT",JS_TEMPLATE_LITERAL:22,22:"JS_TEMPLATE_LITERAL",JS_IF_STATEMENT:23,23:"JS_IF_STATEMENT",JS_ASSIGNMENT_EXPRESSION:24,24:"JS_ASSIGNMENT_EXPRESSION",JS_SEQUENCE_EXPRESSION:25,25:"JS_SEQUENCE_EXPRESSION",JS_RETURN_STATEMENT:26,26:"JS_RETURN_STATEMENT"};new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");function pIe(e={}){const{libraryName:t="",reportUrl:r="",extraData:n={},enableInDev:o=!1}=e,i={componentCount:new Map,fileDetails:new Map,totalImports:0};let s=!1,l=!1;return{name:"vite-plugin-component-usage",enforce:"pre",async buildStart(){await LJ,i.componentCount.clear(),i.fileDetails.clear(),i.totalImports=0},configResolved(c){s=c.command==="build"},transform(c,u){var d;if(!s&&!o||u.includes("node_modules")||!/\.(js|jsx|ts|tsx|vue|svelte)$/.test(u))return null;try{let f=c;if(u.endsWith(".vue")){const p=c.match(/<script[^>]*>([\s\S]*?)<\/script>/);p&&(f=p[1])}const h=[];if(f){const[p]=RJ(f);p.forEach(v=>{if(v.n===t){const m=f.slice(v.ss,v.se),g=m.match(/import\s*\{([^}]+)\}/);g&&g[1].split(",").map(b=>b.trim()).filter(Boolean).map(b=>b.split(/\s+as\s+/)[0].trim()).forEach(b=>{if(b){const S=i.componentCount.get(b)||0;i.componentCount.set(b,S+1),h.push(b),i.totalImports++}});const y=m.match(/import\s+(\w+)\s+from/);if(y&&!m.includes("{")){const C=y[1],b=i.componentCount.get(C)||0;i.componentCount.set(C,b+1),h.push(C),i.totalImports++}}})}if(u.endsWith(".vue")){const{descriptor:p}=jke(c);if((d=p.template)!=null&&d.ast){const v=m=>{var g;if(m.type===hIe.ELEMENT&&((g=m.tag)!=null&&g.startsWith("g-"))){const y=m.tag,C=i.componentCount.get(y)||0;i.componentCount.set(y,C+1),h.push(y),i.totalImports++}Array.isArray(m.children)&&m.children.forEach(v)};p.template.ast.children.forEach(v)}}if(h.length>0){const p=u.replace(process.cwd(),"");i.fileDetails.set(p,h)}}catch(f){console.warn(`[component-usage] 解析文件失败: ${u}`,f.message)}return null},async
|
|
102
|
+
**/const hIe={ROOT:0,0:"ROOT",ELEMENT:1,1:"ELEMENT",TEXT:2,2:"TEXT",COMMENT:3,3:"COMMENT",SIMPLE_EXPRESSION:4,4:"SIMPLE_EXPRESSION",INTERPOLATION:5,5:"INTERPOLATION",ATTRIBUTE:6,6:"ATTRIBUTE",DIRECTIVE:7,7:"DIRECTIVE",COMPOUND_EXPRESSION:8,8:"COMPOUND_EXPRESSION",IF:9,9:"IF",IF_BRANCH:10,10:"IF_BRANCH",FOR:11,11:"FOR",TEXT_CALL:12,12:"TEXT_CALL",VNODE_CALL:13,13:"VNODE_CALL",JS_CALL_EXPRESSION:14,14:"JS_CALL_EXPRESSION",JS_OBJECT_EXPRESSION:15,15:"JS_OBJECT_EXPRESSION",JS_PROPERTY:16,16:"JS_PROPERTY",JS_ARRAY_EXPRESSION:17,17:"JS_ARRAY_EXPRESSION",JS_FUNCTION_EXPRESSION:18,18:"JS_FUNCTION_EXPRESSION",JS_CONDITIONAL_EXPRESSION:19,19:"JS_CONDITIONAL_EXPRESSION",JS_CACHE_EXPRESSION:20,20:"JS_CACHE_EXPRESSION",JS_BLOCK_STATEMENT:21,21:"JS_BLOCK_STATEMENT",JS_TEMPLATE_LITERAL:22,22:"JS_TEMPLATE_LITERAL",JS_IF_STATEMENT:23,23:"JS_IF_STATEMENT",JS_ASSIGNMENT_EXPRESSION:24,24:"JS_ASSIGNMENT_EXPRESSION",JS_SEQUENCE_EXPRESSION:25,25:"JS_SEQUENCE_EXPRESSION",JS_RETURN_STATEMENT:26,26:"JS_RETURN_STATEMENT"};new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");function pIe(e={}){const{libraryName:t="",reportUrl:r="",extraData:n={},enableInDev:o=!1}=e,i={componentCount:new Map,fileDetails:new Map,totalImports:0};let s=!1,l=!1;return{name:"vite-plugin-component-usage",enforce:"pre",async buildStart(){await LJ,i.componentCount.clear(),i.fileDetails.clear(),i.totalImports=0},configResolved(c){s=c.command==="build"},transform(c,u){var d;if(!s&&!o||u.includes("node_modules")||!/\.(js|jsx|ts|tsx|vue|svelte)$/.test(u))return null;try{let f=c;if(u.endsWith(".vue")){const p=c.match(/<script[^>]*>([\s\S]*?)<\/script>/);p&&(f=p[1])}const h=[];if(f){const[p]=RJ(f);p.forEach(v=>{if(v.n===t){const m=f.slice(v.ss,v.se),g=m.match(/import\s*\{([^}]+)\}/);g&&g[1].split(",").map(b=>b.trim()).filter(Boolean).map(b=>b.split(/\s+as\s+/)[0].trim()).forEach(b=>{if(b){const S=i.componentCount.get(b)||0;i.componentCount.set(b,S+1),h.push(b),i.totalImports++}});const y=m.match(/import\s+(\w+)\s+from/);if(y&&!m.includes("{")){const C=y[1],b=i.componentCount.get(C)||0;i.componentCount.set(C,b+1),h.push(C),i.totalImports++}}})}if(u.endsWith(".vue")){const{descriptor:p}=jke(c);if((d=p.template)!=null&&d.ast){const v=m=>{var g;if(m.type===hIe.ELEMENT&&((g=m.tag)!=null&&g.startsWith("g-"))){const y=m.tag,C=i.componentCount.get(y)||0;i.componentCount.set(y,C+1),h.push(y),i.totalImports++}Array.isArray(m.children)&&m.children.forEach(v)};p.template.ast.children.forEach(v)}}if(h.length>0){const p=u.replace(process.cwd(),"");i.fileDetails.set(p,h)}}catch(f){console.warn(`[component-usage] 解析文件失败: ${u}`,f.message)}return null},async closeBundle(){if(!s&&!o||l)return;l=!0;const c={libraryName:t,timestamp:new Date().toISOString(),summary:{totalImports:i.totalImports,uniqueComponents:i.componentCount.size,filesWithImports:i.fileDetails.size},componentCount:Object.fromEntries(i.componentCount),fileDetails:Object.fromEntries(i.fileDetails),topComponents:[...i.componentCount.entries()].sort((u,d)=>d[1]-u[1]).slice(0,20).map(([u,d])=>({name:u,count:d})),...n};if(console.log(`
|
|
103
103
|
📊 组件引用统计:`),console.log(` 组件库: ${t}`),console.log(` 总引用次数: ${c.summary.totalImports}`),console.log(` 使用的组件数: ${c.summary.uniqueComponents}`),console.log(` 涉及文件数: ${c.summary.filesWithImports}`),console.log(`
|
|
104
104
|
Top 10 组件:`),c.topComponents.slice(0,10).forEach((u,d)=>{console.log(` ${d+1}. ${u.name}: ${u.count} 次`)}),r)try{const u=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});u.ok?console.log(`
|
|
105
105
|
✅ 统计数据已发送至: ${r}`):console.warn(`
|
package/lib/g-ui-web.iife.js
CHANGED
|
@@ -99,7 +99,7 @@ https://www.w3ctech.com/topic/2226`));let k=x(..._);return k.postcssPlugin=S,k.p
|
|
|
99
99
|
* @vue/compiler-core v3.5.18
|
|
100
100
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
101
101
|
* @license MIT
|
|
102
|
-
**/const tIe={ROOT:0,0:"ROOT",ELEMENT:1,1:"ELEMENT",TEXT:2,2:"TEXT",COMMENT:3,3:"COMMENT",SIMPLE_EXPRESSION:4,4:"SIMPLE_EXPRESSION",INTERPOLATION:5,5:"INTERPOLATION",ATTRIBUTE:6,6:"ATTRIBUTE",DIRECTIVE:7,7:"DIRECTIVE",COMPOUND_EXPRESSION:8,8:"COMPOUND_EXPRESSION",IF:9,9:"IF",IF_BRANCH:10,10:"IF_BRANCH",FOR:11,11:"FOR",TEXT_CALL:12,12:"TEXT_CALL",VNODE_CALL:13,13:"VNODE_CALL",JS_CALL_EXPRESSION:14,14:"JS_CALL_EXPRESSION",JS_OBJECT_EXPRESSION:15,15:"JS_OBJECT_EXPRESSION",JS_PROPERTY:16,16:"JS_PROPERTY",JS_ARRAY_EXPRESSION:17,17:"JS_ARRAY_EXPRESSION",JS_FUNCTION_EXPRESSION:18,18:"JS_FUNCTION_EXPRESSION",JS_CONDITIONAL_EXPRESSION:19,19:"JS_CONDITIONAL_EXPRESSION",JS_CACHE_EXPRESSION:20,20:"JS_CACHE_EXPRESSION",JS_BLOCK_STATEMENT:21,21:"JS_BLOCK_STATEMENT",JS_TEMPLATE_LITERAL:22,22:"JS_TEMPLATE_LITERAL",JS_IF_STATEMENT:23,23:"JS_IF_STATEMENT",JS_ASSIGNMENT_EXPRESSION:24,24:"JS_ASSIGNMENT_EXPRESSION",JS_SEQUENCE_EXPRESSION:25,25:"JS_SEQUENCE_EXPRESSION",JS_RETURN_STATEMENT:26,26:"JS_RETURN_STATEMENT"};new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");function rIe(e={}){const{libraryName:t="",reportUrl:r="",extraData:n={},enableInDev:o=!1}=e,i={componentCount:new Map,fileDetails:new Map,totalImports:0};let s=!1,l=!1;return{name:"vite-plugin-component-usage",enforce:"pre",async buildStart(){await a8,i.componentCount.clear(),i.fileDetails.clear(),i.totalImports=0},configResolved(c){s=c.command==="build"},transform(c,u){var d;if(!s&&!o||u.includes("node_modules")||!/\.(js|jsx|ts|tsx|vue|svelte)$/.test(u))return null;try{let f=c;if(u.endsWith(".vue")){const p=c.match(/<script[^>]*>([\s\S]*?)<\/script>/);p&&(f=p[1])}const h=[];if(f){const[p]=n8(f);p.forEach(m=>{if(m.n===t){const g=f.slice(m.ss,m.se),y=g.match(/import\s*\{([^}]+)\}/);y&&y[1].split(",").map(b=>b.trim()).filter(Boolean).map(b=>b.split(/\s+as\s+/)[0].trim()).forEach(b=>{if(b){const S=i.componentCount.get(b)||0;i.componentCount.set(b,S+1),h.push(b),i.totalImports++}});const v=g.match(/import\s+(\w+)\s+from/);if(v&&!g.includes("{")){const C=v[1],b=i.componentCount.get(C)||0;i.componentCount.set(C,b+1),h.push(C),i.totalImports++}}})}if(u.endsWith(".vue")){const{descriptor:p}=Bke(c);if((d=p.template)!=null&&d.ast){const m=g=>{var y;if(g.type===tIe.ELEMENT&&((y=g.tag)!=null&&y.startsWith("g-"))){const v=g.tag,C=i.componentCount.get(v)||0;i.componentCount.set(v,C+1),h.push(v),i.totalImports++}Array.isArray(g.children)&&g.children.forEach(m)};p.template.ast.children.forEach(m)}}if(h.length>0){const p=u.replace(process.cwd(),"");i.fileDetails.set(p,h)}}catch(f){console.warn(`[component-usage] 解析文件失败: ${u}`,f.message)}return null},async
|
|
102
|
+
**/const tIe={ROOT:0,0:"ROOT",ELEMENT:1,1:"ELEMENT",TEXT:2,2:"TEXT",COMMENT:3,3:"COMMENT",SIMPLE_EXPRESSION:4,4:"SIMPLE_EXPRESSION",INTERPOLATION:5,5:"INTERPOLATION",ATTRIBUTE:6,6:"ATTRIBUTE",DIRECTIVE:7,7:"DIRECTIVE",COMPOUND_EXPRESSION:8,8:"COMPOUND_EXPRESSION",IF:9,9:"IF",IF_BRANCH:10,10:"IF_BRANCH",FOR:11,11:"FOR",TEXT_CALL:12,12:"TEXT_CALL",VNODE_CALL:13,13:"VNODE_CALL",JS_CALL_EXPRESSION:14,14:"JS_CALL_EXPRESSION",JS_OBJECT_EXPRESSION:15,15:"JS_OBJECT_EXPRESSION",JS_PROPERTY:16,16:"JS_PROPERTY",JS_ARRAY_EXPRESSION:17,17:"JS_ARRAY_EXPRESSION",JS_FUNCTION_EXPRESSION:18,18:"JS_FUNCTION_EXPRESSION",JS_CONDITIONAL_EXPRESSION:19,19:"JS_CONDITIONAL_EXPRESSION",JS_CACHE_EXPRESSION:20,20:"JS_CACHE_EXPRESSION",JS_BLOCK_STATEMENT:21,21:"JS_BLOCK_STATEMENT",JS_TEMPLATE_LITERAL:22,22:"JS_TEMPLATE_LITERAL",JS_IF_STATEMENT:23,23:"JS_IF_STATEMENT",JS_ASSIGNMENT_EXPRESSION:24,24:"JS_ASSIGNMENT_EXPRESSION",JS_SEQUENCE_EXPRESSION:25,25:"JS_SEQUENCE_EXPRESSION",JS_RETURN_STATEMENT:26,26:"JS_RETURN_STATEMENT"};new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");function rIe(e={}){const{libraryName:t="",reportUrl:r="",extraData:n={},enableInDev:o=!1}=e,i={componentCount:new Map,fileDetails:new Map,totalImports:0};let s=!1,l=!1;return{name:"vite-plugin-component-usage",enforce:"pre",async buildStart(){await a8,i.componentCount.clear(),i.fileDetails.clear(),i.totalImports=0},configResolved(c){s=c.command==="build"},transform(c,u){var d;if(!s&&!o||u.includes("node_modules")||!/\.(js|jsx|ts|tsx|vue|svelte)$/.test(u))return null;try{let f=c;if(u.endsWith(".vue")){const p=c.match(/<script[^>]*>([\s\S]*?)<\/script>/);p&&(f=p[1])}const h=[];if(f){const[p]=n8(f);p.forEach(m=>{if(m.n===t){const g=f.slice(m.ss,m.se),y=g.match(/import\s*\{([^}]+)\}/);y&&y[1].split(",").map(b=>b.trim()).filter(Boolean).map(b=>b.split(/\s+as\s+/)[0].trim()).forEach(b=>{if(b){const S=i.componentCount.get(b)||0;i.componentCount.set(b,S+1),h.push(b),i.totalImports++}});const v=g.match(/import\s+(\w+)\s+from/);if(v&&!g.includes("{")){const C=v[1],b=i.componentCount.get(C)||0;i.componentCount.set(C,b+1),h.push(C),i.totalImports++}}})}if(u.endsWith(".vue")){const{descriptor:p}=Bke(c);if((d=p.template)!=null&&d.ast){const m=g=>{var y;if(g.type===tIe.ELEMENT&&((y=g.tag)!=null&&y.startsWith("g-"))){const v=g.tag,C=i.componentCount.get(v)||0;i.componentCount.set(v,C+1),h.push(v),i.totalImports++}Array.isArray(g.children)&&g.children.forEach(m)};p.template.ast.children.forEach(m)}}if(h.length>0){const p=u.replace(process.cwd(),"");i.fileDetails.set(p,h)}}catch(f){console.warn(`[component-usage] 解析文件失败: ${u}`,f.message)}return null},async closeBundle(){if(!s&&!o||l)return;l=!0;const c={libraryName:t,timestamp:new Date().toISOString(),summary:{totalImports:i.totalImports,uniqueComponents:i.componentCount.size,filesWithImports:i.fileDetails.size},componentCount:Object.fromEntries(i.componentCount),fileDetails:Object.fromEntries(i.fileDetails),topComponents:[...i.componentCount.entries()].sort((u,d)=>d[1]-u[1]).slice(0,20).map(([u,d])=>({name:u,count:d})),...n};if(console.log(`
|
|
103
103
|
📊 组件引用统计:`),console.log(` 组件库: ${t}`),console.log(` 总引用次数: ${c.summary.totalImports}`),console.log(` 使用的组件数: ${c.summary.uniqueComponents}`),console.log(` 涉及文件数: ${c.summary.filesWithImports}`),console.log(`
|
|
104
104
|
Top 10 组件:`),c.topComponents.slice(0,10).forEach((u,d)=>{console.log(` ${d+1}. ${u.name}: ${u.count} 次`)}),r)try{const u=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});u.ok?console.log(`
|
|
105
105
|
✅ 统计数据已发送至: ${r}`):console.warn(`
|
package/lib/g-ui-web.iife.js.gz
CHANGED
|
Binary file
|
package/lib/g-ui-web.js
CHANGED
|
@@ -24479,8 +24479,8 @@ function Z5t(e = {}) {
|
|
|
24479
24479
|
}
|
|
24480
24480
|
return null;
|
|
24481
24481
|
},
|
|
24482
|
-
//
|
|
24483
|
-
async
|
|
24482
|
+
// 整个构建完全结束后再统计和上报,确保所有文件都已处理
|
|
24483
|
+
async closeBundle() {
|
|
24484
24484
|
if (!o && !a || s) return;
|
|
24485
24485
|
s = !0;
|
|
24486
24486
|
const l = {
|
package/lib/g-ui-web.js.gz
CHANGED
|
Binary file
|
package/lib/g-ui-web.umd.cjs
CHANGED
|
@@ -99,7 +99,7 @@ https://www.w3ctech.com/topic/2226`));let k=x(..._);return k.postcssPlugin=S,k.p
|
|
|
99
99
|
* @vue/compiler-core v3.5.18
|
|
100
100
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
101
101
|
* @license MIT
|
|
102
|
-
**/const eIe={ROOT:0,0:"ROOT",ELEMENT:1,1:"ELEMENT",TEXT:2,2:"TEXT",COMMENT:3,3:"COMMENT",SIMPLE_EXPRESSION:4,4:"SIMPLE_EXPRESSION",INTERPOLATION:5,5:"INTERPOLATION",ATTRIBUTE:6,6:"ATTRIBUTE",DIRECTIVE:7,7:"DIRECTIVE",COMPOUND_EXPRESSION:8,8:"COMPOUND_EXPRESSION",IF:9,9:"IF",IF_BRANCH:10,10:"IF_BRANCH",FOR:11,11:"FOR",TEXT_CALL:12,12:"TEXT_CALL",VNODE_CALL:13,13:"VNODE_CALL",JS_CALL_EXPRESSION:14,14:"JS_CALL_EXPRESSION",JS_OBJECT_EXPRESSION:15,15:"JS_OBJECT_EXPRESSION",JS_PROPERTY:16,16:"JS_PROPERTY",JS_ARRAY_EXPRESSION:17,17:"JS_ARRAY_EXPRESSION",JS_FUNCTION_EXPRESSION:18,18:"JS_FUNCTION_EXPRESSION",JS_CONDITIONAL_EXPRESSION:19,19:"JS_CONDITIONAL_EXPRESSION",JS_CACHE_EXPRESSION:20,20:"JS_CACHE_EXPRESSION",JS_BLOCK_STATEMENT:21,21:"JS_BLOCK_STATEMENT",JS_TEMPLATE_LITERAL:22,22:"JS_TEMPLATE_LITERAL",JS_IF_STATEMENT:23,23:"JS_IF_STATEMENT",JS_ASSIGNMENT_EXPRESSION:24,24:"JS_ASSIGNMENT_EXPRESSION",JS_SEQUENCE_EXPRESSION:25,25:"JS_SEQUENCE_EXPRESSION",JS_RETURN_STATEMENT:26,26:"JS_RETURN_STATEMENT"};new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");function tIe(e={}){const{libraryName:t="",reportUrl:r="",extraData:n={},enableInDev:o=!1}=e,i={componentCount:new Map,fileDetails:new Map,totalImports:0};let s=!1,l=!1;return{name:"vite-plugin-component-usage",enforce:"pre",async buildStart(){await a8,i.componentCount.clear(),i.fileDetails.clear(),i.totalImports=0},configResolved(c){s=c.command==="build"},transform(c,u){var d;if(!s&&!o||u.includes("node_modules")||!/\.(js|jsx|ts|tsx|vue|svelte)$/.test(u))return null;try{let f=c;if(u.endsWith(".vue")){const p=c.match(/<script[^>]*>([\s\S]*?)<\/script>/);p&&(f=p[1])}const h=[];if(f){const[p]=n8(f);p.forEach(m=>{if(m.n===t){const g=f.slice(m.ss,m.se),y=g.match(/import\s*\{([^}]+)\}/);y&&y[1].split(",").map(b=>b.trim()).filter(Boolean).map(b=>b.split(/\s+as\s+/)[0].trim()).forEach(b=>{if(b){const S=i.componentCount.get(b)||0;i.componentCount.set(b,S+1),h.push(b),i.totalImports++}});const v=g.match(/import\s+(\w+)\s+from/);if(v&&!g.includes("{")){const C=v[1],b=i.componentCount.get(C)||0;i.componentCount.set(C,b+1),h.push(C),i.totalImports++}}})}if(u.endsWith(".vue")){const{descriptor:p}=Pke(c);if((d=p.template)!=null&&d.ast){const m=g=>{var y;if(g.type===eIe.ELEMENT&&((y=g.tag)!=null&&y.startsWith("g-"))){const v=g.tag,C=i.componentCount.get(v)||0;i.componentCount.set(v,C+1),h.push(v),i.totalImports++}Array.isArray(g.children)&&g.children.forEach(m)};p.template.ast.children.forEach(m)}}if(h.length>0){const p=u.replace(process.cwd(),"");i.fileDetails.set(p,h)}}catch(f){console.warn(`[component-usage] 解析文件失败: ${u}`,f.message)}return null},async
|
|
102
|
+
**/const eIe={ROOT:0,0:"ROOT",ELEMENT:1,1:"ELEMENT",TEXT:2,2:"TEXT",COMMENT:3,3:"COMMENT",SIMPLE_EXPRESSION:4,4:"SIMPLE_EXPRESSION",INTERPOLATION:5,5:"INTERPOLATION",ATTRIBUTE:6,6:"ATTRIBUTE",DIRECTIVE:7,7:"DIRECTIVE",COMPOUND_EXPRESSION:8,8:"COMPOUND_EXPRESSION",IF:9,9:"IF",IF_BRANCH:10,10:"IF_BRANCH",FOR:11,11:"FOR",TEXT_CALL:12,12:"TEXT_CALL",VNODE_CALL:13,13:"VNODE_CALL",JS_CALL_EXPRESSION:14,14:"JS_CALL_EXPRESSION",JS_OBJECT_EXPRESSION:15,15:"JS_OBJECT_EXPRESSION",JS_PROPERTY:16,16:"JS_PROPERTY",JS_ARRAY_EXPRESSION:17,17:"JS_ARRAY_EXPRESSION",JS_FUNCTION_EXPRESSION:18,18:"JS_FUNCTION_EXPRESSION",JS_CONDITIONAL_EXPRESSION:19,19:"JS_CONDITIONAL_EXPRESSION",JS_CACHE_EXPRESSION:20,20:"JS_CACHE_EXPRESSION",JS_BLOCK_STATEMENT:21,21:"JS_BLOCK_STATEMENT",JS_TEMPLATE_LITERAL:22,22:"JS_TEMPLATE_LITERAL",JS_IF_STATEMENT:23,23:"JS_IF_STATEMENT",JS_ASSIGNMENT_EXPRESSION:24,24:"JS_ASSIGNMENT_EXPRESSION",JS_SEQUENCE_EXPRESSION:25,25:"JS_SEQUENCE_EXPRESSION",JS_RETURN_STATEMENT:26,26:"JS_RETURN_STATEMENT"};new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");function tIe(e={}){const{libraryName:t="",reportUrl:r="",extraData:n={},enableInDev:o=!1}=e,i={componentCount:new Map,fileDetails:new Map,totalImports:0};let s=!1,l=!1;return{name:"vite-plugin-component-usage",enforce:"pre",async buildStart(){await a8,i.componentCount.clear(),i.fileDetails.clear(),i.totalImports=0},configResolved(c){s=c.command==="build"},transform(c,u){var d;if(!s&&!o||u.includes("node_modules")||!/\.(js|jsx|ts|tsx|vue|svelte)$/.test(u))return null;try{let f=c;if(u.endsWith(".vue")){const p=c.match(/<script[^>]*>([\s\S]*?)<\/script>/);p&&(f=p[1])}const h=[];if(f){const[p]=n8(f);p.forEach(m=>{if(m.n===t){const g=f.slice(m.ss,m.se),y=g.match(/import\s*\{([^}]+)\}/);y&&y[1].split(",").map(b=>b.trim()).filter(Boolean).map(b=>b.split(/\s+as\s+/)[0].trim()).forEach(b=>{if(b){const S=i.componentCount.get(b)||0;i.componentCount.set(b,S+1),h.push(b),i.totalImports++}});const v=g.match(/import\s+(\w+)\s+from/);if(v&&!g.includes("{")){const C=v[1],b=i.componentCount.get(C)||0;i.componentCount.set(C,b+1),h.push(C),i.totalImports++}}})}if(u.endsWith(".vue")){const{descriptor:p}=Pke(c);if((d=p.template)!=null&&d.ast){const m=g=>{var y;if(g.type===eIe.ELEMENT&&((y=g.tag)!=null&&y.startsWith("g-"))){const v=g.tag,C=i.componentCount.get(v)||0;i.componentCount.set(v,C+1),h.push(v),i.totalImports++}Array.isArray(g.children)&&g.children.forEach(m)};p.template.ast.children.forEach(m)}}if(h.length>0){const p=u.replace(process.cwd(),"");i.fileDetails.set(p,h)}}catch(f){console.warn(`[component-usage] 解析文件失败: ${u}`,f.message)}return null},async closeBundle(){if(!s&&!o||l)return;l=!0;const c={libraryName:t,timestamp:new Date().toISOString(),summary:{totalImports:i.totalImports,uniqueComponents:i.componentCount.size,filesWithImports:i.fileDetails.size},componentCount:Object.fromEntries(i.componentCount),fileDetails:Object.fromEntries(i.fileDetails),topComponents:[...i.componentCount.entries()].sort((u,d)=>d[1]-u[1]).slice(0,20).map(([u,d])=>({name:u,count:d})),...n};if(console.log(`
|
|
103
103
|
📊 组件引用统计:`),console.log(` 组件库: ${t}`),console.log(` 总引用次数: ${c.summary.totalImports}`),console.log(` 使用的组件数: ${c.summary.uniqueComponents}`),console.log(` 涉及文件数: ${c.summary.filesWithImports}`),console.log(`
|
|
104
104
|
Top 10 组件:`),c.topComponents.slice(0,10).forEach((u,d)=>{console.log(` ${d+1}. ${u.name}: ${u.count} 次`)}),r)try{const u=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});u.ok?console.log(`
|
|
105
105
|
✅ 统计数据已发送至: ${r}`):console.warn(`
|
package/lib/plugins/index.cjs
CHANGED
|
@@ -189,8 +189,8 @@ function componentUsagePlugin(options = {}) {
|
|
|
189
189
|
}
|
|
190
190
|
return null;
|
|
191
191
|
},
|
|
192
|
-
//
|
|
193
|
-
async
|
|
192
|
+
// 整个构建完全结束后再统计和上报,确保所有文件都已处理
|
|
193
|
+
async closeBundle() {
|
|
194
194
|
if (!isBuild && !enableInDev) return;
|
|
195
195
|
if (hasReported) return;
|
|
196
196
|
hasReported = true;
|
package/lib/plugins/index.mjs
CHANGED
|
@@ -163,8 +163,8 @@ function componentUsagePlugin(options = {}) {
|
|
|
163
163
|
}
|
|
164
164
|
return null;
|
|
165
165
|
},
|
|
166
|
-
//
|
|
167
|
-
async
|
|
166
|
+
// 整个构建完全结束后再统计和上报,确保所有文件都已处理
|
|
167
|
+
async closeBundle() {
|
|
168
168
|
if (!isBuild && !enableInDev) return;
|
|
169
169
|
if (hasReported) return;
|
|
170
170
|
hasReported = true;
|