diff options
Diffstat (limited to 'packages/astro/src/vite-plugin-build-html/add-rollup-input.ts')
-rw-r--r-- | packages/astro/src/vite-plugin-build-html/add-rollup-input.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/packages/astro/src/vite-plugin-build-html/add-rollup-input.ts b/packages/astro/src/vite-plugin-build-html/add-rollup-input.ts new file mode 100644 index 000000000..0da25ecf9 --- /dev/null +++ b/packages/astro/src/vite-plugin-build-html/add-rollup-input.ts @@ -0,0 +1,49 @@ +import { InputOptions } from 'rollup'; + +function fromEntries<V>(entries: [string, V][]) { + const obj: Record<string, V> = {}; + for (const [k, v] of entries) { + obj[k] = v; + } + return obj; +} + +export function addRollupInput( + inputOptions: InputOptions, + newInputs: string[] +): InputOptions { + // Add input module ids to existing input option, whether it's a string, array or object + // this way you can use multiple html plugins all adding their own inputs + if (!inputOptions.input) { + return { ...inputOptions, input: newInputs }; + } + + if (typeof inputOptions.input === 'string') { + return { + ...inputOptions, + input: [inputOptions.input, ...newInputs], + }; + } + + if (Array.isArray(inputOptions.input)) { + return { + ...inputOptions, + input: [...inputOptions.input, ...newInputs], + }; + } + + if (typeof inputOptions.input === 'object') { + return { + ...inputOptions, + input: { + ...inputOptions.input, + ...fromEntries( + newInputs + .map(i => [i.split('/').slice(-1)[0].split('.')[0], i]), + ), + }, + }; + } + + throw new Error(`Unknown rollup input type. Supported inputs are string, array and object.`); +} |