UNPKG

next

Version:

The React Framework

186 lines (181 loc) • 7.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "validateTurboNextConfig", { enumerable: true, get: function() { return validateTurboNextConfig; } }); const _config = /*#__PURE__*/ _interop_require_default(require("../server/config")); const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const unsupportedTurbopackNextConfigOptions = [ // Left to be implemented (priority) // 'experimental.clientRouterFilter', // 'experimental.optimizePackageImports', // 'compiler.emotion', // 'compiler.reactRemoveProperties', // 'compiler.relay', // 'compiler.removeConsole', // 'compiler.styledComponents', 'experimental.fetchCacheKeyPrefix', // Left to be implemented // 'excludeDefaultMomentLocales', // 'experimental.optimizeServerReact', 'experimental.clientRouterFilterAllowedRate', // 'experimental.serverMinification', // 'experimental.serverSourceMaps', 'experimental.allowedRevalidateHeaderKeys', 'experimental.extensionAlias', 'experimental.fallbackNodePolyfills', 'experimental.sri.algorithm', 'experimental.swcTraceProfiling', // Left to be implemented (Might not be needed for Turbopack) 'experimental.craCompat', 'experimental.disablePostcssPresetEnv', 'experimental.esmExternals', // This is used to force swc-loader to run regardless of finding Babel. 'experimental.forceSwcTransforms', 'experimental.fullySpecified', 'experimental.urlImports', 'experimental.slowModuleDetection' ]; async function validateTurboNextConfig({ dir, configPhase }) { const { defaultConfig } = require('../server/config-shared'); const { cyan, red, underline } = require('../lib/picocolors'); const { interopDefault } = require('../lib/interop-default'); let unsupportedParts = ''; let hasWebpackConfig = false; let hasTurboConfig = false; const unsupportedConfig = []; let rawNextConfig = {}; try { rawNextConfig = interopDefault(await (0, _config.default)(configPhase, dir, { rawConfig: true })); if (typeof rawNextConfig === 'function') { rawNextConfig = rawNextConfig(configPhase, { defaultConfig }); } hasWebpackConfig = Boolean(rawNextConfig.webpack); hasTurboConfig = Boolean(rawNextConfig.turbopack); const flattenKeys = (obj, prefix = '')=>{ let keys = []; for(const key in obj){ const value = obj == null ? void 0 : obj[key]; if (typeof value === 'undefined') { continue; } const pre = prefix.length ? `${prefix}.` : ''; if (typeof value === 'object' && !Array.isArray(value) && value !== null) { keys = keys.concat(flattenKeys(value, pre + key)); } else { keys.push(pre + key); } } return keys; }; const getDeepValue = (obj, keys)=>{ if (typeof keys === 'string') { keys = keys.split('.'); } if (keys.length === 1) { return obj == null ? void 0 : obj[keys == null ? void 0 : keys[0]]; } return getDeepValue(obj == null ? void 0 : obj[keys == null ? void 0 : keys[0]], keys.slice(1)); }; const customKeys = flattenKeys(rawNextConfig); for (const key of customKeys){ if (key.startsWith('experimental.turbo')) { hasTurboConfig = true; } const isUnsupported = unsupportedTurbopackNextConfigOptions.some((unsupportedKey)=>// Either the key matches (or is a more specific subkey) of // unsupportedKey, or the key is the path to a specific subkey. // | key | unsupportedKey | // |---------|----------------| // | foo | foo | // | foo.bar | foo | // | foo | foo.bar | key.startsWith(unsupportedKey) || unsupportedKey.startsWith(`${key}.`)) && getDeepValue(rawNextConfig, key) !== getDeepValue(defaultConfig, key); if (isUnsupported) { unsupportedConfig.push(key); } } } catch (e) { _log.error('Unexpected error occurred while checking config', e); } // If the build was defaulted to Turbopack, we want to warn about possibly ignored webpack // configuration. Otherwise the user explicitly picked turbopack and thus we expect that // they have configured it correctly. if (process.env.TURBOPACK === 'auto' && hasWebpackConfig && !hasTurboConfig) { const configFile = rawNextConfig.configFileName ?? 'your Next config file'; _log.error(`ERROR: This build is using Turbopack, with a \`webpack\` config and no \`turbopack\` config. This may be a mistake. As of Next.js 16 Turbopack is enabled by default and custom webpack configurations may need to be migrated to Turbopack. NOTE: your \`webpack\` config may have been added by a configuration plugin. To configure Turbopack, see https://nextjs.org/docs/app/api-reference/next-config-js/turbopack TIP: Many applications work fine under Turbopack with no configuration, if that is the case for you, you can silence this error by passing the \`--turbopack\` or \`--webpack\` flag explicitly or simply setting an empty turbopack config in ${configFile} (e.g. \`turbopack: {}\`).`); process.exit(1); } if (unsupportedConfig.length) { unsupportedParts += `\n\n- Unsupported Next.js configuration option(s) (${cyan('next.config.js')})\n Turbopack will ignore the following configuration options:\n${unsupportedConfig.map((name)=>` - ${red(name)}\n`).join('')}`; } if (unsupportedParts) { _log.error(`You are using configuration and/or tools that are not yet\nsupported by Next.js with Turbopack:\n${unsupportedParts}\n`); _log.warn('Learn more about how to configure Turbopack with Next.js:\n' + underline('https://nextjs.org/docs/app/api-reference/config/next-config-js/turbopack')); } return rawNextConfig; } //# sourceMappingURL=turbopack-warning.js.map