UNPKG

react-native-integrate

Version:

Automate integration of additional code into React Native projects

117 lines (116 loc) 4.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.summary = void 0; exports.xcodeTask = xcodeTask; exports.runTask = runTask; const fs_1 = __importDefault(require("fs")); const xcode_1 = __importDefault(require("xcode")); const checkCondition_1 = require("../../utils/checkCondition"); const getErrMessage_1 = require("../../utils/getErrMessage"); const getIosProjectPath_1 = require("../../utils/getIosProjectPath"); const processScript_1 = require("../../utils/processScript"); const setState_1 = require("../../utils/setState"); const xcode_context_1 = require("../../utils/xcode.context"); const variables_1 = require("../../variables"); const xcodeTask_addCapability_1 = require("./xcodeTask.addCapability"); const xcodeTask_addConfiguration_1 = require("./xcodeTask.addConfiguration"); const xcodeTask_addFile_1 = require("./xcodeTask.addFile"); const xcodeTask_addPreBuildRunScriptAction_1 = require("./xcodeTask.addPreBuildRunScriptAction"); const xcodeTask_addTarget_1 = require("./xcodeTask.addTarget"); const xcodeTask_setDeploymentVersion_1 = require("./xcodeTask.setDeploymentVersion"); async function xcodeTask(args) { let { content } = args; const { task, configPath, packageName } = args; for (const action of task.actions) { if (action.when && !(0, checkCondition_1.checkCondition)(action.when)) { (0, setState_1.setState)(action.name, { state: 'skipped', reason: 'when', }); continue; } (0, setState_1.setState)(action.name, { state: 'progress', }); try { content = await applyXcodeModification(content, action, configPath, packageName); (0, setState_1.setState)(action.name, { state: 'done', }); } catch (e) { (0, setState_1.setState)(action.name, { state: 'error', reason: (0, getErrMessage_1.getErrMessage)(e), }); throw e; } } return content; } async function applyXcodeModification(content, action, configPath, packageName) { if ('addFile' in action) return (0, xcodeTask_addFile_1.applyAddFile)(content, action, packageName); if ('addTarget' in action) return (0, xcodeTask_addTarget_1.applyAddTarget)(content, action, packageName); if ('addCapability' in action) return (0, xcodeTask_addCapability_1.applyAddCapability)(content, action); if ('setDeploymentVersion' in action) return (0, xcodeTask_setDeploymentVersion_1.applySetDeploymentVersion)(content, action); if ('addConfiguration' in action) return (0, xcodeTask_addConfiguration_1.applyAddConfiguration)(content, action, configPath, packageName); if ('addPreBuildRunScriptAction' in action) return (0, xcodeTask_addPreBuildRunScriptAction_1.applyAddPreBuildRunScriptAction)(content, action, configPath, packageName); if ('script' in action) { if (typeof action.script === 'string') { const resultValue = await (0, processScript_1.processScript)(action.script, variables_1.variables, false, true, { project: content, }); if (action.name && resultValue != null) variables_1.variables.set(action.name, resultValue); } else { const resultValue = await action.script(content); if (action.name && resultValue != null) variables_1.variables.set(action.name, resultValue); } return content; } return content; } function getPbxProjPath() { const pbxFilePath = (0, getIosProjectPath_1.getPbxProjectPath)(); if (!fs_1.default.existsSync(pbxFilePath)) { // noinspection SpellCheckingInspection throw new Error(`project.pbxproj file not found at ${pbxFilePath}`); } return pbxFilePath; } function readPbxProjContent() { const pbxFilePath = getPbxProjPath(); const proj = xcode_1.default.project(pbxFilePath); proj.parseSync(); return proj; } function writePbxProjContent(proj) { const appDelegatePath = getPbxProjPath(); return fs_1.default.writeFileSync(appDelegatePath, proj.writeSync(), 'utf-8'); } async function runTask(args) { let content = readPbxProjContent(); try { xcode_context_1.xcodeContext.set(content); content = await xcodeTask({ ...args, content, }); writePbxProjContent(content); } finally { xcode_context_1.xcodeContext.clear(); } } exports.summary = 'Xcode project modification';