react-native-integrate
Version:
Automate integration of additional code into React Native projects
67 lines (66 loc) • 2.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyAddFile = applyAddFile;
const path_1 = __importDefault(require("path"));
const picocolors_1 = __importDefault(require("picocolors"));
const constants_1 = require("../../constants");
const prompter_1 = require("../../prompter");
const variables_1 = require("../../variables");
const fsTask_1 = require("../fsTask");
const xcodeTask_helpers_1 = require("./xcodeTask.helpers");
async function applyAddFile(content, action, packageName) {
let { target } = action;
target = target || 'root';
target = (0, variables_1.getText)(target);
action.addFile = (0, variables_1.getText)(action.addFile);
const fileName = path_1.default.basename(action.addFile);
const nativeTarget = content.getTarget(constants_1.Constants.XCODE_APPLICATION_TYPE);
let group;
let logTarget;
let destination = 'ios';
switch (target) {
case 'root':
group = content.getFirstProject().firstProject.mainGroup;
logTarget = 'project root';
break;
case 'main':
group = content.findPBXGroupKey({
name: nativeTarget.target.name,
});
logTarget = `${nativeTarget.target.name} target`;
destination += `/${nativeTarget.target.name}`;
break;
default:
target = (0, variables_1.getText)(target);
group = content.findPBXGroupKeyByAny(target);
logTarget = `${target} target`;
destination += `/${target}`;
break;
}
destination += `/${fileName}`;
const groupObj = content.getPBXGroupByKey(group);
if (groupObj.children.some(x => (0, xcodeTask_helpers_1.unquote)(x.comment) == action.addFile)) {
(0, prompter_1.logMessageGray)(`skipped adding resource, ${picocolors_1.default.yellow(action.addFile)} is already referenced in ${picocolors_1.default.yellow(logTarget)}`);
return content;
}
// copy file
await (0, fsTask_1.applyFsModification)({
copyFile: fileName,
destination,
message: action.message,
}, packageName);
const releasePatch = (0, xcodeTask_helpers_1.patchXcodeProject)({
push: (array, item) => array.unshift(item),
});
try {
content.addResourceFile(fileName, { target: nativeTarget.uuid }, group);
}
finally {
releasePatch();
}
(0, prompter_1.logMessage)(`added ${picocolors_1.default.yellow(action.addFile)} reference in ${picocolors_1.default.yellow(logTarget)}`);
return content;
}