fast-vite-plugins 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,72 @@
1
1
  [中](https://gitee.com/China-xiaoFang/fast.vite.plugins) | **En**
2
2
 
3
- # Fast.Vite.Plugins
3
+ <h1 align="center">Fast.Vite.Plugins</h1>
4
4
 
5
- - A plugin library for building projects based on `Vite`.
5
+ <p align="center">
6
+ A plugin library for building projects based on <code>Vite</code>.
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/package/fast-vite-plugins">
11
+ <img src="https://img.shields.io/npm/v/fast-vite-plugins?color=orange&label=" alt="version" />
12
+ </a>
13
+ <a href="https://gitee.com/China-xiaoFang/fast.vite.plugins/blob/master/LICENSE">
14
+ <img src="https://img.shields.io/npm/l/fast-vite-plugins" alt="license" />
15
+ </a>
16
+ </p>
17
+
18
+ ## Install
19
+
20
+ ```sh
21
+ # npm Install
22
+ npm install fast-vite-plugins -D
23
+ ```
24
+
25
+ ```sh
26
+ # pnpm Install (recommend)
27
+ pnpm install fast-vite-plugins -D
28
+ ```
29
+
30
+ ## Use
31
+
32
+ In `vite.config.ts`:
33
+
34
+ ```typescript
35
+ import { defineConfig } from "vite";
36
+ import { buildSvgIcon, cdnImport, tsxComponentAutoImport, vueComponentAutoImport, versionUpdatePlugin } from "fast-vite-plugins";
37
+
38
+ export default defineConfig({
39
+ plugins: [
40
+ /** Building native SVG icons */
41
+ buildSvgIcon("./src/assets/icons", "./src/icons"),
42
+ /** CDN Import */
43
+ cdnImport({
44
+ // Development environment uses CDN path
45
+ enableInDevMode: true,
46
+ prodUrl: "https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",
47
+ modules: [
48
+ {
49
+ name: "vue",
50
+ var: "Vue",
51
+ version: "3.4.27",
52
+ path: "dist/vue.global.prod.min.js"
53
+ },
54
+ {
55
+ name: "vue-router",
56
+ var: "VueRouter",
57
+ path: "4.2.2/dist/vue-router.global.prod.min.js"
58
+ }
59
+ ]
60
+ }),
61
+ /** Automatic import and export of TSX components */
62
+ tsxComponentAutoImport("./src/components"),
63
+ /** Automatic import and export of VUE components */
64
+ vueComponentAutoImport("./src/components"),
65
+ /** Package version number update */
66
+ versionUpdatePlugin("1.0.0"),
67
+ ]
68
+ })
69
+ ```
6
70
 
7
71
  ## Update log
8
72
 
@@ -34,6 +98,14 @@ WHETHER ARISING IN CONTRACT, TORT OR OTHERWISE, IN CONNECTION WITH THE SOFTWARE
34
98
  Please do not use it for projects that violate our country's laws
35
99
  ```
36
100
 
101
+ ## Contributors
102
+
103
+ Thank you for all their contributions!
104
+
105
+ <a href="https://github.com/China-xiaoFang/Fast.Vite.Plugins/graphs/contributors">
106
+ <img src="https://contrib.rocks/image?repo=China-xiaoFang/Fast.Vite.Plugins" />
107
+ </a>
108
+
37
109
  ## Supplementary instructions
38
110
 
39
111
  ```
package/README.zh.md CHANGED
@@ -1,8 +1,72 @@
1
1
  **中** | [En](https://github.com/China-xiaoFang/fast.vite.plugins)
2
2
 
3
- # Fast.Vite.Plugins
3
+ <h1 align="center">Fast.Vite.Plugins</h1>
4
4
 
5
- - 一个基于 `Vite` 构建项目的插件库。
5
+ <p align="center">
6
+ 一个基于 <code>Vite</code> 构建项目的插件库。
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/package/fast-vite-plugins">
11
+ <img src="https://img.shields.io/npm/v/fast-vite-plugins?color=orange&label=" alt="version" />
12
+ </a>
13
+ <a href="https://gitee.com/China-xiaoFang/fast.vite.plugins/blob/master/LICENSE">
14
+ <img src="https://img.shields.io/npm/l/fast-vite-plugins" alt="license" />
15
+ </a>
16
+ </p>
17
+
18
+ ## 安装
19
+
20
+ ```sh
21
+ # npm 安装
22
+ npm install fast-vite-plugins -D
23
+ ```
24
+
25
+ ```sh
26
+ # pnpm 安装(推荐)
27
+ pnpm install fast-vite-plugins -D
28
+ ```
29
+
30
+ ## 使用
31
+
32
+ 在 `vite.config.ts`:
33
+
34
+ ```typescript
35
+ import { defineConfig } from "vite";
36
+ import { buildSvgIcon, cdnImport, tsxComponentAutoImport, vueComponentAutoImport, versionUpdatePlugin } from "fast-vite-plugins";
37
+
38
+ export default defineConfig({
39
+ plugins: [
40
+ /** 构建本地 SVG 图标 */
41
+ buildSvgIcon("./src/assets/icons", "./src/icons"),
42
+ /** CDN 导入 */
43
+ cdnImport({
44
+ // 开发环境使用 CDN 路径
45
+ enableInDevMode: true,
46
+ prodUrl: "https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",
47
+ modules: [
48
+ {
49
+ name: "vue",
50
+ var: "Vue",
51
+ version: "3.4.27",
52
+ path: "dist/vue.global.prod.min.js"
53
+ },
54
+ {
55
+ name: "vue-router",
56
+ var: "VueRouter",
57
+ path: "4.2.2/dist/vue-router.global.prod.min.js"
58
+ }
59
+ ]
60
+ }),
61
+ /** TSX 组件自动导入导出 */
62
+ tsxComponentAutoImport("./src/components"),
63
+ /** VUE 组件自动导入导出 */
64
+ vueComponentAutoImport("./src/components"),
65
+ /** 打包版本号更新 */
66
+ versionUpdatePlugin("1.0.0"),
67
+ ]
68
+ })
69
+ ```
6
70
 
7
71
  ## 更新日志
8
72
 
@@ -34,6 +98,14 @@ Apache开源许可证
34
98
  请勿用于违反我国法律的项目上
35
99
  ```
36
100
 
101
+ ## 贡献者
102
+
103
+ 感谢他们的所做的一切贡献!
104
+
105
+ <a href="https://github.com/China-xiaoFang/Fast.Vite.Plugins/graphs/contributors">
106
+ <img src="https://contrib.rocks/image?repo=China-xiaoFang/Fast.Vite.Plugins" />
107
+ </a>
108
+
37
109
  ## 补充说明
38
110
 
39
111
  ```
package/dist/index.cjs CHANGED
@@ -1,49 +1,79 @@
1
- "use strict";var T=Object.create;var y=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty;var b=(t,n)=>{for(var e in n)y(t,e,{get:n[e],enumerable:!0})},w=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of j(n))!U.call(t,r)&&r!==e&&y(t,r,{get:()=>n[r],enumerable:!(i=k(n,r))||i.enumerable});return t};var m=(t,n,e)=>(e=t!=null?T(M(t)):{},w(n||!t||!t.__esModule?y(e,"default",{value:t,enumerable:!0}):e,t)),O=t=>w(y({},"__esModule",{value:!0}),t);var Z={};b(Z,{buildSvgIcon:()=>J,cdnImport:()=>W,componentAutoImport:()=>_,versionUpdatePlugin:()=>Y});module.exports=O(Z);var g=m(require("fs"),1),u=m(require("path"),1);function P(t){let n=[];return g.default.readdirSync(t,{withFileTypes:!0}).forEach(i=>{if(i.isDirectory())n.push(...P(u.default.join(t,i.name)));else{let r=i.name.replace(".svg",""),l=g.default.readFileSync(u.default.join(t,i.name)).toString().replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").replace(/(\r)|(\n)/g,"").replace(/<svg([^>+].*?)>/,(c,p)=>{let o=p.match(/viewBox="[^"]+"/),s=p.match(/width="(\d+)"/),a=p.match(/height="(\d+)"/),f=1024,h=1024;s&&(f=s[0]),a&&(h=a[0]);let C="";return o?C=o[0]:C=`viewBox="0 0 ${f} ${h}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${C}>`});n.push({iconName:r.charAt(0).toUpperCase()+r.slice(1),iconContent:l})}}),n.sort((i,r)=>i.iconName<r.iconName?-1:i.iconName>r.iconName?1:0)}function R(t,n,e){g.default.mkdirSync(n,{recursive:!0});let i=`import { defineComponent } from "vue";
1
+ "use strict";var D=Object.create;var x=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var O=(t,e)=>{for(var r in e)x(t,r,{get:e[r],enumerable:!0})},P=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of k(e))!M.call(t,o)&&o!==r&&x(t,o,{get:()=>e[o],enumerable:!(s=b(e,o))||s.enumerable});return t};var g=(t,e,r)=>(r=t!=null?D(U(t)):{},P(e||!t||!t.__esModule?x(r,"default",{value:t,enumerable:!0}):r,t)),R=t=>P(x({},"__esModule",{value:!0}),t);var Y={};O(Y,{buildSvgIcon:()=>J,cdnImport:()=>H,findSvgFile:()=>$,tsxComponentAutoImport:()=>W,versionUpdatePlugin:()=>V,vueComponentAutoImport:()=>_,writeTSXIcon:()=>T});module.exports=R(Y);var u=g(require("fs"),1),l=g(require("path"),1),$=t=>{let e=[];return u.default.readdirSync(t,{withFileTypes:!0}).forEach(s=>{if(s.isDirectory())e.push(...$(l.default.join(t,s.name)));else{let o=s.name.replace(".svg",""),a=u.default.readFileSync(l.default.join(t,s.name),"utf-8").replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").trimStart().trimEnd().replace(/<svg([^>+].*?)>/,(c,p)=>{let i=p.match(/viewBox="[^"]+"/),n=p.match(/width="(\d+)"/),m=p.match(/height="(\d+)"/),f=1024,h=1024;n&&(f=n[0]),m&&(h=m[0]);let C="";return i?C=i[0]:C=`viewBox="0 0 ${f} ${h}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${C}>`});e.push({iconName:o,componentName:o.charAt(0).toUpperCase()+o.slice(1),iconContent:a})}}),e.sort((s,o)=>s.iconName<o.iconName?-1:s.iconName>o.iconName?1:0)},T=(t,e,r,s)=>{let o=l.default.join(r,"src");u.default.mkdirSync(r,{recursive:!0}),u.default.mkdirSync(o,{recursive:!0});let a=`import { defineComponent } from "vue";
2
2
  import { ElIcon } from "element-plus";
3
3
 
4
4
  /**
5
- * ${t} \u56FE\u6807\u7EC4\u4EF6
5
+ * ${e} \u56FE\u6807\u7EC4\u4EF6
6
6
  */
7
- export const ${t} = defineComponent({
8
- name: "${t}",
7
+ export default defineComponent({
8
+ name: "${e}",
9
9
  components: {
10
10
  ElIcon,
11
11
  },
12
- setup(props, { attrs, slots, emit, expose }) {
13
- expose({});
14
-
12
+ setup(_, { attrs }) {
15
13
  return {
16
14
  attrs,
17
- slots,
18
15
  };
19
16
  },
20
17
  render() {
21
18
  return (
22
- <ElIcon {...this.attrs} class="el-icon icon fa-icon fa-icon-${t}">
23
- ${e}
19
+ <ElIcon {...this.attrs} class="fa-icon fa-icon-${e} icon">
20
+ ${s.split(`
21
+ `).map(i=>` ${i}`).join(`
22
+ `)}
24
23
  </ElIcon>
25
24
  );
26
25
  },
27
26
  });
27
+ `;u.default.writeFileSync(l.default.join(o,`${t}.tsx`),a);let c=`import { withInstall } from "fast-element-plus";
28
+ import ${e}TSX from "./src/${t}.tsx";
28
29
 
29
- export default ${t};
30
- `;g.default.writeFileSync(u.default.join(n,"index.tsx"),i)}function J(t,n){if(!t||!n)return;let e;return{name:"fast-vite-plugin-build-svg-icon",configResolved:i=>{e=i},buildStart(){let i=P(u.default.resolve(e.root,t)),r=u.default.resolve(e.root,n);g.default.mkdirSync(r,{recursive:!0});let l="",c="",p="";i.forEach((o,s)=>{R(o.iconName,u.default.join(r,o.iconName),o.iconContent),l+=`import { ${o.iconName} } from "./${o.iconName}";
31
- `,c+=`export * from "./${o.iconName}";
32
- `,p+=` ${o.iconName},`,s+1<i.length&&(p+=`
33
- `)}),g.default.writeFileSync(u.default.resolve(r,"index.ts"),`import type { DefineComponent } from "vue";
34
- ${l}
35
- ${c}
30
+ export const ${e} = withInstall(${e}TSX);
31
+ export default ${e};
32
+ `;u.default.writeFileSync(l.default.join(r,"index.ts"),c);let p=`import type { TSXWithInstall } from "fast-element-plus";
33
+ import type { default as ${e}TSX } from "./src/${t}";
34
+
35
+ export declare const ${e}: TSXWithInstall<typeof ${e}TSX>;
36
+ export default ${e};
37
+ `;u.default.writeFileSync(l.default.join(r,"index.d.ts"),p)};function J(t,e){if(!t||!e)return;let r;return{name:"fast-vite-plugin-build-svg-icon",configResolved:s=>{r=s},buildStart(){let s=$(l.default.resolve(r.root,t)),o=l.default.resolve(r.root,e);u.default.mkdirSync(o,{recursive:!0});let a="",c="",p="",i="";s.forEach((n,m)=>{T(n.iconName,n.componentName,l.default.join(o,n.iconName),n.iconContent),a+=`import { ${n.componentName} } from "./${n.iconName}";
38
+ `,c+=` ${n.iconName},`,p+=`export * from "./${n.iconName}";
39
+ `,i+=` ${n.componentName}: (typeof import("./"))["${n.componentName}"];`,m+1<s.length&&(i+=`
40
+ `,c+=`
41
+ `)}),u.default.writeFileSync(l.default.join(o,"index.ts"),`import type { DefineComponent } from "vue";
42
+ ${a}
43
+ ${p}
36
44
  export default [
45
+ ${c}
46
+ ] as Plugin[];
47
+ `),u.default.writeFileSync(l.default.join(o,"index.d.ts"),`// For this project development
48
+ import "@vue/runtime-core";
49
+
50
+ // GlobalComponents for Volar
51
+ declare module "@vue/runtime-core" {
52
+ export interface GlobalComponents {
53
+ ${i}
54
+ }
55
+
56
+ // interface ComponentCustomProperties {}
57
+ }
58
+
59
+ export {};
60
+ `)}}}var S=g(require("fs"),1),j=g(require("path"),1),N=g(require("rollup-plugin-external-globals"),1),E=require("vite-plugin-externals"),X=process.env.NODE_ENV==="development";function L(t){let e=process.cwd(),r=j.default.join(e,"node_modules",t,"package.json");return S.default.existsSync(r)?JSON.parse(S.default.readFileSync(r,"utf8")).version:""}function A(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function I(t,e){let{path:r}=e;return A(r)&&(t=r),t.replace(/\{name\}/g,e.name).replace(/\{version\}/g,e.version).replace(/\{path\}/g,r)}function B(t,e){e=t.prodUrl||e;let r=t,s=t.version||L(r.name),o=[];Array.isArray(r.path)?o=r.path:o.push(r.path);let a={...r,version:s};o=o.map(i=>{if(!s&&!A(i))throw new Error(`modules: ${a.name} package.json file does not exist`);return I(e,{name:a.name,version:a.version,path:i})});let c=r.css||[];!Array.isArray(c)&&c&&(c=[c]);let p=Array.isArray(c)?c.map(i=>I(e,{name:a.name,version:a.version,path:i})):[];return{...r,version:s,pathList:o,cssList:p}}function H(t){let{modules:e=[],prodUrl:r="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",enableInDevMode:s=!1}=t,o=!1,a=(Array.isArray(e)?e:[e]).map(i=>typeof i=="function"?i(r):i).map(i=>B(i,r)),c={};a.forEach(i=>{c[i.name]=i.var,Array.isArray(i.alias)&&i.alias.forEach(n=>{c[n]=i.var})});let p=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(i,{command:n}){o=n==="build";let m={build:{rollupOptions:{plugins:[]}}};return o&&(m.build.rollupOptions.plugins=[(0,N.default)(c)]),m},transformIndexHtml(i){if(!o&&!s)return i;let n=[];return a.forEach(m=>{m.pathList.forEach(f=>{let h={src:f,crossorigin:"anonymous",...m?.attrs??{}};n.push({tag:"script",attrs:h})}),m.cssList.forEach(f=>{let h={href:f,rel:"stylesheet",crossorigin:"anonymous",...m?.attrs??{}};n.push({tag:"link",attrs:h})})}),n}}];return X&&s&&p.push((0,E.viteExternalsPlugin)(c,{enforce:"pre"})),p}var y=g(require("fs"),1),w=g(require("path"),1);function W(t){if(t)return{name:"fast-vite-plugin-tsx-component-auto-import",buildStart(){let e=typeof t=="string"?t:t.dir,r=n=>n.charAt(0).toUpperCase()+n.slice(1),s=typeof t=="string"?r:t.formatter??r,o=y.default.readdirSync(e,{withFileTypes:!0});if(o?.length===0)return;let a=o.filter(n=>n.name!=="index.ts").map(n=>({componentName:s(n.name),fileName:n.name})).sort((n,m)=>n.componentName<m.componentName?-1:n.componentName>m.componentName?1:0),c="",p="",i="";a.forEach(({componentName:n,fileName:m},f)=>{c+=`import { ${n} } from "./${m}";
61
+ `,p+=`export * from "./${m}";
62
+ `,i+=` ${n},`,f+1<a.length&&(i+=`
63
+ `)}),y.default.writeFileSync(w.default.join(e,"index.ts"),`import type { Plugin } from "vue";
64
+ ${c}
37
65
  ${p}
38
- ] as unknown as DefineComponent[];
39
- `)}}}var x=m(require("fs"),1),F=m(require("path"),1),D=m(require("rollup-plugin-external-globals"),1),E=require("vite-plugin-externals"),L=process.env.NODE_ENV==="development";function B(t){let n=process.cwd(),e=F.default.join(n,"node_modules",t,"package.json");return x.default.existsSync(e)?JSON.parse(x.default.readFileSync(e,"utf8")).version:""}function A(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function N(t,n){let{path:e}=n;return A(e)&&(t=e),t.replace(/\{name\}/g,n.name).replace(/\{version\}/g,n.version).replace(/\{path\}/g,e)}function H(t,n){n=t.prodUrl||n;let e=t,i=B(e.name),r=[];Array.isArray(e.path)?r=e.path:r.push(e.path);let l={...e,version:i};r=r.map(o=>{if(!i&&!A(o))throw new Error(`modules: ${l.name} package.json file does not exist`);return N(n,{...l,path:o})});let c=e.css||[];!Array.isArray(c)&&c&&(c=[c]);let p=Array.isArray(c)?c.map(o=>N(n,{...l,path:o})):[];return{...e,version:i,pathList:r,cssList:p}}function W(t){let{modules:n=[],prodUrl:e="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",enableInDevMode:i=!1}=t,r=!1,l=n.map(o=>(Array.isArray(o)?o:[o]).map(a=>typeof a=="function"?a(e):a).map(a=>H(a,e))).flat(),c={};l.forEach(o=>{c[o.name]=o.var,Array.isArray(o.alias)&&o.alias.forEach(s=>{c[s]=o.var})});let p=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(o,{command:s}){r=s==="build";let a={build:{rollupOptions:{plugins:[]}}};return r&&(a.build.rollupOptions.plugins=[(0,D.default)(c)]),a},transformIndexHtml(o){if(!r&&!i)return o;let s=[];return l.forEach(a=>{a.pathList.forEach(f=>{let h={src:f,crossorigin:"anonymous",...a?.attrs??{}};s.push({tag:"script",attrs:h})}),a.cssList.forEach(f=>{let h={href:f,rel:"stylesheet",crossorigin:"anonymous",...a?.attrs??{}};s.push({tag:"link",attrs:h})})}),s}}];return L&&i&&p.push((0,E.viteExternalsPlugin)(c,{enforce:"pre"})),p}var $=m(require("fs"),1),I=m(require("path"),1);function _(t){if(t)return{name:"fast-vite-plugin-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,e=s=>s.charAt(0).toUpperCase()+s.slice(1),i=typeof t=="string"?e:t.formatter??e,r=$.default.readdirSync(n,{withFileTypes:!0});if(r?.length===0)return;let l=r.filter(s=>s.name!=="index.ts").map(s=>({componentName:i(s.name),fileName:s.name})).sort((s,a)=>s.componentName<a.componentName?-1:s.componentName>a.componentName?1:0),c="",p="",o="";l.forEach(({componentName:s,fileName:a},f)=>{c+=`import ${s} from "./${a}/index.vue";
40
- `,p+=`export * from "./${a}/index.vue";
41
- `,o+=` ${s},`,f+1<l.length&&(o+=`
42
- `)}),$.default.writeFileSync(I.default.join(n,"index.ts"),`import type { DefineComponent } from "vue";
66
+ export default [
67
+ ${i}
68
+ ] as Plugin[];
69
+ `)}}}function _(t){if(t)return{name:"fast-vite-plugin-vue-component-auto-import",buildStart(){let e=typeof t=="string"?t:t.dir,r=n=>n.charAt(0).toUpperCase()+n.slice(1),s=typeof t=="string"?r:t.formatter??r,o=y.default.readdirSync(e,{withFileTypes:!0});if(o?.length===0)return;let a=o.filter(n=>n.name!=="index.ts").map(n=>({componentName:s(n.name),fileName:n.name})).sort((n,m)=>n.componentName<m.componentName?-1:n.componentName>m.componentName?1:0),c="",p="",i="";a.forEach(({componentName:n,fileName:m},f)=>{c+=`import ${n} from "./${m}/index.vue";
70
+ `,p+=`export * from "./${m}/index.vue";
71
+ `,i+=` ${n},`,f+1<a.length&&(i+=`
72
+ `)}),y.default.writeFileSync(w.default.join(e,"index.ts"),`import type { DefineComponent } from "vue";
43
73
  ${c}
44
74
  ${p}
45
75
  export default [
46
- ${o}
76
+ ${i}
47
77
  ] as unknown as DefineComponent[];
48
- `)}}}var d=m(require("fs"),1),S=m(require("path"),1);function v(t,n=2){return t.toString().padStart(n,"0")}function V(t){let n=t.getUTCFullYear(),e=v(t.getUTCMonth()+1),i=v(t.getUTCDate()),r=v(t.getUTCHours()),l=v(t.getUTCMinutes()),c=v(t.getUTCSeconds()),p=v(t.getUTCMilliseconds(),3);return`Z ${n}-${e}-${i} ${r}:${l}:${c}.${p}`}function Y(t){let n;return{name:"fast-vite-plugin-version-update",configResolved:e=>{n=e},buildStart(){let i=V(new Date),r=n.publicDir,l=S.default.join(r,"version.json");d.default.existsSync(r)||d.default.mkdirSync(r);let c=JSON.stringify({version:`v${t}`,dateTime:i},null,4);d.default.writeFileSync(l,c);let p=S.default.join(n.base,"package.json");if(d.default.existsSync(p)){let o=JSON.parse(d.default.readFileSync(p,"utf-8"));o.version=t,d.default.writeFileSync(p,JSON.stringify(o,null,2),"utf-8")}}}}0&&(module.exports={buildSvgIcon,cdnImport,componentAutoImport,versionUpdatePlugin});
78
+ `)}}}var d=g(require("fs"),1),F=g(require("path"),1);function v(t,e=2){return t.toString().padStart(e,"0")}function G(t){let e=t.getUTCFullYear(),r=v(t.getUTCMonth()+1),s=v(t.getUTCDate()),o=v(t.getUTCHours()),a=v(t.getUTCMinutes()),c=v(t.getUTCSeconds()),p=v(t.getUTCMilliseconds(),3);return`Z ${e}-${r}-${s} ${o}:${a}:${c}.${p}`}function V(t){let e;return{name:"fast-vite-plugin-version-update",configResolved:r=>{e=r},buildStart(){let s=G(new Date),o=e.publicDir,a=F.default.join(o,"version.json");d.default.existsSync(o)||d.default.mkdirSync(o);let c=JSON.stringify({version:`v${t}`,dateTime:s},null,4);d.default.writeFileSync(a,c);let p=F.default.join(e.base,"package.json");if(d.default.existsSync(p)){let i=JSON.parse(d.default.readFileSync(p,"utf-8"));i.version=t,d.default.writeFileSync(p,JSON.stringify(i,null,2),"utf-8")}}}}0&&(module.exports={buildSvgIcon,cdnImport,findSvgFile,tsxComponentAutoImport,versionUpdatePlugin,vueComponentAutoImport,writeTSXIcon});
49
79
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../packages/index.ts","../../packages/buildSvgIcon/index.ts","../../packages/cdnImport/index.ts","../../packages/componentAutoImport/index.ts","../../packages/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 */\nfunction findSvgFile(dir: string): { iconName: string; iconContent: string }[] {\n\t// svg 内容\n\tconst svgContents: { iconName: 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 svgInfo = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name))\n\t\t\t\t.toString()\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// .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\ticonName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgInfo,\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 */\nfunction writeTsxComponent(componentName: string, componentDir: string, content: string): void {\n\tfs.mkdirSync(componentDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\nimport { ElIcon } from \"element-plus\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\tcomponents: {\n\t\tElIcon,\n\t},\n\tsetup(props, { attrs, slots, emit, expose }) {\n\t\texpose({});\n\n\t\treturn {\n\t\t\tattrs,\n\t\t\tslots,\n\t\t};\n\t},\n\trender() {\n\t\treturn (\n\t\t\t<ElIcon {...this.attrs} class=\"el-icon icon fa-icon fa-icon-${componentName}\">\n\t\t\t\t${content}\n\t\t\t</ElIcon>\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(componentDir, \"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 svgCRPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(svgCRPath, { recursive: true });\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTsxComponent(svg.iconName, path.join(svgCRPath, svg.iconName), svg.iconContent);\n\n\t\t\t\timportContent += `import { ${svg.iconName} } from \"./${svg.iconName}\";\\n`;\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\\n`;\n\n\t\t\t\ttypeContent += `\t${svg.iconName},`;\n\n\t\t\t\tif (idx + 1 < svgFiles.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.resolve(svgCRPath, \"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 { buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\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 & { version?: string; pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst 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\t...data,\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\t...data,\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\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\", enableInDevMode = false } = options;\n\n\tlet isBuild = false;\n\n\tconst data = modules\n\t\t.map((m) => {\n\t\t\tconst list = (Array.isArray(m) ? m : [m]).map((v) => (typeof v === \"function\" ? v(prodUrl) : v));\n\t\t\treturn list.map((v) => getModuleInfo(v, prodUrl));\n\t\t})\n\t\t.flat();\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 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};\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});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((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};\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});\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 };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin } from \"vite\";\nimport type { AutoImportOptions } from \"./type\";\n\n/**\n * 组件自动导入\n * @description 只会生成安装文件\n * @param dir 组件文件夹路径\n */\nfunction componentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-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\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 { 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":["packages_exports","__export","buildSvgIcon","cdnImport","componentAutoImport","versionUpdatePlugin","__toCommonJS","import_fs","import_path","findSvgFile","dir","svgContents","fs","file","path","iconName","svgInfo","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTsxComponent","componentName","componentDir","content","componentContent","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","svgCRPath","importContent","exportContent","typeContent","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","cdnImport","options","modules","enableInDevMode","isBuild","m","externalMap","alias","plugins","_","command","userConfig","externalGlobals","html","descriptors","attrs","import_fs","import_path","componentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","fs","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","path","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":["../../packages/index.ts","../../packages/buildSvgIcon/index.ts","../../packages/cdnImport/index.ts","../../packages/componentAutoImport/index.ts","../../packages/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 = (iconName: string, componentName: string, iconDir: string, svgContent: string): void => {\n\tconst srcDir = path.join(iconDir, \"src\");\n\n\tfs.mkdirSync(iconDir, { recursive: true });\n\tfs.mkdirSync(srcDir, { recursive: true });\n\n\tconst iconContent = `import { defineComponent } from \"vue\";\nimport { ElIcon } from \"element-plus\";\n\n/**\n * ${componentName} 图标组件\n */\nexport default defineComponent({\n\tname: \"${componentName}\",\n\tcomponents: {\n\t\tElIcon,\n\t},\n\tsetup(_, { attrs }) {\n\t\treturn {\n\t\t\tattrs,\n\t\t};\n\t},\n\trender() {\n\t\treturn (\n\t\t\t<ElIcon {...this.attrs} class=\"fa-icon fa-icon-${componentName} icon\">\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t\t</ElIcon>\n\t\t);\n\t},\n});\n`;\n\n\tfs.writeFileSync(path.join(srcDir, `${iconName}.tsx`), iconContent);\n\n\tconst indexContent = `import { withInstall } from \"fast-element-plus\";\nimport ${componentName}TSX from \"./src/${iconName}.tsx\";\n\nexport const ${componentName} = withInstall(${componentName}TSX);\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.ts\"), indexContent);\n\n\tconst indexDTS = `import type { TSXWithInstall } from \"fast-element-plus\";\nimport type { default as ${componentName}TSX } from \"./src/${iconName}\";\n\nexport declare const ${componentName}: TSXWithInstall<typeof ${componentName}TSX>;\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.d.ts\"), indexDTS);\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\t\t\tlet typeDTSContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.iconName, 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.iconName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ttypeDTSContent += `\t\t${svg.componentName}: (typeof import(\"./\"))[\"${svg.componentName}\"];`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ttypeDTSContent += \"\\n\";\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 Plugin[];\n`\n\t\t\t);\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.d.ts\"),\n\t\t\t\t`// For this project development\nimport \"@vue/runtime-core\";\n\n// GlobalComponents for Volar\ndeclare module \"@vue/runtime-core\" {\n\texport interface GlobalComponents {\n${typeDTSContent}\n\t}\n\n\t// interface ComponentCustomProperties {}\n}\n\nexport {};\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 type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\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\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\", enableInDevMode = false } = 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 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};\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});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((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};\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});\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 };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin } from \"vite\";\nimport type { AutoImportOptions } from \"./type\";\n\n/**\n * TSX组件自动导入\n * @description 只会生成安装文件\n * @param dir 组件文件夹路径\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 dir 组件文件夹路径\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":["packages_exports","__export","buildSvgIcon","cdnImport","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","srcDir","iconContent","line","indexContent","indexDTS","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","typeDTSContent","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","cdnImport","options","modules","enableInDevMode","isBuild","externalMap","alias","plugins","_","command","userConfig","externalGlobals","html","descriptors","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"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,17 @@
1
1
  import { Plugin } from 'vite';
2
2
 
3
+ /**
4
+ * 查找 svg 文件
5
+ */
6
+ declare const findSvgFile: (dir: string) => {
7
+ iconName: string;
8
+ componentName: string;
9
+ iconContent: string;
10
+ }[];
11
+ /**
12
+ * 写入 TSX 图标
13
+ */
14
+ declare const writeTSXIcon: (iconName: string, componentName: string, iconDir: string, svgContent: string) => void;
3
15
  /**
4
16
  * 构建 svg 图标组件
5
17
  * @param dir svg 文件路径
@@ -16,6 +28,11 @@ interface Module {
16
28
  * 模块变量
17
29
  */
18
30
  var: string;
31
+ /**
32
+ * 版本号
33
+ * @description 如果不传则默认从 node_modules 中获取
34
+ */
35
+ version?: string;
19
36
  /**
20
37
  * 模块路径
21
38
  */
@@ -43,7 +60,7 @@ interface CdnImportOptions {
43
60
  * 生产环境 URL
44
61
  */
45
62
  prodUrl?: string;
46
- modules: (Module | Module[] | GetModuleFunc | GetModuleFunc[])[];
63
+ modules: Module | Module[] | GetModuleFunc | GetModuleFunc[];
47
64
  /**
48
65
  * 是否在开发模式启用,默认是 false
49
66
  */
@@ -71,11 +88,17 @@ interface AutoImportOptions {
71
88
  }
72
89
 
73
90
  /**
74
- * 组件自动导入
91
+ * TSX组件自动导入
92
+ * @description 只会生成安装文件
93
+ * @param dir 组件文件夹路径
94
+ */
95
+ declare function tsxComponentAutoImport(options: string | AutoImportOptions): Plugin;
96
+ /**
97
+ * VUE组件自动导入
75
98
  * @description 只会生成安装文件
76
99
  * @param dir 组件文件夹路径
77
100
  */
78
- declare function componentAutoImport(options: string | AutoImportOptions): Plugin;
101
+ declare function vueComponentAutoImport(options: string | AutoImportOptions): Plugin;
79
102
 
80
103
  /**
81
104
  * 版本更新插件
@@ -84,4 +107,4 @@ declare function componentAutoImport(options: string | AutoImportOptions): Plugi
84
107
  */
85
108
  declare function versionUpdatePlugin(version: string): Plugin;
86
109
 
87
- export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, componentAutoImport, versionUpdatePlugin };
110
+ export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, findSvgFile, tsxComponentAutoImport, versionUpdatePlugin, vueComponentAutoImport, writeTSXIcon };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,17 @@
1
1
  import { Plugin } from 'vite';
