The patch works both with tsc
and next build
, as described in the comments of the patch.
Inspired by
The patch works both with tsc
and next build
, as described in the comments of the patch.
Inspired by
diff --git a/node_modules/typescript/lib/tsc.js b/node_modules/typescript/lib/tsc.js | |
index 4964bb7..8fa48e0 100644 | |
--- a/node_modules/typescript/lib/tsc.js | |
+++ b/node_modules/typescript/lib/tsc.js | |
@@ -52730,7 +52730,8 @@ var ts; | |
if (!couldContainTypeVariables(type)) { | |
return type; | |
} | |
- if (instantiationDepth === 100 || instantiationCount >= 5000000) { | |
+ // increase limit to make i18n type work @see https://github.com/i18next/react-i18next/issues/1417#issuecomment-983951906 | |
+ if (instantiationDepth === 200 || instantiationCount >= 5000000) { | |
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "instantiateType_DepthLimit", { typeId: type.id, instantiationDepth: instantiationDepth, instantiationCount: instantiationCount }); | |
error(currentNode, ts.Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite); | |
return errorType; | |
diff --git a/node_modules/typescript/lib/typescript.js b/node_modules/typescript/lib/typescript.js | |
index e8734a6..b6b6619 100644 | |
--- a/node_modules/typescript/lib/typescript.js | |
+++ b/node_modules/typescript/lib/typescript.js | |
@@ -63632,7 +63632,21 @@ var ts; | |
if (!couldContainTypeVariables(type)) { | |
return type; | |
} | |
- if (instantiationDepth === 100 || instantiationCount >= 5000000) { | |
+ /** | |
+ * increase limit to make i18n type work @see https://github.com/i18next/react-i18next/issues/1417#issuecomment-983951906 | |
+ * | |
+ * Why? | |
+ * | |
+ * Because of how next validates types when running `next build`, we | |
+ * have to patch not only tsc.js but also this file. | |
+ * | |
+ * @see https://github.com/vercel/next.js/blob/4cc7f11da2194aa9ffce4e04b8a0c6ee340f4f85/packages/next/build/index.ts#L176 | |
+ * @see https://github.com/vercel/next.js/blob/4cc7f11da2194aa9ffce4e04b8a0c6ee340f4f85/packages/next/lib/verifyTypeScriptSetup.ts#L20-L24 | |
+ * | |
+ * And ignoring the build step is not a desired solution. | |
+ * @see https://nextjs.org/docs/api-reference/next.config.js/ignoring-typescript-errors | |
+ */ | |
++ if (instantiationDepth === 200 || instantiationCount >= 5000000) { | |
// We have reached 100 recursive type instantiations, or 5M type instantiations caused by the same statement | |
// or expression. There is a very high likelyhood we're dealing with a combination of infinite generic types | |
// that perpetually generate new type identities, so we stop the recursion here by yielding the error type. |