You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.6 KiB
162 lines
5.6 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.withStaticPlugin = void 0;
|
|
|
|
function _assert() {
|
|
const data = _interopRequireDefault(require("assert"));
|
|
|
|
_assert = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _getenv() {
|
|
const data = require("getenv");
|
|
|
|
_getenv = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _errors() {
|
|
const data = require("../utils/errors");
|
|
|
|
_errors = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _pluginResolver() {
|
|
const data = require("../utils/plugin-resolver");
|
|
|
|
_pluginResolver = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const EXPO_DEBUG = (0, _getenv().boolish)('EXPO_DEBUG', false); // Show all error info related to plugin resolution.
|
|
|
|
const EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS = (0, _getenv().boolish)('EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS', false); // Force using the fallback unversioned plugin instead of a local versioned copy,
|
|
// this should only be used for testing the CLI.
|
|
|
|
const EXPO_USE_UNVERSIONED_PLUGINS = (0, _getenv().boolish)('EXPO_USE_UNVERSIONED_PLUGINS', false);
|
|
|
|
function isModuleMissingError(name, error) {
|
|
// @ts-ignore
|
|
if (['MODULE_NOT_FOUND', 'PLUGIN_NOT_FOUND'].includes(error.code)) {
|
|
return true;
|
|
}
|
|
|
|
return error.message.includes(`Cannot find module '${name}'`);
|
|
}
|
|
|
|
function isUnexpectedTokenError(error) {
|
|
if (error instanceof SyntaxError || error instanceof _errors().PluginError && error.code === 'INVALID_PLUGIN_IMPORT') {
|
|
return (// These are the most common errors that'll be thrown when a package isn't transpiled correctly.
|
|
!!error.message.match(/Unexpected token/) || !!error.message.match(/Cannot use import statement/)
|
|
);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
/**
|
|
* Resolves static module plugin and potentially falls back on a provided plugin if the module cannot be resolved
|
|
*
|
|
* @param config
|
|
* @param fallback Plugin with `_resolverError` explaining why the module couldn't be used
|
|
* @param projectRoot optional project root, fallback to _internal.projectRoot. Used for testing.
|
|
* @param _isLegacyPlugin Used to suppress errors thrown by plugins that are applied automatically
|
|
*/
|
|
|
|
|
|
const withStaticPlugin = (config, props) => {
|
|
var _pluginProps;
|
|
|
|
let projectRoot = props.projectRoot;
|
|
|
|
if (!projectRoot) {
|
|
var _config$_internal;
|
|
|
|
projectRoot = (_config$_internal = config._internal) === null || _config$_internal === void 0 ? void 0 : _config$_internal.projectRoot;
|
|
(0, _pluginResolver().assertInternalProjectRoot)(projectRoot);
|
|
}
|
|
|
|
let [pluginResolve, pluginProps] = (0, _pluginResolver().normalizeStaticPlugin)(props.plugin); // Ensure no one uses this property by accident.
|
|
|
|
(0, _assert().default)(!((_pluginProps = pluginProps) !== null && _pluginProps !== void 0 && _pluginProps._resolverError), `Plugin property '_resolverError' is a reserved property of \`withStaticPlugin\``);
|
|
let withPlugin;
|
|
|
|
if ( // Function was provided, no need to resolve: [withPlugin, {}]
|
|
typeof pluginResolve === 'function') {
|
|
withPlugin = pluginResolve;
|
|
} else if (typeof pluginResolve === 'string') {
|
|
try {
|
|
// Resolve and evaluate plugins.
|
|
withPlugin = (0, _pluginResolver().resolveConfigPluginFunction)(projectRoot, pluginResolve); // Only force if the project has the versioned plugin, otherwise use default behavior.
|
|
// This helps see which plugins are being skipped.
|
|
|
|
if (EXPO_USE_UNVERSIONED_PLUGINS && !!withPlugin && !!props._isLegacyPlugin && !!props.fallback) {
|
|
console.log(`Force "${pluginResolve}" to unversioned plugin`);
|
|
withPlugin = props.fallback;
|
|
}
|
|
} catch (error) {
|
|
if (EXPO_DEBUG) {
|
|
if (EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS) {
|
|
// Log the error in debug mode for plugins with fallbacks (like the Expo managed plugins).
|
|
console.log(`Error resolving plugin "${pluginResolve}"`);
|
|
console.log(error);
|
|
console.log();
|
|
} else {
|
|
const shouldMuteWarning = props._isLegacyPlugin && (isModuleMissingError(pluginResolve, error) || isUnexpectedTokenError(error));
|
|
|
|
if (!shouldMuteWarning) {
|
|
if (isModuleMissingError(pluginResolve, error)) {
|
|
// Prevent causing log spew for basic resolution errors.
|
|
console.log(`Could not find plugin "${pluginResolve}"`);
|
|
} else {
|
|
// Log the error in debug mode for plugins with fallbacks (like the Expo managed plugins).
|
|
console.log(`Error resolving plugin "${pluginResolve}"`);
|
|
console.log(error);
|
|
console.log();
|
|
}
|
|
}
|
|
}
|
|
} // TODO: Maybe allow for `PluginError`s to be thrown so external plugins can assert invalid options.
|
|
// If the static module failed to resolve, attempt to use a fallback.
|
|
// This enables support for built-in plugins with versioned variations living in other packages.
|
|
|
|
|
|
if (props.fallback) {
|
|
if (!pluginProps) pluginProps = {}; // Pass this to the fallback plugin for potential warnings about needing to install a versioned package.
|
|
|
|
pluginProps._resolverError = error;
|
|
withPlugin = props.fallback;
|
|
} else {
|
|
// If no fallback, throw the resolution error.
|
|
throw error;
|
|
}
|
|
}
|
|
} else {
|
|
throw new (_errors().PluginError)(`Plugin is an unexpected type: ${typeof pluginResolve}`, 'INVALID_PLUGIN_TYPE');
|
|
} // Execute the plugin.
|
|
|
|
|
|
config = withPlugin(config, pluginProps);
|
|
return config;
|
|
};
|
|
|
|
exports.withStaticPlugin = withStaticPlugin;
|
|
//# sourceMappingURL=withStaticPlugin.js.map
|