fast-vite-plugins 1.0.16 → 1.0.17

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/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var M=Object.create;var $=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var L=(t,n)=>{for(var e in n)$(t,e,{get:n[e],enumerable:!0})},D=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of b(n))!R.call(t,o)&&o!==e&&$(t,o,{get:()=>n[o],enumerable:!(i=O(n,o))||i.enumerable});return t};var g=(t,n,e)=>(e=t!=null?M(J(t)):{},D(n||!t||!t.__esModule?$(e,"default",{value:t,enumerable:!0}):e,t)),B=t=>D($({},"__esModule",{value:!0}),t);var K={};L(K,{buildSvgIcon:()=>H,cdnImport:()=>Y,cdnJsDelivrUrl:()=>I,cdnUnpkgUrl:()=>V,findSvgFile:()=>w,tsxComponentAutoImport:()=>Z,versionUpdatePlugin:()=>q,vueComponentAutoImport:()=>G,writeTSXIcon:()=>T});module.exports=B(K);var h=g(require("fs"),1),d=g(require("path"),1),w=t=>{let n=[];return h.default.readdirSync(t,{withFileTypes:!0}).forEach(i=>{if(i.isDirectory())n.push(...w(d.default.join(t,i.name)));else{let o=i.name.replace(".svg",""),p=h.default.readFileSync(d.default.join(t,i.name),"utf-8").replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").trimStart().trimEnd().replace(/<svg([^>+].*?)>/,(c,m)=>{let s=m.match(/viewBox="[^"]+"/),r=m.match(/width="(\d+)"/),a=m.match(/height="(\d+)"/),l=1024,u=1024;r&&(l=r[0]),a&&(u=a[0]);let f="";return s?f=s[0]:f=`viewBox="0 0 ${l} ${u}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${f}>`});n.push({iconName:o,componentName:o.charAt(0).toUpperCase()+o.slice(1),iconContent:p})}}),n.sort((i,o)=>i.iconName<o.iconName?-1:i.iconName>o.iconName?1:0)},T=(t,n,e)=>{h.default.mkdirSync(n,{recursive:!0});let i=`import { defineComponent } from "vue";
1
+ "use strict";var V=Object.create;var T=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var q=(t,e)=>{for(var o in e)T(t,o,{get:e[o],enumerable:!0})},R=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Y(e))!X.call(t,s)&&s!==o&&T(t,s,{get:()=>e[s],enumerable:!(r=z(e,s))||r.enumerable});return t};var w=(t,e,o)=>(o=t!=null?V(Z(t)):{},R(e||!t||!t.__esModule?T(o,"default",{value:t,enumerable:!0}):o,t)),K=t=>R(T({},"__esModule",{value:!0}),t);var pt={};q(pt,{buildSvgIcon:()=>Q,cdnImport:()=>st,cdnJsDelivrUrl:()=>G,cdnUnpkgUrl:()=>ot,componentAutoImport:()=>it,findSvgFile:()=>U,versionUpdatePlugin:()=>at,writeTSXIcon:()=>O});module.exports=K(pt);var b=w(require("fs"),1),D=w(require("path"),1),U=t=>{let e=[];return b.default.readdirSync(t,{withFileTypes:!0}).forEach(r=>{if(r.isDirectory())e.push(...U(D.default.join(t,r.name)));else{let s=r.name.replace(".svg",""),f=b.default.readFileSync(D.default.join(t,r.name),"utf-8").replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").trimStart().trimEnd().replace(/<svg([^>+].*?)>/,(p,u)=>{let i=u.match(/viewBox="[^"]+"/),v=u.match(/width="(\d+)"/),l=u.match(/height="(\d+)"/),C=1024,h=1024;v&&(C=v[0]),l&&(h=l[0]);let S="";return i?S=i[0]:S=`viewBox="0 0 ${C} ${h}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${S}>`});e.push({iconName:s,componentName:s.charAt(0).toUpperCase()+s.slice(1),iconContent:f})}}),e.sort((r,s)=>r.iconName<s.iconName?-1:r.iconName>s.iconName?1:0)},O=(t,e,o)=>{b.default.mkdirSync(e,{recursive:!0});let r=`import { defineComponent } from "vue";
2
2
 
3
3
  /**
4
4
  * ${t} \u56FE\u6807\u7EC4\u4EF6
@@ -7,40 +7,26 @@ export const ${t} = defineComponent({
7
7
  name: "${t}",
8
8
  render() {
9
9
  return (
10
- ${e.split(`
11
- `).map(o=>` ${o}`).join(`
10
+ ${o.split(`
11
+ `).map(s=>` ${s}`).join(`
12
12
  `)}
13
13
  );
14
14
  },
15
15
  });
16
16
 
17
17
  export default ${t};
18
- `;h.default.writeFileSync(d.default.join(n,"index.tsx"),i)};function H(t,n){if(!t||!n)return;let e;return{name:"fast-vite-plugin-build-svg-icon",configResolved:i=>{e=i},buildStart(){let i=w(d.default.resolve(e.root,t)),o=d.default.resolve(e.root,n);h.default.mkdirSync(o,{recursive:!0});let p="",c="",m="";i.forEach((s,r)=>{T(s.componentName,d.default.join(o,s.iconName),s.iconContent),p+=`import { ${s.componentName} } from "./${s.iconName}";
19
- `,c+=` ${s.componentName},`,m+=`export * from "./${s.iconName}";
20
- `,r+1<i.length&&(c+=`
21
- `)}),h.default.writeFileSync(d.default.join(o,"index.ts"),`import type { DefineComponent } from "vue";
22
- ${p}
23
- ${m}
24
- export default [
25
- ${c}
26
- ] as unknown as DefineComponent[];
27
- `)}}}var N=g(require("fs"),1),A=g(require("path"),1),U=g(require("rollup-plugin-external-globals"),1),j=require("vite-plugin-externals"),W=process.env.NODE_ENV==="development";function _(t){let n=process.cwd(),e=A.default.join(n,"node_modules",t,"package.json");return N.default.existsSync(e)?JSON.parse(N.default.readFileSync(e,"utf8")).version:""}function E(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function k(t,n){let{path:e}=n;return E(e)&&(t=e),t.replace(/\{name\}/g,n.name).replace(/\{version\}/g,n.version).replace(/\{path\}/g,e)}function z(t,n){n=t.prodUrl||n;let e=t,i=t.version||_(e.name),o=[];Array.isArray(e.path)?o=e.path:o.push(e.path);let p={...e,version:i};o=o.map(s=>{if(!i&&!E(s))throw new Error(`modules: ${p.name} package.json file does not exist`);return k(n,{name:p.name,version:p.version,path:s})});let c=e.css||[];!Array.isArray(c)&&c&&(c=[c]);let m=Array.isArray(c)?c.map(s=>k(n,{name:p.name,version:p.version,path:s})):[];return{...e,version:i,pathList:o,cssList:m}}var I="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",V="https://unpkg.com/{package}@{version}/{path}";function Y(t){let{modules:n=[],prodUrl:e=I,enableInDevMode:i=!1,generateCssLinkTag:o,generateScriptTag:p}=t,c=!1,m=(Array.isArray(n)?n:[n]).map(a=>typeof a=="function"?a(e):a).map(a=>z(a,e)),s={};m.forEach(a=>{s[a.name]=a.var,Array.isArray(a.alias)&&a.alias.forEach(l=>{s[l]=a.var})});let r=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(a,{command:l}){c=l==="build";let u={build:{rollupOptions:{plugins:[]}}};return c&&(u.build.rollupOptions.plugins=[(0,U.default)(s)]),u},transformIndexHtml(a){if(!c&&!i)return a;let l=[];return m.forEach(u=>{u.pathList.forEach(f=>{let C=p?.(u.name,f)||{},S={src:f,crossorigin:"anonymous",...u?.attrs??{},...C.attrs};l.push({tag:"script",attrs:S,...C})}),u.cssList.forEach(f=>{let C=o?.(u.name,f)||{},S={href:f,rel:"stylesheet",crossorigin:"anonymous",...u?.attrs??{},...C.attrs};l.push({tag:"link",attrs:S,...C})})}),l}}];return W&&i&&r.push((0,j.viteExternalsPlugin)(s,{enforce:"pre"})),r}var x=g(require("fs"),1),P=g(require("path"),1);function Z(t){if(t)return{name:"fast-vite-plugin-tsx-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=r=>r.charAt(0).toUpperCase()+r.slice(1),i=typeof t=="string"?e:t.formatter??e,o=x.default.readdirSync(n,{withFileTypes:!0});if(o?.length===0)return;let p=o.filter(r=>r.name!=="index.ts").map(r=>({componentName:i(r.name),fileName:r.name})).sort((r,a)=>r.componentName<a.componentName?-1:r.componentName>a.componentName?1:0),c="",m="",s="";p.forEach(({componentName:r,fileName:a},l)=>{c+=`import { ${r} } from "./${a}";
28
- `,m+=`export * from "./${a}";
29
- `,s+=` ${r},`,l+1<p.length&&(s+=`
30
- `)}),x.default.writeFileSync(P.default.join(n,"index.ts"),`import type { Plugin } from "vue";
31
- ${c}
32
- ${m}
33
- export default [
34
- ${s}
35
- ] as Plugin[];
36
- `)}}}function G(t){if(t)return{name:"fast-vite-plugin-vue-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=r=>r.charAt(0).toUpperCase()+r.slice(1),i=typeof t=="string"?e:t.formatter??e,o=x.default.readdirSync(n,{withFileTypes:!0});if(o?.length===0)return;let p=o.filter(r=>r.name!=="index.ts").map(r=>({componentName:i(r.name),fileName:r.name})).sort((r,a)=>r.componentName<a.componentName?-1:r.componentName>a.componentName?1:0),c="",m="",s="";p.forEach(({componentName:r,fileName:a},l)=>{c+=`import ${r} from "./${a}/index.vue";
37
- `,m+=`export * from "./${a}/index.vue";
38
- `,s+=` ${r},`,l+1<p.length&&(s+=`
39
- `)}),x.default.writeFileSync(P.default.join(n,"index.ts"),`import type { DefineComponent } from "vue";
40
- ${c}
41
- ${m}
18
+ `;b.default.writeFileSync(D.default.join(e,"index.tsx"),r)};function Q(t,e){if(!t||!e)return;let o;return{name:"fast-vite-plugin-build-svg-icon",configResolved:r=>{o=r},buildStart(){let r=U(D.default.resolve(o.root,t)),s=D.default.resolve(o.root,e);b.default.mkdirSync(s,{recursive:!0});let f="",p="",u="";r.forEach((i,v)=>{O(i.componentName,D.default.join(s,i.iconName),i.iconContent),f+=`import { ${i.componentName} } from "./${i.iconName}";
19
+ `,p+=` ${i.componentName},`,u+=`export * from "./${i.iconName}";
20
+ `,v+1<r.length&&(p+=`
21
+ `)}),b.default.writeFileSync(D.default.join(s,"index.ts"),`import type { DefineComponent } from "vue";
22
+ ${f}
23
+ ${u}
42
24
  export default [
43
- ${s}
25
+ ${p}
44
26
  ] as unknown as DefineComponent[];
45
- `)}}}var v=g(require("fs"),1),F=g(require("path"),1);function y(t,n=2){return t.toString().padStart(n,"0")}function X(t){let n=t.getUTCFullYear(),e=y(t.getUTCMonth()+1),i=y(t.getUTCDate()),o=y(t.getUTCHours()),p=y(t.getUTCMinutes()),c=y(t.getUTCSeconds()),m=y(t.getUTCMilliseconds(),3);return`Z ${n}-${e}-${i} ${o}:${p}:${c}.${m}`}function q(t){let n;return{name:"fast-vite-plugin-version-update",configResolved:e=>{n=e},buildStart(){let i=X(new Date),o=n.publicDir,p=F.default.join(o,"version.json");v.default.existsSync(o)||v.default.mkdirSync(o);let c=JSON.stringify({version:`v${t}`,dateTime:i},null,4);v.default.writeFileSync(p,c);let m=F.default.join(n.base,"package.json");if(v.default.existsSync(m)){let s=JSON.parse(v.default.readFileSync(m,"utf-8"));s.version=t,v.default.writeFileSync(m,JSON.stringify(s,null,2),"utf-8")}}}}0&&(module.exports={buildSvgIcon,cdnImport,cdnJsDelivrUrl,cdnUnpkgUrl,findSvgFile,tsxComponentAutoImport,versionUpdatePlugin,vueComponentAutoImport,writeTSXIcon});
27
+ `)}}}var M=w(require("fs"),1),J=w(require("path"),1),L=w(require("rollup-plugin-external-globals"),1),_=require("vite-plugin-externals"),tt=process.env.NODE_ENV==="development";function et(t){let e=process.cwd(),o=J.default.join(e,"node_modules",t,"package.json");return M.default.existsSync(o)?JSON.parse(M.default.readFileSync(o,"utf8")).version:""}function B(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function W(t,e){let{path:o}=e;return B(o)&&(t=o),t.replace(/\{name\}/g,e.name).replace(/\{version\}/g,e.version).replace(/\{path\}/g,o)}function nt(t,e){e=t.prodUrl||e;let o=t,r=t.version||et(o.name),s=[];Array.isArray(o.path)?s=o.path:s.push(o.path);let f={...o,version:r};s=s.map(i=>{if(!r&&!B(i))throw new Error(`modules: ${f.name} package.json file does not exist`);return W(e,{name:f.name,version:f.version,path:i})});let p=o.css||[];!Array.isArray(p)&&p&&(p=[p]);let u=Array.isArray(p)?p.map(i=>W(e,{name:f.name,version:f.version,path:i})):[];return{...o,version:r,pathList:s,cssList:u}}var G="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",ot="https://unpkg.com/{package}@{version}/{path}";function st(t){let{modules:e=[],prodUrl:o=G,enableInDevMode:r=!1,generateCssLinkTag:s,generateScriptTag:f}=t,p=!1,u=(Array.isArray(e)?e:[e]).map(l=>typeof l=="function"?l(o):l).map(l=>nt(l,o)),i={};u.forEach(l=>{i[l.name]=l.var,Array.isArray(l.alias)&&l.alias.forEach(C=>{i[C]=l.var})});let v=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(l,{command:C}){p=C==="build";let h={build:{rollupOptions:{plugins:[]}}};return p&&(h.build.rollupOptions.plugins=[(0,L.default)(i)]),h},transformIndexHtml(l){if(!p&&!r)return l;let C=[];return u.forEach(h=>{h.pathList.forEach(S=>{let P=f?.(h.name,S)||{},N={src:S,crossorigin:"anonymous",...h?.attrs??{},...P.attrs};C.push({tag:"script",attrs:N,...P})}),h.cssList.forEach(S=>{let P=s?.(h.name,S)||{},N={href:S,rel:"stylesheet",crossorigin:"anonymous",...h?.attrs??{},...P.attrs};C.push({tag:"link",attrs:N,...P})})}),C}}];return tt&&r&&v.push((0,_.viteExternalsPlugin)(i,{enforce:"pre"})),v}var y=w(require("fs"),1),x=w(require("path"),1);function H(t){return t.replace(/\\/g,"/")}function rt(t){return t.replace(/[-_](\w)/g,(e,o)=>o?o.toUpperCase():"").replace(/^\w/,e=>e.toUpperCase())}function it(t={}){let{dir:e="src/components",exportPath:o="src/components/index.ts",dts:r=!0,dtsPath:s="types/component.d.ts",deep:f=!0,extensions:p=["vue","tsx","jsx"],formatter:u}=t,i,v=new Map,l=null,C=m=>{let c=m;for(let a of p)if(c.endsWith(`.${a}`)){c=c.slice(0,-a.length-1);break}if(c.endsWith("/index")||c.endsWith("\\index")){let a=c.split(/[\\/]/);c=a[a.length-2]||a[a.length-1]}else{let a=c.split(/[\\/]/);c=a[a.length-1]}return u?u(c):rt(c)},h=(m,c=0)=>{let a=[];if(!y.default.existsSync(m))return a;let n=y.default.readdirSync(m,{withFileTypes:!0});for(let g of n){let j=x.default.join(m,g.name);if(g.isDirectory()){if(g.name==="node_modules"||g.name.startsWith(". "))continue;(f||c===0)&&a.push(...h(j,c+1))}else if(g.isFile()){let d=x.default.extname(g.name).slice(1);p.includes(d)&&a.push(j)}}return a},S=()=>{v.clear();let m=x.default.resolve(i.root,e);if(!y.default.existsSync(m)){console.warn(`[component-auto-import] Directory not found: ${m}`);return}h(m).forEach(a=>{let n=x.default.relative(m,a),g=C(n);v.set(g,{name:g,from:a})})},P=()=>{if(v.size===0)return;let m=Array.from(v.values()).sort((d,F)=>d.name.localeCompare(F.name)),c=x.default.resolve(i.root,o),a=x.default.dirname(c),n=[];n.push("/* eslint-disable */"),n.push("/* prettier-ignore */"),n.push("// @ts-nocheck"),n.push("// Auto-generated by fast component-auto-import"),n.push("// Generated by fast-vite-plugins"),n.push("// Do not edit this file manually"),n.push(""),n.push('import type { App } from "vue";'),n.push(""),m.forEach(({name:d,from:F})=>{let $=H(x.default.relative(a,F)),E=$.startsWith(".")?$:`./${$}`;n.push(`import ${d} from "${E}";`),n.push(`export { ${d} };`),n.push(`export type ${d}Instance = InstanceType<typeof ${d}>;`)}),n.push(""),n.push("/** \u81EA\u52A8\u6CE8\u518C\u6240\u6709\u7EC4\u4EF6 */"),n.push("export function registerComponents(app: App): void {"),m.forEach(({name:d})=>{n.push(` app.component(${d}.name, ${d});`)}),n.push("}"),n.push("");let g=`${n.join(`
28
+ `)}
29
+ `,j=y.default.existsSync(c)?y.default.readFileSync(c,"utf-8"):"";g!==j&&y.default.writeFileSync(c,g,"utf-8")},N=()=>{if(!r||v.size===0)return;let m=Array.from(v.values()).sort((d,F)=>d.name.localeCompare(F.name)),c=x.default.resolve(i.root,s),a=x.default.dirname(c),n=[];n.push("// For this project development"),n.push("// Auto-generated by fast component-auto-import"),n.push("// Generated by fast-vite-plugins"),n.push("// Do not edit this file manually"),n.push(""),n.push('import "@vue/runtime-core";'),n.push(""),n.push("// GlobalComponents for Volar"),n.push('declare module "@vue/runtime-core" {'),n.push(" export interface GlobalComponents {"),m.forEach(({name:d,from:F})=>{let $=H(x.default.relative(a,F));$=$.replace(/\.(vue|tsx|jsx)$/,"");let E=$.startsWith(".")?$:`./${$}`;n.push(` ${d}: (typeof import("${E}"))["default"];`)}),n.push(" }"),n.push("}"),n.push(""),n.push("export {};");let g=`${n.join(`
30
+ `)}
31
+ `;y.default.existsSync(a)||y.default.mkdirSync(a,{recursive:!0});let j=y.default.existsSync(c)?y.default.readFileSync(c,"utf-8"):"";g!==j&&y.default.writeFileSync(c,g,"utf-8")};return{name:"fast-vite-plugin-component-auto-import",enforce:"post",configResolved:m=>{i=m},buildStart(){S(),P(),N()},configureServer(m){let c=x.default.resolve(i.root,e);y.default.existsSync(c)&&(l=y.default.watch(c,{recursive:!0},(a,n)=>{if(!n||n.endsWith(".d.ts"))return;let g=x.default.extname(n).slice(1);p.includes(g)&&(S(),P(),N(),m.ws.send({type:"full-reload",path:"*"}))}))},buildEnd(){l&&(l.close(),l=null)}}}var A=w(require("fs"),1),I=w(require("path"),1);function k(t,e=2){return t.toString().padStart(e,"0")}function ct(t){let e=t.getUTCFullYear(),o=k(t.getUTCMonth()+1),r=k(t.getUTCDate()),s=k(t.getUTCHours()),f=k(t.getUTCMinutes()),p=k(t.getUTCSeconds()),u=k(t.getUTCMilliseconds(),3);return`Z ${e}-${o}-${r} ${s}:${f}:${p}.${u}`}function at(t){let e;return{name:"fast-vite-plugin-version-update",configResolved:o=>{e=o},buildStart(){let r=ct(new Date),s=e.publicDir,f=I.default.join(s,"version.json");A.default.existsSync(s)||A.default.mkdirSync(s);let p=JSON.stringify({version:`v${t}`,dateTime:r},null,4);A.default.writeFileSync(f,p);let u=I.default.join(e.base,"package.json");if(A.default.existsSync(u)){let i=JSON.parse(A.default.readFileSync(u,"utf-8"));i.version=t,A.default.writeFileSync(u,JSON.stringify(i,null,2),"utf-8")}}}}0&&(module.exports={buildSvgIcon,cdnImport,cdnJsDelivrUrl,cdnUnpkgUrl,componentAutoImport,findSvgFile,versionUpdatePlugin,writeTSXIcon});
46
32
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/buildSvgIcon/index.ts","../../src/cdnImport/index.ts","../../src/componentAutoImport/index.ts","../../src/versionUpdate/index.ts"],"sourcesContent":["export * from \"./buildSvgIcon\";\nexport * from \"./cdnImport\";\nexport * from \"./cdnImport/type\";\nexport * from \"./componentAutoImport\";\nexport * from \"./componentAutoImport/type\";\nexport * from \"./versionUpdate\";\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\n\nconst findSvgFile = (dir: string): { iconName: string; componentName: string; iconContent: string }[] => {\n\t// svg 内容\n\tconst svgContents: { iconName: string; componentName: string; iconContent: string }[] = [];\n\t// 获取当前目录下的文件\n\tconst svgFiles = fs.readdirSync(dir, {\n\t\twithFileTypes: true,\n\t});\n\n\tsvgFiles.forEach((file) => {\n\t\tif (file.isDirectory()) {\n\t\t\tsvgContents.push(...findSvgFile(path.join(dir, file.name)));\n\t\t} else {\n\t\t\tconst iconName = file.name.replace(\".svg\", \"\");\n\n\t\t\tconst svgContent = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name), \"utf-8\")\n\t\t\t\t.replace(/<\\?xml.*?\\?>/, \"\")\n\t\t\t\t.replace(/<!DOCTYPE svg.*?>/, \"\")\n\t\t\t\t// .replace(/(\\r)|(\\n)/g, \"\")\n\t\t\t\t.trimStart()\n\t\t\t\t.trimEnd()\n\t\t\t\t// .replace(/(fill=\"[^>+].*?\")/g, 'fill=\"\"')\n\t\t\t\t.replace(/<svg([^>+].*?)>/, (match, attr) => {\n\t\t\t\t\tconst viewBoxMatch = attr.match(/viewBox=\"[^\"]+\"/);\n\t\t\t\t\tconst widthMatch = attr.match(/width=\"(\\d+)\"/);\n\t\t\t\t\tconst heightMatch = attr.match(/height=\"(\\d+)\"/);\n\t\t\t\t\tlet width = 1024;\n\t\t\t\t\tlet height = 1024;\n\t\t\t\t\tif (widthMatch) {\n\t\t\t\t\t\twidth = widthMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (heightMatch) {\n\t\t\t\t\t\theight = heightMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet viewBoxContent = \"\";\n\t\t\t\t\tif (!viewBoxMatch) {\n\t\t\t\t\t\tviewBoxContent = `viewBox=\"0 0 ${width} ${height}\"`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tviewBoxContent = viewBoxMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" ${viewBoxContent}>`;\n\t\t\t\t});\n\n\t\t\tsvgContents.push({\n\t\t\t\t// iconName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonName,\n\t\t\t\tcomponentName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgContent,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn svgContents.sort((a, b) => {\n\t\tif (a.iconName < b.iconName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.iconName > b.iconName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n};\n\n/**\n * 写入 TSX 图标\n */\nconst writeTSXIcon = (componentName: string, iconDir: string, svgContent: string): void => {\n\tfs.mkdirSync(iconDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\trender() {\n\t\treturn (\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.tsx\"), componentContent);\n};\n\n/**\n * 构建 svg 图标组件\n * @param dir svg 文件路径\n * @param writeDir 写入的文件路径 相对的即可\n */\nfunction buildSvgIcon(dir: string, writeDir: string): Plugin {\n\tif (!dir || !writeDir) return;\n\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-build-svg-icon\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst svgFiles = findSvgFile(path.resolve(config.root, dir));\n\n\t\t\tconst iconsPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(iconsPath, { recursive: true });\n\n\t\t\tlet iconImportContent = \"\";\n\t\t\tlet iconTypeContent = \"\";\n\t\t\tlet exportContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.componentName, path.join(iconsPath, svg.iconName), svg.iconContent);\n\n\t\t\t\ticonImportContent += `import { ${svg.componentName} } from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ticonTypeContent += `\t${svg.componentName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ticonTypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${iconImportContent}\n${exportContent}\nexport default [\n${iconTypeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { findSvgFile, writeTSXIcon, buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * get npm module version\n * @param name\n * @returns\n */\nfunction getModuleVersion(name: string): string {\n\tconst pwd = process.cwd();\n\tconst pkgFile = path.join(pwd, \"node_modules\", name, \"package.json\");\n\tif (fs.existsSync(pkgFile)) {\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgFile, \"utf8\"));\n\t\treturn pkgJson.version;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * 是否完整的 url\n * @param path\n * @returns\n */\nfunction isFullPath(path: string): boolean {\n\treturn path.startsWith(\"http:\") || path.startsWith(\"https:\") || path.startsWith(\"//\") ? true : false;\n}\n\nfunction renderUrl(\n\turl: string,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tpath: string;\n\t}\n): string {\n\tconst { path } = data;\n\tif (isFullPath(path)) {\n\t\turl = path;\n\t}\n\treturn url\n\t\t.replace(/\\{name\\}/g, data.name)\n\t\t.replace(/\\{version\\}/g, data.version)\n\t\t.replace(/\\{path\\}/g, path);\n}\n\nfunction getModuleInfo(module: Module, prodUrl: string): Module & { pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst version = module.version || getModuleVersion(v.name);\n\tlet pathList: string[] = [];\n\tif (!Array.isArray(v.path)) {\n\t\tpathList.push(v.path);\n\t} else {\n\t\tpathList = v.path;\n\t}\n\n\tconst data = {\n\t\t...v,\n\t\tversion,\n\t};\n\n\tpathList = pathList.map((p) => {\n\t\tif (!version && !isFullPath(p)) {\n\t\t\tthrow new Error(`modules: ${data.name} package.json file does not exist`);\n\t\t}\n\t\treturn renderUrl(prodUrl, {\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tpath: p,\n\t\t});\n\t});\n\n\tlet css = v.css || [];\n\tif (!Array.isArray(css) && css) {\n\t\tcss = [css];\n\t}\n\n\tconst cssList = !Array.isArray(css)\n\t\t? []\n\t\t: css.map((c) =>\n\t\t\t\trenderUrl(prodUrl, {\n\t\t\t\t\tname: data.name,\n\t\t\t\t\tversion: data.version,\n\t\t\t\t\tpath: c,\n\t\t\t\t})\n\t\t\t);\n\n\treturn {\n\t\t...v,\n\t\tversion,\n\t\tpathList,\n\t\tcssList,\n\t};\n}\n\nconst cdnJsDelivrUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\";\nconst cdnUnpkgUrl = \"https://unpkg.com/{package}@{version}/{path}\";\n\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = cdnJsDelivrUrl, enableInDevMode = false, generateCssLinkTag, generateScriptTag } = options;\n\n\tlet isBuild = false;\n\n\tconst data = (Array.isArray(modules) ? modules : [modules])\n\t\t.map((v) => (typeof v === \"function\" ? v(prodUrl) : v))\n\t\t.map((v) => getModuleInfo(v, prodUrl));\n\n\tconst externalMap: {\n\t\t[name: string]: string;\n\t} = {};\n\n\tdata.forEach((v) => {\n\t\texternalMap[v.name] = v.var;\n\t\tif (Array.isArray(v.alias)) {\n\t\t\tv.alias.forEach((alias) => {\n\t\t\t\texternalMap[alias] = v.var;\n\t\t\t});\n\t\t}\n\t});\n\n\tconst plugins: Plugin[] = [\n\t\t{\n\t\t\tname: \"fast-vite-plugin-cdn-import\",\n\t\t\tenforce: \"pre\",\n\t\t\tconfig(_, { command }): UserConfig {\n\t\t\t\tisBuild = command === \"build\";\n\n\t\t\t\tconst userConfig: UserConfig = {\n\t\t\t\t\tbuild: {\n\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\tplugins: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tif (isBuild) {\n\t\t\t\t\tuserConfig.build.rollupOptions.plugins = [externalGlobals(externalMap)];\n\t\t\t\t}\n\n\t\t\t\treturn userConfig;\n\t\t\t},\n\t\t\ttransformIndexHtml(html): string | HtmlTagDescriptor[] {\n\t\t\t\tif (!isBuild && !enableInDevMode) {\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\n\t\t\t\tconst descriptors: HtmlTagDescriptor[] = [];\n\n\t\t\t\tdata.forEach((v) => {\n\t\t\t\t\tv.pathList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateScriptTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"script\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateCssLinkTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\thref: url,\n\t\t\t\t\t\t\trel: \"stylesheet\",\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"link\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn descriptors;\n\t\t\t},\n\t\t},\n\t];\n\n\tif (isDev && enableInDevMode) {\n\t\tplugins.push(\n\t\t\tviteExternalsPlugin(externalMap, {\n\t\t\t\tenforce: \"pre\",\n\t\t\t})\n\t\t);\n\t}\n\n\treturn plugins;\n}\n\nexport { cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { AutoImportOptions } from \"./type\";\nimport type { Plugin } from \"vite\";\n\n/**\n * TSX组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction tsxComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-tsx-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import { ${componentName} } from \"./${fileName}\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { Plugin } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as Plugin[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * VUE组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction vueComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-vue-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import ${componentName} from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { tsxComponentAutoImport, vueComponentAutoImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nfunction padZero(num: number, length = 2): string {\n\treturn num.toString().padStart(length, \"0\");\n}\n\nfunction formatDate(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = padZero(date.getUTCMonth() + 1);\n\tconst day = padZero(date.getUTCDate());\n\tconst hours = padZero(date.getUTCHours());\n\tconst minutes = padZero(date.getUTCMinutes());\n\tconst seconds = padZero(date.getUTCSeconds());\n\tconst milliseconds = padZero(date.getUTCMilliseconds(), 3);\n\n\treturn `Z ${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\n/**\n * 版本更新插件\n * @param version 不要携带 'v',示例:1.0.0\n * @returns\n */\nfunction versionUpdatePlugin(version: string): Plugin {\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-version-update\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst curDate = new Date();\n\n\t\t\tconst dateTime = formatDate(curDate);\n\n\t\t\tconst versionDir = config.publicDir;\n\t\t\tconst versionPath = path.join(versionDir, \"version.json\");\n\t\t\tif (!fs.existsSync(versionDir)) {\n\t\t\t\tfs.mkdirSync(versionDir);\n\t\t\t}\n\n\t\t\t// 写入版本信息文件\n\t\t\tconst content = JSON.stringify({ version: `v${version}`, dateTime }, null, 4);\n\t\t\tfs.writeFileSync(versionPath, content);\n\n\t\t\tconst pkgPath = path.join(config.base, \"package.json\");\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n\t\t\t\tpkgJson.version = version;\n\t\t\t\tfs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { versionUpdatePlugin };\n"],"mappings":"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","names":["index_exports","__export","buildSvgIcon","cdnImport","cdnJsDelivrUrl","cdnUnpkgUrl","findSvgFile","tsxComponentAutoImport","versionUpdatePlugin","vueComponentAutoImport","writeTSXIcon","__toCommonJS","import_fs","import_path","findSvgFile","dir","svgContents","fs","file","path","iconName","svgContent","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTSXIcon","componentName","iconDir","componentContent","line","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","svg","idx","import_fs","import_path","import_rollup_plugin_external_globals","import_vite_plugin_externals","isDev","getModuleVersion","name","pwd","pkgFile","path","fs","isFullPath","renderUrl","url","data","getModuleInfo","module","prodUrl","v","version","pathList","p","css","cssList","c","cdnJsDelivrUrl","cdnUnpkgUrl","cdnImport","options","modules","enableInDevMode","generateCssLinkTag","generateScriptTag","isBuild","externalMap","alias","plugins","_","command","userConfig","externalGlobals","html","descriptors","cusomize","attrs","import_fs","import_path","tsxComponentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","fs","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","path","vueComponentAutoImport","import_fs","import_path","padZero","num","length","formatDate","date","year","month","day","hours","minutes","seconds","milliseconds","versionUpdatePlugin","version","config","resolvedConfig","dateTime","versionDir","versionPath","path","fs","content","pkgPath","pkgJson"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/buildSvgIcon/index.ts","../../src/cdnImport/index.ts","../../src/componentAutoImport/index.ts","../../src/versionUpdate/index.ts"],"sourcesContent":["export * from \"./buildSvgIcon\";\nexport * from \"./cdnImport\";\nexport * from \"./cdnImport/type\";\nexport * from \"./componentAutoImport\";\nexport * from \"./componentAutoImport/type\";\nexport * from \"./versionUpdate\";\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\n\nconst findSvgFile = (dir: string): { iconName: string; componentName: string; iconContent: string }[] => {\n\t// svg 内容\n\tconst svgContents: { iconName: string; componentName: string; iconContent: string }[] = [];\n\t// 获取当前目录下的文件\n\tconst svgFiles = fs.readdirSync(dir, {\n\t\twithFileTypes: true,\n\t});\n\n\tsvgFiles.forEach((file) => {\n\t\tif (file.isDirectory()) {\n\t\t\tsvgContents.push(...findSvgFile(path.join(dir, file.name)));\n\t\t} else {\n\t\t\tconst iconName = file.name.replace(\".svg\", \"\");\n\n\t\t\tconst svgContent = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name), \"utf-8\")\n\t\t\t\t.replace(/<\\?xml.*?\\?>/, \"\")\n\t\t\t\t.replace(/<!DOCTYPE svg.*?>/, \"\")\n\t\t\t\t// .replace(/(\\r)|(\\n)/g, \"\")\n\t\t\t\t.trimStart()\n\t\t\t\t.trimEnd()\n\t\t\t\t// .replace(/(fill=\"[^>+].*?\")/g, 'fill=\"\"')\n\t\t\t\t.replace(/<svg([^>+].*?)>/, (match, attr) => {\n\t\t\t\t\tconst viewBoxMatch = attr.match(/viewBox=\"[^\"]+\"/);\n\t\t\t\t\tconst widthMatch = attr.match(/width=\"(\\d+)\"/);\n\t\t\t\t\tconst heightMatch = attr.match(/height=\"(\\d+)\"/);\n\t\t\t\t\tlet width = 1024;\n\t\t\t\t\tlet height = 1024;\n\t\t\t\t\tif (widthMatch) {\n\t\t\t\t\t\twidth = widthMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (heightMatch) {\n\t\t\t\t\t\theight = heightMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet viewBoxContent = \"\";\n\t\t\t\t\tif (!viewBoxMatch) {\n\t\t\t\t\t\tviewBoxContent = `viewBox=\"0 0 ${width} ${height}\"`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tviewBoxContent = viewBoxMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" ${viewBoxContent}>`;\n\t\t\t\t});\n\n\t\t\tsvgContents.push({\n\t\t\t\t// iconName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonName,\n\t\t\t\tcomponentName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgContent,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn svgContents.sort((a, b) => {\n\t\tif (a.iconName < b.iconName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.iconName > b.iconName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n};\n\n/**\n * 写入 TSX 图标\n */\nconst writeTSXIcon = (componentName: string, iconDir: string, svgContent: string): void => {\n\tfs.mkdirSync(iconDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\trender() {\n\t\treturn (\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.tsx\"), componentContent);\n};\n\n/**\n * 构建 svg 图标组件\n * @param dir svg 文件路径\n * @param writeDir 写入的文件路径 相对的即可\n */\nfunction buildSvgIcon(dir: string, writeDir: string): Plugin {\n\tif (!dir || !writeDir) return;\n\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-build-svg-icon\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst svgFiles = findSvgFile(path.resolve(config.root, dir));\n\n\t\t\tconst iconsPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(iconsPath, { recursive: true });\n\n\t\t\tlet iconImportContent = \"\";\n\t\t\tlet iconTypeContent = \"\";\n\t\t\tlet exportContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.componentName, path.join(iconsPath, svg.iconName), svg.iconContent);\n\n\t\t\t\ticonImportContent += `import { ${svg.componentName} } from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ticonTypeContent += `\t${svg.componentName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ticonTypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${iconImportContent}\n${exportContent}\nexport default [\n${iconTypeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { findSvgFile, writeTSXIcon, buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * get npm module version\n * @param name\n * @returns\n */\nfunction getModuleVersion(name: string): string {\n\tconst pwd = process.cwd();\n\tconst pkgFile = path.join(pwd, \"node_modules\", name, \"package.json\");\n\tif (fs.existsSync(pkgFile)) {\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgFile, \"utf8\"));\n\t\treturn pkgJson.version;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * 是否完整的 url\n * @param path\n * @returns\n */\nfunction isFullPath(path: string): boolean {\n\treturn path.startsWith(\"http:\") || path.startsWith(\"https:\") || path.startsWith(\"//\") ? true : false;\n}\n\nfunction renderUrl(\n\turl: string,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tpath: string;\n\t}\n): string {\n\tconst { path } = data;\n\tif (isFullPath(path)) {\n\t\turl = path;\n\t}\n\treturn url\n\t\t.replace(/\\{name\\}/g, data.name)\n\t\t.replace(/\\{version\\}/g, data.version)\n\t\t.replace(/\\{path\\}/g, path);\n}\n\nfunction getModuleInfo(module: Module, prodUrl: string): Module & { pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst version = module.version || getModuleVersion(v.name);\n\tlet pathList: string[] = [];\n\tif (!Array.isArray(v.path)) {\n\t\tpathList.push(v.path);\n\t} else {\n\t\tpathList = v.path;\n\t}\n\n\tconst data = {\n\t\t...v,\n\t\tversion,\n\t};\n\n\tpathList = pathList.map((p) => {\n\t\tif (!version && !isFullPath(p)) {\n\t\t\tthrow new Error(`modules: ${data.name} package.json file does not exist`);\n\t\t}\n\t\treturn renderUrl(prodUrl, {\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tpath: p,\n\t\t});\n\t});\n\n\tlet css = v.css || [];\n\tif (!Array.isArray(css) && css) {\n\t\tcss = [css];\n\t}\n\n\tconst cssList = !Array.isArray(css)\n\t\t? []\n\t\t: css.map((c) =>\n\t\t\t\trenderUrl(prodUrl, {\n\t\t\t\t\tname: data.name,\n\t\t\t\t\tversion: data.version,\n\t\t\t\t\tpath: c,\n\t\t\t\t})\n\t\t\t);\n\n\treturn {\n\t\t...v,\n\t\tversion,\n\t\tpathList,\n\t\tcssList,\n\t};\n}\n\nconst cdnJsDelivrUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\";\nconst cdnUnpkgUrl = \"https://unpkg.com/{package}@{version}/{path}\";\n\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = cdnJsDelivrUrl, enableInDevMode = false, generateCssLinkTag, generateScriptTag } = options;\n\n\tlet isBuild = false;\n\n\tconst data = (Array.isArray(modules) ? modules : [modules])\n\t\t.map((v) => (typeof v === \"function\" ? v(prodUrl) : v))\n\t\t.map((v) => getModuleInfo(v, prodUrl));\n\n\tconst externalMap: {\n\t\t[name: string]: string;\n\t} = {};\n\n\tdata.forEach((v) => {\n\t\texternalMap[v.name] = v.var;\n\t\tif (Array.isArray(v.alias)) {\n\t\t\tv.alias.forEach((alias) => {\n\t\t\t\texternalMap[alias] = v.var;\n\t\t\t});\n\t\t}\n\t});\n\n\tconst plugins: Plugin[] = [\n\t\t{\n\t\t\tname: \"fast-vite-plugin-cdn-import\",\n\t\t\tenforce: \"pre\",\n\t\t\tconfig(_, { command }): UserConfig {\n\t\t\t\tisBuild = command === \"build\";\n\n\t\t\t\tconst userConfig: UserConfig = {\n\t\t\t\t\tbuild: {\n\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\tplugins: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tif (isBuild) {\n\t\t\t\t\tuserConfig.build.rollupOptions.plugins = [externalGlobals(externalMap)];\n\t\t\t\t}\n\n\t\t\t\treturn userConfig;\n\t\t\t},\n\t\t\ttransformIndexHtml(html): string | HtmlTagDescriptor[] {\n\t\t\t\tif (!isBuild && !enableInDevMode) {\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\n\t\t\t\tconst descriptors: HtmlTagDescriptor[] = [];\n\n\t\t\t\tdata.forEach((v) => {\n\t\t\t\t\tv.pathList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateScriptTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"script\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateCssLinkTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\thref: url,\n\t\t\t\t\t\t\trel: \"stylesheet\",\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"link\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn descriptors;\n\t\t\t},\n\t\t},\n\t];\n\n\tif (isDev && enableInDevMode) {\n\t\tplugins.push(\n\t\t\tviteExternalsPlugin(externalMap, {\n\t\t\t\tenforce: \"pre\",\n\t\t\t})\n\t\t);\n\t}\n\n\treturn plugins;\n}\n\nexport { cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { AutoImportOptions } from \"./type\";\nimport type { Plugin, ResolvedConfig, ViteDevServer } from \"vite\";\n\n/**\n * 将路径转换为 Unix 风格\n */\nfunction slash(path: string): string {\n\treturn path.replace(/\\\\/g, \"/\");\n}\n\n/**\n * Pascal Case 转换\n */\nfunction pascalCase(str: string): string {\n\treturn str.replace(/[-_](\\w)/g, (_, c) => (c ? c.toUpperCase() : \"\")).replace(/^\\w/, (c) => c.toUpperCase());\n}\n\n/**\n * 组件自动导入\n * @param options 选项\n */\nfunction componentAutoImport(options: AutoImportOptions = {}): Plugin {\n\tconst {\n\t\tdir = \"src/components\",\n\t\texportPath = \"src/components/index.ts\",\n\t\tdts = true,\n\t\tdtsPath = \"types/component.d.ts\",\n\t\tdeep = true,\n\t\textensions = [\"vue\", \"tsx\", \"jsx\"],\n\t\tformatter,\n\t} = options;\n\n\tlet config: ResolvedConfig;\n\tconst componentMap = new Map<\n\t\tstring,\n\t\t{\n\t\t\t/** 组件名称 (PascalCase) */\n\t\t\tname: string;\n\t\t\t/** 组件文件路径 (绝对路径) */\n\t\t\tfrom: string;\n\t\t}\n\t>();\n\tlet watcher: fs.FSWatcher | null = null;\n\n\t/** 从文件路径获取组件名 */\n\tconst getNameFromPath = (filePath: string): string => {\n\t\t// 移除扩展名\n\t\tlet name = filePath;\n\t\tfor (const ext of extensions) {\n\t\t\tif (name.endsWith(`.${ext}`)) {\n\t\t\t\tname = name.slice(0, -ext.length - 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// 如果是 index 文件,使用父目录名\n\t\tif (name.endsWith(\"/index\") || name.endsWith(\"\\\\index\")) {\n\t\t\tconst parts = name.split(/[\\\\/]/);\n\t\t\tname = parts[parts.length - 2] || parts[parts.length - 1];\n\t\t} else {\n\t\t\tconst parts = name.split(/[\\\\/]/);\n\t\t\tname = parts[parts.length - 1];\n\t\t}\n\n\t\tif (formatter) {\n\t\t\treturn formatter(name);\n\t\t} else {\n\t\t\treturn pascalCase(name);\n\t\t}\n\t};\n\n\t/** 递归扫描目录 */\n\tconst scanDirectory = (dirPath: string, depth = 0): string[] => {\n\t\tconst files: string[] = [];\n\n\t\tif (!fs.existsSync(dirPath)) {\n\t\t\treturn files;\n\t\t}\n\n\t\tconst entries = fs.readdirSync(dirPath, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = path.join(dirPath, entry.name);\n\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\t// 跳过 node_modules 等\n\t\t\t\tif (entry.name === \"node_modules\" || entry.name.startsWith(\". \")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// 深度扫描\n\t\t\t\tif (deep || depth === 0) {\n\t\t\t\t\tfiles.push(...scanDirectory(fullPath, depth + 1));\n\t\t\t\t}\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\t// 检查文件扩展名\n\t\t\t\tconst ext = path.extname(entry.name).slice(1);\n\t\t\t\tif (extensions.includes(ext)) {\n\t\t\t\t\tfiles.push(fullPath);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn files;\n\t};\n\n\t/** 扫描组件文件 */\n\tconst scanComponents = (): void => {\n\t\tcomponentMap.clear();\n\n\t\tconst fullDir = path.resolve(config.root, dir);\n\n\t\tif (!fs.existsSync(fullDir)) {\n\t\t\tconsole.warn(`[component-auto-import] Directory not found: ${fullDir}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst files = scanDirectory(fullDir);\n\n\t\tfiles.forEach((absolutePath) => {\n\t\t\tconst relativePath = path.relative(fullDir, absolutePath);\n\t\t\tconst componentName = getNameFromPath(relativePath);\n\n\t\t\tcomponentMap.set(componentName, {\n\t\t\t\tname: componentName,\n\t\t\t\tfrom: absolutePath,\n\t\t\t});\n\t\t});\n\t};\n\n\t/** 生成自动注册文件 */\n\tconst generateAutoRegister = (): void => {\n\t\tif (componentMap.size === 0) return;\n\n\t\tconst components = Array.from(componentMap.values()).sort((a, b) => a.name.localeCompare(b.name));\n\n\t\tconst registerFilePath = path.resolve(config.root, exportPath);\n\t\tconst componentDir = path.dirname(registerFilePath);\n\n\t\tconst lines: string[] = [];\n\t\tlines.push(\"/* eslint-disable */\");\n\t\tlines.push(\"/* prettier-ignore */\");\n\t\tlines.push(\"// @ts-nocheck\");\n\t\tlines.push(\"// Auto-generated by fast component-auto-import\");\n\t\tlines.push(\"// Generated by fast-vite-plugins\");\n\t\tlines.push(\"// Do not edit this file manually\");\n\t\tlines.push(\"\");\n\t\tlines.push('import type { App } from \"vue\";');\n\t\tlines.push(\"\");\n\n\t\t// 生成 import 语句\n\t\tcomponents.forEach(({ name, from }) => {\n\t\t\tconst relativePath = slash(path.relative(componentDir, from));\n\t\t\tconst importPath = relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n\t\t\tlines.push(`import ${name} from \"${importPath}\";`);\n\t\t\tlines.push(`export { ${name} };`);\n\t\t\tlines.push(`export type ${name}Instance = InstanceType<typeof ${name}>;`);\n\t\t});\n\n\t\tlines.push(\"\");\n\t\tlines.push(\"/** 自动注册所有组件 */\");\n\t\tlines.push(\"export function registerComponents(app: App): void {\");\n\n\t\tcomponents.forEach(({ name }) => {\n\t\t\tlines.push(`\tapp.component(${name}.name, ${name});`);\n\t\t});\n\n\t\tlines.push(\"}\");\n\t\tlines.push(\"\");\n\n\t\tconst code = `${lines.join(\"\\n\")}\\n`;\n\n\t\tconst existingCode = fs.existsSync(registerFilePath) ? fs.readFileSync(registerFilePath, \"utf-8\") : \"\";\n\n\t\tif (code !== existingCode) {\n\t\t\tfs.writeFileSync(registerFilePath, code, \"utf-8\");\n\t\t}\n\t};\n\n\t/** 生成类型声明文件 */\n\tconst generateDts = (): void => {\n\t\tif (!dts || componentMap.size === 0) return;\n\n\t\tconst components = Array.from(componentMap.values()).sort((a, b) => a.name.localeCompare(b.name));\n\n\t\tconst dtsFullPath = path.resolve(config.root, dtsPath);\n\t\tconst dtsDir = path.dirname(dtsFullPath);\n\n\t\t// 生成类型声明内容\n\t\tconst lines: string[] = [];\n\t\tlines.push(\"// For this project development\");\n\t\tlines.push(\"// Auto-generated by fast component-auto-import\");\n\t\tlines.push(\"// Generated by fast-vite-plugins\");\n\t\tlines.push(\"// Do not edit this file manually\");\n\t\tlines.push(\"\");\n\t\tlines.push('import \"@vue/runtime-core\";');\n\t\tlines.push(\"\");\n\t\tlines.push(\"// GlobalComponents for Volar\");\n\t\tlines.push('declare module \"@vue/runtime-core\" {');\n\t\tlines.push(\"\texport interface GlobalComponents {\");\n\n\t\tcomponents.forEach(({ name, from }) => {\n\t\t\t// 计算相对路径\n\t\t\tlet relativePath = slash(path.relative(dtsDir, from));\n\n\t\t\t// 移除文件扩展名\n\t\t\trelativePath = relativePath.replace(/\\.(vue|tsx|jsx)$/, \"\");\n\n\t\t\t// 确保以 ./ 开头\n\t\t\tconst importPath = relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n\n\t\t\tlines.push(`\t\t${name}: (typeof import(\"${importPath}\"))[\"default\"];`);\n\t\t});\n\n\t\tlines.push(\"\t}\");\n\t\tlines.push(\"}\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"export {};\");\n\n\t\tconst code = `${lines.join(\"\\n\")}\\n`;\n\n\t\t// 确保目录存在\n\t\tif (!fs.existsSync(dtsDir)) {\n\t\t\tfs.mkdirSync(dtsDir, { recursive: true });\n\t\t}\n\n\t\t// 只有内容变化时才写入\n\t\tconst existingCode = fs.existsSync(dtsFullPath) ? fs.readFileSync(dtsFullPath, \"utf-8\") : \"\";\n\n\t\tif (code !== existingCode) {\n\t\t\tfs.writeFileSync(dtsFullPath, code, \"utf-8\");\n\t\t}\n\t};\n\n\treturn {\n\t\tname: \"fast-vite-plugin-component-auto-import\",\n\t\tenforce: \"post\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tscanComponents();\n\t\t\tgenerateAutoRegister();\n\t\t\tgenerateDts();\n\t\t},\n\t\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n\t\tconfigureServer(server: ViteDevServer) {\n\t\t\tconst fullDir = path.resolve(config.root, dir);\n\n\t\t\t// 监听文件变化\n\t\t\tif (fs.existsSync(fullDir)) {\n\t\t\t\twatcher = fs.watch(fullDir, { recursive: true }, (eventType, filename) => {\n\t\t\t\t\tif (!filename) return;\n\t\t\t\t\t// 忽略 .d.ts 文件\n\t\t\t\t\tif (filename.endsWith(\".d.ts\")) return;\n\n\t\t\t\t\t// 检查是否是组件文件\n\t\t\t\t\tconst ext = path.extname(filename).slice(1);\n\t\t\t\t\tif (!extensions.includes(ext)) return;\n\n\t\t\t\t\tscanComponents();\n\t\t\t\t\tgenerateAutoRegister();\n\t\t\t\t\tgenerateDts();\n\n\t\t\t\t\t// 通知客户端刷新\n\t\t\t\t\tserver.ws.send({ type: \"full-reload\", path: \"*\" });\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tbuildEnd(): void | Promise<void> {\n\t\t\t// 关闭监听器\n\t\t\tif (watcher) {\n\t\t\t\twatcher.close();\n\t\t\t\twatcher = null;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { componentAutoImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nfunction padZero(num: number, length = 2): string {\n\treturn num.toString().padStart(length, \"0\");\n}\n\nfunction formatDate(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = padZero(date.getUTCMonth() + 1);\n\tconst day = padZero(date.getUTCDate());\n\tconst hours = padZero(date.getUTCHours());\n\tconst minutes = padZero(date.getUTCMinutes());\n\tconst seconds = padZero(date.getUTCSeconds());\n\tconst milliseconds = padZero(date.getUTCMilliseconds(), 3);\n\n\treturn `Z ${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\n/**\n * 版本更新插件\n * @param version 不要携带 'v',示例:1.0.0\n * @returns\n */\nfunction versionUpdatePlugin(version: string): Plugin {\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-version-update\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst curDate = new Date();\n\n\t\t\tconst dateTime = formatDate(curDate);\n\n\t\t\tconst versionDir = config.publicDir;\n\t\t\tconst versionPath = path.join(versionDir, \"version.json\");\n\t\t\tif (!fs.existsSync(versionDir)) {\n\t\t\t\tfs.mkdirSync(versionDir);\n\t\t\t}\n\n\t\t\t// 写入版本信息文件\n\t\t\tconst content = JSON.stringify({ version: `v${version}`, dateTime }, null, 4);\n\t\t\tfs.writeFileSync(versionPath, content);\n\n\t\t\tconst pkgPath = path.join(config.base, \"package.json\");\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n\t\t\t\tpkgJson.version = version;\n\t\t\t\tfs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { versionUpdatePlugin };\n"],"mappings":"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","names":["index_exports","__export","buildSvgIcon","cdnImport","cdnJsDelivrUrl","cdnUnpkgUrl","componentAutoImport","findSvgFile","versionUpdatePlugin","writeTSXIcon","__toCommonJS","import_fs","import_path","findSvgFile","dir","svgContents","fs","file","path","iconName","svgContent","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTSXIcon","componentName","iconDir","componentContent","line","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","svg","idx","import_fs","import_path","import_rollup_plugin_external_globals","import_vite_plugin_externals","isDev","getModuleVersion","name","pwd","pkgFile","path","fs","isFullPath","renderUrl","url","data","getModuleInfo","module","prodUrl","v","version","pathList","p","css","cssList","c","cdnJsDelivrUrl","cdnUnpkgUrl","cdnImport","options","modules","enableInDevMode","generateCssLinkTag","generateScriptTag","isBuild","externalMap","alias","plugins","_","command","userConfig","externalGlobals","html","descriptors","cusomize","attrs","import_fs","import_path","slash","path","pascalCase","str","_","c","componentAutoImport","options","dir","exportPath","dts","dtsPath","deep","extensions","formatter","config","componentMap","watcher","getNameFromPath","filePath","name","ext","parts","scanDirectory","dirPath","depth","files","fs","entries","entry","fullPath","scanComponents","fullDir","absolutePath","relativePath","componentName","generateAutoRegister","components","a","b","registerFilePath","componentDir","lines","from","importPath","code","existingCode","generateDts","dtsFullPath","dtsDir","resolvedConfig","server","eventType","filename","import_fs","import_path","padZero","num","length","formatDate","date","year","month","day","hours","minutes","seconds","milliseconds","versionUpdatePlugin","version","config","resolvedConfig","dateTime","versionDir","versionPath","path","fs","content","pkgPath","pkgJson"]}
package/dist/index.d.cts CHANGED
@@ -83,8 +83,34 @@ declare function cdnImport(options: CdnImportOptions): Plugin[];
83
83
  interface AutoImportOptions {
84
84
  /**
85
85
  * 文件夹
86
+ * @default "src/components"
86
87
  */
87
- dir: string;
88
+ dir?: string;
89
+ /**
90
+ * 导出声明文件路径
91
+ * @default "src/components/index.ts"
92
+ */
93
+ exportPath?: string;
94
+ /**
95
+ * 是否生成类型声明文件
96
+ * @default true
97
+ */
98
+ dts?: boolean;
99
+ /**
100
+ * 类型声明文件路径
101
+ * @default "types/component.d.ts"
102
+ */
103
+ dtsPath?: string;
104
+ /**
105
+ * 是否深度扫描子目录
106
+ * @default true
107
+ */
108
+ deep?: boolean;
109
+ /**
110
+ * 文件扩展名
111
+ * @default ["vue","tsx","jsx"]
112
+ */
113
+ extensions?: string[];
88
114
  /**
89
115
  * 自定义组件名称
90
116
  * @param fName 文件夹名称
@@ -94,17 +120,10 @@ interface AutoImportOptions {
94
120
  }
95
121
 
96
122
  /**
97
- * TSX组件自动导入
98
- * @description 只会生成安装文件
99
- * @param options 组件文件夹路径
100
- */
101
- declare function tsxComponentAutoImport(options: string | AutoImportOptions): Plugin;
102
- /**
103
- * VUE组件自动导入
104
- * @description 只会生成安装文件
105
- * @param options 组件文件夹路径
123
+ * 组件自动导入
124
+ * @param options 选项
106
125
  */
107
- declare function vueComponentAutoImport(options: string | AutoImportOptions): Plugin;
126
+ declare function componentAutoImport(options?: AutoImportOptions): Plugin;
108
127
 
109
128
  /**
110
129
  * 版本更新插件
@@ -113,4 +132,4 @@ declare function vueComponentAutoImport(options: string | AutoImportOptions): Pl
113
132
  */
114
133
  declare function versionUpdatePlugin(version: string): Plugin;
115
134
 
116
- export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl, findSvgFile, tsxComponentAutoImport, versionUpdatePlugin, vueComponentAutoImport, writeTSXIcon };
135
+ export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl, componentAutoImport, findSvgFile, versionUpdatePlugin, writeTSXIcon };
package/dist/index.d.ts CHANGED
@@ -83,8 +83,34 @@ declare function cdnImport(options: CdnImportOptions): Plugin[];
83
83
  interface AutoImportOptions {
84
84
  /**
85
85
  * 文件夹
86
+ * @default "src/components"
86
87
  */
87
- dir: string;
88
+ dir?: string;
89
+ /**
90
+ * 导出声明文件路径
91
+ * @default "src/components/index.ts"
92
+ */
93
+ exportPath?: string;
94
+ /**
95
+ * 是否生成类型声明文件
96
+ * @default true
97
+ */
98
+ dts?: boolean;
99
+ /**
100
+ * 类型声明文件路径
101
+ * @default "types/component.d.ts"
102
+ */
103
+ dtsPath?: string;
104
+ /**
105
+ * 是否深度扫描子目录
106
+ * @default true
107
+ */
108
+ deep?: boolean;
109
+ /**
110
+ * 文件扩展名
111
+ * @default ["vue","tsx","jsx"]
112
+ */
113
+ extensions?: string[];
88
114
  /**
89
115
  * 自定义组件名称
90
116
  * @param fName 文件夹名称
@@ -94,17 +120,10 @@ interface AutoImportOptions {
94
120
  }
95
121
 
96
122
  /**
97
- * TSX组件自动导入
98
- * @description 只会生成安装文件
99
- * @param options 组件文件夹路径
100
- */
101
- declare function tsxComponentAutoImport(options: string | AutoImportOptions): Plugin;
102
- /**
103
- * VUE组件自动导入
104
- * @description 只会生成安装文件
105
- * @param options 组件文件夹路径
123
+ * 组件自动导入
124
+ * @param options 选项
106
125
  */
107
- declare function vueComponentAutoImport(options: string | AutoImportOptions): Plugin;
126
+ declare function componentAutoImport(options?: AutoImportOptions): Plugin;
108
127
 
109
128
  /**
110
129
  * 版本更新插件
@@ -113,4 +132,4 @@ declare function vueComponentAutoImport(options: string | AutoImportOptions): Pl
113
132
  */
114
133
  declare function versionUpdatePlugin(version: string): Plugin;
115
134
 
116
- export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl, findSvgFile, tsxComponentAutoImport, versionUpdatePlugin, vueComponentAutoImport, writeTSXIcon };
135
+ export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl, componentAutoImport, findSvgFile, versionUpdatePlugin, writeTSXIcon };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import d from"fs";import g from"path";var $=t=>{let n=[];return d.readdirSync(t,{withFileTypes:!0}).forEach(s=>{if(s.isDirectory())n.push(...$(g.join(t,s.name)));else{let r=s.name.replace(".svg",""),p=d.readFileSync(g.join(t,s.name),"utf-8").replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").trimStart().trimEnd().replace(/<svg([^>+].*?)>/,(c,m)=>{let i=m.match(/viewBox="[^"]+"/),o=m.match(/width="(\d+)"/),a=m.match(/height="(\d+)"/),l=1024,u=1024;o&&(l=o[0]),a&&(u=a[0]);let f="";return i?f=i[0]:f=`viewBox="0 0 ${l} ${u}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${f}>`});n.push({iconName:r,componentName:r.charAt(0).toUpperCase()+r.slice(1),iconContent:p})}}),n.sort((s,r)=>s.iconName<r.iconName?-1:s.iconName>r.iconName?1:0)},D=(t,n,e)=>{d.mkdirSync(n,{recursive:!0});let s=`import { defineComponent } from "vue";
1
+ import A from"fs";import D from"path";var T=t=>{let n=[];return A.readdirSync(t,{withFileTypes:!0}).forEach(r=>{if(r.isDirectory())n.push(...T(D.join(t,r.name)));else{let i=r.name.replace(".svg",""),f=A.readFileSync(D.join(t,r.name),"utf-8").replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").trimStart().trimEnd().replace(/<svg([^>+].*?)>/,(p,u)=>{let s=u.match(/viewBox="[^"]+"/),v=u.match(/width="(\d+)"/),l=u.match(/height="(\d+)"/),x=1024,h=1024;v&&(x=v[0]),l&&(h=l[0]);let C="";return s?C=s[0]:C=`viewBox="0 0 ${x} ${h}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${C}>`});n.push({iconName:i,componentName:i.charAt(0).toUpperCase()+i.slice(1),iconContent:f})}}),n.sort((r,i)=>r.iconName<i.iconName?-1:r.iconName>i.iconName?1:0)},O=(t,n,o)=>{A.mkdirSync(n,{recursive:!0});let r=`import { defineComponent } from "vue";
2
2
 
3
3
  /**
4
4
  * ${t} \u56FE\u6807\u7EC4\u4EF6
@@ -7,40 +7,26 @@ export const ${t} = defineComponent({
7
7
  name: "${t}",
8
8
  render() {
9
9
  return (
10
- ${e.split(`
11
- `).map(r=>` ${r}`).join(`
10
+ ${o.split(`
11
+ `).map(i=>` ${i}`).join(`
12
12
  `)}
13
13
  );
14
14
  },
15
15
  });
16
16
 
17
17
  export default ${t};
18
- `;d.writeFileSync(g.join(n,"index.tsx"),s)};function J(t,n){if(!t||!n)return;let e;return{name:"fast-vite-plugin-build-svg-icon",configResolved:s=>{e=s},buildStart(){let s=$(g.resolve(e.root,t)),r=g.resolve(e.root,n);d.mkdirSync(r,{recursive:!0});let p="",c="",m="";s.forEach((i,o)=>{D(i.componentName,g.join(r,i.iconName),i.iconContent),p+=`import { ${i.componentName} } from "./${i.iconName}";
19
- `,c+=` ${i.componentName},`,m+=`export * from "./${i.iconName}";
20
- `,o+1<s.length&&(c+=`
21
- `)}),d.writeFileSync(g.join(r,"index.ts"),`import type { DefineComponent } from "vue";
22
- ${p}
23
- ${m}
24
- export default [
25
- ${c}
26
- ] as unknown as DefineComponent[];
27
- `)}}}import S from"fs";import T from"path";import k from"rollup-plugin-external-globals";import{viteExternalsPlugin as A}from"vite-plugin-externals";var U=process.env.NODE_ENV==="development";function j(t){let n=process.cwd(),e=T.join(n,"node_modules",t,"package.json");return S.existsSync(e)?JSON.parse(S.readFileSync(e,"utf8")).version:""}function N(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function w(t,n){let{path:e}=n;return N(e)&&(t=e),t.replace(/\{name\}/g,n.name).replace(/\{version\}/g,n.version).replace(/\{path\}/g,e)}function E(t,n){n=t.prodUrl||n;let e=t,s=t.version||j(e.name),r=[];Array.isArray(e.path)?r=e.path:r.push(e.path);let p={...e,version:s};r=r.map(i=>{if(!s&&!N(i))throw new Error(`modules: ${p.name} package.json file does not exist`);return w(n,{name:p.name,version:p.version,path:i})});let c=e.css||[];!Array.isArray(c)&&c&&(c=[c]);let m=Array.isArray(c)?c.map(i=>w(n,{name:p.name,version:p.version,path:i})):[];return{...e,version:s,pathList:r,cssList:m}}var I="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",_="https://unpkg.com/{package}@{version}/{path}";function z(t){let{modules:n=[],prodUrl:e=I,enableInDevMode:s=!1,generateCssLinkTag:r,generateScriptTag:p}=t,c=!1,m=(Array.isArray(n)?n:[n]).map(a=>typeof a=="function"?a(e):a).map(a=>E(a,e)),i={};m.forEach(a=>{i[a.name]=a.var,Array.isArray(a.alias)&&a.alias.forEach(l=>{i[l]=a.var})});let o=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(a,{command:l}){c=l==="build";let u={build:{rollupOptions:{plugins:[]}}};return c&&(u.build.rollupOptions.plugins=[k(i)]),u},transformIndexHtml(a){if(!c&&!s)return a;let l=[];return m.forEach(u=>{u.pathList.forEach(f=>{let y=p?.(u.name,f)||{},x={src:f,crossorigin:"anonymous",...u?.attrs??{},...y.attrs};l.push({tag:"script",attrs:x,...y})}),u.cssList.forEach(f=>{let y=r?.(u.name,f)||{},x={href:f,rel:"stylesheet",crossorigin:"anonymous",...u?.attrs??{},...y.attrs};l.push({tag:"link",attrs:x,...y})})}),l}}];return U&&s&&o.push(A(i,{enforce:"pre"})),o}import C from"fs";import P from"path";function G(t){if(t)return{name:"fast-vite-plugin-tsx-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=o=>o.charAt(0).toUpperCase()+o.slice(1),s=typeof t=="string"?e:t.formatter??e,r=C.readdirSync(n,{withFileTypes:!0});if(r?.length===0)return;let p=r.filter(o=>o.name!=="index.ts").map(o=>({componentName:s(o.name),fileName:o.name})).sort((o,a)=>o.componentName<a.componentName?-1:o.componentName>a.componentName?1:0),c="",m="",i="";p.forEach(({componentName:o,fileName:a},l)=>{c+=`import { ${o} } from "./${a}";
28
- `,m+=`export * from "./${a}";
29
- `,i+=` ${o},`,l+1<p.length&&(i+=`
30
- `)}),C.writeFileSync(P.join(n,"index.ts"),`import type { Plugin } from "vue";
31
- ${c}
32
- ${m}
33
- export default [
34
- ${i}
35
- ] as Plugin[];
36
- `)}}}function X(t){if(t)return{name:"fast-vite-plugin-vue-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=o=>o.charAt(0).toUpperCase()+o.slice(1),s=typeof t=="string"?e:t.formatter??e,r=C.readdirSync(n,{withFileTypes:!0});if(r?.length===0)return;let p=r.filter(o=>o.name!=="index.ts").map(o=>({componentName:s(o.name),fileName:o.name})).sort((o,a)=>o.componentName<a.componentName?-1:o.componentName>a.componentName?1:0),c="",m="",i="";p.forEach(({componentName:o,fileName:a},l)=>{c+=`import ${o} from "./${a}/index.vue";
37
- `,m+=`export * from "./${a}/index.vue";
38
- `,i+=` ${o},`,l+1<p.length&&(i+=`
39
- `)}),C.writeFileSync(P.join(n,"index.ts"),`import type { DefineComponent } from "vue";
40
- ${c}
41
- ${m}
18
+ `;A.writeFileSync(D.join(n,"index.tsx"),r)};function X(t,n){if(!t||!n)return;let o;return{name:"fast-vite-plugin-build-svg-icon",configResolved:r=>{o=r},buildStart(){let r=T(D.resolve(o.root,t)),i=D.resolve(o.root,n);A.mkdirSync(i,{recursive:!0});let f="",p="",u="";r.forEach((s,v)=>{O(s.componentName,D.join(i,s.iconName),s.iconContent),f+=`import { ${s.componentName} } from "./${s.iconName}";
19
+ `,p+=` ${s.componentName},`,u+=`export * from "./${s.iconName}";
20
+ `,v+1<r.length&&(p+=`
21
+ `)}),A.writeFileSync(D.join(i,"index.ts"),`import type { DefineComponent } from "vue";
22
+ ${f}
23
+ ${u}
42
24
  export default [
43
- ${i}
25
+ ${p}
44
26
  ] as unknown as DefineComponent[];
45
- `)}}}import h from"fs";import F from"path";function v(t,n=2){return t.toString().padStart(n,"0")}function M(t){let n=t.getUTCFullYear(),e=v(t.getUTCMonth()+1),s=v(t.getUTCDate()),r=v(t.getUTCHours()),p=v(t.getUTCMinutes()),c=v(t.getUTCSeconds()),m=v(t.getUTCMilliseconds(),3);return`Z ${n}-${e}-${s} ${r}:${p}:${c}.${m}`}function tt(t){let n;return{name:"fast-vite-plugin-version-update",configResolved:e=>{n=e},buildStart(){let s=M(new Date),r=n.publicDir,p=F.join(r,"version.json");h.existsSync(r)||h.mkdirSync(r);let c=JSON.stringify({version:`v${t}`,dateTime:s},null,4);h.writeFileSync(p,c);let m=F.join(n.base,"package.json");if(h.existsSync(m)){let i=JSON.parse(h.readFileSync(m,"utf-8"));i.version=t,h.writeFileSync(m,JSON.stringify(i,null,2),"utf-8")}}}}export{J as buildSvgIcon,z as cdnImport,I as cdnJsDelivrUrl,_ as cdnUnpkgUrl,$ as findSvgFile,G as tsxComponentAutoImport,tt as versionUpdatePlugin,X as vueComponentAutoImport,D as writeTSXIcon};
27
+ `)}}}import E from"fs";import W from"path";import J from"rollup-plugin-external-globals";import{viteExternalsPlugin as L}from"vite-plugin-externals";var _=process.env.NODE_ENV==="development";function B(t){let n=process.cwd(),o=W.join(n,"node_modules",t,"package.json");return E.existsSync(o)?JSON.parse(E.readFileSync(o,"utf8")).version:""}function M(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function U(t,n){let{path:o}=n;return M(o)&&(t=o),t.replace(/\{name\}/g,n.name).replace(/\{version\}/g,n.version).replace(/\{path\}/g,o)}function G(t,n){n=t.prodUrl||n;let o=t,r=t.version||B(o.name),i=[];Array.isArray(o.path)?i=o.path:i.push(o.path);let f={...o,version:r};i=i.map(s=>{if(!r&&!M(s))throw new Error(`modules: ${f.name} package.json file does not exist`);return U(n,{name:f.name,version:f.version,path:s})});let p=o.css||[];!Array.isArray(p)&&p&&(p=[p]);let u=Array.isArray(p)?p.map(s=>U(n,{name:f.name,version:f.version,path:s})):[];return{...o,version:r,pathList:i,cssList:u}}var H="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",nt="https://unpkg.com/{package}@{version}/{path}";function ot(t){let{modules:n=[],prodUrl:o=H,enableInDevMode:r=!1,generateCssLinkTag:i,generateScriptTag:f}=t,p=!1,u=(Array.isArray(n)?n:[n]).map(l=>typeof l=="function"?l(o):l).map(l=>G(l,o)),s={};u.forEach(l=>{s[l.name]=l.var,Array.isArray(l.alias)&&l.alias.forEach(x=>{s[x]=l.var})});let v=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(l,{command:x}){p=x==="build";let h={build:{rollupOptions:{plugins:[]}}};return p&&(h.build.rollupOptions.plugins=[J(s)]),h},transformIndexHtml(l){if(!p&&!r)return l;let x=[];return u.forEach(h=>{h.pathList.forEach(C=>{let w=f?.(h.name,C)||{},F={src:C,crossorigin:"anonymous",...h?.attrs??{},...w.attrs};x.push({tag:"script",attrs:F,...w})}),h.cssList.forEach(C=>{let w=i?.(h.name,C)||{},F={href:C,rel:"stylesheet",crossorigin:"anonymous",...h?.attrs??{},...w.attrs};x.push({tag:"link",attrs:F,...w})})}),x}}];return _&&r&&v.push(L(s,{enforce:"pre"})),v}import y from"fs";import S from"path";function I(t){return t.replace(/\\/g,"/")}function V(t){return t.replace(/[-_](\w)/g,(n,o)=>o?o.toUpperCase():"").replace(/^\w/,n=>n.toUpperCase())}function ct(t={}){let{dir:n="src/components",exportPath:o="src/components/index.ts",dts:r=!0,dtsPath:i="types/component.d.ts",deep:f=!0,extensions:p=["vue","tsx","jsx"],formatter:u}=t,s,v=new Map,l=null,x=m=>{let c=m;for(let a of p)if(c.endsWith(`.${a}`)){c=c.slice(0,-a.length-1);break}if(c.endsWith("/index")||c.endsWith("\\index")){let a=c.split(/[\\/]/);c=a[a.length-2]||a[a.length-1]}else{let a=c.split(/[\\/]/);c=a[a.length-1]}return u?u(c):V(c)},h=(m,c=0)=>{let a=[];if(!y.existsSync(m))return a;let e=y.readdirSync(m,{withFileTypes:!0});for(let g of e){let b=S.join(m,g.name);if(g.isDirectory()){if(g.name==="node_modules"||g.name.startsWith(". "))continue;(f||c===0)&&a.push(...h(b,c+1))}else if(g.isFile()){let d=S.extname(g.name).slice(1);p.includes(d)&&a.push(b)}}return a},C=()=>{v.clear();let m=S.resolve(s.root,n);if(!y.existsSync(m)){console.warn(`[component-auto-import] Directory not found: ${m}`);return}h(m).forEach(a=>{let e=S.relative(m,a),g=x(e);v.set(g,{name:g,from:a})})},w=()=>{if(v.size===0)return;let m=Array.from(v.values()).sort((d,P)=>d.name.localeCompare(P.name)),c=S.resolve(s.root,o),a=S.dirname(c),e=[];e.push("/* eslint-disable */"),e.push("/* prettier-ignore */"),e.push("// @ts-nocheck"),e.push("// Auto-generated by fast component-auto-import"),e.push("// Generated by fast-vite-plugins"),e.push("// Do not edit this file manually"),e.push(""),e.push('import type { App } from "vue";'),e.push(""),m.forEach(({name:d,from:P})=>{let $=I(S.relative(a,P)),k=$.startsWith(".")?$:`./${$}`;e.push(`import ${d} from "${k}";`),e.push(`export { ${d} };`),e.push(`export type ${d}Instance = InstanceType<typeof ${d}>;`)}),e.push(""),e.push("/** \u81EA\u52A8\u6CE8\u518C\u6240\u6709\u7EC4\u4EF6 */"),e.push("export function registerComponents(app: App): void {"),m.forEach(({name:d})=>{e.push(` app.component(${d}.name, ${d});`)}),e.push("}"),e.push("");let g=`${e.join(`
28
+ `)}
29
+ `,b=y.existsSync(c)?y.readFileSync(c,"utf-8"):"";g!==b&&y.writeFileSync(c,g,"utf-8")},F=()=>{if(!r||v.size===0)return;let m=Array.from(v.values()).sort((d,P)=>d.name.localeCompare(P.name)),c=S.resolve(s.root,i),a=S.dirname(c),e=[];e.push("// For this project development"),e.push("// Auto-generated by fast component-auto-import"),e.push("// Generated by fast-vite-plugins"),e.push("// Do not edit this file manually"),e.push(""),e.push('import "@vue/runtime-core";'),e.push(""),e.push("// GlobalComponents for Volar"),e.push('declare module "@vue/runtime-core" {'),e.push(" export interface GlobalComponents {"),m.forEach(({name:d,from:P})=>{let $=I(S.relative(a,P));$=$.replace(/\.(vue|tsx|jsx)$/,"");let k=$.startsWith(".")?$:`./${$}`;e.push(` ${d}: (typeof import("${k}"))["default"];`)}),e.push(" }"),e.push("}"),e.push(""),e.push("export {};");let g=`${e.join(`
30
+ `)}
31
+ `;y.existsSync(a)||y.mkdirSync(a,{recursive:!0});let b=y.existsSync(c)?y.readFileSync(c,"utf-8"):"";g!==b&&y.writeFileSync(c,g,"utf-8")};return{name:"fast-vite-plugin-component-auto-import",enforce:"post",configResolved:m=>{s=m},buildStart(){C(),w(),F()},configureServer(m){let c=S.resolve(s.root,n);y.existsSync(c)&&(l=y.watch(c,{recursive:!0},(a,e)=>{if(!e||e.endsWith(".d.ts"))return;let g=S.extname(e).slice(1);p.includes(g)&&(C(),w(),F(),m.ws.send({type:"full-reload",path:"*"}))}))},buildEnd(){l&&(l.close(),l=null)}}}import N from"fs";import R from"path";function j(t,n=2){return t.toString().padStart(n,"0")}function z(t){let n=t.getUTCFullYear(),o=j(t.getUTCMonth()+1),r=j(t.getUTCDate()),i=j(t.getUTCHours()),f=j(t.getUTCMinutes()),p=j(t.getUTCSeconds()),u=j(t.getUTCMilliseconds(),3);return`Z ${n}-${o}-${r} ${i}:${f}:${p}.${u}`}function ut(t){let n;return{name:"fast-vite-plugin-version-update",configResolved:o=>{n=o},buildStart(){let r=z(new Date),i=n.publicDir,f=R.join(i,"version.json");N.existsSync(i)||N.mkdirSync(i);let p=JSON.stringify({version:`v${t}`,dateTime:r},null,4);N.writeFileSync(f,p);let u=R.join(n.base,"package.json");if(N.existsSync(u)){let s=JSON.parse(N.readFileSync(u,"utf-8"));s.version=t,N.writeFileSync(u,JSON.stringify(s,null,2),"utf-8")}}}}export{X as buildSvgIcon,ot as cdnImport,H as cdnJsDelivrUrl,nt as cdnUnpkgUrl,ct as componentAutoImport,T as findSvgFile,ut as versionUpdatePlugin,O as writeTSXIcon};
46
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/buildSvgIcon/index.ts","../../src/cdnImport/index.ts","../../src/componentAutoImport/index.ts","../../src/versionUpdate/index.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\n\nconst findSvgFile = (dir: string): { iconName: string; componentName: string; iconContent: string }[] => {\n\t// svg 内容\n\tconst svgContents: { iconName: string; componentName: string; iconContent: string }[] = [];\n\t// 获取当前目录下的文件\n\tconst svgFiles = fs.readdirSync(dir, {\n\t\twithFileTypes: true,\n\t});\n\n\tsvgFiles.forEach((file) => {\n\t\tif (file.isDirectory()) {\n\t\t\tsvgContents.push(...findSvgFile(path.join(dir, file.name)));\n\t\t} else {\n\t\t\tconst iconName = file.name.replace(\".svg\", \"\");\n\n\t\t\tconst svgContent = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name), \"utf-8\")\n\t\t\t\t.replace(/<\\?xml.*?\\?>/, \"\")\n\t\t\t\t.replace(/<!DOCTYPE svg.*?>/, \"\")\n\t\t\t\t// .replace(/(\\r)|(\\n)/g, \"\")\n\t\t\t\t.trimStart()\n\t\t\t\t.trimEnd()\n\t\t\t\t// .replace(/(fill=\"[^>+].*?\")/g, 'fill=\"\"')\n\t\t\t\t.replace(/<svg([^>+].*?)>/, (match, attr) => {\n\t\t\t\t\tconst viewBoxMatch = attr.match(/viewBox=\"[^\"]+\"/);\n\t\t\t\t\tconst widthMatch = attr.match(/width=\"(\\d+)\"/);\n\t\t\t\t\tconst heightMatch = attr.match(/height=\"(\\d+)\"/);\n\t\t\t\t\tlet width = 1024;\n\t\t\t\t\tlet height = 1024;\n\t\t\t\t\tif (widthMatch) {\n\t\t\t\t\t\twidth = widthMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (heightMatch) {\n\t\t\t\t\t\theight = heightMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet viewBoxContent = \"\";\n\t\t\t\t\tif (!viewBoxMatch) {\n\t\t\t\t\t\tviewBoxContent = `viewBox=\"0 0 ${width} ${height}\"`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tviewBoxContent = viewBoxMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" ${viewBoxContent}>`;\n\t\t\t\t});\n\n\t\t\tsvgContents.push({\n\t\t\t\t// iconName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonName,\n\t\t\t\tcomponentName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgContent,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn svgContents.sort((a, b) => {\n\t\tif (a.iconName < b.iconName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.iconName > b.iconName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n};\n\n/**\n * 写入 TSX 图标\n */\nconst writeTSXIcon = (componentName: string, iconDir: string, svgContent: string): void => {\n\tfs.mkdirSync(iconDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\trender() {\n\t\treturn (\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.tsx\"), componentContent);\n};\n\n/**\n * 构建 svg 图标组件\n * @param dir svg 文件路径\n * @param writeDir 写入的文件路径 相对的即可\n */\nfunction buildSvgIcon(dir: string, writeDir: string): Plugin {\n\tif (!dir || !writeDir) return;\n\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-build-svg-icon\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst svgFiles = findSvgFile(path.resolve(config.root, dir));\n\n\t\t\tconst iconsPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(iconsPath, { recursive: true });\n\n\t\t\tlet iconImportContent = \"\";\n\t\t\tlet iconTypeContent = \"\";\n\t\t\tlet exportContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.componentName, path.join(iconsPath, svg.iconName), svg.iconContent);\n\n\t\t\t\ticonImportContent += `import { ${svg.componentName} } from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ticonTypeContent += `\t${svg.componentName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ticonTypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${iconImportContent}\n${exportContent}\nexport default [\n${iconTypeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { findSvgFile, writeTSXIcon, buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * get npm module version\n * @param name\n * @returns\n */\nfunction getModuleVersion(name: string): string {\n\tconst pwd = process.cwd();\n\tconst pkgFile = path.join(pwd, \"node_modules\", name, \"package.json\");\n\tif (fs.existsSync(pkgFile)) {\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgFile, \"utf8\"));\n\t\treturn pkgJson.version;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * 是否完整的 url\n * @param path\n * @returns\n */\nfunction isFullPath(path: string): boolean {\n\treturn path.startsWith(\"http:\") || path.startsWith(\"https:\") || path.startsWith(\"//\") ? true : false;\n}\n\nfunction renderUrl(\n\turl: string,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tpath: string;\n\t}\n): string {\n\tconst { path } = data;\n\tif (isFullPath(path)) {\n\t\turl = path;\n\t}\n\treturn url\n\t\t.replace(/\\{name\\}/g, data.name)\n\t\t.replace(/\\{version\\}/g, data.version)\n\t\t.replace(/\\{path\\}/g, path);\n}\n\nfunction getModuleInfo(module: Module, prodUrl: string): Module & { pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst version = module.version || getModuleVersion(v.name);\n\tlet pathList: string[] = [];\n\tif (!Array.isArray(v.path)) {\n\t\tpathList.push(v.path);\n\t} else {\n\t\tpathList = v.path;\n\t}\n\n\tconst data = {\n\t\t...v,\n\t\tversion,\n\t};\n\n\tpathList = pathList.map((p) => {\n\t\tif (!version && !isFullPath(p)) {\n\t\t\tthrow new Error(`modules: ${data.name} package.json file does not exist`);\n\t\t}\n\t\treturn renderUrl(prodUrl, {\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tpath: p,\n\t\t});\n\t});\n\n\tlet css = v.css || [];\n\tif (!Array.isArray(css) && css) {\n\t\tcss = [css];\n\t}\n\n\tconst cssList = !Array.isArray(css)\n\t\t? []\n\t\t: css.map((c) =>\n\t\t\t\trenderUrl(prodUrl, {\n\t\t\t\t\tname: data.name,\n\t\t\t\t\tversion: data.version,\n\t\t\t\t\tpath: c,\n\t\t\t\t})\n\t\t\t);\n\n\treturn {\n\t\t...v,\n\t\tversion,\n\t\tpathList,\n\t\tcssList,\n\t};\n}\n\nconst cdnJsDelivrUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\";\nconst cdnUnpkgUrl = \"https://unpkg.com/{package}@{version}/{path}\";\n\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = cdnJsDelivrUrl, enableInDevMode = false, generateCssLinkTag, generateScriptTag } = options;\n\n\tlet isBuild = false;\n\n\tconst data = (Array.isArray(modules) ? modules : [modules])\n\t\t.map((v) => (typeof v === \"function\" ? v(prodUrl) : v))\n\t\t.map((v) => getModuleInfo(v, prodUrl));\n\n\tconst externalMap: {\n\t\t[name: string]: string;\n\t} = {};\n\n\tdata.forEach((v) => {\n\t\texternalMap[v.name] = v.var;\n\t\tif (Array.isArray(v.alias)) {\n\t\t\tv.alias.forEach((alias) => {\n\t\t\t\texternalMap[alias] = v.var;\n\t\t\t});\n\t\t}\n\t});\n\n\tconst plugins: Plugin[] = [\n\t\t{\n\t\t\tname: \"fast-vite-plugin-cdn-import\",\n\t\t\tenforce: \"pre\",\n\t\t\tconfig(_, { command }): UserConfig {\n\t\t\t\tisBuild = command === \"build\";\n\n\t\t\t\tconst userConfig: UserConfig = {\n\t\t\t\t\tbuild: {\n\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\tplugins: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tif (isBuild) {\n\t\t\t\t\tuserConfig.build.rollupOptions.plugins = [externalGlobals(externalMap)];\n\t\t\t\t}\n\n\t\t\t\treturn userConfig;\n\t\t\t},\n\t\t\ttransformIndexHtml(html): string | HtmlTagDescriptor[] {\n\t\t\t\tif (!isBuild && !enableInDevMode) {\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\n\t\t\t\tconst descriptors: HtmlTagDescriptor[] = [];\n\n\t\t\t\tdata.forEach((v) => {\n\t\t\t\t\tv.pathList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateScriptTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"script\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateCssLinkTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\thref: url,\n\t\t\t\t\t\t\trel: \"stylesheet\",\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"link\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn descriptors;\n\t\t\t},\n\t\t},\n\t];\n\n\tif (isDev && enableInDevMode) {\n\t\tplugins.push(\n\t\t\tviteExternalsPlugin(externalMap, {\n\t\t\t\tenforce: \"pre\",\n\t\t\t})\n\t\t);\n\t}\n\n\treturn plugins;\n}\n\nexport { cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { AutoImportOptions } from \"./type\";\nimport type { Plugin } from \"vite\";\n\n/**\n * TSX组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction tsxComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-tsx-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import { ${componentName} } from \"./${fileName}\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { Plugin } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as Plugin[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * VUE组件自动导入\n * @description 只会生成安装文件\n * @param options 组件文件夹路径\n */\nfunction vueComponentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-vue-component-auto-import\",\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst dir = typeof options === \"string\" ? options : options.dir;\n\n\t\t\tconst defaultFormatter = (fName: string): string => {\n\t\t\t\treturn fName.charAt(0).toUpperCase() + fName.slice(1);\n\t\t\t};\n\n\t\t\tconst formatter = typeof options === \"string\" ? defaultFormatter : (options.formatter ?? defaultFormatter);\n\n\t\t\t// 获取所有文件夹名称\n\t\t\tconst cFiles = fs.readdirSync(dir, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\n\t\t\tif (cFiles?.length === 0) return;\n\n\t\t\t// 组件名称\n\t\t\tconst cNames = cFiles\n\t\t\t\t// 排除export文件\n\t\t\t\t.filter((f) => f.name !== \"index.ts\")\n\t\t\t\t.map((file) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcomponentName: formatter(file.name),\n\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a.componentName < b.componentName) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (a.componentName > b.componentName) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tcNames.forEach(({ componentName, fileName }, idx) => {\n\t\t\t\timportContent += `import ${componentName} from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\texportContent += `export * from \"./${fileName}/index.vue\";\n`;\n\n\t\t\t\ttypeContent += `\t${componentName},`;\n\n\t\t\t\tif (idx + 1 < cNames.length) {\n\t\t\t\t\ttypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(dir, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${importContent}\n${exportContent}\nexport default [\n${typeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { tsxComponentAutoImport, vueComponentAutoImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nfunction padZero(num: number, length = 2): string {\n\treturn num.toString().padStart(length, \"0\");\n}\n\nfunction formatDate(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = padZero(date.getUTCMonth() + 1);\n\tconst day = padZero(date.getUTCDate());\n\tconst hours = padZero(date.getUTCHours());\n\tconst minutes = padZero(date.getUTCMinutes());\n\tconst seconds = padZero(date.getUTCSeconds());\n\tconst milliseconds = padZero(date.getUTCMilliseconds(), 3);\n\n\treturn `Z ${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\n/**\n * 版本更新插件\n * @param version 不要携带 'v',示例:1.0.0\n * @returns\n */\nfunction versionUpdatePlugin(version: string): Plugin {\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-version-update\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst curDate = new Date();\n\n\t\t\tconst dateTime = formatDate(curDate);\n\n\t\t\tconst versionDir = config.publicDir;\n\t\t\tconst versionPath = path.join(versionDir, \"version.json\");\n\t\t\tif (!fs.existsSync(versionDir)) {\n\t\t\t\tfs.mkdirSync(versionDir);\n\t\t\t}\n\n\t\t\t// 写入版本信息文件\n\t\t\tconst content = JSON.stringify({ version: `v${version}`, dateTime }, null, 4);\n\t\t\tfs.writeFileSync(versionPath, content);\n\n\t\t\tconst pkgPath = path.join(config.base, \"package.json\");\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n\t\t\t\tpkgJson.version = version;\n\t\t\t\tfs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { versionUpdatePlugin };\n"],"mappings":"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","names":["fs","path","findSvgFile","dir","svgContents","file","iconName","svgContent","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTSXIcon","componentName","iconDir","componentContent","line","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","svg","idx","fs","path","externalGlobals","viteExternalsPlugin","isDev","getModuleVersion","name","pwd","pkgFile","isFullPath","renderUrl","url","data","getModuleInfo","module","prodUrl","v","version","pathList","p","css","cssList","c","cdnJsDelivrUrl","cdnUnpkgUrl","cdnImport","options","modules","enableInDevMode","generateCssLinkTag","generateScriptTag","isBuild","externalMap","alias","plugins","_","command","userConfig","html","descriptors","cusomize","attrs","fs","path","tsxComponentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","vueComponentAutoImport","fs","path","padZero","num","length","formatDate","date","year","month","day","hours","minutes","seconds","milliseconds","versionUpdatePlugin","version","config","resolvedConfig","dateTime","versionDir","versionPath","content","pkgPath","pkgJson"]}
1
+ {"version":3,"sources":["../../src/buildSvgIcon/index.ts","../../src/cdnImport/index.ts","../../src/componentAutoImport/index.ts","../../src/versionUpdate/index.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\n\nconst findSvgFile = (dir: string): { iconName: string; componentName: string; iconContent: string }[] => {\n\t// svg 内容\n\tconst svgContents: { iconName: string; componentName: string; iconContent: string }[] = [];\n\t// 获取当前目录下的文件\n\tconst svgFiles = fs.readdirSync(dir, {\n\t\twithFileTypes: true,\n\t});\n\n\tsvgFiles.forEach((file) => {\n\t\tif (file.isDirectory()) {\n\t\t\tsvgContents.push(...findSvgFile(path.join(dir, file.name)));\n\t\t} else {\n\t\t\tconst iconName = file.name.replace(\".svg\", \"\");\n\n\t\t\tconst svgContent = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name), \"utf-8\")\n\t\t\t\t.replace(/<\\?xml.*?\\?>/, \"\")\n\t\t\t\t.replace(/<!DOCTYPE svg.*?>/, \"\")\n\t\t\t\t// .replace(/(\\r)|(\\n)/g, \"\")\n\t\t\t\t.trimStart()\n\t\t\t\t.trimEnd()\n\t\t\t\t// .replace(/(fill=\"[^>+].*?\")/g, 'fill=\"\"')\n\t\t\t\t.replace(/<svg([^>+].*?)>/, (match, attr) => {\n\t\t\t\t\tconst viewBoxMatch = attr.match(/viewBox=\"[^\"]+\"/);\n\t\t\t\t\tconst widthMatch = attr.match(/width=\"(\\d+)\"/);\n\t\t\t\t\tconst heightMatch = attr.match(/height=\"(\\d+)\"/);\n\t\t\t\t\tlet width = 1024;\n\t\t\t\t\tlet height = 1024;\n\t\t\t\t\tif (widthMatch) {\n\t\t\t\t\t\twidth = widthMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tif (heightMatch) {\n\t\t\t\t\t\theight = heightMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet viewBoxContent = \"\";\n\t\t\t\t\tif (!viewBoxMatch) {\n\t\t\t\t\t\tviewBoxContent = `viewBox=\"0 0 ${width} ${height}\"`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tviewBoxContent = viewBoxMatch[0];\n\t\t\t\t\t}\n\t\t\t\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" ${viewBoxContent}>`;\n\t\t\t\t});\n\n\t\t\tsvgContents.push({\n\t\t\t\t// iconName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonName,\n\t\t\t\tcomponentName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgContent,\n\t\t\t});\n\t\t}\n\t});\n\n\treturn svgContents.sort((a, b) => {\n\t\tif (a.iconName < b.iconName) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (a.iconName > b.iconName) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n};\n\n/**\n * 写入 TSX 图标\n */\nconst writeTSXIcon = (componentName: string, iconDir: string, svgContent: string): void => {\n\tfs.mkdirSync(iconDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\trender() {\n\t\treturn (\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.tsx\"), componentContent);\n};\n\n/**\n * 构建 svg 图标组件\n * @param dir svg 文件路径\n * @param writeDir 写入的文件路径 相对的即可\n */\nfunction buildSvgIcon(dir: string, writeDir: string): Plugin {\n\tif (!dir || !writeDir) return;\n\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-build-svg-icon\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst svgFiles = findSvgFile(path.resolve(config.root, dir));\n\n\t\t\tconst iconsPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(iconsPath, { recursive: true });\n\n\t\t\tlet iconImportContent = \"\";\n\t\t\tlet iconTypeContent = \"\";\n\t\t\tlet exportContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.componentName, path.join(iconsPath, svg.iconName), svg.iconContent);\n\n\t\t\t\ticonImportContent += `import { ${svg.componentName} } from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ticonTypeContent += `\t${svg.componentName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ticonTypeContent += \"\\n\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.ts\"),\n\t\t\t\t`import type { DefineComponent } from \"vue\";\n${iconImportContent}\n${exportContent}\nexport default [\n${iconTypeContent}\n] as unknown as DefineComponent[];\n`\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport { findSvgFile, writeTSXIcon, buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * get npm module version\n * @param name\n * @returns\n */\nfunction getModuleVersion(name: string): string {\n\tconst pwd = process.cwd();\n\tconst pkgFile = path.join(pwd, \"node_modules\", name, \"package.json\");\n\tif (fs.existsSync(pkgFile)) {\n\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgFile, \"utf8\"));\n\t\treturn pkgJson.version;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * 是否完整的 url\n * @param path\n * @returns\n */\nfunction isFullPath(path: string): boolean {\n\treturn path.startsWith(\"http:\") || path.startsWith(\"https:\") || path.startsWith(\"//\") ? true : false;\n}\n\nfunction renderUrl(\n\turl: string,\n\tdata: {\n\t\tname: string;\n\t\tversion: string;\n\t\tpath: string;\n\t}\n): string {\n\tconst { path } = data;\n\tif (isFullPath(path)) {\n\t\turl = path;\n\t}\n\treturn url\n\t\t.replace(/\\{name\\}/g, data.name)\n\t\t.replace(/\\{version\\}/g, data.version)\n\t\t.replace(/\\{path\\}/g, path);\n}\n\nfunction getModuleInfo(module: Module, prodUrl: string): Module & { pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst version = module.version || getModuleVersion(v.name);\n\tlet pathList: string[] = [];\n\tif (!Array.isArray(v.path)) {\n\t\tpathList.push(v.path);\n\t} else {\n\t\tpathList = v.path;\n\t}\n\n\tconst data = {\n\t\t...v,\n\t\tversion,\n\t};\n\n\tpathList = pathList.map((p) => {\n\t\tif (!version && !isFullPath(p)) {\n\t\t\tthrow new Error(`modules: ${data.name} package.json file does not exist`);\n\t\t}\n\t\treturn renderUrl(prodUrl, {\n\t\t\tname: data.name,\n\t\t\tversion: data.version,\n\t\t\tpath: p,\n\t\t});\n\t});\n\n\tlet css = v.css || [];\n\tif (!Array.isArray(css) && css) {\n\t\tcss = [css];\n\t}\n\n\tconst cssList = !Array.isArray(css)\n\t\t? []\n\t\t: css.map((c) =>\n\t\t\t\trenderUrl(prodUrl, {\n\t\t\t\t\tname: data.name,\n\t\t\t\t\tversion: data.version,\n\t\t\t\t\tpath: c,\n\t\t\t\t})\n\t\t\t);\n\n\treturn {\n\t\t...v,\n\t\tversion,\n\t\tpathList,\n\t\tcssList,\n\t};\n}\n\nconst cdnJsDelivrUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\";\nconst cdnUnpkgUrl = \"https://unpkg.com/{package}@{version}/{path}\";\n\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = cdnJsDelivrUrl, enableInDevMode = false, generateCssLinkTag, generateScriptTag } = options;\n\n\tlet isBuild = false;\n\n\tconst data = (Array.isArray(modules) ? modules : [modules])\n\t\t.map((v) => (typeof v === \"function\" ? v(prodUrl) : v))\n\t\t.map((v) => getModuleInfo(v, prodUrl));\n\n\tconst externalMap: {\n\t\t[name: string]: string;\n\t} = {};\n\n\tdata.forEach((v) => {\n\t\texternalMap[v.name] = v.var;\n\t\tif (Array.isArray(v.alias)) {\n\t\t\tv.alias.forEach((alias) => {\n\t\t\t\texternalMap[alias] = v.var;\n\t\t\t});\n\t\t}\n\t});\n\n\tconst plugins: Plugin[] = [\n\t\t{\n\t\t\tname: \"fast-vite-plugin-cdn-import\",\n\t\t\tenforce: \"pre\",\n\t\t\tconfig(_, { command }): UserConfig {\n\t\t\t\tisBuild = command === \"build\";\n\n\t\t\t\tconst userConfig: UserConfig = {\n\t\t\t\t\tbuild: {\n\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\tplugins: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tif (isBuild) {\n\t\t\t\t\tuserConfig.build.rollupOptions.plugins = [externalGlobals(externalMap)];\n\t\t\t\t}\n\n\t\t\t\treturn userConfig;\n\t\t\t},\n\t\t\ttransformIndexHtml(html): string | HtmlTagDescriptor[] {\n\t\t\t\tif (!isBuild && !enableInDevMode) {\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\n\t\t\t\tconst descriptors: HtmlTagDescriptor[] = [];\n\n\t\t\t\tdata.forEach((v) => {\n\t\t\t\t\tv.pathList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateScriptTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"script\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((url) => {\n\t\t\t\t\t\tconst cusomize = generateCssLinkTag?.(v.name, url) || {};\n\t\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t\thref: url,\n\t\t\t\t\t\t\trel: \"stylesheet\",\n\t\t\t\t\t\t\tcrossorigin: \"anonymous\",\n\t\t\t\t\t\t\t...(v?.attrs ?? {}),\n\t\t\t\t\t\t\t...cusomize.attrs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdescriptors.push({\n\t\t\t\t\t\t\ttag: \"link\",\n\t\t\t\t\t\t\tattrs,\n\t\t\t\t\t\t\t...cusomize,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treturn descriptors;\n\t\t\t},\n\t\t},\n\t];\n\n\tif (isDev && enableInDevMode) {\n\t\tplugins.push(\n\t\t\tviteExternalsPlugin(externalMap, {\n\t\t\t\tenforce: \"pre\",\n\t\t\t})\n\t\t);\n\t}\n\n\treturn plugins;\n}\n\nexport { cdnImport, cdnJsDelivrUrl, cdnUnpkgUrl };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { AutoImportOptions } from \"./type\";\nimport type { Plugin, ResolvedConfig, ViteDevServer } from \"vite\";\n\n/**\n * 将路径转换为 Unix 风格\n */\nfunction slash(path: string): string {\n\treturn path.replace(/\\\\/g, \"/\");\n}\n\n/**\n * Pascal Case 转换\n */\nfunction pascalCase(str: string): string {\n\treturn str.replace(/[-_](\\w)/g, (_, c) => (c ? c.toUpperCase() : \"\")).replace(/^\\w/, (c) => c.toUpperCase());\n}\n\n/**\n * 组件自动导入\n * @param options 选项\n */\nfunction componentAutoImport(options: AutoImportOptions = {}): Plugin {\n\tconst {\n\t\tdir = \"src/components\",\n\t\texportPath = \"src/components/index.ts\",\n\t\tdts = true,\n\t\tdtsPath = \"types/component.d.ts\",\n\t\tdeep = true,\n\t\textensions = [\"vue\", \"tsx\", \"jsx\"],\n\t\tformatter,\n\t} = options;\n\n\tlet config: ResolvedConfig;\n\tconst componentMap = new Map<\n\t\tstring,\n\t\t{\n\t\t\t/** 组件名称 (PascalCase) */\n\t\t\tname: string;\n\t\t\t/** 组件文件路径 (绝对路径) */\n\t\t\tfrom: string;\n\t\t}\n\t>();\n\tlet watcher: fs.FSWatcher | null = null;\n\n\t/** 从文件路径获取组件名 */\n\tconst getNameFromPath = (filePath: string): string => {\n\t\t// 移除扩展名\n\t\tlet name = filePath;\n\t\tfor (const ext of extensions) {\n\t\t\tif (name.endsWith(`.${ext}`)) {\n\t\t\t\tname = name.slice(0, -ext.length - 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// 如果是 index 文件,使用父目录名\n\t\tif (name.endsWith(\"/index\") || name.endsWith(\"\\\\index\")) {\n\t\t\tconst parts = name.split(/[\\\\/]/);\n\t\t\tname = parts[parts.length - 2] || parts[parts.length - 1];\n\t\t} else {\n\t\t\tconst parts = name.split(/[\\\\/]/);\n\t\t\tname = parts[parts.length - 1];\n\t\t}\n\n\t\tif (formatter) {\n\t\t\treturn formatter(name);\n\t\t} else {\n\t\t\treturn pascalCase(name);\n\t\t}\n\t};\n\n\t/** 递归扫描目录 */\n\tconst scanDirectory = (dirPath: string, depth = 0): string[] => {\n\t\tconst files: string[] = [];\n\n\t\tif (!fs.existsSync(dirPath)) {\n\t\t\treturn files;\n\t\t}\n\n\t\tconst entries = fs.readdirSync(dirPath, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = path.join(dirPath, entry.name);\n\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\t// 跳过 node_modules 等\n\t\t\t\tif (entry.name === \"node_modules\" || entry.name.startsWith(\". \")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// 深度扫描\n\t\t\t\tif (deep || depth === 0) {\n\t\t\t\t\tfiles.push(...scanDirectory(fullPath, depth + 1));\n\t\t\t\t}\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\t// 检查文件扩展名\n\t\t\t\tconst ext = path.extname(entry.name).slice(1);\n\t\t\t\tif (extensions.includes(ext)) {\n\t\t\t\t\tfiles.push(fullPath);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn files;\n\t};\n\n\t/** 扫描组件文件 */\n\tconst scanComponents = (): void => {\n\t\tcomponentMap.clear();\n\n\t\tconst fullDir = path.resolve(config.root, dir);\n\n\t\tif (!fs.existsSync(fullDir)) {\n\t\t\tconsole.warn(`[component-auto-import] Directory not found: ${fullDir}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst files = scanDirectory(fullDir);\n\n\t\tfiles.forEach((absolutePath) => {\n\t\t\tconst relativePath = path.relative(fullDir, absolutePath);\n\t\t\tconst componentName = getNameFromPath(relativePath);\n\n\t\t\tcomponentMap.set(componentName, {\n\t\t\t\tname: componentName,\n\t\t\t\tfrom: absolutePath,\n\t\t\t});\n\t\t});\n\t};\n\n\t/** 生成自动注册文件 */\n\tconst generateAutoRegister = (): void => {\n\t\tif (componentMap.size === 0) return;\n\n\t\tconst components = Array.from(componentMap.values()).sort((a, b) => a.name.localeCompare(b.name));\n\n\t\tconst registerFilePath = path.resolve(config.root, exportPath);\n\t\tconst componentDir = path.dirname(registerFilePath);\n\n\t\tconst lines: string[] = [];\n\t\tlines.push(\"/* eslint-disable */\");\n\t\tlines.push(\"/* prettier-ignore */\");\n\t\tlines.push(\"// @ts-nocheck\");\n\t\tlines.push(\"// Auto-generated by fast component-auto-import\");\n\t\tlines.push(\"// Generated by fast-vite-plugins\");\n\t\tlines.push(\"// Do not edit this file manually\");\n\t\tlines.push(\"\");\n\t\tlines.push('import type { App } from \"vue\";');\n\t\tlines.push(\"\");\n\n\t\t// 生成 import 语句\n\t\tcomponents.forEach(({ name, from }) => {\n\t\t\tconst relativePath = slash(path.relative(componentDir, from));\n\t\t\tconst importPath = relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n\t\t\tlines.push(`import ${name} from \"${importPath}\";`);\n\t\t\tlines.push(`export { ${name} };`);\n\t\t\tlines.push(`export type ${name}Instance = InstanceType<typeof ${name}>;`);\n\t\t});\n\n\t\tlines.push(\"\");\n\t\tlines.push(\"/** 自动注册所有组件 */\");\n\t\tlines.push(\"export function registerComponents(app: App): void {\");\n\n\t\tcomponents.forEach(({ name }) => {\n\t\t\tlines.push(`\tapp.component(${name}.name, ${name});`);\n\t\t});\n\n\t\tlines.push(\"}\");\n\t\tlines.push(\"\");\n\n\t\tconst code = `${lines.join(\"\\n\")}\\n`;\n\n\t\tconst existingCode = fs.existsSync(registerFilePath) ? fs.readFileSync(registerFilePath, \"utf-8\") : \"\";\n\n\t\tif (code !== existingCode) {\n\t\t\tfs.writeFileSync(registerFilePath, code, \"utf-8\");\n\t\t}\n\t};\n\n\t/** 生成类型声明文件 */\n\tconst generateDts = (): void => {\n\t\tif (!dts || componentMap.size === 0) return;\n\n\t\tconst components = Array.from(componentMap.values()).sort((a, b) => a.name.localeCompare(b.name));\n\n\t\tconst dtsFullPath = path.resolve(config.root, dtsPath);\n\t\tconst dtsDir = path.dirname(dtsFullPath);\n\n\t\t// 生成类型声明内容\n\t\tconst lines: string[] = [];\n\t\tlines.push(\"// For this project development\");\n\t\tlines.push(\"// Auto-generated by fast component-auto-import\");\n\t\tlines.push(\"// Generated by fast-vite-plugins\");\n\t\tlines.push(\"// Do not edit this file manually\");\n\t\tlines.push(\"\");\n\t\tlines.push('import \"@vue/runtime-core\";');\n\t\tlines.push(\"\");\n\t\tlines.push(\"// GlobalComponents for Volar\");\n\t\tlines.push('declare module \"@vue/runtime-core\" {');\n\t\tlines.push(\"\texport interface GlobalComponents {\");\n\n\t\tcomponents.forEach(({ name, from }) => {\n\t\t\t// 计算相对路径\n\t\t\tlet relativePath = slash(path.relative(dtsDir, from));\n\n\t\t\t// 移除文件扩展名\n\t\t\trelativePath = relativePath.replace(/\\.(vue|tsx|jsx)$/, \"\");\n\n\t\t\t// 确保以 ./ 开头\n\t\t\tconst importPath = relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n\n\t\t\tlines.push(`\t\t${name}: (typeof import(\"${importPath}\"))[\"default\"];`);\n\t\t});\n\n\t\tlines.push(\"\t}\");\n\t\tlines.push(\"}\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"export {};\");\n\n\t\tconst code = `${lines.join(\"\\n\")}\\n`;\n\n\t\t// 确保目录存在\n\t\tif (!fs.existsSync(dtsDir)) {\n\t\t\tfs.mkdirSync(dtsDir, { recursive: true });\n\t\t}\n\n\t\t// 只有内容变化时才写入\n\t\tconst existingCode = fs.existsSync(dtsFullPath) ? fs.readFileSync(dtsFullPath, \"utf-8\") : \"\";\n\n\t\tif (code !== existingCode) {\n\t\t\tfs.writeFileSync(dtsFullPath, code, \"utf-8\");\n\t\t}\n\t};\n\n\treturn {\n\t\tname: \"fast-vite-plugin-component-auto-import\",\n\t\tenforce: \"post\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tscanComponents();\n\t\t\tgenerateAutoRegister();\n\t\t\tgenerateDts();\n\t\t},\n\t\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n\t\tconfigureServer(server: ViteDevServer) {\n\t\t\tconst fullDir = path.resolve(config.root, dir);\n\n\t\t\t// 监听文件变化\n\t\t\tif (fs.existsSync(fullDir)) {\n\t\t\t\twatcher = fs.watch(fullDir, { recursive: true }, (eventType, filename) => {\n\t\t\t\t\tif (!filename) return;\n\t\t\t\t\t// 忽略 .d.ts 文件\n\t\t\t\t\tif (filename.endsWith(\".d.ts\")) return;\n\n\t\t\t\t\t// 检查是否是组件文件\n\t\t\t\t\tconst ext = path.extname(filename).slice(1);\n\t\t\t\t\tif (!extensions.includes(ext)) return;\n\n\t\t\t\t\tscanComponents();\n\t\t\t\t\tgenerateAutoRegister();\n\t\t\t\t\tgenerateDts();\n\n\t\t\t\t\t// 通知客户端刷新\n\t\t\t\t\tserver.ws.send({ type: \"full-reload\", path: \"*\" });\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tbuildEnd(): void | Promise<void> {\n\t\t\t// 关闭监听器\n\t\t\tif (watcher) {\n\t\t\t\twatcher.close();\n\t\t\t\twatcher = null;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { componentAutoImport };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nfunction padZero(num: number, length = 2): string {\n\treturn num.toString().padStart(length, \"0\");\n}\n\nfunction formatDate(date: Date): string {\n\tconst year = date.getUTCFullYear();\n\tconst month = padZero(date.getUTCMonth() + 1);\n\tconst day = padZero(date.getUTCDate());\n\tconst hours = padZero(date.getUTCHours());\n\tconst minutes = padZero(date.getUTCMinutes());\n\tconst seconds = padZero(date.getUTCSeconds());\n\tconst milliseconds = padZero(date.getUTCMilliseconds(), 3);\n\n\treturn `Z ${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;\n}\n\n/**\n * 版本更新插件\n * @param version 不要携带 'v',示例:1.0.0\n * @returns\n */\nfunction versionUpdatePlugin(version: string): Plugin {\n\tlet config: ResolvedConfig;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-version-update\",\n\t\tconfigResolved: (resolvedConfig: ResolvedConfig): void | Promise<void> => {\n\t\t\t// 存储最终解析的配置\n\t\t\tconfig = resolvedConfig;\n\t\t},\n\t\tbuildStart(): void | Promise<void> {\n\t\t\tconst curDate = new Date();\n\n\t\t\tconst dateTime = formatDate(curDate);\n\n\t\t\tconst versionDir = config.publicDir;\n\t\t\tconst versionPath = path.join(versionDir, \"version.json\");\n\t\t\tif (!fs.existsSync(versionDir)) {\n\t\t\t\tfs.mkdirSync(versionDir);\n\t\t\t}\n\n\t\t\t// 写入版本信息文件\n\t\t\tconst content = JSON.stringify({ version: `v${version}`, dateTime }, null, 4);\n\t\t\tfs.writeFileSync(versionPath, content);\n\n\t\t\tconst pkgPath = path.join(config.base, \"package.json\");\n\t\t\tif (fs.existsSync(pkgPath)) {\n\t\t\t\tconst pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n\t\t\t\tpkgJson.version = version;\n\t\t\t\tfs.writeFileSync(pkgPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { versionUpdatePlugin };\n"],"mappings":"AAAA,OAAOA,MAAQ,KACf,OAAOC,MAAU,OAOjB,IAAMC,EAAeC,GAAoF,CAExG,IAAMC,EAAkF,CAAC,EAMzF,OAJiBJ,EAAG,YAAYG,EAAK,CACpC,cAAe,EAChB,CAAC,EAEQ,QAASE,GAAS,CAC1B,GAAIA,EAAK,YAAY,EACpBD,EAAY,KAAK,GAAGF,EAAYD,EAAK,KAAKE,EAAKE,EAAK,IAAI,CAAC,CAAC,MACpD,CACN,IAAMC,EAAWD,EAAK,KAAK,QAAQ,OAAQ,EAAE,EAEvCE,EAAaP,EACjB,aAAaC,EAAK,KAAKE,EAAKE,EAAK,IAAI,EAAG,OAAO,EAC/C,QAAQ,eAAgB,EAAE,EAC1B,QAAQ,oBAAqB,EAAE,EAE/B,UAAU,EACV,QAAQ,EAER,QAAQ,kBAAmB,CAACG,EAAOC,IAAS,CAC5C,IAAMC,EAAeD,EAAK,MAAM,iBAAiB,EAC3CE,EAAaF,EAAK,MAAM,eAAe,EACvCG,EAAcH,EAAK,MAAM,gBAAgB,EAC3CI,EAAQ,KACRC,EAAS,KACTH,IACHE,EAAQF,EAAW,CAAC,GAEjBC,IACHE,EAASF,EAAY,CAAC,GAEvB,IAAIG,EAAiB,GACrB,OAAKL,EAGJK,EAAiBL,EAAa,CAAC,EAF/BK,EAAiB,gBAAgBF,CAAK,IAAIC,CAAM,IAI1C,2CAA2CC,CAAc,GACjE,CAAC,EAEFX,EAAY,KAAK,CAEhB,SAAAE,EACA,cAAeA,EAAS,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAS,MAAM,CAAC,EAClE,YAAaC,CACd,CAAC,CACF,CACD,CAAC,EAEMH,EAAY,KAAK,CAACY,EAAGC,IACvBD,EAAE,SAAWC,EAAE,SACX,GAEJD,EAAE,SAAWC,EAAE,SACX,EAED,CACP,CACF,EAKMC,EAAe,CAACC,EAAuBC,EAAiBb,IAA6B,CAC1FP,EAAG,UAAUoB,EAAS,CAAE,UAAW,EAAK,CAAC,EAEzC,IAAMC,EAAmB;AAAA;AAAA;AAAA,KAGrBF,CAAa;AAAA;AAAA,eAEHA,CAAa;AAAA,UAClBA,CAAa;AAAA;AAAA;AAAA,EAGrBZ,EACA,MAAM;AAAA,CAAI,EACV,IAAKe,GAAS,MAAMA,CAAI,EAAE,EAC1B,KAAK;AAAA,CAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,iBAKKH,CAAa;AAAA,EAG7BnB,EAAG,cAAcC,EAAK,KAAKmB,EAAS,WAAW,EAAGC,CAAgB,CACnE,EAOA,SAASE,EAAapB,EAAaqB,EAA0B,CAC5D,GAAI,CAACrB,GAAO,CAACqB,EAAU,OAEvB,IAAIC,EAEJ,MAAO,CACN,KAAM,kCACN,eAAiBC,GAAyD,CAEzED,EAASC,CACV,EACA,YAAmC,CAClC,IAAMC,EAAWzB,EAAYD,EAAK,QAAQwB,EAAO,KAAMtB,CAAG,CAAC,EAErDyB,EAAY3B,EAAK,QAAQwB,EAAO,KAAMD,CAAQ,EACpDxB,EAAG,UAAU4B,EAAW,CAAE,UAAW,EAAK,CAAC,EAE3C,IAAIC,EAAoB,GACpBC,EAAkB,GAClBC,EAAgB,GAEpBJ,EAAS,QAAQ,CAACK,EAAKC,IAAQ,CAC9Bf,EAAac,EAAI,cAAe/B,EAAK,KAAK2B,EAAWI,EAAI,QAAQ,EAAGA,EAAI,WAAW,EAEnFH,GAAqB,YAAYG,EAAI,aAAa,cAAcA,EAAI,QAAQ;AAAA,EAG5EF,GAAmB,IAAIE,EAAI,aAAa,IAExCD,GAAiB,oBAAoBC,EAAI,QAAQ;AAAA,EAG7CC,EAAM,EAAIN,EAAS,SACtBG,GAAmB;AAAA,EAErB,CAAC,EAED9B,EAAG,cACFC,EAAK,KAAK2B,EAAW,UAAU,EAC/B;AAAA,EACFC,CAAiB;AAAA,EACjBE,CAAa;AAAA;AAAA,EAEbD,CAAe;AAAA;AAAA,CAGd,CACD,CACD,CACD,CC1JA,OAAOI,MAAQ,KACf,OAAOC,MAAU,OACjB,OAAOC,MAAqB,iCAC5B,OAAS,uBAAAC,MAA2B,wBAIpC,IAAMC,EAAQ,QAAQ,IAAI,WAAa,cAOvC,SAASC,EAAiBC,EAAsB,CAC/C,IAAMC,EAAM,QAAQ,IAAI,EAClBC,EAAUP,EAAK,KAAKM,EAAK,eAAgBD,EAAM,cAAc,EACnE,OAAIN,EAAG,WAAWQ,CAAO,EACR,KAAK,MAAMR,EAAG,aAAaQ,EAAS,MAAM,CAAC,EAC5C,QAGT,EACR,CAOA,SAASC,EAAWR,EAAuB,CAC1C,MAAO,GAAAA,EAAK,WAAW,OAAO,GAAKA,EAAK,WAAW,QAAQ,GAAKA,EAAK,WAAW,IAAI,EACrF,CAEA,SAASS,EACRC,EACAC,EAKS,CACT,GAAM,CAAE,KAAAX,CAAK,EAAIW,EACjB,OAAIH,EAAWR,CAAI,IAClBU,EAAMV,GAEAU,EACL,QAAQ,YAAaC,EAAK,IAAI,EAC9B,QAAQ,eAAgBA,EAAK,OAAO,EACpC,QAAQ,YAAaX,CAAI,CAC5B,CAEA,SAASY,EAAcC,EAAgBC,EAAuE,CAC7GA,EAAUD,EAAO,SAAWC,EAC5B,IAAMC,EAAIF,EACJG,EAAUH,EAAO,SAAWT,EAAiBW,EAAE,IAAI,EACrDE,EAAqB,CAAC,EACrB,MAAM,QAAQF,EAAE,IAAI,EAGxBE,EAAWF,EAAE,KAFbE,EAAS,KAAKF,EAAE,IAAI,EAKrB,IAAMJ,EAAO,CACZ,GAAGI,EACH,QAAAC,CACD,EAEAC,EAAWA,EAAS,IAAKC,GAAM,CAC9B,GAAI,CAACF,GAAW,CAACR,EAAWU,CAAC,EAC5B,MAAM,IAAI,MAAM,YAAYP,EAAK,IAAI,mCAAmC,EAEzE,OAAOF,EAAUK,EAAS,CACzB,KAAMH,EAAK,KACX,QAASA,EAAK,QACd,KAAMO,CACP,CAAC,CACF,CAAC,EAED,IAAIC,EAAMJ,EAAE,KAAO,CAAC,EAChB,CAAC,MAAM,QAAQI,CAAG,GAAKA,IAC1BA,EAAM,CAACA,CAAG,GAGX,IAAMC,EAAW,MAAM,QAAQD,CAAG,EAE/BA,EAAI,IAAKE,GACTZ,EAAUK,EAAS,CAClB,KAAMH,EAAK,KACX,QAASA,EAAK,QACd,KAAMU,CACP,CAAC,CACF,EAPC,CAAC,EASJ,MAAO,CACN,GAAGN,EACH,QAAAC,EACA,SAAAC,EACA,QAAAG,CACD,CACD,CAEA,IAAME,EAAiB,uDACjBC,GAAc,+CAOpB,SAASC,GAAUC,EAAqC,CACvD,GAAM,CAAE,QAAAC,EAAU,CAAC,EAAG,QAAAZ,EAAUQ,EAAgB,gBAAAK,EAAkB,GAAO,mBAAAC,EAAoB,kBAAAC,CAAkB,EAAIJ,EAE/GK,EAAU,GAERnB,GAAQ,MAAM,QAAQe,CAAO,EAAIA,EAAU,CAACA,CAAO,GACvD,IAAKX,GAAO,OAAOA,GAAM,WAAaA,EAAED,CAAO,EAAIC,CAAE,EACrD,IAAKA,GAAMH,EAAcG,EAAGD,CAAO,CAAC,EAEhCiB,EAEF,CAAC,EAELpB,EAAK,QAASI,GAAM,CACnBgB,EAAYhB,EAAE,IAAI,EAAIA,EAAE,IACpB,MAAM,QAAQA,EAAE,KAAK,GACxBA,EAAE,MAAM,QAASiB,GAAU,CAC1BD,EAAYC,CAAK,EAAIjB,EAAE,GACxB,CAAC,CAEH,CAAC,EAED,IAAMkB,EAAoB,CACzB,CACC,KAAM,8BACN,QAAS,MACT,OAAOC,EAAG,CAAE,QAAAC,CAAQ,EAAe,CAClCL,EAAUK,IAAY,QAEtB,IAAMC,EAAyB,CAC9B,MAAO,CACN,cAAe,CACd,QAAS,CAAC,CACX,CACD,CACD,EAEA,OAAIN,IACHM,EAAW,MAAM,cAAc,QAAU,CAACnC,EAAgB8B,CAAW,CAAC,GAGhEK,CACR,EACA,mBAAmBC,EAAoC,CACtD,GAAI,CAACP,GAAW,CAACH,EAChB,OAAOU,EAGR,IAAMC,EAAmC,CAAC,EAE1C,OAAA3B,EAAK,QAASI,GAAM,CACnBA,EAAE,SAAS,QAASL,GAAQ,CAC3B,IAAM6B,EAAWV,IAAoBd,EAAE,KAAML,CAAG,GAAK,CAAC,EAChD8B,EAAQ,CACb,IAAK9B,EACL,YAAa,YACb,GAAIK,GAAG,OAAS,CAAC,EACjB,GAAGwB,EAAS,KACb,EAEAD,EAAY,KAAK,CAChB,IAAK,SACL,MAAAE,EACA,GAAGD,CACJ,CAAC,CACF,CAAC,EACDxB,EAAE,QAAQ,QAASL,GAAQ,CAC1B,IAAM6B,EAAWX,IAAqBb,EAAE,KAAML,CAAG,GAAK,CAAC,EACjD8B,EAAQ,CACb,KAAM9B,EACN,IAAK,aACL,YAAa,YACb,GAAIK,GAAG,OAAS,CAAC,EACjB,GAAGwB,EAAS,KACb,EACAD,EAAY,KAAK,CAChB,IAAK,OACL,MAAAE,EACA,GAAGD,CACJ,CAAC,CACF,CAAC,CACF,CAAC,EAEMD,CACR,CACD,CACD,EAEA,OAAInC,GAASwB,GACZM,EAAQ,KACP/B,EAAoB6B,EAAa,CAChC,QAAS,KACV,CAAC,CACF,EAGME,CACR,CC/MA,OAAOQ,MAAQ,KACf,OAAOC,MAAU,OAOjB,SAASC,EAAMD,EAAsB,CACpC,OAAOA,EAAK,QAAQ,MAAO,GAAG,CAC/B,CAKA,SAASE,EAAWC,EAAqB,CACxC,OAAOA,EAAI,QAAQ,YAAa,CAACC,EAAGC,IAAOA,EAAIA,EAAE,YAAY,EAAI,EAAG,EAAE,QAAQ,MAAQA,GAAMA,EAAE,YAAY,CAAC,CAC5G,CAMA,SAASC,GAAoBC,EAA6B,CAAC,EAAW,CACrE,GAAM,CACL,IAAAC,EAAM,iBACN,WAAAC,EAAa,0BACb,IAAAC,EAAM,GACN,QAAAC,EAAU,uBACV,KAAAC,EAAO,GACP,WAAAC,EAAa,CAAC,MAAO,MAAO,KAAK,EACjC,UAAAC,CACD,EAAIP,EAEAQ,EACEC,EAAe,IAAI,IASrBC,EAA+B,KAG7BC,EAAmBC,GAA6B,CAErD,IAAIC,EAAOD,EACX,QAAWE,KAAOR,EACjB,GAAIO,EAAK,SAAS,IAAIC,CAAG,EAAE,EAAG,CAC7BD,EAAOA,EAAK,MAAM,EAAG,CAACC,EAAI,OAAS,CAAC,EACpC,KACD,CAID,GAAID,EAAK,SAAS,QAAQ,GAAKA,EAAK,SAAS,SAAS,EAAG,CACxD,IAAME,EAAQF,EAAK,MAAM,OAAO,EAChCA,EAAOE,EAAMA,EAAM,OAAS,CAAC,GAAKA,EAAMA,EAAM,OAAS,CAAC,CACzD,KAAO,CACN,IAAMA,EAAQF,EAAK,MAAM,OAAO,EAChCA,EAAOE,EAAMA,EAAM,OAAS,CAAC,CAC9B,CAEA,OAAIR,EACIA,EAAUM,CAAI,EAEdlB,EAAWkB,CAAI,CAExB,EAGMG,EAAgB,CAACC,EAAiBC,EAAQ,IAAgB,CAC/D,IAAMC,EAAkB,CAAC,EAEzB,GAAI,CAAC3B,EAAG,WAAWyB,CAAO,EACzB,OAAOE,EAGR,IAAMC,EAAU5B,EAAG,YAAYyB,EAAS,CAAE,cAAe,EAAK,CAAC,EAE/D,QAAWI,KAASD,EAAS,CAC5B,IAAME,EAAW7B,EAAK,KAAKwB,EAASI,EAAM,IAAI,EAE9C,GAAIA,EAAM,YAAY,EAAG,CAExB,GAAIA,EAAM,OAAS,gBAAkBA,EAAM,KAAK,WAAW,IAAI,EAC9D,UAIGhB,GAAQa,IAAU,IACrBC,EAAM,KAAK,GAAGH,EAAcM,EAAUJ,EAAQ,CAAC,CAAC,CAElD,SAAWG,EAAM,OAAO,EAAG,CAE1B,IAAMP,EAAMrB,EAAK,QAAQ4B,EAAM,IAAI,EAAE,MAAM,CAAC,EACxCf,EAAW,SAASQ,CAAG,GAC1BK,EAAM,KAAKG,CAAQ,CAErB,CACD,CAEA,OAAOH,CACR,EAGMI,EAAiB,IAAY,CAClCd,EAAa,MAAM,EAEnB,IAAMe,EAAU/B,EAAK,QAAQe,EAAO,KAAMP,CAAG,EAE7C,GAAI,CAACT,EAAG,WAAWgC,CAAO,EAAG,CAC5B,QAAQ,KAAK,gDAAgDA,CAAO,EAAE,EACtE,MACD,CAEcR,EAAcQ,CAAO,EAE7B,QAASC,GAAiB,CAC/B,IAAMC,EAAejC,EAAK,SAAS+B,EAASC,CAAY,EAClDE,EAAgBhB,EAAgBe,CAAY,EAElDjB,EAAa,IAAIkB,EAAe,CAC/B,KAAMA,EACN,KAAMF,CACP,CAAC,CACF,CAAC,CACF,EAGMG,EAAuB,IAAY,CACxC,GAAInB,EAAa,OAAS,EAAG,OAE7B,IAAMoB,EAAa,MAAM,KAAKpB,EAAa,OAAO,CAAC,EAAE,KAAK,CAACqB,EAAGC,IAAMD,EAAE,KAAK,cAAcC,EAAE,IAAI,CAAC,EAE1FC,EAAmBvC,EAAK,QAAQe,EAAO,KAAMN,CAAU,EACvD+B,EAAexC,EAAK,QAAQuC,CAAgB,EAE5CE,EAAkB,CAAC,EACzBA,EAAM,KAAK,sBAAsB,EACjCA,EAAM,KAAK,uBAAuB,EAClCA,EAAM,KAAK,gBAAgB,EAC3BA,EAAM,KAAK,iDAAiD,EAC5DA,EAAM,KAAK,mCAAmC,EAC9CA,EAAM,KAAK,mCAAmC,EAC9CA,EAAM,KAAK,EAAE,EACbA,EAAM,KAAK,iCAAiC,EAC5CA,EAAM,KAAK,EAAE,EAGbL,EAAW,QAAQ,CAAC,CAAE,KAAAhB,EAAM,KAAAsB,CAAK,IAAM,CACtC,IAAMT,EAAehC,EAAMD,EAAK,SAASwC,EAAcE,CAAI,CAAC,EACtDC,EAAaV,EAAa,WAAW,GAAG,EAAIA,EAAe,KAAKA,CAAY,GAClFQ,EAAM,KAAK,UAAUrB,CAAI,UAAUuB,CAAU,IAAI,EACjDF,EAAM,KAAK,YAAYrB,CAAI,KAAK,EAChCqB,EAAM,KAAK,eAAerB,CAAI,kCAAkCA,CAAI,IAAI,CACzE,CAAC,EAEDqB,EAAM,KAAK,EAAE,EACbA,EAAM,KAAK,yDAAiB,EAC5BA,EAAM,KAAK,sDAAsD,EAEjEL,EAAW,QAAQ,CAAC,CAAE,KAAAhB,CAAK,IAAM,CAChCqB,EAAM,KAAK,kBAAkBrB,CAAI,UAAUA,CAAI,IAAI,CACpD,CAAC,EAEDqB,EAAM,KAAK,GAAG,EACdA,EAAM,KAAK,EAAE,EAEb,IAAMG,EAAO,GAAGH,EAAM,KAAK;AAAA,CAAI,CAAC;AAAA,EAE1BI,EAAe9C,EAAG,WAAWwC,CAAgB,EAAIxC,EAAG,aAAawC,EAAkB,OAAO,EAAI,GAEhGK,IAASC,GACZ9C,EAAG,cAAcwC,EAAkBK,EAAM,OAAO,CAElD,EAGME,EAAc,IAAY,CAC/B,GAAI,CAACpC,GAAOM,EAAa,OAAS,EAAG,OAErC,IAAMoB,EAAa,MAAM,KAAKpB,EAAa,OAAO,CAAC,EAAE,KAAK,CAACqB,EAAGC,IAAMD,EAAE,KAAK,cAAcC,EAAE,IAAI,CAAC,EAE1FS,EAAc/C,EAAK,QAAQe,EAAO,KAAMJ,CAAO,EAC/CqC,EAAShD,EAAK,QAAQ+C,CAAW,EAGjCN,EAAkB,CAAC,EACzBA,EAAM,KAAK,iCAAiC,EAC5CA,EAAM,KAAK,iDAAiD,EAC5DA,EAAM,KAAK,mCAAmC,EAC9CA,EAAM,KAAK,mCAAmC,EAC9CA,EAAM,KAAK,EAAE,EACbA,EAAM,KAAK,6BAA6B,EACxCA,EAAM,KAAK,EAAE,EACbA,EAAM,KAAK,+BAA+B,EAC1CA,EAAM,KAAK,sCAAsC,EACjDA,EAAM,KAAK,sCAAsC,EAEjDL,EAAW,QAAQ,CAAC,CAAE,KAAAhB,EAAM,KAAAsB,CAAK,IAAM,CAEtC,IAAIT,EAAehC,EAAMD,EAAK,SAASgD,EAAQN,CAAI,CAAC,EAGpDT,EAAeA,EAAa,QAAQ,mBAAoB,EAAE,EAG1D,IAAMU,EAAaV,EAAa,WAAW,GAAG,EAAIA,EAAe,KAAKA,CAAY,GAElFQ,EAAM,KAAK,KAAKrB,CAAI,qBAAqBuB,CAAU,iBAAiB,CACrE,CAAC,EAEDF,EAAM,KAAK,IAAI,EACfA,EAAM,KAAK,GAAG,EACdA,EAAM,KAAK,EAAE,EACbA,EAAM,KAAK,YAAY,EAEvB,IAAMG,EAAO,GAAGH,EAAM,KAAK;AAAA,CAAI,CAAC;AAAA,EAG3B1C,EAAG,WAAWiD,CAAM,GACxBjD,EAAG,UAAUiD,EAAQ,CAAE,UAAW,EAAK,CAAC,EAIzC,IAAMH,EAAe9C,EAAG,WAAWgD,CAAW,EAAIhD,EAAG,aAAagD,EAAa,OAAO,EAAI,GAEtFH,IAASC,GACZ9C,EAAG,cAAcgD,EAAaH,EAAM,OAAO,CAE7C,EAEA,MAAO,CACN,KAAM,yCACN,QAAS,OACT,eAAiBK,GAAyD,CAEzElC,EAASkC,CACV,EACA,YAAmC,CAClCnB,EAAe,EACfK,EAAqB,EACrBW,EAAY,CACb,EAEA,gBAAgBI,EAAuB,CACtC,IAAMnB,EAAU/B,EAAK,QAAQe,EAAO,KAAMP,CAAG,EAGzCT,EAAG,WAAWgC,CAAO,IACxBd,EAAUlB,EAAG,MAAMgC,EAAS,CAAE,UAAW,EAAK,EAAG,CAACoB,EAAWC,IAAa,CAGzE,GAFI,CAACA,GAEDA,EAAS,SAAS,OAAO,EAAG,OAGhC,IAAM/B,EAAMrB,EAAK,QAAQoD,CAAQ,EAAE,MAAM,CAAC,EACrCvC,EAAW,SAASQ,CAAG,IAE5BS,EAAe,EACfK,EAAqB,EACrBW,EAAY,EAGZI,EAAO,GAAG,KAAK,CAAE,KAAM,cAAe,KAAM,GAAI,CAAC,EAClD,CAAC,EAEH,EACA,UAAiC,CAE5BjC,IACHA,EAAQ,MAAM,EACdA,EAAU,KAEZ,CACD,CACD,CCxRA,OAAOoC,MAAQ,KACf,OAAOC,MAAU,OAGjB,SAASC,EAAQC,EAAaC,EAAS,EAAW,CACjD,OAAOD,EAAI,SAAS,EAAE,SAASC,EAAQ,GAAG,CAC3C,CAEA,SAASC,EAAWC,EAAoB,CACvC,IAAMC,EAAOD,EAAK,eAAe,EAC3BE,EAAQN,EAAQI,EAAK,YAAY,EAAI,CAAC,EACtCG,EAAMP,EAAQI,EAAK,WAAW,CAAC,EAC/BI,EAAQR,EAAQI,EAAK,YAAY,CAAC,EAClCK,EAAUT,EAAQI,EAAK,cAAc,CAAC,EACtCM,EAAUV,EAAQI,EAAK,cAAc,CAAC,EACtCO,EAAeX,EAAQI,EAAK,mBAAmB,EAAG,CAAC,EAEzD,MAAO,KAAKC,CAAI,IAAIC,CAAK,IAAIC,CAAG,IAAIC,CAAK,IAAIC,CAAO,IAAIC,CAAO,IAAIC,CAAY,EAChF,CAOA,SAASC,GAAoBC,EAAyB,CACrD,IAAIC,EAEJ,MAAO,CACN,KAAM,kCACN,eAAiBC,GAAyD,CAEzED,EAASC,CACV,EACA,YAAmC,CAGlC,IAAMC,EAAWb,EAFD,IAAI,IAEe,EAE7Bc,EAAaH,EAAO,UACpBI,EAAcnB,EAAK,KAAKkB,EAAY,cAAc,EACnDnB,EAAG,WAAWmB,CAAU,GAC5BnB,EAAG,UAAUmB,CAAU,EAIxB,IAAME,EAAU,KAAK,UAAU,CAAE,QAAS,IAAIN,CAAO,GAAI,SAAAG,CAAS,EAAG,KAAM,CAAC,EAC5ElB,EAAG,cAAcoB,EAAaC,CAAO,EAErC,IAAMC,EAAUrB,EAAK,KAAKe,EAAO,KAAM,cAAc,EACrD,GAAIhB,EAAG,WAAWsB,CAAO,EAAG,CAC3B,IAAMC,EAAU,KAAK,MAAMvB,EAAG,aAAasB,EAAS,OAAO,CAAC,EAC5DC,EAAQ,QAAUR,EAClBf,EAAG,cAAcsB,EAAS,KAAK,UAAUC,EAAS,KAAM,CAAC,EAAG,OAAO,CACpE,CACD,CACD,CACD","names":["fs","path","findSvgFile","dir","svgContents","file","iconName","svgContent","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTSXIcon","componentName","iconDir","componentContent","line","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","svg","idx","fs","path","externalGlobals","viteExternalsPlugin","isDev","getModuleVersion","name","pwd","pkgFile","isFullPath","renderUrl","url","data","getModuleInfo","module","prodUrl","v","version","pathList","p","css","cssList","c","cdnJsDelivrUrl","cdnUnpkgUrl","cdnImport","options","modules","enableInDevMode","generateCssLinkTag","generateScriptTag","isBuild","externalMap","alias","plugins","_","command","userConfig","html","descriptors","cusomize","attrs","fs","path","slash","pascalCase","str","_","c","componentAutoImport","options","dir","exportPath","dts","dtsPath","deep","extensions","formatter","config","componentMap","watcher","getNameFromPath","filePath","name","ext","parts","scanDirectory","dirPath","depth","files","entries","entry","fullPath","scanComponents","fullDir","absolutePath","relativePath","componentName","generateAutoRegister","components","a","b","registerFilePath","componentDir","lines","from","importPath","code","existingCode","generateDts","dtsFullPath","dtsDir","resolvedConfig","server","eventType","filename","fs","path","padZero","num","length","formatDate","date","year","month","day","hours","minutes","seconds","milliseconds","versionUpdatePlugin","version","config","resolvedConfig","dateTime","versionDir","versionPath","content","pkgPath","pkgJson"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fast-vite-plugins",
3
- "version": "1.0.16",
3
+ "version": "1.0.17",
4
4
  "description": "Fast Vite插件库.",
5
5
  "type": "module",
6
6
  "keywords": [