UNPKG

nuka-code

Version:

A package brought to you by the Nuka-Cola Corporation to zap away those pesky `cache`, `node_modules`, and other related files & directories.

139 lines (131 loc) 3.84 kB
'use strict'; var path3 = require('path'); var ignore = require('ignore'); var rimraf = require('rimraf'); var promises = require('fs/promises'); require('consola'); require('fs'); require('ts-pattern'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var path3__default = /*#__PURE__*/_interopDefault(path3); var ignore__default = /*#__PURE__*/_interopDefault(ignore); // src/nuke.ts // src/lib/project.ts var FILE_IGNORE = ".nukeignore"; var ignoreFileCache = null; async function readIgnoreFile(filePath = process.cwd()) { try { if (ignoreFileCache) { return ignoreFileCache; } const ignoreFile = path3__default.default.join(filePath, FILE_IGNORE); ignoreFileCache = await promises.readFile(ignoreFile, "utf8"); return ignoreFileCache; } catch (error) { return null; } } function unique(array) { return Array.from(new Set(array)); } function toDeepGlob(filePaths) { return unique( filePaths.flatMap((filePath) => { if (filePath.includes("node_modules")) { return [filePath, `**/${filePath}`]; } return [filePath, `**/[!node_modules]**/${filePath}`]; }) ); } // src/nuke.ts async function nukeEverything(rootDir = process.cwd()) { const runId = Date.now(); const cache = await nukeCache(rootDir, runId); const builds = await nukeBuilds(rootDir, runId); const nodeModules = await nukeNodeModules(rootDir, runId); return { cache, builds, node_modules: nodeModules }; } async function nukeNodeModules(rootDir = process.cwd(), runId = Date.now()) { const ignoreHelper = await createIgnoreFileHelper(rootDir); return await rimraf.rimraf(getNukeNodeModulesGlob(), { glob: true, filter: async (filePath) => { return !ignoreHelper.test(path3__default.default.relative(rootDir, filePath)).ignored; } }); } async function nukeCache(rootDir = process.cwd(), runId = Date.now()) { const ignoreHelper = await createIgnoreFileHelper(rootDir); return await rimraf.rimraf(getNukeCacheGlob(), { glob: true, filter: async (filePath) => { return !ignoreHelper.test(path3__default.default.relative(rootDir, filePath)).ignored; } }); } async function nukeBuilds(rootDir = process.cwd(), runId = Date.now()) { const ignoreHelper = await createIgnoreFileHelper(rootDir); return await rimraf.rimraf(getNukeBuildsGlob(), { glob: true, filter: async (filePath) => { return !ignoreHelper.test(path3__default.default.relative(rootDir, filePath)).ignored; } }); } function getNukeEverythingGlob() { return unique([ ...getNukeNodeModulesGlob(), ...getNukeCacheGlob(), ...getNukeBuildsGlob() ]); } function getNukeNodeModulesGlob() { return [ // Deeply nested node_modules "node_modules", "**/node_modules", // Yarn 2+ ".pnp.cjs", ".pnp.loader.mjs" ]; } function getNukeCacheGlob() { return toDeepGlob([".turbo", ".nx/cache"]); } function getNukeBuildsGlob() { return toDeepGlob([ "dist", "out", "output", "outputs", "bundle", // Frameworks ".vercel", ".next", ".nuxt", ".svelte-kit", ".vinxi", ".vuepress/dist", "storybook-static", "coverage", "public/build" ]); } async function createIgnoreFileHelper(rootDir = process.cwd()) { const ignoreFile = await readIgnoreFile(rootDir); return ignore__default.default().add(ignoreFile ?? ""); } exports.createIgnoreFileHelper = createIgnoreFileHelper; exports.getNukeBuildsGlob = getNukeBuildsGlob; exports.getNukeCacheGlob = getNukeCacheGlob; exports.getNukeEverythingGlob = getNukeEverythingGlob; exports.getNukeNodeModulesGlob = getNukeNodeModulesGlob; exports.nukeBuilds = nukeBuilds; exports.nukeCache = nukeCache; exports.nukeEverything = nukeEverything; exports.nukeNodeModules = nukeNodeModules;