From c3b17114f3428667bd50ef06ef48d139d1e65490 Mon Sep 17 00:00:00 2001 From: Mikael Hugo Date: Mon, 18 May 2026 00:19:19 +0200 Subject: [PATCH] build: keep playwright out of sf-server image --- docker/Dockerfile.sf-server | 3 +++ scripts/check-circular-deps.mjs | 15 ++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile.sf-server b/docker/Dockerfile.sf-server index be1d9e205..17279d3ad 100644 --- a/docker/Dockerfile.sf-server +++ b/docker/Dockerfile.sf-server @@ -53,6 +53,9 @@ RUN rm -rf \ web/.next/cache \ web/node_modules \ node_modules/.cache \ + node_modules/playwright \ + node_modules/playwright-core \ + node_modules/chromium-bidi \ packages/*/tsconfig.tsbuildinfo FROM node:26.1-slim AS sf-server diff --git a/scripts/check-circular-deps.mjs b/scripts/check-circular-deps.mjs index 6926d98cf..8309b7878 100644 --- a/scripts/check-circular-deps.mjs +++ b/scripts/check-circular-deps.mjs @@ -172,15 +172,12 @@ function extractImports(filePath) { ) { specs.push(node.moduleSpecifier.text); } - // dynamic import("...") | await import("...") - if ( - ts.isCallExpression(node) && - node.expression.kind === ts.SyntaxKind.ImportKeyword && - node.arguments.length > 0 && - ts.isStringLiteral(node.arguments[0]) - ) { - specs.push(node.arguments[0].text); - } + // Intentionally skip dynamic `import("...")` and `await import("...")`. + // Lazy/async imports are a legitimate cycle-breaking technique: + // they don't run at module-graph evaluation time, so they cannot + // cause initialization-order cycles. Madge's prior config used + // `skipAsyncImports: true` for the same reason — matching that + // here so we don't false-positive on intentional lazy seams. // CommonJS require("...") if ( ts.isCallExpression(node) &&