react-native-integrate
Version:
Automate integration of additional code into React Native projects
76 lines (75 loc) • 2.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.readLockFile = readLockFile;
exports.updateIntegrationStatus = updateIntegrationStatus;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const constants_1 = require("../constants");
const getProjectPath_1 = require("./getProjectPath");
function createLockObject() {
return { lockfileVersion: constants_1.Constants.CURRENT_LOCK_VERSION, packages: {} };
}
function readLockFile() {
const projectPath = (0, getProjectPath_1.getProjectPath)();
const lockFilePath = path_1.default.join(projectPath, constants_1.Constants.LOCK_FILE_NAME);
try {
if (!fs_1.default.existsSync(lockFilePath))
return {
lockData: createLockObject(),
justCreated: true,
};
// Read the file and parse it as JSON
const lockFileContent = fs_1.default.readFileSync(lockFilePath, 'utf-8');
if (!lockFileContent)
return {
lockData: createLockObject(),
justCreated: true,
};
// compare lock version
const lockData = JSON.parse(lockFileContent);
if (lockData.lockfileVersion !== constants_1.Constants.CURRENT_LOCK_VERSION) {
console.error(`Error reading integrate-lock.json: lockfileVersion is not equal to ${constants_1.Constants.CURRENT_LOCK_VERSION}`);
process.exit(0);
}
return {
lockData,
justCreated: false,
};
}
catch (error) {
console.error('Error reading integrate-lock.json:', error);
process.exit(0);
}
}
function writeLockFile(data) {
const projectPath = (0, getProjectPath_1.getProjectPath)();
const lockFilePath = path_1.default.join(projectPath, constants_1.Constants.LOCK_FILE_NAME);
try {
fs_1.default.writeFileSync(lockFilePath, JSON.stringify(data, null, 2));
}
catch (error) {
console.error('Error writing integrate-lock.json:', error);
process.exit(0);
}
}
function updateIntegrationStatus(packageIntegrations) {
const { lockData } = readLockFile();
if (!lockData.packages)
lockData.packages = {};
packageIntegrations.forEach(integration => {
if (integration.lockProjectData.deleted)
delete lockData.packages[integration.packageName];
else
lockData.packages[integration.packageName] = integration.lockProjectData;
});
lockData.packages = Object.keys(lockData.packages)
.sort()
.reduce((temp_obj, key) => {
temp_obj[key] = lockData.packages[key];
return temp_obj;
}, {});
writeLockFile(lockData);
}