import type { RollupBuild, RollupOptions } from "./mod.ts";import { rollup as _rollup } from "../../deps.ts";import { write } from "./write.ts";import { generate } from "./generate.ts";import { denoResolver } from "../rollup-plugin-deno-resolver/mod.ts";import { ensureArray } from "../ensureArray.ts";import { error } from "../error.ts";
export async function rollup( options: RollupOptions,): Promise<RollupBuild> { const denoResolverPlugin = denoResolver(options.denoResolver); delete options.denoResolver;
options = { ...options, plugins: options.plugins ? [ ...ensureArray(options.plugins), denoResolverPlugin, ] : [denoResolverPlugin], };
try { const bundle = await _rollup(options);
return new Proxy(bundle, { get: (target, prop, receiver) => { const value = Reflect.get(target, prop, receiver);
if (prop === "write") { return write.bind(target); } else if (prop === "generate") { return generate.bind(target); }
return value; }, }); } catch (err) { if (err?.plugin === denoResolverPlugin.name) { const { plugin: _plugin, code: _code, pluginCode, ...rest } = err;
return error({ code: pluginCode, ...rest, }); }
throw err; }}