import type { Plugin, TransformResult, ModuleOptions } from "rollup"; const isRegExp = (obj: unknown) => { return Object.prototype.toString.call(obj) === "[object RegExp]"; }; const OPTIONS: Partial = { moduleSideEffects: "no-treeshake", }; /** * Disable tree-shaking for specific files * @param options{Object=} * @returns {Plugin} */ export default function DisableTreeShakingPlugin(options: { patterns: (string | RegExp)[]; }): Plugin { const { patterns = [], } = options; return { name: "disable-treeShaking", cacheKey: "disable-treeShaking", transform(code, id): TransformResult { if (typeof id === "string" && patterns .filter((pattern) => !!pattern) .some((pattern) => { if (isRegExp(pattern)) { return (pattern as RegExp).test(id); } else { return id.includes(pattern as string); } })) { // console.debug(`[DisableTreeShakingPlugin] Exclude "${id}"`); return OPTIONS; } }, }; }