{"record":{"id":"2c81c20723703996","repo":"zed-industries/zed","slug":"no-version-found-for-npm-package-package-name-be","errorCode":null,"errorMessage":"no version found for npm package {package_name} before {before}","messagePattern":"no version found for npm package (.+?) before (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/node_runtime/src/node_runtime.rs","lineNumber":534,"sourceCode":"        if let Some(version) = latest_version\n            && npm_version_was_published_before(version, &info.time, &before_timestamp)?\n        {\n            return Ok(version.clone());\n        }\n\n        for version in info.versions.iter().rev() {\n            if is_allowed_npm_version_before(\n                version,\n                latest_version,\n                &info.time,\n                &before_timestamp,\n                version_requirement.is_some(),\n            )? {\n                return Ok(version.clone());\n            }\n        }\n\n        bail!(\"no version found for npm package {package_name} before {before}\");\n    }\n\n    info.dist_tags\n        .latest\n        .or_else(|| info.versions.pop())\n        .with_context(|| format!(\"no version found for npm package {package_name}\"))\n}\n\nfn is_allowed_npm_version_before(\n    version: &Version,\n    latest_version: Option<&Version>,\n    published_at_by_version: &HashMap<String, String>,\n    before: &DateTime<Utc>,\n    allow_prereleases: bool,\n) -> Result<bool> {\n    if (!allow_prereleases && !version.pre.is_empty())\n        || latest_version.is_some_and(|latest_version| version > latest_version)\n    {","sourceCodeStart":516,"sourceCodeEnd":552,"githubUrl":"https://github.com/zed-industries/zed/blob/9d272b036335401f339d024ea94968fd51016c40/crates/node_runtime/src/node_runtime.rs#L516-L552","documentation":"Zed's NodeRuntime resolves npm package versions with an optional `before` cutoff (an RFC3339 timestamp from configuration, e.g. to pin a language-server release). It walks the registry's version list newest-first, keeping only versions published before the cutoff (and matching any semver requirement); when nothing qualifies it bails with the package name and the cutoff value.","triggerScenarios":"select_npm_package_version is called with a `before` date where every version matching the requirement was published after that date, all candidate versions were yanked or lack publish-time entries in registry metadata, or the package is brand new and postdates the cutoff entirely.","commonSituations":"A `npm_before` style config pinning an old date while the language server package only ships newer releases; a strict version requirement combined with an old cutoff; sparse registry metadata missing `time` for the only matching version.","solutions":["Update or remove the `before` timestamp in configuration so at least one published version qualifies","Relax the version requirement so a pre-cutoff version can match","Pin an explicit version instead of relying on the cutoff heuristic"],"exampleFix":"// before (config): npm package pinned by an old cutoff\n\"before\": \"2025-01-01T00:00:00Z\"\n\n// after: cutoff newer than the release you want, or removed\n\"before\": null","handlingStrategy":"fallback","validationCode":"async fn version_exists_before(\n    registry: &NpmInfo,\n    requirement: Option<&VersionReq>,\n    before: DateTime<Utc>,\n) -> bool {\n    registry.versions.iter().any(|v| {\n        requirement.map_or(true, |r| r.matches(v))\n            && registry\n                .time\n                .get(&v.to_string())\n                .and_then(|t| DateTime::parse_from_rfc3339(t).ok())\n                .map_or(false, |t| t.with_timezone(&Utc) < before)\n    })\n}","typeGuard":null,"tryCatchPattern":"match select_npm_package_version(name, info.clone(), before, req) {\n    Err(e) if e.to_string().contains(\"before\") => {\n        // degrade gracefully: newest matching version instead of cutoff pin\n        select_npm_package_version(name, info, None, req)\n    }\n    picked => picked,\n}","preventionTips":["Keep `before` cutoffs newer than the package's oldest needed release","Prefer explicit version pins over date cutoffs for rarely-published packages","Treat cutoff resolution as best-effort: always define a no-match fallback"],"tags":["npm","node-runtime","versioning","registry","language-server"],"backgroundTag":"npm-version-resolution-failed","analyzedSha":"9d272b036335401f339d024ea94968fd51016c40","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}