-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathvite-svg-loader.ts
More file actions
30 lines (27 loc) · 851 Bytes
/
vite-svg-loader.ts
File metadata and controls
30 lines (27 loc) · 851 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import {readFile} from 'fs/promises';
import {compileTemplate} from '@vue/compiler-sfc';
import {Plugin} from 'vite';
// inspired by:
// - https://github.com/jpkleemans/vite-svg-loader/blob/main/index.js
// - https://github.com/visualfanatic/vite-svg/blob/master/packages/vite-plugin-vue-svg/index.js
const svgRegex = /\.svg\?component$/;
export const svgLoader = (): Plugin => ({
name: 'svg-loader',
enforce: 'pre',
load(id) {
if (!svgRegex.test(id)) return;
const filename = id.replace(svgRegex, '.svg');
return readFile(filename, 'utf8');
},
transform(source, id) {
if (!svgRegex.test(id)) return;
const filename = id.replace(svgRegex, '.svg');
const {code} = compileTemplate({
id,
source,
filename,
transformAssetUrls: false
});
return `${code}\nexport default render`;
}
});