react-native-integrate
Version:
Automate integration of additional code into React Native projects
83 lines (82 loc) • 3.55 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPackageUpgradeConfig = getPackageUpgradeConfig;
exports.addPackageUpgradeFile = addPackageUpgradeFile;
exports.addPackageUpgradeInput = addPackageUpgradeInput;
exports.writePackageUpgradeConfig = writePackageUpgradeConfig;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const prompter_1 = require("../prompter");
const getProjectPath_1 = require("./getProjectPath");
function getPackageUpgradeConfig(packageName) {
const projectPath = (0, getProjectPath_1.getProjectPath)();
const upgradePath = path_1.default.join(projectPath, '.upgrade', 'packages', packageName, 'upgrade.json');
if (!fs_1.default.existsSync(upgradePath)) {
return {};
}
try {
return JSON.parse(fs_1.default.readFileSync(upgradePath, 'utf8'));
}
catch (_e) {
return {};
}
}
function addPackageUpgradeFile(packageName, file) {
return writePackageUpgradeConfig(packageName, {
files: {
[file]: file,
},
});
}
function addPackageUpgradeInput(packageName, name, value) {
return writePackageUpgradeConfig(packageName, {
inputs: {
[name]: value,
},
});
}
function writePackageUpgradeConfig(packageName, config) {
const projectPath = (0, getProjectPath_1.getProjectPath)();
const upgradeJsonPath = path_1.default.join(projectPath, '.upgrade', 'packages', packageName, 'upgrade.json');
let existingConfig;
if (!fs_1.default.existsSync(upgradeJsonPath)) {
existingConfig = {};
}
else {
try {
existingConfig = JSON.parse(fs_1.default.readFileSync(upgradeJsonPath, 'utf8'));
}
catch (e) {
(0, prompter_1.logWarning)(e?.message);
existingConfig = {};
}
}
if (config.inputs) {
existingConfig.inputs = Object.assign(existingConfig.inputs || {}, config.inputs);
}
if (config.files) {
for (const destination of Object.keys(config.files)) {
const allExistingFiles = Object.values(existingConfig.files || {});
const fullPath = path_1.default.join((0, getProjectPath_1.getProjectPath)(), destination);
let fileName = path_1.default.basename(fullPath);
const extName = path_1.default.extname(fullPath);
if (allExistingFiles.includes(fileName)) {
const fileNameWithoutExt = fileName.replace(extName, '');
const cloneCount = +(/ \(\d+\)$/.exec(fileNameWithoutExt)?.[0] || '1');
fileName = `${fileNameWithoutExt.replace(/ \(\d+\)$/, '')} (${cloneCount + 1})${extName}`;
}
const upgradeFilePath = path_1.default.join(projectPath, '.upgrade', 'packages', packageName, 'files', fileName);
// copy file
fs_1.default.mkdirSync(path_1.default.dirname(upgradeFilePath), { recursive: true });
fs_1.default.copyFileSync(fullPath, upgradeFilePath);
// set fileName
config.files[destination] = fileName;
existingConfig.files = Object.assign(existingConfig.files || {}, config.files);
}
}
fs_1.default.mkdirSync(path_1.default.dirname(upgradeJsonPath), { recursive: true });
fs_1.default.writeFileSync(upgradeJsonPath, JSON.stringify(existingConfig, null, 2));
}