react-native-notificare
Version:
Notificare React Native module.
86 lines (85 loc) • 4.03 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.withNotificareIOSFiles = void 0;
const config_plugins_1 = require("expo/config-plugins");
const path_1 = __importDefault(require("path"));
const utils_1 = require("../utils/utils");
const NOTIFICARE_SERVICES_FILE = 'NotificareServices.plist';
const NOTIFICARE_OPTIONS_FILE = 'NotificareOptions.plist';
const withSetNotificareServicesFile = (config, props) => {
const servicesFilePath = props?.ios?.servicesFile;
config = (0, config_plugins_1.withDangerousMod)(config, [
'ios',
async (newConfig) => {
if (!servicesFilePath) {
throw new Error('NotificareServices.plist file path is missing. Make sure to set ios.servicesFile in react-native-notificare plugin.');
}
const sourceProjectRoot = config_plugins_1.IOSConfig.Paths.getSourceRoot(newConfig.modRequest.projectRoot);
const sourcePath = path_1.default.resolve(newConfig.modRequest.projectRoot, servicesFilePath);
const destinationPath = path_1.default.resolve(sourceProjectRoot, NOTIFICARE_SERVICES_FILE);
(0, utils_1.copyResources)(sourcePath, destinationPath);
return newConfig;
},
]);
config = (0, config_plugins_1.withXcodeProject)(config, (project) => {
const groupName = config_plugins_1.IOSConfig.XcodeUtils.getHackyProjectName(project.modRequest.projectRoot, config);
if (!groupHasChild(project.modResults, groupName, NOTIFICARE_SERVICES_FILE)) {
project.modResults = config_plugins_1.IOSConfig.XcodeUtils.addResourceFileToGroup({
filepath: `${groupName}/${NOTIFICARE_SERVICES_FILE}`,
groupName,
project: project.modResults,
isBuildFile: true,
verbose: true,
});
}
return project;
});
return config;
};
const withSetNotificareOptionsFile = (config, props) => {
const optionsFilePath = props?.ios?.optionsFile;
if (!optionsFilePath) {
return config;
}
config = (0, config_plugins_1.withDangerousMod)(config, [
'ios',
async (newConfig) => {
const sourceProjectRoot = config_plugins_1.IOSConfig.Paths.getSourceRoot(newConfig.modRequest.projectRoot);
const sourcePath = path_1.default.resolve(newConfig.modRequest.projectRoot, optionsFilePath);
const destinationPath = path_1.default.resolve(sourceProjectRoot, NOTIFICARE_OPTIONS_FILE);
(0, utils_1.copyResources)(sourcePath, destinationPath);
return newConfig;
},
]);
config = (0, config_plugins_1.withXcodeProject)(config, (project) => {
const groupName = config_plugins_1.IOSConfig.XcodeUtils.getHackyProjectName(project.modRequest.projectRoot, config);
if (!groupHasChild(project.modResults, groupName, NOTIFICARE_OPTIONS_FILE)) {
project.modResults = config_plugins_1.IOSConfig.XcodeUtils.addResourceFileToGroup({
filepath: `${groupName}/${NOTIFICARE_OPTIONS_FILE}`,
groupName,
project: project.modResults,
isBuildFile: true,
verbose: true,
});
}
return project;
});
return config;
};
function groupHasChild(proj, group, child) {
const groups = proj.hash.project.objects.PBXGroup;
return Object.keys(groups).some(function (key) {
return (groups[key]?.name === group &&
// @ts-ignore
groups[key]?.children?.some(({ comment }) => comment === child));
});
}
const withNotificareIOSFiles = (config, props) => {
config = withSetNotificareServicesFile(config, props);
config = withSetNotificareOptionsFile(config, props);
return config;
};
exports.withNotificareIOSFiles = withNotificareIOSFiles;