Loading workspace insights... Statistics interval
7 days30 daysLatest CI Pipeline Executions
135825a9 fix(misc): emit playwright.config.cts so Playwright + Nx both load the config cleanly, restore tsconfig-paths in registerTsProject, recover .cts ESM-syntax via swc-node
- Playwright generator emitted `playwright.config.ts`. In default `apps` workspaces the file had top-level imports so Nx's native strip auto-detected ESM and `__filename` blew up with ReferenceError. In `type: "module"` workspaces a CJS-shape `.ts` was rejected (no `require`/`module.exports` in ESM scope). An ESM-shape `.ts` (top-level `import` + `import.meta.dirname`) also broke under Playwright's pirates loader, which compiles to CJS leaving `import.meta` intact; Node then re-detects ESM from the compiled output and errors on `exports is not defined in ES module scope` (the cascade across e2e-angular, e2e-cypress, e2e-eslint, e2e-jest, e2e-nx, e2e-react, e2e-remix, e2e-vite, e2e-vue, e2e-web).
- `registerTsProject(tsConfigPath)` became a no-op under native strip - skipped BOTH transpiler and tsconfig-paths registration. Native strip handles transpilation, but path mapping is orthogonal: user code that explicitly calls `registerTsProject` to resolve `paths` aliases (e.g. Jest `globalSetup` requiring `@my-org/lib`) silently broke with MODULE_NOT_FOUND.
- Legacy `.cts` files using ESM `export` syntax fail Node's strict CJS parser with SyntaxError. No fallback path existed under native strip, so configs that worked pre-v23 (via swc-node's CJS hook compiling away ESM syntax) break.
- js-strip-types e2e asserted via `nx report`, which catches ProjectGraphError and exits 0 even when configs fail to load - so the regression above went undetected. jest.test.ts also wrote `export default` into a .cts fixture, broken for the same reason.
- Playwright generator now emits `playwright.config.cts`. Node forces `.cts` to CommonJS regardless of workspace `type`, so the file loads cleanly under Playwright's pirates runtime AND Nx's native strip. Playwright auto-discovers `.cts` via its configLoader extension list (`.ts/.js/.mts/.mjs/.cts/.cjs`). The Nx playwright plugin already globs all six extensions, so no plugin changes needed.
- `registerTsProject` still skips the transpiler under native strip but always registers tsconfig-paths. `registerTsConfigPaths` short-circuits when the tsconfig has no `paths` entries, so package-manager-workspace setups (resolve via symlinks, no aliases) pay only the one-time tsconfig read - no per-require hook overhead. Workspaces with `paths` get the alias resolution they explicitly asked for.
- loadTsFile detects SyntaxError on .cts/.cjs (new isCjsSyntaxError) and escalates to swc/ts-node, restoring pre-v23 behavior for ESM-syntax-in-CJS files.
- js-strip-types swaps `nx report` for `nx graph --file=...` + JSON-graph assertions. Adds: regression test for playwright config emission, new .cts ESM-syntax recovery case, afterEach cleanup so plugin-worker state doesn't leak between fallback tests, .cts+require() extensionless-import scenario that actually exercises the MODULE_NOT_FOUND path. jest.test.ts .cts fixture now uses module.exports. Affected unit specs and snapshots in angular/nuxt/react/remix/vue/web updated to expect `.cts`.
Fixes NXC-4299 a47532ef fix(misc): emit playwright.config.cts so Playwright + Nx both load the config cleanly, restore tsconfig-paths in registerTsProject, recover .cts ESM-syntax via swc-node
## Current Behavior
- Playwright generator emitted `playwright.config.ts`. In default `apps` workspaces the file had top-level imports so Nx's native strip auto-detected ESM and `__filename` blew up with ReferenceError. In `type: "module"` workspaces a CJS-shape `.ts` was rejected (no `require`/`module.exports` in ESM scope). An ESM-shape `.ts` (top-level `import` + `import.meta.dirname`) also broke under Playwright's pirates loader, which compiles to CJS leaving `import.meta` intact; Node then re-detects ESM from the compiled output and errors on `exports is not defined in ES module scope` (the cascade across e2e-angular, e2e-cypress, e2e-eslint, e2e-jest, e2e-nx, e2e-react, e2e-remix, e2e-vite, e2e-vue, e2e-web).
- `registerTsProject(tsConfigPath)` became a no-op under native strip - skipped BOTH transpiler and tsconfig-paths registration. Native strip handles transpilation, but path mapping is orthogonal: user code that explicitly calls `registerTsProject` to resolve `paths` aliases (e.g. Jest `globalSetup` requiring `@my-org/lib`) silently broke with MODULE_NOT_FOUND.
- Legacy `.cts` files using ESM `export` syntax fail Node's strict CJS parser with SyntaxError. No fallback path existed under native strip, so configs that worked pre-v23 (via swc-node's CJS hook compiling away ESM syntax) break.
- js-strip-types e2e asserted via `nx report`, which catches ProjectGraphError and exits 0 even when configs fail to load - so the regression above went undetected. jest.test.ts also wrote `export default` into a .cts fixture, broken for the same reason.
## Expected Behavior
- Playwright generator now emits `playwright.config.cts`. Node forces `.cts` to CommonJS regardless of workspace `type`, so the file loads cleanly under Playwright's pirates runtime AND Nx's native strip. Playwright auto-discovers `.cts` via its configLoader extension list (`.ts/.js/.mts/.mjs/.cts/.cjs`). The Nx playwright plugin already globs all six extensions, so no plugin changes needed.
- `registerTsProject` still skips the transpiler under native strip but always registers tsconfig-paths. `registerTsConfigPaths` short-circuits when the tsconfig has no `paths` entries, so package-manager-workspace setups (resolve via symlinks, no aliases) pay only the one-time tsconfig read - no per-require hook overhead. Workspaces with `paths` get the alias resolution they explicitly asked for.
- loadTsFile detects SyntaxError on .cts/.cjs (new isCjsSyntaxError) and escalates to swc/ts-node, restoring pre-v23 behavior for ESM-syntax-in-CJS files.
- js-strip-types swaps `nx report` for `nx graph --file=...` + JSON-graph assertions. Adds: regression test for playwright config emission, new .cts ESM-syntax recovery case, afterEach cleanup so plugin-worker state doesn't leak between fallback tests, .cts+require() extensionless-import scenario that actually exercises the MODULE_NOT_FOUND path. jest.test.ts .cts fixture now uses module.exports. Affected unit specs and snapshots in angular/nuxt/react/remix/vue/web updated to expect `.cts`.
## Related Issue(s)
Fixes NXC-4299 6e7f3f1b fix(misc): emit playwright.config.cts so Playwright + Nx both load the config cleanly, restore tsconfig-paths in registerTsProject, recover .cts ESM-syntax via swc-node
## Current Behavior
- Playwright generator emitted `playwright.config.ts`. In default `apps` workspaces the file had top-level imports so Nx's native strip auto-detected ESM and `__filename` blew up with ReferenceError. In `type: "module"` workspaces a CJS-shape `.ts` was rejected (no `require`/`module.exports` in ESM scope). An ESM-shape `.ts` (top-level `import` + `import.meta.dirname`) also broke under Playwright's pirates loader, which compiles to CJS leaving `import.meta` intact; Node then re-detects ESM from the compiled output and errors on `exports is not defined in ES module scope` (the cascade across e2e-angular, e2e-cypress, e2e-eslint, e2e-jest, e2e-nx, e2e-react, e2e-remix, e2e-vite, e2e-vue, e2e-web).
- `registerTsProject(tsConfigPath)` became a no-op under native strip - skipped BOTH transpiler and tsconfig-paths registration. Native strip handles transpilation, but path mapping is orthogonal: user code that explicitly calls `registerTsProject` to resolve `paths` aliases (e.g. Jest `globalSetup` requiring `@my-org/lib`) silently broke with MODULE_NOT_FOUND.
- Legacy `.cts` files using ESM `export` syntax fail Node's strict CJS parser with SyntaxError. No fallback path existed under native strip, so configs that worked pre-v23 (via swc-node's CJS hook compiling away ESM syntax) break.
- js-strip-types e2e asserted via `nx report`, which catches ProjectGraphError and exits 0 even when configs fail to load - so the regression above went undetected. jest.test.ts also wrote `export default` into a .cts fixture, broken for the same reason.
## Expected Behavior
- Playwright generator now emits `playwright.config.cts`. Node forces `.cts` to CommonJS regardless of workspace `type`, so the file loads cleanly under Playwright's pirates runtime AND Nx's native strip. Playwright auto-discovers `.cts` via its configLoader extension list (`.ts/.js/.mts/.mjs/.cts/.cjs`). The Nx playwright plugin already globs all six extensions, so no plugin changes needed.
- `registerTsProject` still skips the transpiler under native strip but always registers tsconfig-paths. `registerTsConfigPaths` short-circuits when the tsconfig has no `paths` entries, so package-manager-workspace setups (resolve via symlinks, no aliases) pay only the one-time tsconfig read - no per-require hook overhead. Workspaces with `paths` get the alias resolution they explicitly asked for.
- loadTsFile detects SyntaxError on .cts/.cjs (new isCjsSyntaxError) and escalates to swc/ts-node, restoring pre-v23 behavior for ESM-syntax-in-CJS files.
- js-strip-types swaps `nx report` for `nx graph --file=...` + JSON-graph assertions. Adds: regression test for playwright config emission, new .cts ESM-syntax recovery case, afterEach cleanup so plugin-worker state doesn't leak between fallback tests, .cts+require() extensionless-import scenario that actually exercises the MODULE_NOT_FOUND path. jest.test.ts .cts fixture now uses module.exports. Affected unit specs and snapshots in angular/nuxt/react/remix/vue/web updated to expect `.cts`.
## Related Issue(s)
Fixes NXC-4299 6e7f3f1b fix(misc): emit playwright.config.cts so Playwright + Nx both load the config cleanly, restore tsconfig-paths in registerTsProject, recover .cts ESM-syntax via swc-node
## Current Behavior
- Playwright generator emitted `playwright.config.ts`. In default `apps` workspaces the file had top-level imports so Nx's native strip auto-detected ESM and `__filename` blew up with ReferenceError. In `type: "module"` workspaces a CJS-shape `.ts` was rejected (no `require`/`module.exports` in ESM scope). An ESM-shape `.ts` (top-level `import` + `import.meta.dirname`) also broke under Playwright's pirates loader, which compiles to CJS leaving `import.meta` intact; Node then re-detects ESM from the compiled output and errors on `exports is not defined in ES module scope` (the cascade across e2e-angular, e2e-cypress, e2e-eslint, e2e-jest, e2e-nx, e2e-react, e2e-remix, e2e-vite, e2e-vue, e2e-web).
- `registerTsProject(tsConfigPath)` became a no-op under native strip - skipped BOTH transpiler and tsconfig-paths registration. Native strip handles transpilation, but path mapping is orthogonal: user code that explicitly calls `registerTsProject` to resolve `paths` aliases (e.g. Jest `globalSetup` requiring `@my-org/lib`) silently broke with MODULE_NOT_FOUND.
- Legacy `.cts` files using ESM `export` syntax fail Node's strict CJS parser with SyntaxError. No fallback path existed under native strip, so configs that worked pre-v23 (via swc-node's CJS hook compiling away ESM syntax) break.
- js-strip-types e2e asserted via `nx report`, which catches ProjectGraphError and exits 0 even when configs fail to load - so the regression above went undetected. jest.test.ts also wrote `export default` into a .cts fixture, broken for the same reason.
## Expected Behavior
- Playwright generator now emits `playwright.config.cts`. Node forces `.cts` to CommonJS regardless of workspace `type`, so the file loads cleanly under Playwright's pirates runtime AND Nx's native strip. Playwright auto-discovers `.cts` via its configLoader extension list (`.ts/.js/.mts/.mjs/.cts/.cjs`). The Nx playwright plugin already globs all six extensions, so no plugin changes needed.
- `registerTsProject` still skips the transpiler under native strip but always registers tsconfig-paths. `registerTsConfigPaths` short-circuits when the tsconfig has no `paths` entries, so package-manager-workspace setups (resolve via symlinks, no aliases) pay only the one-time tsconfig read - no per-require hook overhead. Workspaces with `paths` get the alias resolution they explicitly asked for.
- loadTsFile detects SyntaxError on .cts/.cjs (new isCjsSyntaxError) and escalates to swc/ts-node, restoring pre-v23 behavior for ESM-syntax-in-CJS files.
- js-strip-types swaps `nx report` for `nx graph --file=...` + JSON-graph assertions. Adds: regression test for playwright config emission, new .cts ESM-syntax recovery case, afterEach cleanup so plugin-worker state doesn't leak between fallback tests, .cts+require() extensionless-import scenario that actually exercises the MODULE_NOT_FOUND path. jest.test.ts .cts fixture now uses module.exports. Affected unit specs and snapshots in angular/nuxt/react/remix/vue/web updated to expect `.cts`.
## Related Issue(s)
Fixes NXC-4299 9472d7a1 fix(misc): emit playwright.config.cts so Playwright + Nx both load the config cleanly, restore tsconfig-paths in registerTsProject, recover .cts ESM-syntax via swc-node
## Current Behavior
- Playwright generator emitted `playwright.config.ts`. In default `apps` workspaces the file had top-level imports so Nx's native strip auto-detected ESM and `__filename` blew up with ReferenceError. In `type: "module"` workspaces a CJS-shape `.ts` was rejected (no `require`/`module.exports` in ESM scope). An ESM-shape `.ts` (top-level `import` + `import.meta.dirname`) also broke under Playwright's pirates loader, which compiles to CJS leaving `import.meta` intact; Node then re-detects ESM from the compiled output and errors on `exports is not defined in ES module scope` (the cascade across e2e-angular, e2e-cypress, e2e-eslint, e2e-jest, e2e-nx, e2e-react, e2e-remix, e2e-vite, e2e-vue, e2e-web).
- `registerTsProject(tsConfigPath)` became a no-op under native strip - skipped BOTH transpiler and tsconfig-paths registration. Native strip handles transpilation, but path mapping is orthogonal: user code that explicitly calls `registerTsProject` to resolve `paths` aliases (e.g. Jest `globalSetup` requiring `@my-org/lib`) silently broke with MODULE_NOT_FOUND.
- Legacy `.cts` files using ESM `export` syntax fail Node's strict CJS parser with SyntaxError. No fallback path existed under native strip, so configs that worked pre-v23 (via swc-node's CJS hook compiling away ESM syntax) break.
- js-strip-types e2e asserted via `nx report`, which catches ProjectGraphError and exits 0 even when configs fail to load - so the regression above went undetected. jest.test.ts also wrote `export default` into a .cts fixture, broken for the same reason.
## Expected Behavior
- Playwright generator now emits `playwright.config.cts`. Node forces `.cts` to CommonJS regardless of workspace `type`, so the file loads cleanly under Playwright's pirates runtime AND Nx's native strip. Playwright auto-discovers `.cts` via its configLoader extension list (`.ts/.js/.mts/.mjs/.cts/.cjs`). The Nx playwright plugin already globs all six extensions, so no plugin changes needed.
- `registerTsProject` still skips the transpiler under native strip but always registers tsconfig-paths. `registerTsConfigPaths` short-circuits when the tsconfig has no `paths` entries, so package-manager-workspace setups (resolve via symlinks, no aliases) pay only the one-time tsconfig read - no per-require hook overhead. Workspaces with `paths` get the alias resolution they explicitly asked for.
- loadTsFile detects SyntaxError on .cts/.cjs (new isCjsSyntaxError) and escalates to swc/ts-node, restoring pre-v23 behavior for ESM-syntax-in-CJS files.
- js-strip-types swaps `nx report` for `nx graph --file=...` + JSON-graph assertions. Adds: regression test for playwright config emission, new .cts ESM-syntax recovery case, afterEach cleanup so plugin-worker state doesn't leak between fallback tests, .cts+require() extensionless-import scenario that actually exercises the MODULE_NOT_FOUND path. jest.test.ts .cts fixture now uses module.exports. Affected unit specs and snapshots in angular/nuxt/react/remix/vue/web updated to expect `.cts`.
## Related Issue(s)
Fixes NXC-4299 d6f7e32f fix(misc): emit playwright.config.cts so Playwright + Nx both load the config cleanly, recover .cts ESM-syntax via swc-node
## Current Behavior
- Playwright generator emitted `playwright.config.ts`. In default `apps` workspaces the file had top-level imports so Nx's native strip auto-detected ESM and `__filename` blew up with ReferenceError. In `type: "module"` workspaces a CJS-shape `.ts` was rejected (no `require`/`module.exports` in ESM scope). An ESM-shape `.ts` (top-level `import` + `import.meta.dirname`) also broke under Playwright's pirates loader, which compiles to CJS leaving `import.meta` intact; Node then re-detects ESM from the compiled output and errors on `exports is not defined in ES module scope` (the cascade across e2e-angular, e2e-cypress, e2e-eslint, e2e-jest, e2e-nx, e2e-react, e2e-remix, e2e-vite, e2e-vue, e2e-web).
- Legacy `.cts` files using ESM `export` syntax fail Node's strict CJS parser with SyntaxError. No fallback path existed under native strip, so configs that worked pre-v23 (via swc-node's CJS hook compiling away ESM syntax) break.
- js-strip-types e2e asserted via `nx report`, which catches ProjectGraphError and exits 0 even when configs fail to load - so the regression above went undetected. jest.test.ts also wrote `export default` into a .cts fixture, broken for the same reason.
## Expected Behavior
- Playwright generator now emits `playwright.config.cts`. Node forces `.cts` to CommonJS regardless of workspace `type`, so the file loads cleanly under Playwright's pirates runtime AND Nx's native strip. Playwright auto-discovers `.cts` via its configLoader extension list (`.ts/.js/.mts/.mjs/.cts/.cjs`). The Nx playwright plugin already globs all six extensions, so no plugin changes needed.
- loadTsFile detects SyntaxError on .cts/.cjs (new isCjsSyntaxError) and escalates to swc/ts-node, restoring pre-v23 behavior for ESM-syntax-in-CJS files.
- js-strip-types swaps `nx report` for `nx graph --file=...` + JSON-graph assertions. Adds: regression test for playwright config emission, new .cts ESM-syntax recovery case, afterEach cleanup so plugin-worker state doesn't leak between fallback tests, .cts+require() extensionless-import scenario that actually exercises the MODULE_NOT_FOUND path. jest.test.ts .cts fixture now uses module.exports. Affected unit specs and snapshots in angular/nuxt/react/remix/vue/web updated to expect `.cts`.
## Related Issue(s)
Fixes NXC-4299 98cc5e36 fix(misc): emit CJS playwright config in non-ESM workspaces, recover .cts ESM-syntax via swc-node
## Current Behavior
- In default `apps` preset workspaces (no `type:module` anywhere), the playwright config template's top-level imports made Node syntax-detect the file as ESM under native strip, but the template referenced `__filename` (undefined in ESM scope) - ReferenceError blocks project graph.
- Legacy .cts files using ESM `export` syntax fail Node's strict CJS parser with SyntaxError. No fallback path existed under native strip, so configs that worked pre-v23 (via swc-node's CJS hook compiling away ESM syntax) break.
- js-strip-types e2e asserted via `nx report`, which catches ProjectGraphError and exits 0 even when configs fail to load - so the regression above went undetected. jest.test.ts also wrote `export default` into a .cts fixture, broken for the same reason.
## Expected Behavior
- Playwright generator emits CJS-style template (`require()`, `module.exports`, `__filename`) for default workspaces, ESM-style (top-level `import`, `import.meta.dirname`) for TS solution / `type:module` workspaces. Avoids the two failure modes: ESM source in a CJS workspace blows up Playwright's runtime (pirates compiles to CJS leaving `import.meta` intact, Node re-detects ESM, `exports` undefined); CJS source in an ESM workspace breaks because `require`/`module.exports` aren't ESM.
- loadTsFile detects SyntaxError on .cts/.cjs (new isCjsSyntaxError) and escalates to swc/ts-node, restoring pre-v23 behavior for ESM-syntax-in-CJS files.
- js-strip-types swaps `nx report` for `nx graph --file=...` + JSON-graph assertions. Adds: regression test for playwright config in default workspace (asserts CJS form), new .cts ESM-syntax recovery case, afterEach cleanup so plugin-worker state doesn't leak between fallback tests, .cts+require() extensionless-import scenario that actually exercises the MODULE_NOT_FOUND path. jest.test.ts .cts fixture now uses module.exports.
## Related Issue(s)
Fixes NXC-4299 86bebb19 fix(misc): always emit import.meta.dirname in playwright config, recover .cts ESM-syntax via swc-node
## Current Behavior
- Playwright config template has top-level imports, so Node syntax-detects the file as ESM under native strip. The generator's isEsmConfig flag only emitted import.meta.dirname for TS solution setups / type:module workspaces; default workspaces got __filename, which is undefined in ESM -> ReferenceError blocks project graph.
- Legacy .cts files using ESM `export` syntax fail Node's strict CJS parser with SyntaxError. No fallback path existed under native strip, so configs that worked pre-v23 (via swc-node's CJS hook compiling away ESM syntax) break.
- js-strip-types e2e asserted via `nx report`, which catches ProjectGraphError and exits 0 even when configs fail to load - so the regression above went undetected. jest.test.ts also wrote `export default` into a .cts fixture, broken for the same reason.
## Expected Behavior
- Playwright template always emits import.meta.dirname. swc-node force-sets module:commonjs in its register() and rewrites import.meta.dirname to __dirname, so the NX_PREFER_NODE_STRIP_TYPES=false opt-out path stays safe.
- loadTsFile detects SyntaxError on .cts/.cjs (new isCjsSyntaxError) and escalates to swc/ts-node, restoring pre-v23 behavior for ESM-syntax-in-CJS files.
- js-strip-types swaps `nx report` for `nx graph --file=...` + JSON-graph assertions. Adds: regression test for playwright config in default workspace, new .cts ESM-syntax recovery case, afterEach cleanup so plugin-worker state doesn't leak between fallback tests, .cts+require() extensionless-import scenario that actually exercises the MODULE_NOT_FOUND path. jest.test.ts .cts fixture now uses module.exports.
## Related Issue(s)
Fixes NXC-4299