You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			211 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			211 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											9 months ago
										 | "use strict"; | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |     value: true | ||
|  | }); | ||
|  | Object.defineProperty(exports, "validateTurboNextConfig", { | ||
|  |     enumerable: true, | ||
|  |     get: function() { | ||
|  |         return validateTurboNextConfig; | ||
|  |     } | ||
|  | }); | ||
|  | const _path = /*#__PURE__*/ _interop_require_default(require("path")); | ||
|  | const _config = /*#__PURE__*/ _interop_require_default(require("../server/config")); | ||
|  | const _log = /*#__PURE__*/ _interop_require_wildcard(require("../build/output/log")); | ||
|  | const _constants = require("../shared/lib/constants"); | ||
|  | 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 = {}; | ||
|  |     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 = [ | ||
|  |     // is this supported?
 | ||
|  |     // 'amp',
 | ||
|  |     // 'experimental.amp',
 | ||
|  |     // 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.adjustFontFallbacks", | ||
|  |     "experimental.adjustFontFallbacksWithSizeAdjust", | ||
|  |     "experimental.allowedRevalidateHeaderKeys", | ||
|  |     "experimental.bundlePagesExternals", | ||
|  |     "experimental.extensionAlias", | ||
|  |     "experimental.fallbackNodePolyfills", | ||
|  |     "experimental.sri.algorithm", | ||
|  |     "experimental.swcTraceProfiling", | ||
|  |     "experimental.typedRoutes", | ||
|  |     // 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" | ||
|  | ]; | ||
|  | // The following will need to be supported by `next build --turbo`
 | ||
|  | const prodSpecificTurboNextConfigOptions = [ | ||
|  |     "eslint", | ||
|  |     "typescript", | ||
|  |     "outputFileTracing", | ||
|  |     "generateBuildId", | ||
|  |     "compress", | ||
|  |     "productionBrowserSourceMaps", | ||
|  |     "optimizeFonts", | ||
|  |     "poweredByHeader", | ||
|  |     "staticPageGenerationTimeout", | ||
|  |     "reactProductionProfiling", | ||
|  |     "cleanDistDir", | ||
|  |     "experimental.turbotrace", | ||
|  |     "experimental.outputFileTracingRoot", | ||
|  |     "experimental.outputFileTracingExcludes", | ||
|  |     "experimental.outputFileTracingIgnores", | ||
|  |     "experimental.outputFileTracingIncludes" | ||
|  | ]; | ||
|  | async function validateTurboNextConfig({ dir, isDev }) { | ||
|  |     const { getPkgManager } = require("../lib/helpers/get-pkg-manager"); | ||
|  |     const { getBabelConfigFile } = require("../build/get-babel-config-file"); | ||
|  |     const { defaultConfig } = require("../server/config-shared"); | ||
|  |     const { bold, cyan, red, underline } = require("../lib/picocolors"); | ||
|  |     const { interopDefault } = require("../lib/interop-default"); | ||
|  |     let unsupportedParts = ""; | ||
|  |     let babelrc = await getBabelConfigFile(dir); | ||
|  |     if (babelrc) babelrc = _path.default.basename(babelrc); | ||
|  |     let hasWebpack = false; | ||
|  |     let hasTurbo = !!process.env.TURBOPACK; | ||
|  |     let unsupportedConfig = []; | ||
|  |     let rawNextConfig = {}; | ||
|  |     try { | ||
|  |         rawNextConfig = interopDefault(await (0, _config.default)(_constants.PHASE_DEVELOPMENT_SERVER, dir, { | ||
|  |             rawConfig: true | ||
|  |         })); | ||
|  |         if (typeof rawNextConfig === "function") { | ||
|  |             rawNextConfig = rawNextConfig(_constants.PHASE_DEVELOPMENT_SERVER, { | ||
|  |                 defaultConfig | ||
|  |             }); | ||
|  |         } | ||
|  |         const flattenKeys = (obj, prefix = "")=>{ | ||
|  |             let keys = []; | ||
|  |             for(const key in obj){ | ||
|  |                 if (typeof (obj == null ? void 0 : obj[key]) === "undefined") { | ||
|  |                     continue; | ||
|  |                 } | ||
|  |                 const pre = prefix.length ? `${prefix}.` : ""; | ||
|  |                 if (typeof obj[key] === "object" && !Array.isArray(obj[key]) && obj[key] !== null) { | ||
|  |                     keys = keys.concat(flattenKeys(obj[key], 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); | ||
|  |         let unsupportedKeys = isDev ? unsupportedTurbopackNextConfigOptions : prodSpecificTurboNextConfigOptions; | ||
|  |         for (const key of customKeys){ | ||
|  |             if (key.startsWith("webpack")) { | ||
|  |                 hasWebpack = true; | ||
|  |             } | ||
|  |             if (key.startsWith("experimental.turbo")) { | ||
|  |                 hasTurbo = true; | ||
|  |             } | ||
|  |             let isUnsupported = unsupportedKeys.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); | ||
|  |     } | ||
|  |     const feedbackMessage = `Learn more about Next.js and Turbopack: ${underline("https://nextjs.link/with-turbopack")}\n`; | ||
|  |     if (hasWebpack && !hasTurbo) { | ||
|  |         _log.warn(`Webpack is configured while Turbopack is not, which may cause problems.`); | ||
|  |         _log.warn(`See instructions if you need to configure Turbopack:\n  https://turbo.build/pack/docs/features/customizing-turbopack\n`); | ||
|  |     } | ||
|  |     if (babelrc) { | ||
|  |         unsupportedParts += `Babel detected (${cyan(babelrc)})\n  Babel is not yet supported. To use Turbopack at the moment,\n  you'll need to remove your usage of Babel.`; | ||
|  |     } | ||
|  |     if (unsupportedConfig.length === 1 && unsupportedConfig[0] === "experimental.optimizePackageImports") { | ||
|  |         _log.warn(`'experimental.optimizePackageImports' is not yet supported by Turbopack and will be ignored.`); | ||
|  |     } else if (unsupportedConfig.length) { | ||
|  |         unsupportedParts += `\n\n- Unsupported Next.js configuration option(s) (${cyan("next.config.js")})\n  To use Turbopack, remove the following configuration options:\n${unsupportedConfig.map((name)=>`    - ${red(name)}\n`).join("")}`; | ||
|  |     } | ||
|  |     if (unsupportedParts) { | ||
|  |         const pkgManager = getPkgManager(dir); | ||
|  |         _log.error(`You are using configuration and/or tools that are not yet\nsupported by Next.js with Turbopack:\n${unsupportedParts}\n
 | ||
|  | If you cannot make the changes above, but still want to try out\nNext.js with Turbopack, create the Next.js playground app\nby running the following commands: | ||
|  | 
 | ||
|  |   ${bold(cyan(`${pkgManager === "npm" ? "npx create-next-app" : `${pkgManager} create next-app`} --example with-turbopack with-turbopack-app`))}\n  cd with-turbopack-app\n  ${pkgManager} run dev | ||
|  |         `);
 | ||
|  |         _log.warn(feedbackMessage); | ||
|  |         process.exit(1); | ||
|  |     } | ||
|  |     return rawNextConfig; | ||
|  | } | ||
|  | 
 | ||
|  | //# sourceMappingURL=turbopack-warning.js.map
 |