"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFAULT_ALIAS = {
    // Alias direct react-native imports to react-native-web
    'react-native$': 'react-native-web',
    '@react-native-community/netinfo': 'react-native-web/dist/exports/NetInfo',
    // Add polyfills for modules that react-native-web doesn't support
    // Depends on expo-asset
    'react-native/Libraries/Image/AssetSourceResolver$': 'expo-asset/build/AssetSourceResolver',
    'react-native/Libraries/Image/assetPathUtils$': 'expo-asset/build/Image/assetPathUtils',
    'react-native/Libraries/Image/resolveAssetSource$': 'expo-asset/build/resolveAssetSource',
    // Alias internal react-native modules to react-native-web
    'react-native/Libraries/Components/View/ViewStylePropTypes$': 'react-native-web/dist/exports/View/ViewStylePropTypes',
    'react-native/Libraries/EventEmitter/RCTDeviceEventEmitter$': 'react-native-web/dist/vendor/react-native/NativeEventEmitter/RCTDeviceEventEmitter',
    'react-native/Libraries/vendor/emitter/EventEmitter$': 'react-native-web/dist/vendor/react-native/emitter/EventEmitter',
    'react-native/Libraries/vendor/emitter/EventSubscriptionVendor$': 'react-native-web/dist/vendor/react-native/emitter/EventSubscriptionVendor',
    'react-native/Libraries/EventEmitter/NativeEventEmitter$': 'react-native-web/dist/vendor/react-native/NativeEventEmitter',
};
function isObject(val) {
    if (val === null) {
        return false;
    }
    return typeof val === 'function' || typeof val === 'object';
}
/**
 * Given a config option that could evalutate to true, config, or null; return a config.
 * e.g.
 * `polyfill: true` returns the `config`
 * `polyfill: {}` returns `{}`
 */
function enableWithPropertyOrConfig(prop, config, merge = false) {
    // Value is truthy but not a replacement config.
    if (prop) {
        if (isObject(prop) && merge) {
            if (config == null || typeof config !== 'object') {
                throw new Error('enableWithPropertyOrConfig cannot merge config: ' + config);
            }
            return Object.assign({}, config, prop);
        }
        // Return the default config
        return config;
    }
    // Return falsey or replacement config.
    return prop;
}
exports.enableWithPropertyOrConfig = enableWithPropertyOrConfig;
/**
 * Used for features that are enabled by default unless specified otherwise.
 */
function overrideWithPropertyOrConfig(prop, config, merge = false) {
    if (prop === undefined) {
        return config;
    }
    return enableWithPropertyOrConfig(prop, config, merge);
}
exports.overrideWithPropertyOrConfig = overrideWithPropertyOrConfig;
//# sourceMappingURL=config.js.map