115 lines
2.7 KiB
TypeScript
115 lines
2.7 KiB
TypeScript
import path from 'node:path';
|
|
import fs from 'node:fs';
|
|
import { sveltekit } from '@sveltejs/kit/vite';
|
|
import { defineConfig } from 'vite';
|
|
import AutoImport from 'unplugin-auto-import/vite';
|
|
import SvelteImport from 'unplugin-svelte-components/vite';
|
|
import UnoCss from 'unocss/vite';
|
|
import svg from '@poppanator/sveltekit-svg';
|
|
|
|
export default defineConfig({
|
|
server: {
|
|
port: 3000,
|
|
},
|
|
plugins: [
|
|
SvelteImport({
|
|
include: [
|
|
/\.svelte/,
|
|
/\.svelte\?svelte/,
|
|
],
|
|
external: [
|
|
...findPathsByExtension(path.join(__dirname, 'src'), '.svx').map((filePath) => {
|
|
return {
|
|
from: filePath,
|
|
names: [
|
|
`default as ${capitalize(getFileName(filePath))}Svx`,
|
|
],
|
|
defaultImport: false,
|
|
};
|
|
}),
|
|
...findPathsByExtension(path.join(__dirname, 'src'), '.md').map((filePath) => {
|
|
return {
|
|
from: filePath,
|
|
names: [
|
|
`default as ${capitalize(getFileName(filePath))}Md`,
|
|
],
|
|
defaultImport: false,
|
|
};
|
|
}),
|
|
...findPathsByExtension(path.join(__dirname, 'src'), '.svg').map((filePath) => {
|
|
return {
|
|
from: filePath,
|
|
names: [
|
|
`default as ${getFileName(filePath).split('-').map(s => capitalize(s)).join('')}Svg`,
|
|
],
|
|
defaultImport: false,
|
|
};
|
|
}),
|
|
],
|
|
dirs: [
|
|
'./src/**/*',
|
|
],
|
|
importPathTransform: (importPath) => {
|
|
if (path.extname(importPath) === '.svg')
|
|
return `${importPath}?component`;
|
|
if (getFileName(importPath).startsWith('+'))
|
|
return '';
|
|
else return importPath;
|
|
},
|
|
dts: './src/lib/components.d.ts',
|
|
}),
|
|
AutoImport({
|
|
include: [
|
|
/\.svelte/,
|
|
/\.svelte\?svelte/,
|
|
/.[tj]sx?$/,
|
|
],
|
|
imports: [
|
|
'svelte',
|
|
'svelte/animate',
|
|
'svelte/easing',
|
|
'svelte/motion',
|
|
'svelte/store',
|
|
'svelte/transition',
|
|
],
|
|
dirs: [
|
|
'./src/**/*',
|
|
],
|
|
dts: './src/lib/imports.d.ts',
|
|
eslintrc: {
|
|
enabled: true,
|
|
filepath: './.eslintrc-auto-import.json',
|
|
globalsPropValue: true,
|
|
},
|
|
}),
|
|
UnoCss(),
|
|
svg(),
|
|
sveltekit(),
|
|
],
|
|
});
|
|
|
|
function findPathsByExtension(directory: string, extension: string): string[] {
|
|
const file: string[] = [];
|
|
const directoryFiles = fs.readdirSync(directory);
|
|
|
|
for (const directoryFile of directoryFiles) {
|
|
const filePath = path.join(directory, directoryFile);
|
|
|
|
if (fs.statSync(filePath).isDirectory())
|
|
file.push(...findPathsByExtension(filePath, extension));
|
|
|
|
else if (path.extname(filePath) === extension)
|
|
file.push(filePath);
|
|
}
|
|
|
|
return file;
|
|
}
|
|
|
|
function getFileName(filePath: string): string {
|
|
return path.basename(filePath).replace(path.extname(filePath), '');
|
|
}
|
|
|
|
function capitalize(string: string): string {
|
|
return `${string[0].toUpperCase()}${string.substring(1, string.length)}`;
|
|
}
|