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 + patch

View on GitHub (pinned to acb99b6f87)

Solutions

  1. Use full x.y.z semver with an optional single ^, ~, >=, > prefix or '*': e.g. '1.2.3' or '^1.2.3'.
  2. Strip a leading 'v' and any unsupported characters from the version string.
  3. 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

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


AI-assisted analysis of liabru/matter-js@acb99b6f87 (2026-09-02). Data as JSON: /api/errors/9642ecc5b23b4223. Report an issue: GitHub.