1import type * as rolldown from "rolldown";
2import { esmExternalRequirePlugin } from "rolldown/plugins";
3import type { BasePluginOptions } from "./options.ts";
4import {
5 additionalModulesPlugin,
6 cloudflareExternalsPlugin,
7 getUnenv,
8 nodejsAlsPlugin,
9 nodejsImportWarningPlugin,
10 nodejsUnenvPlugin,
11 optionsPlugin,
12 virtualModulesPlugin,
13 wasmInitPlugin,
14} from "./plugins/index.ts";
15import { hasNodejsCompat } from "./utils.ts";
16
17export type RolldownPluginOptions = Omit<BasePluginOptions, "viteEnvironment">;
18
19export type RolldownPlugin = (
20 options?: RolldownPluginOptions,
21) => Array<rolldown.Plugin | null>;
22
23const cloudflare: RolldownPlugin = (options = {}) => {
24 return [
25 options.externalRequire !== false &&
26 hasNodejsCompat(options.compatibilityFlags, options.compatibilityDate)
27 ? esmExternalRequirePlugin({
28 external: [...getUnenv(options).external],
29 skipDuplicateCheck: true,
30 })
31 : null,
32 optionsPlugin.rolldown(options),
33 cloudflareExternalsPlugin.rolldown(options),
34 nodejsAlsPlugin.rolldown(options),
35 nodejsImportWarningPlugin.rolldown(options),
36 nodejsUnenvPlugin.rolldown(options),
37 virtualModulesPlugin.rolldown(options),
38 wasmInitPlugin.rolldown(options),
39 additionalModulesPlugin.rolldown(options),
40 ];
41};
42
43export default cloudflare;