From 10838869f2f1e2140f92f1d514bcae9ed3f3cf46 Mon Sep 17 00:00:00 2001 From: shisan Date: Fri, 28 Jan 2022 01:05:51 +0800 Subject: [PATCH] feat: support typescript,close #22 --- packages/core/client.d.ts | 11 +++++++++++ packages/core/package.json | 4 +--- packages/core/src/constants.ts | 2 +- packages/core/src/index.ts | 6 ++++-- packages/core/src/typing.ts | 6 ++++++ packages/playground/basic/src/main.ts | 14 +++++++------- packages/playground/basic/tsconfig.json | 4 +++- 7 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 packages/core/client.d.ts diff --git a/packages/core/client.d.ts b/packages/core/client.d.ts new file mode 100644 index 0000000..d7d8a91 --- /dev/null +++ b/packages/core/client.d.ts @@ -0,0 +1,11 @@ +declare module 'virtual:svg-icons-register' { + // eslint-disable-next-line + const component: any + export default component +} + +declare module 'virtual:svg-icons-names' { + // eslint-disable-next-line + const iconsNames: string[] + export default iconsNames +} diff --git a/packages/core/package.json b/packages/core/package.json index ec5fb5d..176b4a7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -16,9 +16,7 @@ "author": "Vben", "files": [ "dist", - "register.d.ts", - "client.d.ts", - "module.d.ts" + "client.d.ts" ], "scripts": { "dev": "pnpm unbuild --stub", diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 4d1819c..ad54fbf 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -1,5 +1,5 @@ export const SVG_ICONS_REGISTER_NAME = 'virtual:svg-icons-register' export const SVG_ICONS_CLIENT = 'virtual:svg-icons-names' -export const SVG_DOM_ID = '__svg__icons__dom__' + new Date().getTime() + '__' +export const SVG_DOM_ID = '__svg__icons__dom__' export const XMLNS = 'http://www.w3.org/2000/svg' export const XMLNS_LINK = 'http://www.w3.org/1999/xlink' diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 77434d7..2c8ea71 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -17,6 +17,7 @@ import { } from './constants' import { normalizePath } from 'vite' import SVGCompiler from 'svg-baker' +import './client' export * from './typing' @@ -30,6 +31,7 @@ export function createSvgIconsPlugin(opt: ViteSvgIconsPlugin): Plugin { svgoOptions: true, symbolId: 'icon-[dir]-[name]', inject: 'body-last' as const, + customDomId: SVG_DOM_ID, ...opt, } @@ -126,13 +128,13 @@ export async function createModuleCode( if (typeof window !== 'undefined') { function loadSvg() { var body = document.body; - var svgDom = document.getElementById('${SVG_DOM_ID}'); + var svgDom = document.getElementById('${options.customDomId}'); if(!svgDom) { svgDom = document.createElementNS('${XMLNS}', 'svg'); svgDom.style.position = 'absolute'; svgDom.style.width = '0'; svgDom.style.height = '0'; - svgDom.id = '${SVG_DOM_ID}'; + svgDom.id = '${options.customDomId}'; svgDom.setAttribute('xmlns','${XMLNS}'); svgDom.setAttribute('xmlns:link','${XMLNS_LINK}'); } diff --git a/packages/core/src/typing.ts b/packages/core/src/typing.ts index f0028e3..53e8eef 100644 --- a/packages/core/src/typing.ts +++ b/packages/core/src/typing.ts @@ -25,6 +25,12 @@ export interface ViteSvgIconsPlugin { * @default: body-last */ inject?: DomInject + + /** + * custom dom id + * @default: __svg__icons__dom__ + */ + customDomId?: string } export interface FileStats { diff --git a/packages/playground/basic/src/main.ts b/packages/playground/basic/src/main.ts index d5e4728..8dea0e1 100644 --- a/packages/playground/basic/src/main.ts +++ b/packages/playground/basic/src/main.ts @@ -1,12 +1,12 @@ -import { createApp } from 'vue'; -import App from './App.vue'; +import { createApp } from 'vue' +import App from './App.vue' -import 'virtual:svg-icons-register'; +import 'virtual:svg-icons-register' -import allKeys from 'virtual:svg-icons-names'; +import allKeys from 'virtual:svg-icons-names' -console.log(allKeys); +console.log(allKeys) -const app = createApp(App); +const app = createApp(App) -app.mount('#app'); +app.mount('#app') diff --git a/packages/playground/basic/tsconfig.json b/packages/playground/basic/tsconfig.json index 33d5aed..73792a3 100644 --- a/packages/playground/basic/tsconfig.json +++ b/packages/playground/basic/tsconfig.json @@ -16,7 +16,9 @@ "noUnusedParameters": true, "experimentalDecorators": true, "lib": ["dom", "esnext"], + "types": ["vite-plugin-svg-icons/client"], "incremental": true, "skipLibCheck": true - } + }, + "exclude": ["dist"] }