UNPKG

@sveltejs/vite-plugin-svelte

Version:

The official [Svelte](https://svelte.dev) plugin for [Vite](https://vitejs.dev).

88 lines (78 loc) 2.55 kB
/** @import { Options } from '../public.js' */ /** @import { PreResolvedOptions } from '../types/options.js' */ /** @import { PluginAPI } from '../types/plugin-api.js' */ /** @import { Plugin } from 'vite' */ import process from 'node:process'; import { isDebugNamespaceEnabled, log } from '../utils/log.js'; import { VitePluginSvelteStats } from '../utils/vite-plugin-svelte-stats.js'; import { buildExtraViteConfig, validateInlineOptions, resolveOptions, preResolveOptions, ensureConfigEnvironmentMainFields, ensureConfigEnvironmentConditions } from '../utils/options.js'; import { buildIdFilter, buildIdParser } from '../utils/id.js'; import { createCompileSvelte } from '../utils/compile.js'; /** * @param {Partial<Options>} [inlineOptions] * @param {PluginAPI} api * @returns {Plugin} */ export function configure(api, inlineOptions) { validateInlineOptions(inlineOptions); /** * @type {PreResolvedOptions} */ let preOptions; /** @type {Plugin} */ return { name: 'vite-plugin-svelte:config', api, // make sure it runs first enforce: 'pre', config: { order: 'pre', async handler(config, configEnv) { // setup logger if (process.env.DEBUG) { log.setLevel('debug'); } else if (config.logLevel) { log.setLevel(config.logLevel); } preOptions = await preResolveOptions(inlineOptions, config, configEnv); // extra vite config const extraViteConfig = await buildExtraViteConfig(preOptions, config); log.debug('additional vite config', extraViteConfig, 'config'); return extraViteConfig; } }, configResolved: { order: 'pre', handler(config) { const options = resolveOptions(preOptions, config); api.options = options; if (isDebugNamespaceEnabled('stats')) { api.options.stats = new VitePluginSvelteStats(); } api.filter = buildIdFilter(options); api.idParser = buildIdParser(options); api.compileSvelte = createCompileSvelte(); log.debug('resolved options', api.options, 'config'); } }, configEnvironment(name, config, opts) { ensureConfigEnvironmentMainFields(name, config, opts); // @ts-expect-error the function above should make `resolve.mainFields` non-nullable config.resolve.mainFields.unshift('svelte'); ensureConfigEnvironmentConditions(name, config, opts); // @ts-expect-error the function above should make `resolve.conditions` non-nullable config.resolve.conditions.push('svelte'); }, configureServer(server) { const { options } = api; options.server = server; } }; }