1{"version":3,"file":"withStaticPlugin.js","names":["EXPO_DEBUG","boolish","EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS","EXPO_USE_UNVERSIONED_PLUGINS","isModuleMissingError","name","error","includes","code","message","isUnexpectedTokenError","SyntaxError","PluginError","match","withStaticPlugin","config","props","projectRoot","_internal","assertInternalProjectRoot","pluginResolve","pluginProps","normalizeStaticPlugin","plugin","assert","_resolverError","withPlugin","resolveConfigPluginFunction","_isLegacyPlugin","fallback","console","log","shouldMuteWarning"],"sources":["../../src/plugins/withStaticPlugin.ts"],"sourcesContent":["import assert from 'assert';\nimport { boolish } from 'getenv';\n\nimport { ConfigPlugin, StaticPlugin } from '../Plugin.types';\nimport { PluginError } from '../utils/errors';\nimport {\n  assertInternalProjectRoot,\n  normalizeStaticPlugin,\n  resolveConfigPluginFunction,\n} from '../utils/plugin-resolver';\n\nconst EXPO_DEBUG = boolish('EXPO_DEBUG', false);\n\n// Show all error info related to plugin resolution.\nconst EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS = boolish('EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS', false);\n// Force using the fallback unversioned plugin instead of a local versioned copy,\n// this should only be used for testing the CLI.\nconst EXPO_USE_UNVERSIONED_PLUGINS = boolish('EXPO_USE_UNVERSIONED_PLUGINS', false);\n\nfunction isModuleMissingError(name: string, error: Error): boolean {\n  // @ts-ignore\n  if (['MODULE_NOT_FOUND', 'PLUGIN_NOT_FOUND'].includes(error.code)) {\n    return true;\n  }\n  return error.message.includes(`Cannot find module '${name}'`);\n}\n\nfunction isUnexpectedTokenError(error: Error): boolean {\n  if (\n    error instanceof SyntaxError ||\n    (error instanceof PluginError && error.code === 'INVALID_PLUGIN_IMPORT')\n  ) {\n    return (\n      // These are the most common errors that'll be thrown when a package isn't transpiled correctly.\n      !!error.message.match(/Unexpected token/) ||\n      !!error.message.match(/Cannot use import statement/)\n    );\n  }\n  return false;\n}\n\n/**\n * Resolves static module plugin and potentially falls back on a provided plugin if the module cannot be resolved\n *\n * @param config\n * @param fallback Plugin with `_resolverError` explaining why the module couldn't be used\n * @param projectRoot optional project root, fallback to _internal.projectRoot. Used for testing.\n * @param _isLegacyPlugin Used to suppress errors thrown by plugins that are applied automatically\n */\nexport const withStaticPlugin: ConfigPlugin<{\n  plugin: StaticPlugin | ConfigPlugin | string;\n  fallback?: ConfigPlugin<{ _resolverError: Error } & any>;\n  projectRoot?: string;\n  _isLegacyPlugin?: boolean;\n}> = (config, props) => {\n  let projectRoot = props.projectRoot;\n  if (!projectRoot) {\n    projectRoot = config._internal?.projectRoot;\n    assertInternalProjectRoot(projectRoot);\n  }\n\n  let [pluginResolve, pluginProps] = normalizeStaticPlugin(props.plugin);\n  // Ensure no one uses this property by accident.\n  assert(\n    !pluginProps?._resolverError,\n    `Plugin property '_resolverError' is a reserved property of \\`withStaticPlugin\\``\n  );\n\n  let withPlugin: ConfigPlugin<unknown>;\n\n  if (\n    // Function was provided, no need to resolve: [withPlugin, {}]\n    typeof pluginResolve === 'function'\n  ) {\n    withPlugin = pluginResolve;\n  } else if (typeof pluginResolve === 'string') {\n    try {\n      // Resolve and evaluate plugins.\n      withPlugin = resolveConfigPluginFunction(projectRoot, pluginResolve);\n\n      // Only force if the project has the versioned plugin, otherwise use default behavior.\n      // This helps see which plugins are being skipped.\n      if (\n        EXPO_USE_UNVERSIONED_PLUGINS &&\n        !!withPlugin &&\n        !!props._isLegacyPlugin &&\n        !!props.fallback\n      ) {\n        console.log(`Force \"${pluginResolve}\" to unversioned plugin`);\n        withPlugin = props.fallback;\n      }\n    } catch (error: any) {\n      if (EXPO_DEBUG) {\n        if (EXPO_CONFIG_PLUGIN_VERBOSE_ERRORS) {\n          // Log the error in debug mode for plugins with fallbacks (like the Expo managed plugins).\n          console.log(`Error resolving plugin \"${pluginResolve}\"`);\n          console.log(error);\n          console.log();\n        } else {\n          const shouldMuteWarning =\n            props._isLegacyPlugin &&\n            (isModuleMissingError(pluginResolve, error) || isUnexpectedTokenError(error));\n          if (!shouldMuteWarning) {\n            if (isModuleMissingError(pluginResolve, error)) {\n              // Prevent causing log spew for basic resolution errors.\n              console.log(`Could not find plugin \"${pluginResolve}\"`);\n            } else {\n              // Log the error in debug mode for plugins with fallbacks (like the Expo managed plugins).\n              console.log(`Error resolving plugin \"${pluginResolve}\"`);\n              console.log(error);\n              console.log();\n            }\n          }\n        }\n      }\n      // TODO: Maybe allow for `PluginError`s to be thrown so external plugins can assert invalid options.\n\n      // If the static module failed to resolve, attempt to use a fallback.\n      // This enables support for built-in plugins with versioned variations living in other packages.\n      if (props.fallback) {\n        if (!pluginProps) pluginProps = {};\n        // Pass this to the fallback plugin for potential warnings about needing to install a versioned package.\n        pluginProps._resolverError = error;\n        withPlugin = props.fallback;\n      } else {\n        // If no fallback, throw the resolution error.\n        throw error;\n      }\n    }\n  } else {\n    throw new PluginError(\n      `Plugin is an unexpected type: ${typeof pluginResolve}`,\n      'INVALID_PLUGIN_TYPE'\n    );\n  }\n\n  // Execute the plugin.\n  config = withPlugin(config, pluginProps);\n  return config;\n};\n"],"mappings":"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"}