{"record":{"id":"6e46e3344e4bf1dc","repo":"vuejs/vue-cli","slug":"expected-string-or-integer-value","errorCode":null,"errorMessage":"Expected string or integer value.","messagePattern":"Expected string or integer value\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@vue/cli-service/lib/PluginAPI.js","lineNumber":27,"sourceCode":"\nclass PluginAPI {\n  /**\n   * @param {string} id - Id of the plugin.\n   * @param {Service} service - A vue-cli-service instance.\n   */\n  constructor (id, service) {\n    this.id = id\n    this.service = service\n  }\n\n  get version () {\n    return require('../package.json').version\n  }\n\n  assertVersion (range) {\n    if (typeof range === 'number') {\n      if (!Number.isInteger(range)) {\n        throw new Error('Expected string or integer value.')\n      }\n      range = `^${range}.0.0-0`\n    }\n    if (typeof range !== 'string') {\n      throw new Error('Expected string or integer value.')\n    }\n\n    if (semver.satisfies(this.version, range, { includePrerelease: true })) return\n\n    throw new Error(\n      `Require @vue/cli-service \"${range}\", but was loaded with \"${this.version}\".`\n    )\n  }\n\n  /**\n   * Current working directory.\n   */\n  getCwd () {","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/vuejs/vue-cli/blob/7eb93c169c7520935252e2473387f923ef80d856/packages/@vue/cli-service/lib/PluginAPI.js#L9-L45","documentation":"PluginAPI.assertVersion(range) lets a plugin declare which @vue/cli-service major it supports. When `range` is a number it is treated as a major version and expanded to `^N.0.0-0`, which only makes sense for an integer. A non-integer number (e.g. 4.5) is ambiguous and is rejected up front.","triggerScenarios":"A plugin calling `api.assertVersion(4.5)` (or any float) instead of an integer major or a semver range string.","commonSituations":"A plugin author misreading the API and passing a feature/version float; dynamically computed ranges producing a float.","solutions":["Pass an integer major: `api.assertVersion(4)`.","Or pass a semver range string for finer control: `api.assertVersion('^4.5.0')`.","Update the offending plugin to a version that calls assertVersion correctly."],"exampleFix":"// before\napi.assertVersion(4.5)\n// after\napi.assertVersion('^4.5.0')","handlingStrategy":"type-guard","validationCode":"const range = myRange\nif (typeof range === 'number' && !Number.isInteger(range)) {\n  throw new Error('assertVersion number must be an integer major')\n}","typeGuard":"const isVersionRange = (r) => typeof r === 'string' || (typeof r === 'number' && Number.isInteger(r))","tryCatchPattern":null,"preventionTips":["Pass an integer major or a semver string to assertVersion — never a float.","For sub-major requirements use a semver range string like '^4.5.0'."],"tags":["plugin-api","version","type-validation"],"backgroundTag":null,"analyzedSha":"7eb93c169c7520935252e2473387f923ef80d856","analyzedAt":"2026-08-13T10:13:37.803Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}