summaryrefslogtreecommitdiff
path: root/packages/astro/src/vite-plugin-build-html/add-rollup-input.ts
diff options
context:
space:
mode:
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.ts49
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.`);
+}