UNPKG

@alexaegis/nuke

Version:
68 lines (67 loc) 3.11 kB
import { dry, normalizeDryOption } from "@alexaegis/common"; import { normalizeLoggerOption } from "@alexaegis/logging"; import { collectWorkspacePackages, normalizeCollectWorkspacePackagesOptions } from "@alexaegis/workspace-tools"; import { globby } from "globby"; import { existsSync } from "node:fs"; import { rm } from "node:fs/promises"; import { join, relative } from "node:path"; //#region src/functions/nuke.function.options.ts var DEFAULT_NUKE_LIST = [ ".cache", "node_modules", "dist", ".turbo", "coverage", "package-lock.json", "pnpm-lock.yaml", "typedoc", ".svelte-kit" ]; var DEFAULT_NUKE_GLOBS = ["./vite.config.ts.timestamp*", "./vitest.config.ts.timestamp*"]; var normalizeNukeOptions = (options) => { return { ...normalizeCollectWorkspacePackagesOptions(options), ...normalizeDryOption(options), ...normalizeLoggerOption(options), skipNodeModules: options?.skipNodeModules ?? false, nukeList: options?.nukeList ?? DEFAULT_NUKE_LIST, nukeGlobs: options?.nukeGlobs ?? DEFAULT_NUKE_GLOBS, nukeMoreGlobs: options?.nukeMoreGlobs ?? [], nukeMore: options?.nukeMore ?? [], dontNukeIn: options?.dontNukeIn ?? [] }; }; //#endregion //#region src/functions/nuke.function.ts /** * Removes a bunch of stuff from packages for cleaning. */ var nuke = async (rawOptions) => { const options = normalizeNukeOptions(rawOptions); const allWorkspacePackages = await collectWorkspacePackages(options); if (allWorkspacePackages.length === 0) throw new Error("not in a workspace!"); const nukeList = [...options.nukeList, ...options.nukeMore]; const nukeGlobs = [...options.nukeGlobs, ...options.nukeMoreGlobs]; const nonSkippedWorkspacePackages = allWorkspacePackages.filter((workspacePackage) => !options.dontNukeIn.some((skip) => typeof skip === "string" ? skip === workspacePackage.packagePath : skip.test(workspacePackage.packagePath))); const rootPackage = allWorkspacePackages.find((workspacePackage) => workspacePackage.packageKind === "root"); if (!rootPackage) { options.logger.error("Not inside a workspace!"); return; } const packageFlatNukeTargets = nonSkippedWorkspacePackages.flatMap((workspacePackage) => nukeList.map((toNuke) => join(workspacePackage.packagePath, toNuke))); const packageGlobNukeTargets = await Promise.all(nonSkippedWorkspacePackages.map((packageDirectory) => globby(nukeGlobs, { cwd: packageDirectory.packagePath, dot: true, followSymbolicLinks: false, expandDirectories: false }).then((paths) => paths.map((path) => join(packageDirectory.packagePath, path))))); const everyNukeTarget = [...packageFlatNukeTargets, ...packageGlobNukeTargets.flat()].sort(); const dryRm = dry(options.dry, rm); await Promise.allSettled(everyNukeTarget.filter((nukeTarget) => existsSync(nukeTarget)).map((nukeTarget) => { options.logger.warn("obliterating: " + relative(rootPackage.packagePath, nukeTarget)); return dryRm(nukeTarget, { recursive: true }).catch(() => false); })); }; //#endregion export { normalizeNukeOptions as i, DEFAULT_NUKE_GLOBS as n, DEFAULT_NUKE_LIST as r, nuke as t }; //# sourceMappingURL=functions-D94F3mM5.js.map