@react-native/core-cli-utils
Version:
React Native CLI library for Frameworks to build on
141 lines (139 loc) • 4.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true,
});
exports.deleteDirectory = deleteDirectory;
exports.deleteDirectoryContents = deleteDirectoryContents;
exports.deleteTmpDirectoryContents = deleteTmpDirectoryContents;
exports.tasks = void 0;
var _utils = require("./utils");
var _execa = _interopRequireDefault(require("execa"));
var _fs = require("fs");
var _os = _interopRequireDefault(require("os"));
var _path = _interopRequireDefault(require("path"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
const FIRST = 1,
SECOND = 2;
const rmrf = (pathname) => {
if (!(0, _fs.existsSync)(pathname)) {
return;
}
(0, _fs.rm)(pathname, {
force: true,
maxRetries: 3,
recursive: true,
});
};
function deleteDirectoryContents(directory, filePattern) {
return async function deleteDirectoryContentsAction() {
const base = _path.default.dirname(directory);
const files = (0, _fs.readdirSync)(base).filter((filename) =>
filePattern.test(filename),
);
for (const filename of files) {
rmrf(_path.default.join(base, filename));
}
};
}
function deleteDirectory(directory) {
return async function cleanDirectoryAction() {
rmrf(directory);
};
}
function deleteTmpDirectoryContents(filepattern) {
return deleteDirectoryContents(_os.default.tmpdir(), filepattern);
}
const platformGradlew = _utils.isWindows ? "gradlew.bat" : "gradlew";
const tasks = (exports.tasks = {
android: (androidSrcDir, opts) => ({
validate: (0, _utils.task)(FIRST, "Check gradlew is available", () => {
(0, _utils.assertDependencies)(
(0, _utils.isOnPath)(platformGradlew, "Gradle wrapper"),
);
}),
run: (0, _utils.task)(SECOND, "🧹 Clean Gradle cache", () => {
const gradlew = _path.default.join(
androidSrcDir ?? "android",
platformGradlew,
);
const script = _path.default.basename(gradlew);
const cwd = _path.default.dirname(gradlew);
return (0, _execa.default)(
_utils.isWindows ? script : "./" + script,
["clean"],
{
cwd,
...opts,
},
);
}),
}),
metro: () => ({
metro: (0, _utils.task)(
FIRST,
"🧹 Clean Metro cache",
deleteTmpDirectoryContents(/^metro-.+/),
),
haste: (0, _utils.task)(
FIRST,
"🧹 Clean Haste cache",
deleteTmpDirectoryContents(/^haste-map-.+/),
),
react_native: (0, _utils.task)(
FIRST,
"🧹 Clean React Native cache",
deleteTmpDirectoryContents(/^react-.+/),
),
}),
npm: (projectRootDir) => ({
node_modules: (0, _utils.task)(
FIRST,
"🧹 Clean node_modules",
deleteDirectory(_path.default.join(projectRootDir, "node_modules")),
),
verify_cache: (0, _utils.task)(SECOND, "🔬 Verify npm cache", (opts) =>
(0, _execa.default)("npm", ["cache", "verify"], {
cwd: projectRootDir,
...opts,
}),
),
}),
watchman: (projectRootDir) => ({
stop: (0, _utils.task)(FIRST, "✋ Stop Watchman", (opts) =>
(0, _execa.default)(
_utils.isWindows ? "tskill" : "killall",
["watchman"],
{
cwd: projectRootDir,
...opts,
},
),
),
cache: (0, _utils.task)(SECOND, "🧹 Delete Watchman cache", (opts) =>
(0, _execa.default)("watchman", ["watch-del-all"], {
cwd: projectRootDir,
...opts,
}),
),
}),
yarn: (projectRootDir) => ({
clean: (0, _utils.task)(FIRST, "🧹 Clean Yarn cache", (opts) =>
(0, _execa.default)("yarn", ["cache", "clean"], {
cwd: projectRootDir,
...opts,
}),
),
}),
});
if (_utils.isMacOS) {
tasks.cocoapods = (projectRootDir) => ({
clean: (0, _utils.task)(FIRST, "🧹 Clean CocoaPods pod cache", (opts) =>
(0, _execa.default)("bundle", ["exec", "pod", "deintegrate"], {
cwd: projectRootDir,
...opts,
}),
),
});
}