UNPKG

@samual/rolldown-config

Version:
95 lines (94 loc) 3 kB
import { parseAsync, traverse } from "@babel/core" import babelPluginSyntaxTypescript from "@babel/plugin-syntax-typescript" import babelPresetEnv from "@babel/preset-env" import babelPresetTypescript from "@babel/preset-typescript" import { babel } from "@rollup/plugin-babel" import terser from "@rollup/plugin-terser" import { expect } from "@samual/assert" import { babelPluginHere } from "babel-plugin-here" import { babelPluginVitest } from "babel-plugin-vitest" import { defu } from "defu" import { readdir } from "fs/promises" import { cpus } from "os" import * as Path from "path" import prettier from "rollup-plugin-prettier" const rolldownConfig = async ({ sourcePath = "src", rolldownOptions, babelOptions, terserOptions, prettierOptions, experimental } = {}) => defu(rolldownOptions, { external: source => !(Path.isAbsolute(source) || source.startsWith(".")), input: Object.fromEntries( (await readdir(sourcePath, { withFileTypes: !0, recursive: !0 })) .filter(dirent => dirent.isFile()) .map(dirent => Path.join((dirent => dirent.parentPath ?? dirent.path)(dirent), dirent.name)) .filter( path => (path.endsWith(".js") && !path.endsWith(".test.js")) || (path.endsWith(".ts") && !path.endsWith(".d.ts") && !path.endsWith(".test.ts")) ) .map(path => [path.slice(sourcePath.length + 1, -3), path]) ), output: { dir: "dist" }, plugins: [ babel( defu(babelOptions, { babelHelpers: "bundled", extensions: [".ts"], presets: [ [babelPresetEnv, { targets: { node: "20.10" } }], [babelPresetTypescript, { allowDeclareFields: !0, optimizeConstEnums: !0 }] ], plugins: [babelPluginHere(), babelPluginVitest()] }) ), terser( defu(terserOptions, { compress: { passes: Infinity, unsafe: !0, sequences: !1, keep_infinity: !0 }, maxWorkers: Math.floor(cpus().length / 2), mangle: !1, ecma: 2020 }) ), experimental?.noSideEffects && { name: "no-side-effects", async renderChunk(code) { const ast = expect(await parseAsync(code, { plugins: [babelPluginSyntaxTypescript] })), indexes = [] traverse(ast, { Function(path) { !path.node.loc || path.node.type.endsWith("Method") || (path.isExpression() && "VariableDeclarator" != path.parentPath.node.type) || !path.isPure() || indexes.push(path.node.loc.start.index) } }) indexes.sort((a, b) => b - a) for (const index of indexes) code = `${code.slice(0, index)}/*@__NO_SIDE_EFFECTS__*/${code.slice(index)}` return code } }, experimental?.disablePrettier ? void 0 : prettier( defu(prettierOptions, { parser: "espree", useTabs: !0, tabWidth: 4, arrowParens: "avoid", printWidth: 120, semi: !1, trailingComma: "none" }) ) ], preserveEntrySignatures: "strict", treeshake: { moduleSideEffects: !1 } }) export { rolldownConfig }