UNPKG

@soleil-se/build-app

Version:

Script for building WebApps, RESTApps and Widgets with Svelte in Sitevision.

67 lines (57 loc) 2.22 kB
import { dirname } from 'path'; import { findUpSync } from 'find-up'; import fse from 'fs-extra'; import { kebabCase } from 'lodash-es'; import { createRequire } from 'module'; import preprocessOptions from './common/preprocessOptions.js'; const validClassRegex = /[^a-z0-9\-_]|^[^a-z]+/gi; function hasSvelte(input) { const packageFile = findUpSync('package.json', { cwd: dirname(input) }); const { dependencies = {} } = fse.readJSONSync(packageFile); return Object.keys(dependencies).includes('svelte'); } /* 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 (hasSvelte(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; }