UNPKG

svgedit

Version:

Powerful SVG-Editor for your browser

84 lines (77 loc) 2.28 kB
import { readdir, stat } from 'node:fs/promises' import { join, resolve } from 'node:path' import { build } from 'vite' import dynamicImportVars from '@rollup/plugin-dynamic-import-vars' import string from 'vite-plugin-string' const root = process.cwd() const extensionsRoot = resolve(root, 'src/editor/extensions') const outDir = resolve(root, 'dist/editor/extensions') const htmlStringPlugin = string({ include: [ 'src/editor/dialogs/**/*.html', 'src/editor/panels/*.html', 'src/editor/templates/*.html', 'src/editor/extensions/*/*.html' ] }) htmlStringPlugin.enforce = 'post' const entries = [] for (const dirent of await readdir(extensionsRoot, { withFileTypes: true })) { if (!dirent.isDirectory() || !dirent.name.startsWith('ext-')) continue const entryPath = join(extensionsRoot, dirent.name, `${dirent.name}.js`) try { const st = await stat(entryPath) if (st.isFile()) entries.push(entryPath) } catch (_err) { // no entry file, skip } } if (!entries.length) { console.info('No extension entries found') process.exit(0) } await build({ // Use isolated config to avoid inheriting the main lib/iife build. configFile: false, root, base: './', logLevel: 'info', plugins: [ { name: 'svgedit-skip-vite-build-html', apply: 'build', enforce: 'pre', configResolved (config) { config.plugins = config.plugins.filter(plugin => plugin.name !== 'vite:build-html') } }, htmlStringPlugin, { ...dynamicImportVars({ include: ['src/editor/extensions/*/*.js'] }), apply: 'build' } ], build: { outDir, emptyOutDir: false, // main build already wrote Editor.js, keep it sourcemap: true, minify: false, // keep exports intact rollupOptions: { treeshake: false, preserveEntrySignatures: 'strict', input: entries, output: { format: 'es', inlineDynamicImports: false, preserveModules: true, preserveModulesRoot: extensionsRoot, entryFileNames: '[name].js', chunkFileNames: 'extensions/_chunks/[name]-[hash].js', assetFileNames: 'extensions/_assets/[name]-[hash][extname]' } } } }) console.info(`Bundled ${entries.length} extensions`)