Master's transactional loader made the invalid-provider PTY case regress: the HMR main watcher's initial scan refreshed the include mid-initial-apply, the concurrent group updates stranded the include fiber, and once serialized the failing apply's rollback deadlocked on HMR's refresh drain — dsh exited 13 with no diagnostic and the terminal stranded, the exact symptom this branch fixes. Serialize every include child-tree mutation through one queue and pass ignoreInitial to the HMR main watcher; the failing boot now settles through boot()'s labelled rejection with the tree disposed and exit 1. The PTY case asserts the settled diagnostic; the fail-loud release remains the guard for rejections boot cannot see.
@cordisjs/plugin-hmr
Hot module replacement for loader-managed Cordis plugins.
The HMR plugin watches source files, traces Node's module graph, clears affected
module caches, and reloads only the plugin entries that depend on changed
application files. Changes to framework-level dependencies fall back to
loader.exit(), letting the host process restart.
Requirements
@cordisjs/plugin-loader@cordisjs/plugin-timer- A runtime that exposes Node's internal module loader. The package throws if the loader service has no internal module loader available.
Usage
- id: timer
name: '@cordisjs/plugin-timer'
- id: hmr
name: '@cordisjs/plugin-hmr'
config:
root:
- src
ignored:
- '**/node_modules'
- '**/.*'
debounce: 100
Config
| Field | Description |
|---|---|
base |
Optional base directory resolved from ctx.baseUrl. |
root |
Chokidar roots to watch. Defaults to ['.']. |
ignored |
Picomatch patterns excluded from watch and reload analysis. |
debounce |
Milliseconds to wait before processing a burst of changes. |
Events
| Event | Description |
|---|---|
hmr/change |
Emitted for changed files that are not handled by plugin reload or config reload. |
hmr/reload |
Emitted after one or more plugin entries are reloaded. |