diff --git a/webui/src/features/campaigns/utils/bulkImport.ts b/webui/src/features/campaigns/utils/bulkImport.ts index d67e0c0..19405b4 100644 --- a/webui/src/features/campaigns/utils/bulkImport.ts +++ b/webui/src/features/campaigns/utils/bulkImport.ts @@ -4,6 +4,7 @@ type XlsxWorkbookSheet = { data: unknown[][]; }; type XlsxWorkbookReader = (input: ArrayBuffer) => Promise; +type RawXlsxWorkbookReader = (input: unknown) => Promise; export type ImportFieldDefinition = { name: string; @@ -210,6 +211,15 @@ async function loadXlsxWorkbookReader(): Promise { const module = await import("read-excel-file/browser"); return module.default as XlsxWorkbookReader; } + const globals = globalThis as typeof globalThis & { + Buffer?: { from(input: ArrayBuffer): unknown }; + process?: { versions?: { node?: string } }; + }; + if (globals.process?.versions?.node && globals.Buffer?.from) { + const dynamicImport = new Function("specifier", "return import(specifier)") as (specifier: string) => Promise<{ default: RawXlsxWorkbookReader }>; + const module = await dynamicImport("read-excel-file/node"); + return (input: ArrayBuffer) => module.default(globals.Buffer!.from(input)); + } const module = await import("read-excel-file/universal"); return module.default as XlsxWorkbookReader; }