Skip to content

feat(plugins): validate peerDependency version on plugin load#117

Merged
cmuench merged 2 commits into
mainfrom
feature/plugin-peer-dependency-check
Jun 17, 2026
Merged

feat(plugins): validate peerDependency version on plugin load#117
cmuench merged 2 commits into
mainfrom
feature/plugin-peer-dependency-check

Conversation

@cmuench

@cmuench cmuench commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Plugins can declare "mage-remote-run": "^1.5.0" in their peerDependencies to signal a minimum compatible tool version
  • PluginLoader now reads that field at runtime and emits a console.warn if the running version does not satisfy the declared range
  • The plugin still loads (non-blocking warning) — matching npm's own peer dependency behaviour
  • Adds the semver package for correct range-aware comparisons (^, ~, >=, etc.)

Changes

File Change
lib/plugin-loader.js Import semver, read tool version once at startup, refactor package.json read to be unconditional, add _checkPeerDependency()
package.json / package-lock.json Add semver dependency
tests/fixtures/compatible-peer-plugin/ New fixture — ^1.0.0 (satisfied by current version)
tests/fixtures/incompatible-peer-plugin/ New fixture — ^99.0.0 (never satisfied)
tests/plugin-loader.test.js Two new test cases covering warning/no-warning paths

Test plan

  • All 660 existing tests still pass
  • New test: compatible peer range → no warning emitted
  • New test: incompatible peer range → warning contains plugin name and required range

cmuench added 2 commits June 17, 2026 19:17
Read mage-remote-run from peerDependencies in each plugin's package.json
and warn if the running tool version does not satisfy the declared range.
The plugin still loads — this is a non-blocking warning, matching npm's
own peer dependency behaviour.

- Add semver dependency for range-aware version comparison
- Read plugin package.json unconditionally (was only read in else branch)
- Add _checkPeerDependency() method to PluginLoader
Add two fixture plugins and corresponding test cases:
- compatible-peer-plugin: peerDependency ^1.0.0 (satisfied) — no warning
- incompatible-peer-plugin: peerDependency ^99.0.0 (unsatisfied) — warns
@cmuench cmuench merged commit 75041e7 into main Jun 17, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant