fix(dts-plugin): handle EXIT before dev server init#4429
fix(dts-plugin): handle EXIT before dev server init#4429zhoushaw merged 5 commits intomodule-federation:mainfrom
Conversation
|
✅ Deploy Preview for module-federation-docs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Bundle Size Report3 package(s) changed, 38 unchanged.
Total dist: 6.37 MB (+502 B (+0.0%)) |
|
can you help resolve conflicts? |
|
Sure thing, I'll jump on it once I'm at home. :) |
@module-federation/devtools
@module-federation/cli
create-module-federation
@module-federation/data-prefetch
@module-federation/dts-plugin
@module-federation/enhanced
@module-federation/error-codes
@module-federation/esbuild
@module-federation/managers
@module-federation/manifest
@module-federation/metro
@module-federation/metro-plugin-rnc-cli
@module-federation/metro-plugin-rnef
@module-federation/modern-js
@module-federation/modern-js-v3
@module-federation/native-federation-tests
@module-federation/native-federation-typescript
@module-federation/nextjs-mf
@module-federation/node
@module-federation/retry-plugin
@module-federation/rsbuild-plugin
@module-federation/rspack
@module-federation/rspress-plugin
@module-federation/runtime
@module-federation/runtime-core
@module-federation/runtime-tools
@module-federation/sdk
@module-federation/storybook-addon
@module-federation/third-party-dts-extractor
@module-federation/treeshake-frontend
@module-federation/treeshake-server
@module-federation/typescript
@module-federation/utilities
@module-federation/webpack-bundler-runtime
@module-federation/bridge-react
@module-federation/bridge-react-webpack-plugin
@module-federation/bridge-shared
@module-federation/bridge-vue3
@module-federation/inject-external-runtime-core-plugin
commit: |
Summary
EXITRPC message beforeModuleFederationDevServeris initialized.handleDevWorkerMessageso the behavior is deterministic and testable.moduleServer.exit()then exits process).Why
In some startup/teardown races, the process message listener can receive
RpcGMCallTypes.EXITbeforemoduleServeris assigned.The previous implementation called
moduleServer.exit()unconditionally, which can throw and skip normal process shutdown flow.Changes
packages/dts-plugin/src/dev-worker/forkDevWorker.tsmoduleServer+fileLog.packages/dts-plugin/src/dev-worker/handleWorkerMessage.tsmoduleServer?.exit()behavior.packages/dts-plugin/src/dev-worker/handleWorkerMessage.spec.tsValidation
pnpm nx run dts-plugin:lintpnpm --filter @module-federation/dts-plugin exec vitest run src/dev-worker/handleWorkerMessage.spec.tsbun --bun -e "import { handleDevWorkerMessage } from './packages/dts-plugin/src/dev-worker/handleWorkerMessage.ts'; let code=-1; handleDevWorkerMessage({ type: 'mf_exit', id: 'bun-smoke' }, { processExit: (c) => { code = c ?? -1; }, log: () => {} }); console.log(code === 0 ? 'ok' : 'bad');"All pass locally.