@rnv/engine-core
Version:
ReNative Engine Core
236 lines • 12.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var path_1 = tslib_1.__importDefault(require("path"));
var core_1 = require("@rnv/core");
function clearWindowsCacheFiles() {
var opts = {
detached: false,
stdio: 'ignore',
};
// TODO using executeAsync for these scripts returns an error, so this is just a temporary workaround
// This should resolve as it used internally by @react-native-community/cli
// eslint-disable-next-line global-require
var child_process_1 = require('child_process');
// Temporary cache files located in C:/Users/<UserName>/AppData/Local/Temp
child_process_1.spawn('cmd.exe', ['/C', 'del /q/f/s %TEMP%\\*'], opts);
// NuGet cache
child_process_1.spawn('cmd.exe', ['/C', 'dotnet nuget locals all --clear'], opts);
// Yarn/NPM cache
child_process_1.spawn('cmd.exe', ['/C', 'npm cache clean --force & yarn cache clean --all'], opts);
// Watchman cache
child_process_1.spawn('cmd.exe', ['/C', 'watchman watch-del-all'], opts);
return true;
}
exports.default = (0, core_1.createTask)({
description: 'Automatically removes all node_modules and lock in your project and its dependencies',
fn: function (_a) {
var ctx = _a.ctx;
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var skipQuestion, pathsToRemove, localFiles, immediateNodeModuleDir, pkgLock, yarnLock, packagesFolder, buildDirs, local1, local2, local3, answers, confirm_1, confirmBuilds, confirmLocals, confirmCache, confirmCache, e_1;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
skipQuestion = ctx.program.opts().ci;
pathsToRemove = [];
localFiles = [];
immediateNodeModuleDir = path_1.default.join(ctx.paths.project.dir, 'node_modules');
pkgLock = path_1.default.join(ctx.paths.project.dir, 'package-lock.json');
if ((0, core_1.fsExistsSync)(immediateNodeModuleDir)) {
pathsToRemove.push(immediateNodeModuleDir);
}
if ((0, core_1.fsExistsSync)(pkgLock))
pathsToRemove.push(pkgLock);
yarnLock = path_1.default.join(ctx.paths.project.dir, 'yarn.lock');
if ((0, core_1.fsExistsSync)(yarnLock)) {
pathsToRemove.push(yarnLock);
}
packagesFolder = path_1.default.join(ctx.paths.project.dir, 'packages');
if ((0, core_1.fsExistsSync)(packagesFolder)) {
(0, core_1.fsReaddirSync)(packagesFolder).forEach(function (dir) {
if (dir === '.DS_Store') {
var pth = path_1.default.join(packagesFolder, dir);
if ((0, core_1.fsExistsSync)(pth)) {
pathsToRemove.push(pth);
}
}
else {
var pth2 = path_1.default.join(packagesFolder, dir, 'node_modules');
if ((0, core_1.fsExistsSync)(pth2)) {
pathsToRemove.push(pth2);
}
var pth3 = path_1.default.join(packagesFolder, dir, 'package-lock.json');
if ((0, core_1.fsExistsSync)(pth3)) {
pathsToRemove.push(pth3);
}
var pth4 = path_1.default.join(packagesFolder, dir, 'yarn.lock');
if ((0, core_1.fsExistsSync)(pth4)) {
pathsToRemove.push(pth4);
}
var pth5 = path_1.default.join(packagesFolder, dir, 'dist');
if ((0, core_1.fsExistsSync)(pth5)) {
pathsToRemove.push(pth5);
}
}
});
}
buildDirs = [];
if ((0, core_1.fsExistsSync)(ctx.paths.project.builds.dir)) {
buildDirs.push(ctx.paths.project.builds.dir);
}
if ((0, core_1.fsExistsSync)(ctx.paths.project.assets.dir)) {
buildDirs.push(ctx.paths.project.assets.dir);
}
local1 = path_1.default.join(ctx.paths.project.dir, '.DS_Store');
if ((0, core_1.fsExistsSync)(local1))
localFiles.push(local1);
local2 = path_1.default.join(ctx.paths.project.dir, 'renative.local.json');
if ((0, core_1.fsExistsSync)(local2))
localFiles.push(local2);
local3 = path_1.default.join(ctx.paths.project.dir, 'metro.config.local.js');
if ((0, core_1.fsExistsSync)(local3))
localFiles.push(local3);
answers = {
modules: false,
builds: false,
cache: false,
platformBuilds: false,
platformAssets: false,
distAndLib: false,
gitIgnore: false,
nothingToClean: !skipQuestion,
locals: false,
};
if (!pathsToRemove.length) return [3 /*break*/, 3];
if (!!skipQuestion) return [3 /*break*/, 2];
return [4 /*yield*/, (0, core_1.inquirerPrompt)({
name: 'confirm',
type: 'confirm',
message: "Do you want to remove node_module related files/folders? \n".concat((0, core_1.chalk)().red(pathsToRemove.join('\n'))),
})];
case 1:
confirm_1 = (_b.sent()).confirm;
answers.modules = confirm_1;
if (confirm_1)
answers.nothingToClean = false;
return [3 /*break*/, 3];
case 2:
answers.modules = true;
_b.label = 3;
case 3:
if (!buildDirs.length) return [3 /*break*/, 6];
if (!!skipQuestion) return [3 /*break*/, 5];
return [4 /*yield*/, (0, core_1.inquirerPrompt)({
name: 'confirmBuilds',
type: 'confirm',
message: "Do you want to clean your platformBuilds and platformAssets? \n".concat((0, core_1.chalk)().red(buildDirs.join('\n'))),
})];
case 4:
confirmBuilds = (_b.sent()).confirmBuilds;
answers.builds = confirmBuilds;
if (confirmBuilds)
answers.nothingToClean = false;
return [3 /*break*/, 6];
case 5:
answers.builds = true;
_b.label = 6;
case 6:
if (!localFiles.length) return [3 /*break*/, 9];
if (!!skipQuestion) return [3 /*break*/, 8];
return [4 /*yield*/, (0, core_1.inquirerPrompt)({
name: 'confirmLocals',
type: 'confirm',
message: "Do you want to clean local files? \n".concat((0, core_1.chalk)().red(localFiles.join('\n'))),
})];
case 7:
confirmLocals = (_b.sent()).confirmLocals;
answers.locals = confirmLocals;
if (confirmLocals)
answers.nothingToClean = false;
return [3 /*break*/, 9];
case 8:
answers.locals = true;
_b.label = 9;
case 9:
if (!!skipQuestion) return [3 /*break*/, 11];
return [4 /*yield*/, (0, core_1.inquirerPrompt)({
name: 'confirmCache',
type: 'confirm',
message: 'Do you want to clean your npm/bundler cache?',
})];
case 10:
confirmCache = (_b.sent()).confirmCache;
answers.cache = confirmCache;
if (confirmCache)
answers.nothingToClean = false;
return [3 /*break*/, 12];
case 11:
answers.cache = true;
_b.label = 12;
case 12:
if (!!skipQuestion) return [3 /*break*/, 14];
return [4 /*yield*/, (0, core_1.inquirerPrompt)({
name: 'confirmCache',
type: 'confirm',
message: 'Do you want to clean your platformBuilds',
})];
case 13:
confirmCache = (_b.sent()).confirmCache;
answers.cache = confirmCache;
if (confirmCache)
answers.nothingToClean = false;
return [3 /*break*/, 15];
case 14:
answers.cache = true;
_b.label = 15;
case 15:
//git clean -f -d
if (answers.nothingToClean) {
(0, core_1.logToSummary)('Nothing to clean');
return [2 /*return*/, true];
}
if (!answers.modules) return [3 /*break*/, 17];
return [4 /*yield*/, (0, core_1.removeDirs)(pathsToRemove)];
case 16:
_b.sent();
_b.label = 17;
case 17:
if (!answers.builds) return [3 /*break*/, 19];
return [4 /*yield*/, (0, core_1.removeDirs)(buildDirs)];
case 18:
_b.sent();
_b.label = 19;
case 19:
if (!answers.locals) return [3 /*break*/, 21];
return [4 /*yield*/, (0, core_1.removeDirs)(localFiles)];
case 20:
_b.sent();
_b.label = 21;
case 21:
if (!answers.cache) return [3 /*break*/, 27];
if (!core_1.isSystemWin) return [3 /*break*/, 22];
clearWindowsCacheFiles();
return [3 /*break*/, 27];
case 22:
_b.trys.push([22, 24, , 25]);
return [4 /*yield*/, (0, core_1.executeAsync)('watchman watch-del-all')];
case 23:
_b.sent();
return [3 /*break*/, 25];
case 24:
e_1 = _b.sent();
(0, core_1.logDebug)('watchman not installed. skipping');
return [3 /*break*/, 25];
case 25: return [4 /*yield*/, (0, core_1.executeAsync)('npx rimraf -I $TMPDIR/metro-* && npx rimraf -I $TMPDIR/react-* && npx rimraf -I $TMPDIR/haste-*')];
case 26:
_b.sent();
_b.label = 27;
case 27: return [2 /*return*/, true];
}
});
});
},
task: core_1.RnvTaskName.clean,
isGlobalScope: true,
});
//# sourceMappingURL=taskClean.js.map