diff --git a/package.json b/package.json index be69a3f..5a1bf03 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ }, "scripts": { "build": "vp pack", - "check": "vp check" + "check": "vp check", + "watch": "vp pack -w" }, "dependencies": { "@babel/core": "^7.29.0", diff --git a/src/vite/config/build.ts b/src/vite/config/build.ts index 08ccec5..1693eda 100644 --- a/src/vite/config/build.ts +++ b/src/vite/config/build.ts @@ -2,13 +2,32 @@ import { isAbsolute } from 'node:path'; import type { UserConfig } from 'vite'; +type BuildOutput = NonNullable['rolldownOptions']>['output']; + export interface BuildConfigOptions { entry: string; overrides?: UserConfig['build']; } +function normalizeWatchOutputs(output: BuildOutput): BuildOutput { + if (!output) { + return output; + } + + const outputs = Array.isArray(output) ? output : [output]; + const watchOutputs = outputs.filter((output) => output.format !== 'cjs'); + + return Array.isArray(output) + ? watchOutputs + : watchOutputs.length === 1 + ? watchOutputs[0] + : watchOutputs; +} + export default function ({ entry, overrides }: BuildConfigOptions): UserConfig['build'] { - return { + const isWatch = process.argv.includes('--watch') || process.argv.includes('-w'); + + const build: UserConfig['build'] = { cssCodeSplit: true, sourcemap: true, lib: { @@ -40,6 +59,20 @@ export default function ({ entry, overrides }: BuildConfigOptions): UserConfig[' ); }, }, + }; + + const merged: UserConfig['build'] = { + ...build, ...overrides, + rolldownOptions: { + ...build.rolldownOptions, + ...overrides?.rolldownOptions, + }, }; + + if (isWatch && merged.rolldownOptions?.output) { + merged.rolldownOptions.output = normalizeWatchOutputs(merged.rolldownOptions.output); + } + + return merged; } diff --git a/src/vite/plugins/solid-pane.ts b/src/vite/plugins/solid-pane.ts index c90a27a..b1883ce 100644 --- a/src/vite/plugins/solid-pane.ts +++ b/src/vite/plugins/solid-pane.ts @@ -14,17 +14,25 @@ export interface SolidPanePluginOptions { } export default function (options: SolidPanePluginOptions): PluginOption[] { - return [ + const isWatch = process.argv.includes('--watch') || process.argv.includes('-w'); + + const plugins: PluginOption[] = [ css(), icons(), raw(/\.ttl$/), babel({ litDecoratorPaths: options.litDecoratorPaths }), - dts({ - tsconfigPath: 'tsconfig.json', - entryRoot: 'src', - outDirs: ['dist'], - insertTypesEntry: true, - }), + ...(isWatch + ? [] + : [ + dts({ + tsconfigPath: 'tsconfig.json', + entryRoot: 'src', + outDirs: ['dist'], + insertTypesEntry: true, + }), + ]), paneSandbox(options.sandbox), ]; + + return plugins; }