UNPKG

query-registry

Version:

Query the npm registry for packuments, manifests, packages and download counts

57 lines (53 loc) 2.13 kB
import urlJoin from "url-join"; import * as z from "zod"; import { assertValidPackageName } from "./assert-valid-package-name.js"; import { DistTags } from "./dist-tags.js"; import { fetchData } from "./fetch-data.js"; import { PackageManifest } from "./get-package-manifest.js"; import { npmRegistryUrl } from "./npm-registry.js"; export const AbbreviatedPackument = z.object({ /** Package name. */ name: z.string(), /** Timestamp of when the package was last modified in ISO 8601 format (e.g., `2021-11-23T19:12:24.006Z`). */ modified: z.string(), /** Mapping of distribution tags to semver version numbers e.g., `{ "latest": "1.0.0" }`). */ "dist-tags": DistTags, /** Mapping of semver version numbers to the required metadata for installing a package version. */ versions: z.record(z.string(), z.object({ ...PackageManifest.pick({ name: true, version: true, dist: true, deprecated: true, dependencies: true, optionalDependencies: true, devDependencies: true, bundleDependencies: true, peerDependencies: true, peerDependenciesMeta: true, bin: true, directories: true, engines: true, cpu: true, os: true, _hasShrinkwrap: true, }).shape, /** True if the package contains an `install` script. */ hasInstallScript: z.boolean().optional(), })), }); /** `getAbbreviatedPackument` returns the abbreviated packument (package document) containing only the metadata necessary to install a package. @remarks To get all the metadata (full packument) about a package see {@link getPackument}. @param name - package name @param registry - URL of the registry (default: npm registry) @see {@link AbbreviatedPackument} */ export async function getAbbreviatedPackument(name, registry = npmRegistryUrl) { assertValidPackageName(name); return await fetchData(AbbreviatedPackument, urlJoin(registry, name), { Accept: "application/vnd.npm.install-v1+json", }); }