diff --git a/.changeset/brown-yaks-stare.md b/.changeset/brown-yaks-stare.md new file mode 100644 index 000000000..4ebbe8cc1 --- /dev/null +++ b/.changeset/brown-yaks-stare.md @@ -0,0 +1,5 @@ +--- +'@linaria/babel-preset': patch +--- + +Circuit breaker for cyclic dependencies. diff --git a/packages/babel/src/module.ts b/packages/babel/src/module.ts index d5a38ffdc..69f0c8022 100644 --- a/packages/babel/src/module.ts +++ b/packages/babel/src/module.ts @@ -91,6 +91,8 @@ class Module { #isEvaluated = false; + #evaluatedFragments = new Set(); + #exports: Record | unknown; // #exportsProxy: Record; @@ -430,8 +432,20 @@ class Module { }); code.forEach((source, idx) => { + if (this.#evaluatedFragments.has(source)) { + this.debug( + `evaluate:fragment-${padStart(idx + 1, 2)}`, + `is already evaluated` + ); + return; + } + this.debug(`evaluate:fragment-${padStart(idx + 1, 2)}`, `\n${source}`); + this.#evaluatedFragments.add(source); + + this.#isEvaluated = true; + try { const script = new vm.Script( `(function (exports) { ${source}\n})(exports);`, @@ -460,8 +474,6 @@ class Module { ); } }); - - this.#isEvaluated = true; } }