liabru/matter-js · warning
Plugin.versionParse: is not a valid version or range.
Error message
Plugin.versionParse: is not a valid version or range.
What it means
Plugin.versionParse parses a version or semver range like '1.2.3', '^1.2.3', '~1.2.3', '>=1.2.3', or '*'. If the input fails the pattern, this warning is logged; execution then continues and pattern.exec may return null-ish parts, producing NaN version components.
Source
Thrown at src/core/Plugin.js:281
* Versions are strictly of the format `x.y.z` (as in [semver](http://semver.org/)).
* Versions may optionally have a prerelease tag in the format `x.y.z-alpha`.
* Ranges are a strict subset of [npm ranges](https://docs.npmjs.com/misc/semver#advanced-range-syntax).
* Only the following range types are supported:
* - Tilde ranges e.g. `~1.2.3`
* - Caret ranges e.g. `^1.2.3`
* - Greater than ranges e.g. `>1.2.3`
* - Greater than or equal ranges e.g. `>=1.2.3`
* - Exact version e.g. `1.2.3`
* - Any version `*`
* @method versionParse
* @param range {string} The version string.
* @return {object} The version range parsed into its components.
*/
Plugin.versionParse = function(range) {
var pattern = /^(\*)|(\^|~|>=|>)?\s*((\d+)\.(\d+)\.(\d+))(-[0-9A-Za-z-+]+)?$/;
if (!pattern.test(range)) {
Common.warn('Plugin.versionParse:', range, 'is not a valid version or range.');
}
var parts = pattern.exec(range);
var major = Number(parts[4]);
var minor = Number(parts[5]);
var patch = Number(parts[6]);
return {
isRange: Boolean(parts[1] || parts[2]),
version: parts[3],
range: range,
operator: parts[1] || parts[2] || '',
major: major,
minor: minor,
patch: patch,
parts: [major, minor, patch],
prerelease: parts[7],
number: major * 1e8 + minor * 1e4 + patchView on GitHub (pinned to acb99b6f87)
Solutions
- Use full x.y.z semver with an optional single ^, ~, >=, > prefix or '*': e.g. '1.2.3' or '^1.2.3'.
- Strip a leading 'v' and any unsupported characters from the version string.
- Replace tags like 'latest' with '*' (any version).
Example fix
// before version: 'v1.2.3' // after version: '1.2.3'
Defensive patterns
Strategy: validation
Validate before calling
var verPattern = /^(\*)|(\^|~|>=|>)?\s*((\d+)\.(\d+)\.(\d+))(-[0-9A-Za-z-+]+)?$/;
if (typeof range !== 'string' || !verPattern.test(range)) {
throw new Error('Version/range must be x.y.z or ^|~|>=|> x.y.z or *');
} Type guard
function isValidVersionString(v) {
return typeof v === 'string' && /^(\*)|(\^|~|>=|>)?\s*\d+\.\d+\.\d+(-[0-9A-Za-z-+]+)?$/.test(v);
} Prevention
- Declare plugin versions and ranges as strict semver x.y.z with no leading 'v'.
- Use '*' instead of tags like 'latest' when any version is acceptable.
- Add a lint check that validates every version/uses string against the semver pattern.
When it happens
Trigger: Calling Plugin.versionParse with a malformed string (e.g. '1.2', 'v1.2.3', '1.2.3-beta.2' with dots in prerelease beyond the charset, 'latest', empty string), or declaring dependency ranges in that form via plugin 'uses'.
Common situations: Using a leading 'v' prefix as in npm; two-part versions like '1.2'; tags 'latest' or 'next'; whitespace in unusual places; plugin versions defined with pre-release tags containing invalid characters like '+' combined unexpectedly.
Related errors
- Plugin.dependencyParse: is not a valid dependency string.
- Plugin.dependencies: does not satisfy used by .
- Plugin.register: does not implement all required fields.
- Plugin.register: was upgraded to
- Plugin.register: can not be downgraded to
AI-assisted analysis of liabru/matter-js@acb99b6f87 (2026-09-02).
Data as JSON: /api/errors/9642ecc5b23b4223.
Report an issue: GitHub.