@soleil-se/build-app
Version:
Script for building WebApps, RESTApps, Widgets and MCP Servers with Svelte in Sitevision.
60 lines (51 loc) • 2.01 kB
JavaScript
import { findUpSync } from 'find-up';
import { kebabCase } from 'change-case';
import { createRequire } from 'module';
import preprocessOptions from './common/preprocessOptions.js';
import hasDependency from '../../api/hasDependency.js';
const validClassRegex = /[^a-z0-9\-_]|^[^a-z]+/gi;
/* Custom CSS hash requires version 3.34.0 or later */
function cssHash({ hash, css, name }) {
const validClass = name.replace(validClassRegex, '');
return `${kebabCase(validClass)}-${hash(css)}`;
}
async function getSvelteConfig() {
const svelteConfigPath = findUpSync(['svelte.config.js', 'svelte.config.cjs', 'svelte.config.mjs']);
return svelteConfigPath ? import(`file://${svelteConfigPath}`).then((pkg) => pkg.default) : {};
}
async function getPreprocess(svelteConfig) {
if (svelteConfig.preprocess) return svelteConfig.preprocess;
const sveltePreprocess = await import('svelte-preprocess').then((pkg) => pkg.default);
return sveltePreprocess(preprocessOptions);
}
function isLegacy() {
const require = createRequire(import.meta.url);
// eslint-disable-next-line import/no-extraneous-dependencies
const { version } = require('svelte/package.json');
return version.startsWith('3') || version.startsWith('4');
}
export default async function getSveltePlugin({
input, debug = false, extractCss = true, ssr, hydratable = true,
}) {
if (hasDependency('svelte', input)) {
const svelte = await import('rollup-plugin-svelte').then((pkg) => pkg.default);
const svelteConfig = await getSvelteConfig();
return svelte({
preprocess: await getPreprocess(svelteConfig),
emitCss: extractCss,
compilerOptions: {
css: !extractCss ? 'injected' : undefined,
...svelteConfig.compilerOptions,
generate: ssr ? 'server' : 'client',
dev: debug,
cssHash,
...(isLegacy() ? {
enableSourcemap: debug,
hydratable,
generate: ssr ? 'ssr' : 'dom',
} : {}),
},
});
}
return false;
}