{"record":{"id":"6f97711271fbfbe9","repo":"denoland/deno","slug":"jsr-package-version-info-not-found","errorCode":null,"errorMessage":"JSR package version info not found: {}","messagePattern":"JSR package version info not found: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"cli/lsp/jsr.rs","lineNumber":439,"sourceCode":"    let versions = Arc::new(versions);\n    self\n      .versions_cache\n      .insert(name.to_string(), versions.clone());\n    Ok(versions)\n  }\n\n  async fn exports(\n    &self,\n    nv: &PackageNv,\n  ) -> Result<Arc<Vec<String>>, AnyError> {\n    if let Some(exports) = self.exports_cache.get(nv) {\n      return Ok(exports.clone());\n    }\n    let info = self\n      .resolver\n      .package_version_info(nv)\n      .await\n      .ok_or_else(|| anyhow!(\"JSR package version info not found: {}\", nv))?;\n    let mut exports = info\n      .exports()\n      .map(|(n, _)| n.to_string())\n      .collect::<Vec<_>>();\n    exports.sort();\n    let exports = Arc::new(exports);\n    self.exports_cache.insert(nv.clone(), exports.clone());\n    Ok(exports)\n  }\n}\n\nfn parse_jsr_search_response(source: &str) -> Result<Vec<String>, AnyError> {\n  #[derive(Debug, Deserialize)]\n  #[serde(rename_all = \"camelCase\")]\n  struct Item {\n    scope: String,\n    name: String,\n    version_count: usize,","sourceCodeStart":421,"sourceCodeEnd":457,"githubUrl":"https://github.com/denoland/deno/blob/89f33cbef296a2b287f323d42de54c871fa69c77/cli/lsp/jsr.rs#L421-L457","documentation":"Companion to the package-level miss in cli/lsp/jsr.rs:439: while building export completions for a specific package@version, resolver.package_version_info(nv) returned None and the LSP raises \"JSR package version info not found: {nv}\". The version must already be published and its metadata fetchable; a yanked/unpublished/mistyped version or a failed fetch yields None.","triggerScenarios":"Importing jsr:@scope/pkg@0.9.9 when only 1.x is published; completions for a version string typed by hand that doesn't exist; offline/proxied environments where the per-version metadata request fails; versions yanked after publication.","commonSituations":"Copy-pasted imports with stale version pins from old READMEs; a teammate's lockfile referencing a since-yanked version; editor completions for subpath exports not appearing for one specific version.","solutions":["List the real versions: `deno info jsr:@scope/pkg` or check the jsr.io versions tab, then pin an existing one","Use the latest tag / no version and let the lockfile resolve: jsr:@scope/pkg or jsr:@scope/pkg@latest","If the version should exist, check network access to jsr.io and retry — the LSP caches the negative result only per session","For yanked versions, upgrade dependents via `deno update` to a published version"],"exampleFix":"// before\nimport { x } from \"jsr:@std/collections@9.9.9\";\n\n// after\nimport { x } from \"jsr:@std/collections@1.0.6\"; // a published version","handlingStrategy":"retry","validationCode":"const versions = await fetch(`https://jsr.io/@scope/pkg/meta.json`).then(r => r.json());\nif (!versions.versions[\"0.9.9\"]) throw new Error(\"version not published\");","typeGuard":null,"tryCatchPattern":"// user-side: re-run deno info after network recovery; the negative cache is per-LSP-session\ntry {\n  await import(\"jsr:@scope/pkg@0.9.9\");\n} catch (e) {\n  if (/jsr/i.test(String(e))) {\n    // re-check published versions and re-resolve\n  }\n}","preventionTips":["Pin versions that appear on the jsr.io versions tab or in the lockfile","Prefer @latest or unversioned jsr: imports during prototyping","Run `deno update` in CI to catch yanked/stale versions early"],"tags":["lsp","jsr","completions","version"],"backgroundTag":null,"analyzedSha":"89f33cbef296a2b287f323d42de54c871fa69c77","analyzedAt":"2026-08-16T07:54:21.310Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}