Files
Fluxup_PAP/node_modules/babel-preset-expo/build/common.js
2026-03-10 16:18:05 +00:00

207 lines
7.3 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasModule = hasModule;
exports.getBundler = getBundler;
exports.getPlatform = getPlatform;
exports.getPossibleProjectRoot = getPossibleProjectRoot;
exports.getIsReactServer = getIsReactServer;
exports.getIsDev = getIsDev;
exports.getIsFastRefreshEnabled = getIsFastRefreshEnabled;
exports.getIsProd = getIsProd;
exports.getIsNodeModule = getIsNodeModule;
exports.getBaseUrl = getBaseUrl;
exports.getReactCompiler = getReactCompiler;
exports.getIsServer = getIsServer;
exports.getIsLoaderBundle = getIsLoaderBundle;
exports.getMetroSourceType = getMetroSourceType;
exports.getBabelRuntimeVersion = getBabelRuntimeVersion;
exports.getExpoRouterAbsoluteAppRoot = getExpoRouterAbsoluteAppRoot;
exports.getInlineEnvVarsEnabled = getInlineEnvVarsEnabled;
exports.getAsyncRoutes = getAsyncRoutes;
exports.createAddNamedImportOnce = createAddNamedImportOnce;
exports.toPosixPath = toPosixPath;
// @ts-expect-error: missing types
const helper_module_imports_1 = require("@babel/helper-module-imports");
const node_path_1 = __importDefault(require("node:path"));
function hasModule(name) {
try {
return !!require.resolve(name);
}
catch (error) {
if (error.code === 'MODULE_NOT_FOUND' && error.message.includes(name)) {
return false;
}
throw error;
}
}
/** Determine which bundler is being used. */
function getBundler(caller) {
assertExpoBabelCaller(caller);
if (!caller)
return null;
if (caller.bundler)
return caller.bundler;
if (
// Known tools that use `webpack`-mode via `babel-loader`: `@expo/webpack-config`, Next.js <10
caller.name === 'babel-loader' ||
// NextJS 11 uses this custom caller name.
caller.name === 'next-babel-turbo-loader') {
return 'webpack';
}
// Assume anything else is Metro.
return 'metro';
}
function getPlatform(caller) {
assertExpoBabelCaller(caller);
if (!caller)
return null;
if (caller.platform)
return caller.platform;
const bundler = getBundler(caller);
if (bundler === 'webpack') {
return 'web';
}
// unknown
return caller.platform;
}
function getPossibleProjectRoot(caller) {
assertExpoBabelCaller(caller);
if (!caller)
return null;
if (caller.projectRoot)
return caller.projectRoot;
// unknown
return process.env.EXPO_PROJECT_ROOT;
}
/** If bundling for a react-server target. */
function getIsReactServer(caller) {
assertExpoBabelCaller(caller);
return caller?.isReactServer ?? false;
}
function assertExpoBabelCaller(caller) { }
function getIsDev(caller) {
assertExpoBabelCaller(caller);
if (caller?.isDev != null)
return caller.isDev;
// https://babeljs.io/docs/options#envname
return process.env.BABEL_ENV === 'development' || process.env.NODE_ENV === 'development';
}
function getIsFastRefreshEnabled(caller) {
assertExpoBabelCaller(caller);
if (!caller)
return false;
// NOTE(@kitten): `isHMREnabled` is always true in `@expo/metro-config`.
// However, we still use this option to ensure fast refresh is only enabled in supported runtimes (Metro + Expo)
return !!caller.isHMREnabled && !caller.isServer && !caller.isNodeModule && getIsDev(caller);
}
function getIsProd(caller) {
assertExpoBabelCaller(caller);
if (caller?.isDev != null)
return caller.isDev === false;
// https://babeljs.io/docs/options#envname
return process.env.BABEL_ENV === 'production' || process.env.NODE_ENV === 'production';
}
function getIsNodeModule(caller) {
return caller?.isNodeModule ?? false;
}
function getBaseUrl(caller) {
assertExpoBabelCaller(caller);
return caller?.baseUrl ?? '';
}
function getReactCompiler(caller) {
assertExpoBabelCaller(caller);
return caller?.supportsReactCompiler ?? false;
}
function getIsServer(caller) {
assertExpoBabelCaller(caller);
return caller?.isServer ?? false;
}
function getIsLoaderBundle(caller) {
assertExpoBabelCaller(caller);
return caller?.isLoaderBundle ?? false;
}
function getMetroSourceType(caller) {
assertExpoBabelCaller(caller);
return caller?.metroSourceType;
}
function getBabelRuntimeVersion(caller) {
assertExpoBabelCaller(caller);
let babelRuntimeVersion;
if (typeof caller?.babelRuntimeVersion === 'string') {
babelRuntimeVersion = caller.babelRuntimeVersion;
}
else {
try {
babelRuntimeVersion = require('@babel/runtime/package.json').version;
}
catch (error) {
if (error.code !== 'MODULE_NOT_FOUND')
throw error;
}
}
// NOTE(@kitten): The default shouldn't be higher than `expo/package.json`'s `@babel/runtime` version
// or `babel-preset-expo/package.json`'s peer dependency range for `@babel/runtime`
return babelRuntimeVersion ?? '^7.20.0';
}
function getExpoRouterAbsoluteAppRoot(caller) {
assertExpoBabelCaller(caller);
const rootModuleId = caller?.routerRoot ?? './app';
if (node_path_1.default.isAbsolute(rootModuleId)) {
return rootModuleId;
}
const projectRoot = getPossibleProjectRoot(caller) || '/';
return node_path_1.default.join(projectRoot, rootModuleId);
}
function getInlineEnvVarsEnabled(caller) {
assertExpoBabelCaller(caller);
const isWebpack = getBundler(caller) === 'webpack';
const isServer = getIsServer(caller);
const isNodeModule = getIsNodeModule(caller);
const preserveEnvVars = caller?.preserveEnvVars;
// Development env vars are added using references to enable HMR in development.
// Servers have env vars left as-is to read from the environment.
return !isNodeModule && !isWebpack && !isServer && !preserveEnvVars;
}
function getAsyncRoutes(caller) {
assertExpoBabelCaller(caller);
const isServer = getIsServer(caller);
if (isServer) {
return false;
}
const isProd = getIsProd(caller);
const platform = getPlatform(caller);
if (platform !== 'web' && isProd) {
return false;
}
return caller?.asyncRoutes ?? false;
}
const getOrCreateInMap = (map, key, create) => {
if (!map.has(key)) {
const result = create();
map.set(key, result);
return [result, true];
}
return [map.get(key), false];
};
function createAddNamedImportOnce(t) {
const addedImportsCache = new Map();
return function addNamedImportOnce(path, name, source) {
const [sourceCache] = getOrCreateInMap(addedImportsCache, source, () => new Map());
const [identifier, didCreate] = getOrCreateInMap(sourceCache, name, () => (0, helper_module_imports_1.addNamed)(path, name, source));
// for cached imports, we need to clone the resulting identifier, because otherwise
// '@babel/plugin-transform-modules-commonjs' won't replace the references to the import for some reason.
// this is a helper for that.
return didCreate ? identifier : t.cloneNode(identifier);
};
}
const REGEXP_REPLACE_SLASHES = /\\/g;
/**
* Convert any platform-specific path to a POSIX path.
*/
function toPosixPath(filePath) {
return filePath.replace(REGEXP_REPLACE_SLASHES, '/');
}