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
		
	
| "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
 |