74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
import path from 'path';
|
|
import glob from 'fast-glob';
|
|
import { Plugin } from 'vite';
|
|
import config from '../../vite.config.default';
|
|
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
|
import sveltePreprocess from 'svelte-preprocess';
|
|
import { emitDts, EmitDtsConfig } from 'svelte2tsx';
|
|
import { createRequire } from 'node:module';
|
|
import { copyFileSync } from 'node:fs';
|
|
|
|
const declarationDir = path.resolve('./types');
|
|
const require = createRequire(import.meta.url);
|
|
const svelteShimsPath = require.resolve('svelte2tsx/svelte-shims-v4.d.ts');
|
|
|
|
// Helper function to emit TypeScript definitions
|
|
async function generateDts(inputPath: string) {
|
|
const config: EmitDtsConfig = {
|
|
declarationDir: declarationDir,
|
|
libRoot: path.dirname(inputPath),
|
|
svelteShimsPath: svelteShimsPath,
|
|
};
|
|
|
|
try {
|
|
await emitDts(config);
|
|
} catch (error) {
|
|
console.error(`Error generating .d.ts for ${inputPath}:`, error);
|
|
}
|
|
}
|
|
|
|
function viteSvelteDts(): Plugin {
|
|
return {
|
|
name: 'vite-plugin-svelte-dts',
|
|
async buildStart(options) {
|
|
console.log('Generating .d.ts files for Svelte components...');
|
|
|
|
const { input } = options;
|
|
if (!input) {
|
|
return;
|
|
}
|
|
if (typeof input === 'string') {
|
|
await generateDts(input);
|
|
} else if (Array.isArray(input)) {
|
|
for (const file of input) {
|
|
await generateDts(file);
|
|
}
|
|
} else {
|
|
for (const file of Object.values(input)) {
|
|
await generateDts(file);
|
|
}
|
|
}
|
|
|
|
// copy .d.ts files to src directory
|
|
const files = await glob('**/*.svelte.d.ts', {
|
|
cwd: declarationDir,
|
|
absolute: true,
|
|
});
|
|
for (const file of files) {
|
|
// resolve the path relative to the src directory
|
|
const dest = path.resolve('src', path.relative(declarationDir, file));
|
|
copyFileSync(file, dest);
|
|
}
|
|
},
|
|
};
|
|
}
|
|
|
|
export default config(path.resolve(__dirname, 'src/main.ts'), 'rrwebPlayer', {
|
|
plugins: [
|
|
viteSvelteDts(),
|
|
svelte({
|
|
preprocess: [sveltePreprocess({ typescript: true })],
|
|
}),
|
|
],
|
|
});
|