UNPKG

react-native-flip

Version:
437 lines (352 loc) 11.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withIosBaseMods = withIosBaseMods; exports.getIosModFileProviders = getIosModFileProviders; exports.getIosIntrospectModFileProviders = getIosIntrospectModFileProviders; function _plist() { const data = _interopRequireDefault(require("@expo/plist")); _plist = function () { return data; }; return data; } function _assert() { const data = _interopRequireDefault(require("assert")); _assert = function () { return data; }; return data; } function _fs() { const data = require("fs"); _fs = function () { return data; }; return data; } function _path() { const data = _interopRequireDefault(require("path")); _path = function () { return data; }; return data; } function _xcode() { const data = _interopRequireDefault(require("xcode")); _xcode = function () { return data; }; return data; } function _ios() { const data = require("../ios"); _ios = function () { return data; }; return data; } function _getInfoPlistPath() { const data = require("../ios/utils/getInfoPlistPath"); _getInfoPlistPath = function () { return data; }; return data; } function _modules() { const data = require("../utils/modules"); _modules = function () { return data; }; return data; } function _sortObject() { const data = require("../utils/sortObject"); _sortObject = function () { return data; }; return data; } function _warnings() { const data = require("../utils/warnings"); _warnings = function () { return data; }; return data; } function _createBaseMod() { const data = require("./createBaseMod"); _createBaseMod = function () { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const { readFile, writeFile } = _fs().promises; const defaultProviders = { dangerous: (0, _createBaseMod().provider)({ getFilePath() { return ''; }, async read() { return {}; }, async write() {} }), // Append a rule to supply AppDelegate data to mods on `mods.ios.appDelegate` appDelegate: (0, _createBaseMod().provider)({ getFilePath({ modRequest: { projectRoot } }) { return _ios().Paths.getAppDelegateFilePath(projectRoot); }, async read(filePath) { return _ios().Paths.getFileInfo(filePath); }, async write(filePath, { modResults: { contents } }) { await writeFile(filePath, contents); } }), // Append a rule to supply Expo.plist data to mods on `mods.ios.expoPlist` expoPlist: (0, _createBaseMod().provider)({ getFilePath({ modRequest: { platformProjectRoot, projectName } }) { const supportingDirectory = _path().default.join(platformProjectRoot, projectName, 'Supporting'); return _path().default.resolve(supportingDirectory, 'Expo.plist'); }, async read(filePath) { return _plist().default.parse(await readFile(filePath, 'utf8')); }, async write(filePath, { modResults }) { await writeFile(filePath, _plist().default.build((0, _sortObject().sortObject)(modResults))); } }), // Append a rule to supply .xcodeproj data to mods on `mods.ios.xcodeproj` xcodeproj: (0, _createBaseMod().provider)({ getFilePath({ modRequest: { projectRoot } }) { return _ios().Paths.getPBXProjectPath(projectRoot); }, async read(filePath) { const project = _xcode().default.project(filePath); project.parseSync(); return project; }, async write(filePath, { modResults }) { await writeFile(filePath, modResults.writeSync()); } }), // Append a rule to supply Info.plist data to mods on `mods.ios.infoPlist` infoPlist: (0, _createBaseMod().provider)({ getFilePath(config) { const infoPlistBuildProperty = (0, _getInfoPlistPath().getInfoPlistPathFromPbxproj)(config.modRequest.projectRoot); if (infoPlistBuildProperty) { //: [root]/myapp/ios/MyApp/Info.plist const infoPlistPath = _path().default.join( //: myapp/ios config.modRequest.platformProjectRoot, //: MyApp/Info.plist infoPlistBuildProperty); if ((0, _modules().fileExists)(infoPlistPath)) { return infoPlistPath; } (0, _warnings().addWarningIOS)('mods.ios.infoPlist', `Info.plist file linked to Xcode project does not exist: ${infoPlistPath}`); } else { (0, _warnings().addWarningIOS)('mods.ios.infoPlist', 'Failed to find Info.plist linked to Xcode project.'); } // Fallback on glob... return _ios().Paths.getInfoPlistPath(config.modRequest.projectRoot); }, async read(filePath, config) { // Apply all of the Info.plist values to the expo.ios.infoPlist object // TODO: Remove this in favor of just overwriting the Info.plist with the Expo object. This will enable people to actually remove values. if (!config.ios) config.ios = {}; if (!config.ios.infoPlist) config.ios.infoPlist = {}; const contents = await readFile(filePath, 'utf8'); (0, _assert().default)(contents, 'Info.plist is empty'); const modResults = _plist().default.parse(contents); config.ios.infoPlist = { ...(modResults || {}), ...config.ios.infoPlist }; return config.ios.infoPlist; }, async write(filePath, config) { // Update the contents of the static infoPlist object if (!config.ios) config.ios = {}; config.ios.infoPlist = config.modResults; await writeFile(filePath, _plist().default.build((0, _sortObject().sortObject)(config.modResults))); } }), // Append a rule to supply .entitlements data to mods on `mods.ios.entitlements` entitlements: (0, _createBaseMod().provider)({ getFilePath(config) { return _ios().Entitlements.getEntitlementsPath(config.modRequest.projectRoot); }, async read(filePath, config) { const contents = await readFile(filePath, 'utf8'); (0, _assert().default)(contents, 'Entitlements plist is empty'); const modResults = _plist().default.parse(contents); // Apply all of the .entitlements values to the expo.ios.entitlements object // TODO: Remove this in favor of just overwriting the .entitlements with the Expo object. This will enable people to actually remove values. if (!config.ios) config.ios = {}; if (!config.ios.entitlements) config.ios.entitlements = {}; config.ios.entitlements = { ...(modResults || {}), ...config.ios.entitlements }; return config.ios.entitlements; }, async write(filePath, config) { // Update the contents of the static entitlements object if (!config.ios) { config.ios = {}; } config.ios.entitlements = config.modResults; await writeFile(filePath, _plist().default.build((0, _sortObject().sortObject)(config.modResults))); } }) }; function withIosBaseMods(config, { providers, ...props } = {}) { return (0, _createBaseMod().withGeneratedBaseMods)(config, { ...props, platform: 'ios', providers: providers !== null && providers !== void 0 ? providers : getIosModFileProviders() }); } function getIosModFileProviders() { return defaultProviders; } /** * Get file providers that run introspection without modifying the actual native source code. * This can be used to determine the absolute static `ios.infoPlist` and `ios.entitlements` objects. * * @returns */ function getIosIntrospectModFileProviders() { const createIntrospectionProvider = (modName, { fallbackContents }) => { const realProvider = defaultProviders[modName]; return (0, _createBaseMod().provider)({ async getFilePath(...props) { try { return await realProvider.getFilePath(...props); } catch { // fallback to an empty string in introspection mode. return ''; } }, async read(...props) { try { return await realProvider.read(...props); } catch { // fallback if a file is missing in introspection mode. return fallbackContents; } }, async write() {// write nothing in introspection mode. } }); }; // dangerous should never be added return { // appDelegate: createIntrospectionProvider('appDelegate', { // fallbackContents: { // path: '', // contents: '', // language: 'objc', // } as Paths.AppDelegateProjectFile, // }), // xcodeproj: createIntrospectionProvider('xcodeproj', { // fallbackContents: {} as XcodeProject, // }), expoPlist: createIntrospectionProvider('expoPlist', { fallbackContents: {} }), infoPlist: { async getFilePath(...props) { try { return await defaultProviders.infoPlist.getFilePath(...props); } catch { return ''; } }, async read(filePath, config, props) { try { return await defaultProviders.infoPlist.read(filePath, config, props); } catch { var _config$ios$infoPlist, _config$ios; // Fallback to using the infoPlist object from the Expo config. return (_config$ios$infoPlist = (_config$ios = config.ios) === null || _config$ios === void 0 ? void 0 : _config$ios.infoPlist) !== null && _config$ios$infoPlist !== void 0 ? _config$ios$infoPlist : { CFBundleDevelopmentRegion: '$(DEVELOPMENT_LANGUAGE)', CFBundleExecutable: '$(EXECUTABLE_NAME)', CFBundleIdentifier: '$(PRODUCT_BUNDLE_IDENTIFIER)', CFBundleName: '$(PRODUCT_NAME)', CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)', CFBundleInfoDictionaryVersion: '6.0', CFBundleSignature: '????', LSRequiresIPhoneOS: true, NSAppTransportSecurity: { NSAllowsArbitraryLoads: true, NSExceptionDomains: { localhost: { NSExceptionAllowsInsecureHTTPLoads: true } } }, UILaunchStoryboardName: 'SplashScreen', UIRequiredDeviceCapabilities: ['armv7'], UIViewControllerBasedStatusBarAppearance: false, UIStatusBarStyle: 'UIStatusBarStyleDefault' }; } }, write(filePath, config) { // Update the contents of the static infoPlist object if (!config.ios) config.ios = {}; config.ios.infoPlist = config.modResults; } }, entitlements: { async getFilePath(...props) { try { return await defaultProviders.entitlements.getFilePath(...props); } catch { return ''; } }, async read(filePath, config, props) { try { return await defaultProviders.entitlements.read(filePath, config, props); } catch { var _config$ios$entitleme, _config$ios2; // Fallback to using the entitlements object from the Expo config. return (_config$ios$entitleme = (_config$ios2 = config.ios) === null || _config$ios2 === void 0 ? void 0 : _config$ios2.entitlements) !== null && _config$ios$entitleme !== void 0 ? _config$ios$entitleme : {}; } }, write(filePath, config) { // Update the contents of the static entitlements object if (!config.ios) config.ios = {}; config.ios.entitlements = config.modResults; } } }; } //# sourceMappingURL=withIosBaseMods.js.map