123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.DestroyerOfModules = void 0;
- const fs = require("fs-extra");
- const path = require("path");
- const flora_colossus_1 = require("flora-colossus");
- class DestroyerOfModules {
- constructor({ rootDirectory, walker, shouldKeepModuleTest, }) {
- if (rootDirectory) {
- this.walker = new flora_colossus_1.Walker(rootDirectory);
- }
- else if (walker) {
- this.walker = walker;
- }
- else {
- throw new Error('Must either provide rootDirectory or walker argument');
- }
- if (shouldKeepModuleTest) {
- this.shouldKeepFn = shouldKeepModuleTest;
- }
- }
- async destroyModule(modulePath, moduleMap) {
- const module = moduleMap.get(modulePath);
- if (module) {
- const nodeModulesPath = path.resolve(modulePath, 'node_modules');
- if (!await fs.pathExists(nodeModulesPath)) {
- return;
- }
- for (const subModuleName of await fs.readdir(nodeModulesPath)) {
- if (subModuleName.startsWith('@')) {
- for (const subScopedModuleName of await fs.readdir(path.resolve(nodeModulesPath, subModuleName))) {
- await this.destroyModule(path.resolve(nodeModulesPath, subModuleName, subScopedModuleName), moduleMap);
- }
- }
- else {
- await this.destroyModule(path.resolve(nodeModulesPath, subModuleName), moduleMap);
- }
- }
- }
- else {
- await fs.remove(modulePath);
- }
- }
- async collectKeptModules({ relativePaths = false }) {
- const modules = await this.walker.walkTree();
- const moduleMap = new Map();
- const rootPath = path.resolve(this.walker.getRootModule());
- for (const module of modules) {
- if (this.shouldKeepModule(module)) {
- let modulePath = module.path;
- if (relativePaths) {
- modulePath = modulePath.replace(`${rootPath}${path.sep}`, '');
- }
- moduleMap.set(modulePath, module);
- }
- }
- return moduleMap;
- }
- async destroy() {
- await this.destroyModule(this.walker.getRootModule(), await this.collectKeptModules({ relativePaths: false }));
- }
- shouldKeepModule(module) {
- const isDevDep = module.depType === flora_colossus_1.DepType.DEV || module.depType === flora_colossus_1.DepType.DEV_OPTIONAL;
- const shouldKeep = this.shouldKeepFn ? this.shouldKeepFn(module, isDevDep) : !isDevDep;
- return shouldKeep;
- }
- }
- exports.DestroyerOfModules = DestroyerOfModules;
- //# sourceMappingURL=DestroyerOfModules.js.map
|