2
2
 
3
+ /**
4
+ * 查找 svg 文件
5
+ */
6
+ declare const findSvgFile: (dir: string) => {
7
+ iconName: string;
8
+ componentName: string;
9
+ iconContent: string;
10
+ }[];
11
+ /**
12
+ * 写入 TSX 图标
13
+ */
14
+ declare const writeTSXIcon: (iconName: string, componentName: string, iconDir: string, svgContent: string) => void;
3
15
  /**
4
16
  * 构建 svg 图标组件
5
17
  * @param dir svg 文件路径
@@ -16,6 +28,11 @@ interface Module {
16
28
  * 模块变量
17
29
  */
18
30
  var: string;
31
+ /**
32
+ * 版本号
33
+ * @description 如果不传则默认从 node_modules 中获取
34
+ */
35
+ version?: string;
19
36
  /**
20
37
  * 模块路径
21
38
  */
@@ -43,7 +60,7 @@ interface CdnImportOptions {
43
60
  * 生产环境 URL
44
61
  */
45
62
  prodUrl?: string;
46
- modules: (Module | Module[] | GetModuleFunc | GetModuleFunc[])[];
63
+ modules: Module | Module[] | GetModuleFunc | GetModuleFunc[];
47
64
  /**
48
65
  * 是否在开发模式启用,默认是 false
49
66
  */
@@ -71,11 +88,17 @@ interface AutoImportOptions {
71
88
  }
72
89
 
73
90
  /**
74
- * 组件自动导入
91
+ * TSX组件自动导入
92
+ * @description 只会生成安装文件
93
+ * @param dir 组件文件夹路径
94
+ */
95
+ declare function tsxComponentAutoImport(options: string | AutoImportOptions): Plugin;
96
+ /**
97
+ * VUE组件自动导入
75
98
  * @description 只会生成安装文件
76
99
  * @param dir 组件文件夹路径
77
100
  */
78
- declare function componentAutoImport(options: string | AutoImportOptions): Plugin;
101
+ declare function vueComponentAutoImport(options: string | AutoImportOptions): Plugin;
79
102
 
80
103
  /**
81
104
  * 版本更新插件
@@ -84,4 +107,4 @@ declare function componentAutoImport(options: string | AutoImportOptions): Plugi
84
107
  */
85
108
  declare function versionUpdatePlugin(version: string): Plugin;
86
109
 
87
- export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, componentAutoImport, versionUpdatePlugin };
110
+ export { type AutoImportOptions, type CdnImportOptions, type GetModuleFunc, type Module, buildSvgIcon, cdnImport, findSvgFile, tsxComponentAutoImport, versionUpdatePlugin, vueComponentAutoImport, writeTSXIcon };
package/dist/index.js CHANGED
@@ -1,49 +1,79 @@
1
- import g from"fs";import f from"path";function y(t){let e=[];return g.readdirSync(t,{withFileTypes:!0}).forEach(r=>{if(r.isDirectory())e.push(...y(f.join(t,r.name)));else{let i=r.name.replace(".svg",""),l=g.readFileSync(f.join(t,r.name)).toString().replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").replace(/(\r)|(\n)/g,"").replace(/<svg([^>+].*?)>/,(c,p)=>{let n=p.match(/viewBox="[^"]+"/),s=p.match(/width="(\d+)"/),a=p.match(/height="(\d+)"/),m=1024,u=1024;s&&(m=s[0]),a&&(u=a[0]);let v="";return n?v=n[0]:v=`viewBox="0 0 ${m} ${u}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${v}>`});e.push({iconName:i.charAt(0).toUpperCase()+i.slice(1),iconContent:l})}}),e.sort((r,i)=>r.iconName<i.iconName?-1:r.iconName>i.iconName?1:0)}function P(t,e,o){g.mkdirSync(e,{recursive:!0});let r=`import { defineComponent } from "vue";
1
+ import f from"fs";import l from"path";var x=t=>{let n=[];return f.readdirSync(t,{withFileTypes:!0}).forEach(s=>{if(s.isDirectory())n.push(...x(l.join(t,s.name)));else{let i=s.name.replace(".svg",""),a=f.readFileSync(l.join(t,s.name),"utf-8").replace(/<\?xml.*?\?>/,"").replace(/<!DOCTYPE svg.*?>/,"").trimStart().trimEnd().replace(/<svg([^>+].*?)>/,(c,p)=>{let r=p.match(/viewBox="[^"]+"/),e=p.match(/width="(\d+)"/),m=p.match(/height="(\d+)"/),u=1024,g=1024;e&&(u=e[0]),m&&(g=m[0]);let y="";return r?y=r[0]:y=`viewBox="0 0 ${u} ${g}"`,`<svg xmlns="http://www.w3.org/2000/svg" ${y}>`});n.push({iconName:i,componentName:i.charAt(0).toUpperCase()+i.slice(1),iconContent:a})}}),n.sort((s,i)=>s.iconName<i.iconName?-1:s.iconName>i.iconName?1:0)},P=(t,n,o,s)=>{let i=l.join(o,"src");f.mkdirSync(o,{recursive:!0}),f.mkdirSync(i,{recursive:!0});let a=`import { defineComponent } from "vue";
2
2
  import { ElIcon } from "element-plus";
3
3
 
4
4
  /**
5
- * ${t} \u56FE\u6807\u7EC4\u4EF6
5
+ * ${n} \u56FE\u6807\u7EC4\u4EF6
6
6
  */
7
- export const ${t} = defineComponent({
8
- name: "${t}",
7
+ export default defineComponent({
8
+ name: "${n}",
9
9
  components: {
10
10
  ElIcon,
11
11
  },
12
- setup(props, { attrs, slots, emit, expose }) {
13
- expose({});
14
-
12
+ setup(_, { attrs }) {
15
13
  return {
16
14
  attrs,
17
- slots,
18
15
  };
19
16
  },
20
17
  render() {
21
18
  return (
22
- <ElIcon {...this.attrs} class="el-icon icon fa-icon fa-icon-${t}">
23
- ${o}
19
+ <ElIcon {...this.attrs} class="fa-icon fa-icon-${n} icon">
20
+ ${s.split(`
21
+ `).map(r=>` ${r}`).join(`
22
+ `)}
24
23
  </ElIcon>
25
24
  );
26
25
  },
27
26
  });
27
+ `;f.writeFileSync(l.join(i,`${t}.tsx`),a);let c=`import { withInstall } from "fast-element-plus";
28
+ import ${n}TSX from "./src/${t}.tsx";
28
29
 
29
- export default ${t};
30
- `;g.writeFileSync(f.join(e,"index.tsx"),r)}function U(t,e){if(!t||!e)return;let o;return{name:"fast-vite-plugin-build-svg-icon",configResolved:r=>{o=r},buildStart(){let r=y(f.resolve(o.root,t)),i=f.resolve(o.root,e);g.mkdirSync(i,{recursive:!0});let l="",c="",p="";r.forEach((n,s)=>{P(n.iconName,f.join(i,n.iconName),n.iconContent),l+=`import { ${n.iconName} } from "./${n.iconName}";
31
- `,c+=`export * from "./${n.iconName}";
32
- `,p+=` ${n.iconName},`,s+1<r.length&&(p+=`
33
- `)}),g.writeFileSync(f.resolve(i,"index.ts"),`import type { DefineComponent } from "vue";
34
- ${l}
35
- ${c}
30
+ export const ${n} = withInstall(${n}TSX);
31
+ export default ${n};
32
+ `;f.writeFileSync(l.join(o,"index.ts"),c);let p=`import type { TSXWithInstall } from "fast-element-plus";
33
+ import type { default as ${n}TSX } from "./src/${t}";
34
+
35
+ export declare const ${n}: TSXWithInstall<typeof ${n}TSX>;
36
+ export default ${n};
37
+ `;f.writeFileSync(l.join(o,"index.d.ts"),p)};function U(t,n){if(!t||!n)return;let o;return{name:"fast-vite-plugin-build-svg-icon",configResolved:s=>{o=s},buildStart(){let s=x(l.resolve(o.root,t)),i=l.resolve(o.root,n);f.mkdirSync(i,{recursive:!0});let a="",c="",p="",r="";s.forEach((e,m)=>{P(e.iconName,e.componentName,l.join(i,e.iconName),e.iconContent),a+=`import { ${e.componentName} } from "./${e.iconName}";
38
+ `,c+=` ${e.iconName},`,p+=`export * from "./${e.iconName}";
39
+ `,r+=` ${e.componentName}: (typeof import("./"))["${e.componentName}"];`,m+1<s.length&&(r+=`
40
+ `,c+=`
41
+ `)}),f.writeFileSync(l.join(i,"index.ts"),`import type { DefineComponent } from "vue";
42
+ ${a}
43
+ ${p}
36
44
  export default [
45
+ ${c}
46
+ ] as Plugin[];
47
+ `),f.writeFileSync(l.join(i,"index.d.ts"),`// For this project development
48
+ import "@vue/runtime-core";
49
+
50
+ // GlobalComponents for Volar
51
+ declare module "@vue/runtime-core" {
52
+ export interface GlobalComponents {
53
+ ${r}
54
+ }
55
+
56
+ // interface ComponentCustomProperties {}
57
+ }
58
+
59
+ export {};
60
+ `)}}}import C from"fs";import T from"path";import I from"rollup-plugin-external-globals";import{viteExternalsPlugin as j}from"vite-plugin-externals";var N=process.env.NODE_ENV==="development";function E(t){let n=process.cwd(),o=T.join(n,"node_modules",t,"package.json");return C.existsSync(o)?JSON.parse(C.readFileSync(o,"utf8")).version:""}function S(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function $(t,n){let{path:o}=n;return S(o)&&(t=o),t.replace(/\{name\}/g,n.name).replace(/\{version\}/g,n.version).replace(/\{path\}/g,o)}function A(t,n){n=t.prodUrl||n;let o=t,s=t.version||E(o.name),i=[];Array.isArray(o.path)?i=o.path:i.push(o.path);let a={...o,version:s};i=i.map(r=>{if(!s&&!S(r))throw new Error(`modules: ${a.name} package.json file does not exist`);return $(n,{name:a.name,version:a.version,path:r})});let c=o.css||[];!Array.isArray(c)&&c&&(c=[c]);let p=Array.isArray(c)?c.map(r=>$(n,{name:a.name,version:a.version,path:r})):[];return{...o,version:s,pathList:i,cssList:p}}function L(t){let{modules:n=[],prodUrl:o="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",enableInDevMode:s=!1}=t,i=!1,a=(Array.isArray(n)?n:[n]).map(r=>typeof r=="function"?r(o):r).map(r=>A(r,o)),c={};a.forEach(r=>{c[r.name]=r.var,Array.isArray(r.alias)&&r.alias.forEach(e=>{c[e]=r.var})});let p=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(r,{command:e}){i=e==="build";let m={build:{rollupOptions:{plugins:[]}}};return i&&(m.build.rollupOptions.plugins=[I(c)]),m},transformIndexHtml(r){if(!i&&!s)return r;let e=[];return a.forEach(m=>{m.pathList.forEach(u=>{let g={src:u,crossorigin:"anonymous",...m?.attrs??{}};e.push({tag:"script",attrs:g})}),m.cssList.forEach(u=>{let g={href:u,rel:"stylesheet",crossorigin:"anonymous",...m?.attrs??{}};e.push({tag:"link",attrs:g})})}),e}}];return N&&s&&p.push(j(c,{enforce:"pre"})),p}import v from"fs";import w from"path";function _(t){if(t)return{name:"fast-vite-plugin-tsx-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,o=e=>e.charAt(0).toUpperCase()+e.slice(1),s=typeof t=="string"?o:t.formatter??o,i=v.readdirSync(n,{withFileTypes:!0});if(i?.length===0)return;let a=i.filter(e=>e.name!=="index.ts").map(e=>({componentName:s(e.name),fileName:e.name})).sort((e,m)=>e.componentName<m.componentName?-1:e.componentName>m.componentName?1:0),c="",p="",r="";a.forEach(({componentName:e,fileName:m},u)=>{c+=`import { ${e} } from "./${m}";
61
+ `,p+=`export * from "./${m}";
62
+ `,r+=` ${e},`,u+1<a.length&&(r+=`
63
+ `)}),v.writeFileSync(w.join(n,"index.ts"),`import type { Plugin } from "vue";
64
+ ${c}
37
65
  ${p}
38
- ] as unknown as DefineComponent[];
39
- `)}}}import C from"fs";import N from"path";import F from"rollup-plugin-external-globals";import{viteExternalsPlugin as D}from"vite-plugin-externals";var E=process.env.NODE_ENV==="development";function A(t){let e=process.cwd(),o=N.join(e,"node_modules",t,"package.json");return C.existsSync(o)?JSON.parse(C.readFileSync(o,"utf8")).version:""}function $(t){return!!(t.startsWith("http:")||t.startsWith("https:")||t.startsWith("//"))}function x(t,e){let{path:o}=e;return $(o)&&(t=o),t.replace(/\{name\}/g,e.name).replace(/\{version\}/g,e.version).replace(/\{path\}/g,o)}function I(t,e){e=t.prodUrl||e;let o=t,r=A(o.name),i=[];Array.isArray(o.path)?i=o.path:i.push(o.path);let l={...o,version:r};i=i.map(n=>{if(!r&&!$(n))throw new Error(`modules: ${l.name} package.json file does not exist`);return x(e,{...l,path:n})});let c=o.css||[];!Array.isArray(c)&&c&&(c=[c]);let p=Array.isArray(c)?c.map(n=>x(e,{...l,path:n})):[];return{...o,version:r,pathList:i,cssList:p}}function B(t){let{modules:e=[],prodUrl:o="https://cdn.jsdelivr.net/npm/{name}@{version}/{path}",enableInDevMode:r=!1}=t,i=!1,l=e.map(n=>(Array.isArray(n)?n:[n]).map(a=>typeof a=="function"?a(o):a).map(a=>I(a,o))).flat(),c={};l.forEach(n=>{c[n.name]=n.var,Array.isArray(n.alias)&&n.alias.forEach(s=>{c[s]=n.var})});let p=[{name:"fast-vite-plugin-cdn-import",enforce:"pre",config(n,{command:s}){i=s==="build";let a={build:{rollupOptions:{plugins:[]}}};return i&&(a.build.rollupOptions.plugins=[F(c)]),a},transformIndexHtml(n){if(!i&&!r)return n;let s=[];return l.forEach(a=>{a.pathList.forEach(m=>{let u={src:m,crossorigin:"anonymous",...a?.attrs??{}};s.push({tag:"script",attrs:u})}),a.cssList.forEach(m=>{let u={href:m,rel:"stylesheet",crossorigin:"anonymous",...a?.attrs??{}};s.push({tag:"link",attrs:u})})}),s}}];return E&&r&&p.push(D(c,{enforce:"pre"})),p}import S from"fs";import T from"path";function V(t){if(t)return{name:"fast-vite-plugin-component-auto-import",buildStart(){let e=typeof t=="string"?t:t.dir,o=s=>s.charAt(0).toUpperCase()+s.slice(1),r=typeof t=="string"?o:t.formatter??o,i=S.readdirSync(e,{withFileTypes:!0});if(i?.length===0)return;let l=i.filter(s=>s.name!=="index.ts").map(s=>({componentName:r(s.name),fileName:s.name})).sort((s,a)=>s.componentName<a.componentName?-1:s.componentName>a.componentName?1:0),c="",p="",n="";l.forEach(({componentName:s,fileName:a},m)=>{c+=`import ${s} from "./${a}/index.vue";
40
- `,p+=`export * from "./${a}/index.vue";
41
- `,n+=` ${s},`,m+1<l.length&&(n+=`
42
- `)}),S.writeFileSync(T.join(e,"index.ts"),`import type { DefineComponent } from "vue";
66
+ export default [
67
+ ${r}
68
+ ] as Plugin[];
69
+ `)}}}function G(t){if(t)return{name:"fast-vite-plugin-vue-component-auto-import",buildStart(){let n=typeof t=="string"?t:t.dir,o=e=>e.charAt(0).toUpperCase()+e.slice(1),s=typeof t=="string"?o:t.formatter??o,i=v.readdirSync(n,{withFileTypes:!0});if(i?.length===0)return;let a=i.filter(e=>e.name!=="index.ts").map(e=>({componentName:s(e.name),fileName:e.name})).sort((e,m)=>e.componentName<m.componentName?-1:e.componentName>m.componentName?1:0),c="",p="",r="";a.forEach(({componentName:e,fileName:m},u)=>{c+=`import ${e} from "./${m}/index.vue";
70
+ `,p+=`export * from "./${m}/index.vue";
71
+ `,r+=` ${e},`,u+1<a.length&&(r+=`
72
+ `)}),v.writeFileSync(w.join(n,"index.ts"),`import type { DefineComponent } from "vue";
43
73
  ${c}
44
74
  ${p}
45
75
  export default [
46
- ${n}
76
+ ${r}
47
77
  ] as unknown as DefineComponent[];
48
- `)}}}import d from"fs";import w from"path";function h(t,e=2){return t.toString().padStart(e,"0")}function k(t){let e=t.getUTCFullYear(),o=h(t.getUTCMonth()+1),r=h(t.getUTCDate()),i=h(t.getUTCHours()),l=h(t.getUTCMinutes()),c=h(t.getUTCSeconds()),p=h(t.getUTCMilliseconds(),3);return`Z ${e}-${o}-${r} ${i}:${l}:${c}.${p}`}function q(t){let e;return{name:"fast-vite-plugin-version-update",configResolved:o=>{e=o},buildStart(){let r=k(new Date),i=e.publicDir,l=w.join(i,"version.json");d.existsSync(i)||d.mkdirSync(i);let c=JSON.stringify({version:`v${t}`,dateTime:r},null,4);d.writeFileSync(l,c);let p=w.join(e.base,"package.json");if(d.existsSync(p)){let n=JSON.parse(d.readFileSync(p,"utf-8"));n.version=t,d.writeFileSync(p,JSON.stringify(n,null,2),"utf-8")}}}}export{U as buildSvgIcon,B as cdnImport,V as componentAutoImport,q as versionUpdatePlugin};
78
+ `)}}}import d from"fs";import F from"path";function h(t,n=2){return t.toString().padStart(n,"0")}function D(t){let n=t.getUTCFullYear(),o=h(t.getUTCMonth()+1),s=h(t.getUTCDate()),i=h(t.getUTCHours()),a=h(t.getUTCMinutes()),c=h(t.getUTCSeconds()),p=h(t.getUTCMilliseconds(),3);return`Z ${n}-${o}-${s} ${i}:${a}:${c}.${p}`}function q(t){let n;return{name:"fast-vite-plugin-version-update",configResolved:o=>{n=o},buildStart(){let s=D(new Date),i=n.publicDir,a=F.join(i,"version.json");d.existsSync(i)||d.mkdirSync(i);let c=JSON.stringify({version:`v${t}`,dateTime:s},null,4);d.writeFileSync(a,c);let p=F.join(n.base,"package.json");if(d.existsSync(p)){let r=JSON.parse(d.readFileSync(p,"utf-8"));r.version=t,d.writeFileSync(p,JSON.stringify(r,null,2),"utf-8")}}}}export{U as buildSvgIcon,L as cdnImport,x as findSvgFile,_ as tsxComponentAutoImport,q as versionUpdatePlugin,G as vueComponentAutoImport,P as writeTSXIcon};
49
79
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../packages/buildSvgIcon/index.ts","../../packages/cdnImport/index.ts","../../packages/componentAutoImport/index.ts","../../packages/versionUpdate/index.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/**\n * 查找 svg 文件\n */\nfunction findSvgFile(dir: string): { iconName: string; iconContent: string }[] {\n\t// svg 内容\n\tconst svgContents: { iconName: 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 svgInfo = fs\n\t\t\t\t.readFileSync(path.join(dir, file.name))\n\t\t\t\t.toString()\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// .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\ticonName: iconName.charAt(0).toUpperCase() + iconName.slice(1),\n\t\t\t\ticonContent: svgInfo,\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 */\nfunction writeTsxComponent(componentName: string, componentDir: string, content: string): void {\n\tfs.mkdirSync(componentDir, { recursive: true });\n\n\tconst componentContent = `import { defineComponent } from \"vue\";\nimport { ElIcon } from \"element-plus\";\n\n/**\n * ${componentName} 图标组件\n */\nexport const ${componentName} = defineComponent({\n\tname: \"${componentName}\",\n\tcomponents: {\n\t\tElIcon,\n\t},\n\tsetup(props, { attrs, slots, emit, expose }) {\n\t\texpose({});\n\n\t\treturn {\n\t\t\tattrs,\n\t\t\tslots,\n\t\t};\n\t},\n\trender() {\n\t\treturn (\n\t\t\t<ElIcon {...this.attrs} class=\"el-icon icon fa-icon fa-icon-${componentName}\">\n\t\t\t\t${content}\n\t\t\t</ElIcon>\n\t\t);\n\t},\n});\n\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(componentDir, \"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 svgCRPath = path.resolve(config.root, writeDir);\n\t\t\tfs.mkdirSync(svgCRPath, { recursive: true });\n\n\t\t\tlet importContent = \"\";\n\t\t\tlet exportContent = \"\";\n\t\t\tlet typeContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTsxComponent(svg.iconName, path.join(svgCRPath, svg.iconName), svg.iconContent);\n\n\t\t\t\timportContent += `import { ${svg.iconName} } from \"./${svg.iconName}\";\\n`;\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\\n`;\n\n\t\t\t\ttypeContent += `\t${svg.iconName},`;\n\n\t\t\t\tif (idx + 1 < svgFiles.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.resolve(svgCRPath, \"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 { buildSvgIcon };\n","import fs from \"fs\";\nimport path from \"path\";\nimport externalGlobals from \"rollup-plugin-external-globals\";\nimport type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\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 & { version?: string; pathList?: string[]; cssList?: string[] } {\n\tprodUrl = module.prodUrl || prodUrl;\n\tconst v = module;\n\tconst 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\t...data,\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\t...data,\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\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\", enableInDevMode = false } = options;\n\n\tlet isBuild = false;\n\n\tconst data = modules\n\t\t.map((m) => {\n\t\t\tconst list = (Array.isArray(m) ? m : [m]).map((v) => (typeof v === \"function\" ? v(prodUrl) : v));\n\t\t\treturn list.map((v) => getModuleInfo(v, prodUrl));\n\t\t})\n\t\t.flat();\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 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};\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});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((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};\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});\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 };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin } from \"vite\";\nimport type { AutoImportOptions } from \"./type\";\n\n/**\n * 组件自动导入\n * @description 只会生成安装文件\n * @param dir 组件文件夹路径\n */\nfunction componentAutoImport(options: string | AutoImportOptions): Plugin {\n\tif (!options) return;\n\n\treturn {\n\t\tname: \"fast-vite-plugin-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\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 { 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":["fs","path","findSvgFile","dir","svgContents","file","iconName","svgInfo","match","attr","viewBoxMatch","widthMatch","heightMatch","width","height","viewBoxContent","a","b","writeTsxComponent","componentName","componentDir","content","componentContent","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","svgCRPath","importContent","exportContent","typeContent","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","cdnImport","options","modules","enableInDevMode","isBuild","m","externalMap","alias","plugins","_","command","userConfig","html","descriptors","attrs","fs","path","componentAutoImport","options","dir","defaultFormatter","fName","formatter","cFiles","cNames","f","file","a","b","importContent","exportContent","typeContent","componentName","fileName","idx","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":["../../packages/buildSvgIcon/index.ts","../../packages/cdnImport/index.ts","../../packages/componentAutoImport/index.ts","../../packages/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 = (iconName: string, componentName: string, iconDir: string, svgContent: string): void => {\n\tconst srcDir = path.join(iconDir, \"src\");\n\n\tfs.mkdirSync(iconDir, { recursive: true });\n\tfs.mkdirSync(srcDir, { recursive: true });\n\n\tconst iconContent = `import { defineComponent } from \"vue\";\nimport { ElIcon } from \"element-plus\";\n\n/**\n * ${componentName} 图标组件\n */\nexport default defineComponent({\n\tname: \"${componentName}\",\n\tcomponents: {\n\t\tElIcon,\n\t},\n\tsetup(_, { attrs }) {\n\t\treturn {\n\t\t\tattrs,\n\t\t};\n\t},\n\trender() {\n\t\treturn (\n\t\t\t<ElIcon {...this.attrs} class=\"fa-icon fa-icon-${componentName} icon\">\n${svgContent\n\t.split(\"\\n\")\n\t.map((line) => `\t\t\t\t${line}`)\n\t.join(\"\\n\")}\n\t\t\t</ElIcon>\n\t\t);\n\t},\n});\n`;\n\n\tfs.writeFileSync(path.join(srcDir, `${iconName}.tsx`), iconContent);\n\n\tconst indexContent = `import { withInstall } from \"fast-element-plus\";\nimport ${componentName}TSX from \"./src/${iconName}.tsx\";\n\nexport const ${componentName} = withInstall(${componentName}TSX);\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.ts\"), indexContent);\n\n\tconst indexDTS = `import type { TSXWithInstall } from \"fast-element-plus\";\nimport type { default as ${componentName}TSX } from \"./src/${iconName}\";\n\nexport declare const ${componentName}: TSXWithInstall<typeof ${componentName}TSX>;\nexport default ${componentName};\n`;\n\n\tfs.writeFileSync(path.join(iconDir, \"index.d.ts\"), indexDTS);\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\t\t\tlet typeDTSContent = \"\";\n\n\t\t\tsvgFiles.forEach((svg, idx) => {\n\t\t\t\twriteTSXIcon(svg.iconName, 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.iconName},`;\n\n\t\t\t\texportContent += `export * from \"./${svg.iconName}\";\n`;\n\n\t\t\t\ttypeDTSContent += `\t\t${svg.componentName}: (typeof import(\"./\"))[\"${svg.componentName}\"];`;\n\n\t\t\t\tif (idx + 1 < svgFiles.length) {\n\t\t\t\t\ttypeDTSContent += \"\\n\";\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 Plugin[];\n`\n\t\t\t);\n\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(iconsPath, \"index.d.ts\"),\n\t\t\t\t`// For this project development\nimport \"@vue/runtime-core\";\n\n// GlobalComponents for Volar\ndeclare module \"@vue/runtime-core\" {\n\texport interface GlobalComponents {\n${typeDTSContent}\n\t}\n\n\t// interface ComponentCustomProperties {}\n}\n\nexport {};\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 type { HtmlTagDescriptor, Plugin, UserConfig } from \"vite\";\nimport { viteExternalsPlugin } from \"vite-plugin-externals\";\nimport type { CdnImportOptions, Module } from \"./type\";\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\n/**\n * CDN 导入\n * @param options\n * @returns\n */\nfunction cdnImport(options: CdnImportOptions): Plugin[] {\n\tconst { modules = [], prodUrl = \"https://cdn.jsdelivr.net/npm/{name}@{version}/{path}\", enableInDevMode = false } = 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 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};\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});\n\t\t\t\t\t});\n\t\t\t\t\tv.cssList.forEach((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};\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});\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 };\n","import fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin } from \"vite\";\nimport type { AutoImportOptions } from \"./type\";\n\n/**\n * TSX组件自动导入\n * @description 只会生成安装文件\n * @param dir 组件文件夹路径\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 dir 组件文件夹路径\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","srcDir","iconContent","line","indexContent","indexDTS","buildSvgIcon","writeDir","config","resolvedConfig","svgFiles","iconsPath","iconImportContent","iconTypeContent","exportContent","typeDTSContent","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","cdnImport","options","modules","enableInDevMode","isBuild","externalMap","alias","plugins","_","command","userConfig","html","descriptors","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"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fast-vite-plugins",
3
3
  "author": "小方",
4
- "version": "1.0.4",
4
+ "version": "1.0.5",
5
5
  "description": "Fast Vite插件库.",
6
6
  "license": "Apache-2.0",
7
7
  "publishConfig": {
@@ -21,9 +21,9 @@
21
21
  "vite-plugin-externals": "^0.6.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@types/node": "^22.5.4",
25
- "@typescript-eslint/eslint-plugin": "^8.4.0",
26
- "@typescript-eslint/parser": "^8.4.0",
24
+ "@types/node": "^22.5.5",
25
+ "@typescript-eslint/eslint-plugin": "^8.6.0",
26
+ "@typescript-eslint/parser": "^8.6.0",
27
27
  "eslint": "^8.57.0",
28
28
  "eslint-config-prettier": "^9.1.0",
29
29
  "eslint-define-config": "^2.1.0",
@@ -31,10 +31,10 @@
31
31
  "eslint-plugin-prettier": "^5.2.1",
32
32
  "eslint-plugin-vue": "^9.28.0",
33
33
  "prettier": "^3.3.3",
34
- "tsup": "^8.2.4",
35
- "tsx": "^4.19.0",
36
- "typescript": "^5.5.4",
37
- "vite": "^5.4.3",
34
+ "tsup": "^8.3.0",
35
+ "tsx": "^4.19.1",
36
+ "typescript": "^5.6.2",
37
+ "vite": "^5.4.6",
38
38
  "vue-eslint-parser": "^9.4.3",
39
39
  "vue-tsc": "^2.1.6"
40
40
  },