UNPKG

57.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"query-registry.cjs.development.js","sources":["../src/data/registries.ts","../src/utils/normalize-raw-abbreviated-packument.ts","../src/utils/errors.ts","../src/utils/log.ts","../src/utils/assert-valid-package-name.ts","../src/utils/fetch.ts","../src/utils/fetch-from-registry.ts","../src/endpoints/get-raw-abbreviated-packument.ts","../src/endpoints/get-abbreviated-packument.ts","../src/utils/fetch-downloads-from-registry.ts","../src/utils/normalize-download-period.ts","../src/endpoints/get-daily-package-downloads.ts","../src/endpoints/get-daily-registry-downloads.ts","../src/endpoints/get-package-downloads.ts","../src/utils/extract-package-manifest.ts","../src/endpoints/get-raw-packument.ts","../src/endpoints/get-raw-package-manifest.ts","../src/utils/get-definitely-typed-name.ts","../src/utils/get-untyped-name.ts","../src/utils/normalize-raw-license.ts","../src/utils/normalize-raw-repository.ts","../src/utils/normalize-raw-package-manifest.ts","../src/endpoints/get-package-manifest.ts","../src/utils/normalize-raw-packument.ts","../src/endpoints/get-packument.ts","../src/endpoints/get-registry-downloads.ts","../src/endpoints/get-registry-metadata.ts","../src/utils/normalize-raw-search-criteria.ts","../src/endpoints/search-packages.ts"],"sourcesContent":["/**\n * npm registry\n *\n * @see {@link https://registry.npmjs.org}\n */\nexport const npmRegistry = 'https://registry.npmjs.org';\n\n/**\n * npm registry mirror by Cloudflare\n *\n * @remarks\n * This registry has CORS enabled and can be used to retrieve\n * package manifests and packuments in the browser.\n *\n * @see {@link https://npmjs.cf}\n * @see {@link https://registry.npmjs.cf}\n */\nexport const cloudflareRegistry = 'https://registry.npmjs.cf';\n\n/**\n * npm registry mirror by Yarn\n *\n * @see {@link https://registry.yarnpkg.com}\n */\nexport const yarnRegistry = 'https://registry.yarnpkg.com';\n\n/**\n * Mirrors of the npm registry.\n *\n * @see {@link cloudflareRegistry}\n * @see {@link yarnRegistry}\n */\nexport const npmRegistryMirrors = [cloudflareRegistry, yarnRegistry];\n\n/**\n * Downloads API for the npm registry\n *\n * @see {@link https://api.npmjs.org}\n */\nexport const npmRegistryDownloadsAPI = 'https://api.npmjs.org';\n","import { AbbreviatedPackument } from '../types/abbreviated-packument';\nimport { RawAbbreviatedPackument } from '../types/raw-abbreviated-packument';\n\nexport function normalizeRawAbbreviatedPackument({\n rawAbbreviatedPackument,\n}: {\n rawAbbreviatedPackument: RawAbbreviatedPackument;\n}): AbbreviatedPackument {\n const {\n 'dist-tags': distTags,\n name: id,\n modified: modifiedAt,\n } = rawAbbreviatedPackument;\n return {\n ...rawAbbreviatedPackument,\n id,\n distTags,\n modifiedAt,\n };\n}\n","import makeError, { BaseError } from 'make-error';\n\n/**\n * `FetchError` represents an error that happened when fetching a URL.\n *\n * The `instanceof` operator can be used to check for this error.\n */\nexport class FetchError extends BaseError {\n constructor(\n /** URL originally fetched */\n readonly url: string,\n\n /** Response received */\n readonly response: Response\n ) {\n super(\n `fetch: request to ${url} failed with status ${response.statusText}`\n );\n }\n}\n\n/**\n * `InvalidPackageNameError` is thrown when the name of a package\n * is not valid according to the npm registry naming rules.\n *\n * The `instanceof` operator can be used to check for this error.\n *\n * @see {@link https://www.npmjs.com/package/validate-npm-package-name}\n */\nexport const InvalidPackageNameError = makeError('InvalidPackageNameError');\n\n/**\n * `InvalidPackageVersionError` is thrown when a package's version does not exist.\n *\n * The `instanceof` operator can be used to check for this error.\n */\nexport const InvalidPackageVersionError = makeError(\n 'InvalidPackageVersionError'\n);\n","export async function log(formatter: any, ...args: any[]): Promise<void> {\n if (process.env.NODE_ENV !== 'production') {\n try {\n const { debug } = await import('debug');\n const logger = debug('query-registry');\n logger(formatter, args);\n } catch {}\n }\n}\n","import validatePackageName from 'validate-npm-package-name';\nimport { InvalidPackageNameError } from './errors';\nimport { log } from './log';\n\nexport function assertValidPackageName({ name }: { name: string }): void {\n const { validForOldPackages, validForNewPackages } =\n validatePackageName(name);\n const valid = validForOldPackages || validForNewPackages;\n if (!valid) {\n log('assertValidPackageName: invalid package name: %O', { name });\n throw new InvalidPackageNameError(`invalid package name: '${name}'`);\n }\n}\n","import unfetch from 'isomorphic-unfetch';\nimport lru from 'tiny-lru';\nimport { FetchError } from './errors';\nimport { log } from './log';\n\nconst maxItems = 250;\nconst fiveMinutesTTL = 5 * 60 * 1000;\nconst cache = lru(maxItems, fiveMinutesTTL);\n\nexport async function fetch({\n url,\n headers,\n cached = true,\n}: {\n url: string;\n headers?: Record<string, string>;\n cached?: boolean;\n}): Promise<any> {\n const cacheKey = `headers=${JSON.stringify(headers)};url=${url}`;\n const cachedJSON = cache.get(cacheKey);\n if (cached && cachedJSON) {\n log('fetch: returning cached response: %O', {\n cacheKey,\n url,\n cachedJSON,\n });\n return cachedJSON;\n }\n\n const response = await unfetch(url, { headers });\n if (!response.ok) {\n log('fetch: request failed: %O', {\n url,\n headers,\n status: response.statusText,\n response,\n });\n throw new FetchError(url, response);\n }\n\n const json = await response.json();\n if (cached) {\n cache.set(cacheKey, json);\n }\n\n log('fetch: returning fresh response: %O', { url, json });\n return json;\n}\n","import { npmRegistry, npmRegistryMirrors } from '../data/registries';\nimport { FetchError } from './errors';\nimport { fetch } from './fetch';\nimport { log } from './log';\nimport urlJoin from 'url-join';\n\nexport async function fetchFromRegistry<T>({\n endpoint,\n headers,\n query,\n registry = npmRegistry,\n mirrors = npmRegistryMirrors,\n cached,\n}: {\n endpoint: string;\n headers?: Record<string, string>;\n query?: string;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<T> {\n const urls = [registry, ...mirrors].map((base) =>\n urlJoin(base, endpoint, query ? `?${query}` : '')\n );\n\n let lastError: FetchError | undefined;\n for (const url of urls) {\n try {\n const json = await fetch({ url, headers, cached });\n return json as T;\n } catch (err) {\n // Keep last fetch error\n lastError = err as any;\n }\n }\n\n log(\n 'fetchFromRegistry: cannot retrieve data from registry or mirrors: %O',\n {\n endpoint,\n headers,\n query,\n registry,\n mirrors,\n lastError,\n }\n );\n throw lastError;\n}\n","import { RawAbbreviatedPackument } from '../types/raw-abbreviated-packument';\nimport { assertValidPackageName } from '../utils/assert-valid-package-name';\nimport { fetchFromRegistry } from '../utils/fetch-from-registry';\n\n/**\n * `getRawAbbreviatedPackument` returns the abbreviated packument (package document)\n * containing only the metadata necessary to install a package present on the registry.\n *\n * Note: the abbreviated packument is returned as retrieved from the registry.\n *\n * @param name - package name\n * @param registry - URL of the registry (default: npm registry)\n * @param mirrors - URLs of the registry mirrors (default: npm registry mirrors)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the abbreviated packument for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getRawAbbreviatedPackument } from 'query-registry';\n *\n * (async () => {\n * const packument = await getRawAbbreviatedPackument({ name: 'query-registry' });\n *\n * // Output: 'query-registry'\n * console.log(packument.name);\n * })();\n * ```\n *\n * @see {@link RawAbbreviatedPackument}\n * @see {@link npmRegistry}\n * @see {@link npmRegistryMirrors}\n */\nexport async function getRawAbbreviatedPackument({\n name,\n registry,\n mirrors,\n cached,\n}: {\n name: string;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<RawAbbreviatedPackument> {\n assertValidPackageName({ name });\n\n const endpoint = `/${name}`;\n const headers = { Accept: 'application/vnd.npm.install-v1+json' };\n return fetchFromRegistry({ endpoint, headers, registry, mirrors, cached });\n}\n","import { AbbreviatedPackument } from '../types/abbreviated-packument';\nimport { normalizeRawAbbreviatedPackument } from '../utils/normalize-raw-abbreviated-packument';\nimport { getRawAbbreviatedPackument } from './get-raw-abbreviated-packument';\n\n/**\n * `getAbbreviatedPackument` returns the abbreviated packument (package document)\n * containing only the metadata necessary to install a package present on the registry.\n *\n * @remarks\n * To get all the metadata (full packument) about a package see {@link getPackument}.\n *\n * @param name - package name\n * @param registry - URL of the registry (default: npm registry)\n * @param mirrors - URLs of the registry mirrors (default: npm registry mirrors)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the abbreviated packument for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getAbbreviatedPackument } from 'query-registry';\n *\n * (async () => {\n * const packument = await getAbbreviatedPackument({ name: 'query-registry' });\n *\n * // Output: 'query-registry'\n * console.log(packument.name);\n * })();\n * ```\n *\n * @see {@link AbbreviatedPackument}\n * @see {@link RawAbbreviatedPackument}\n * @see {@link npmRegistry}\n * @see {@link npmRegistryMirrors}\n */\nexport async function getAbbreviatedPackument({\n name,\n registry,\n mirrors,\n cached,\n}: {\n name: string;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<AbbreviatedPackument> {\n const rawAbbreviatedPackument = await getRawAbbreviatedPackument({\n name,\n registry,\n mirrors,\n cached,\n });\n return normalizeRawAbbreviatedPackument({ rawAbbreviatedPackument });\n}\n","import { npmRegistryDownloadsAPI } from '../data/registries';\nimport { fetchFromRegistry } from './fetch-from-registry';\n\nexport async function fetchDownloadsFromRegistry<T>({\n endpoint,\n registryDownloadsAPI = npmRegistryDownloadsAPI,\n cached,\n}: {\n endpoint: string;\n registryDownloadsAPI?: string;\n cached?: boolean;\n}): Promise<T> {\n return fetchFromRegistry({\n endpoint,\n registry: registryDownloadsAPI,\n mirrors: [],\n cached,\n });\n}\n","import { DownloadPeriod } from '../types/download-period';\n\nexport function normalizeRawDownloadPeriod({\n rawDownloadPeriod = 'last-week',\n}: {\n rawDownloadPeriod?: DownloadPeriod;\n}): string {\n if (typeof rawDownloadPeriod === 'string') {\n return rawDownloadPeriod;\n }\n\n if (rawDownloadPeriod instanceof Date) {\n return getDay(rawDownloadPeriod);\n }\n\n const { start, end } = rawDownloadPeriod;\n return `${getDay(start)}:${getDay(end)}`;\n}\n\nfunction getDay(date: Date): string {\n return date.toISOString().split('T')[0]!;\n}\n","import { DownloadPeriod } from '../types/download-period';\nimport { DailyPackageDownloads } from '../types/downloads';\nimport { assertValidPackageName } from '../utils/assert-valid-package-name';\nimport { fetchDownloadsFromRegistry } from '../utils/fetch-downloads-from-registry';\nimport { normalizeRawDownloadPeriod } from '../utils/normalize-download-period';\n\n/**\n * `getDailyPackageDownloads` returns the number of downloads for a package\n * for each day in a given time period.\n *\n * @param name - package name\n * @param period - time period in which downloads happened (default: `last-week`)\n * @param registryDownloadsAPI - URL of the registry's downloads API (default: npm registry)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the day by day weekly downloads for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getDailyPackageDownloads } from 'query-registry';\n *\n * (async () => {\n * const downloads = await getDailyPackageDownloads({ name: 'query-registry' });\n *\n * // Output: 'query-registry'\n * console.log(downloads.package);\n *\n * // Output: 'number'\n * console.log(typeof downloads.downloads[0].downloads);\n * })();\n * ```\n *\n * @example\n * Get the day by day monthly downloads for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getDailyPackageDownloads } from 'query-registry';\n *\n * (async () => {\n * const downloads = await getDailyPackageDownloads({ name: 'query-registry', period: 'last-month' });\n *\n * // Output: 'query-registry'\n * console.log(downloads.package);\n *\n * // Output: 'number'\n * console.log(typeof downloads.downloads[0].downloads);\n * })();\n * ```\n *\n * @see {@link DailyPackageDownloads}\n * @see {@link DownloadPeriod}\n * @see {@link npmRegistryDownloadsAPI}\n * @see {@link https://github.com/npm/registry/blob/master/docs/download-counts.md#ranges}\n */\nexport async function getDailyPackageDownloads({\n name,\n period: rawDownloadPeriod,\n registryDownloadsAPI,\n cached,\n}: {\n name: string;\n period?: DownloadPeriod;\n registryDownloadsAPI?: string;\n cached?: boolean;\n}): Promise<DailyPackageDownloads> {\n assertValidPackageName({ name });\n\n const period = normalizeRawDownloadPeriod({ rawDownloadPeriod });\n const endpoint = `/downloads/range/${period}/${name}`;\n return fetchDownloadsFromRegistry({\n endpoint,\n registryDownloadsAPI,\n cached,\n });\n}\n","import { DownloadPeriod } from '../types/download-period';\nimport { DailyRegistryDownloads } from '../types/downloads';\nimport { fetchDownloadsFromRegistry } from '../utils/fetch-downloads-from-registry';\nimport { normalizeRawDownloadPeriod } from '../utils/normalize-download-period';\n\n/**\n * `getDailyRegistryDownloads` returns the number of downloads for all registry packages\n * for each day in a given time period.\n *\n * @param period - time period in which downloads happened (default: `last-week`)\n * @param registryDownloadsAPI - URL of the registry's downloads API (default: npm registry)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the day by day weekly downloads for the npm registry:\n *\n * ```typescript\n * import { getDailyRegistryDownloads } from 'query-registry';\n *\n * (async () => {\n * const downloads = await getDailyRegistryDownloads();\n *\n * // Output: 'number'\n * console.log(typeof downloads.downloads[0].downloads);\n * })();\n * ```\n *\n * @example\n * Get the day by day monthly downloads for the npm registry:\n *\n * ```typescript\n * import { getDailyRegistryDownloads } from 'query-registry';\n *\n * (async () => {\n * const downloads = await getDailyRegistryDownloads({ period: 'last-month' });\n *\n * // Output: 'number'\n * console.log(typeof downloads.downloads[0].downloads);\n * })();\n * ```\n *\n * @see {@link DailyRegistryDownloads}\n * @see {@link DownloadPeriod}\n * @see {@link npmRegistryDownloadsAPI}\n * @see {@link https://github.com/npm/registry/blob/master/docs/download-counts.md#ranges}\n */\nexport async function getDailyRegistryDownloads({\n period: rawDownloadPeriod,\n registryDownloadsAPI,\n cached,\n}: {\n period?: DownloadPeriod;\n registryDownloadsAPI?: string;\n cached?: boolean;\n} = {}): Promise<DailyRegistryDownloads> {\n const period = normalizeRawDownloadPeriod({ rawDownloadPeriod });\n const endpoint = `/downloads/range/${period}`;\n return fetchDownloadsFromRegistry({\n endpoint,\n registryDownloadsAPI,\n cached,\n });\n}\n","import { DownloadPeriod } from '../types/download-period';\nimport { PackageDownloads } from '../types/downloads';\nimport { assertValidPackageName } from '../utils/assert-valid-package-name';\nimport { fetchDownloadsFromRegistry } from '../utils/fetch-downloads-from-registry';\nimport { normalizeRawDownloadPeriod } from '../utils/normalize-download-period';\n\n/**\n * `getPackageDownloads` returns the number of downloads for a package\n * in a given time period.\n *\n * @param name - package name\n * @param period - time period in which downloads happened (default: `last-week`)\n * @param registryDownloadsAPI - URL of the registry's downloads API (default: npm registry)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the weekly downloads for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getPackageDownloads } from 'query-registry';\n *\n * (async () => {\n * const downloads = await getPackageDownloads({ name: 'query-registry' });\n *\n * // Output: 'query-registry'\n * console.log(downloads.package);\n *\n * // Output: 'number'\n * console.log(typeof downloads.downloads);\n * })();\n * ```\n *\n * @example\n * Get the monthly downloads for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getPackageDownloads } from 'query-registry';\n *\n * (async () => {\n * const downloads = await getPackageDownloads({ name: 'query-registry', period: 'last-month' });\n *\n * // Output: 'query-registry'\n * console.log(downloads.package);\n *\n * // Output: 'number'\n * console.log(typeof downloads.downloads);\n * })();\n * ```\n *\n * @see {@link PackageDownloads}\n * @see {@link DownloadPeriod}\n * @see {@link npmRegistryDownloadsAPI}\n * @see {@link https://github.com/npm/registry/blob/master/docs/download-counts.md#point-values}\n */\nexport async function getPackageDownloads({\n name,\n period: rawDownloadPeriod,\n registryDownloadsAPI,\n cached,\n}: {\n name: string;\n period?: DownloadPeriod;\n registryDownloadsAPI?: string;\n cached?: boolean;\n}): Promise<PackageDownloads> {\n assertValidPackageName({ name });\n\n const period = normalizeRawDownloadPeriod({ rawDownloadPeriod });\n const endpoint = `/downloads/point/${period}/${name}`;\n return fetchDownloadsFromRegistry({\n endpoint,\n registryDownloadsAPI,\n cached,\n });\n}\n","import { RawPackageManifest } from '../types/raw-package-manifest';\nimport { RawPackument } from '../types/raw-packument';\nimport { InvalidPackageVersionError } from './errors';\nimport { log } from './log';\n\nexport function extractRawPackageManifest({\n rawPackument,\n version = 'latest',\n}: {\n rawPackument: RawPackument;\n version?: string;\n}): RawPackageManifest {\n const { name, 'dist-tags': distTags, versions } = rawPackument;\n const versionNumber = distTags[version] ?? version;\n const manifest = versions[versionNumber];\n if (!manifest) {\n log('getPackageManifest: invalid package version: %O', {\n name,\n version,\n });\n throw new InvalidPackageVersionError(\n `invalid package version: '${name}@${version}'`\n );\n }\n\n return manifest;\n}\n","import { RawPackument } from '../types/raw-packument';\nimport { assertValidPackageName } from '../utils/assert-valid-package-name';\nimport { fetchFromRegistry } from '../utils/fetch-from-registry';\n\n/**\n * `getRawPackument` returns the packument (package document) containing\n * all the metadata about a package present on the registry.\n *\n * Note: the packument is returned as retrieved from the registry.\n *\n * @param name - package name\n * @param registry - URL of the registry (default: npm registry)\n * @param mirrors - URLs of the registry mirrors (default: npm registry mirrors)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the packument for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getRawPackument } from 'query-registry';\n *\n * (async () => {\n * const packument = await getRawPackument({ name: 'query-registry' });\n *\n * // Output: 'query-registry'\n * console.log(packument.name);\n * })();\n * ```\n *\n * @see {@link RawPackument}\n * @see {@link npmRegistry}\n * @see {@link npmRegistryMirrors}\n */\nexport async function getRawPackument({\n name,\n registry,\n mirrors,\n cached,\n}: {\n name: string;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<RawPackument> {\n assertValidPackageName({ name });\n\n const endpoint = `/${name}`;\n return fetchFromRegistry({ endpoint, registry, mirrors, cached });\n}\n","import { RawPackageManifest } from '../types/raw-package-manifest';\nimport { extractRawPackageManifest } from '../utils/extract-package-manifest';\nimport { getRawPackument } from './get-raw-packument';\n\n/**\n * `getRawPackageManifest` returns the manifest describing\n * a specific version of a package.\n *\n * Note: the manifest is returned as retrieved from the registry.\n *\n * @param name - package name\n * @param version - package version (default: `latest`)\n * @param registry - URL of the registry (default: npm registry)\n * @param mirrors - URLs of the registry mirrors (default: npm registry mirrors)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the latest manifest for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getRawPackageManifest } from 'query-registry';\n *\n * (async () => {\n * const manifest = await getRawPackageManifest({ name: 'query-registry' });\n *\n * // Output: 'query-registry'\n * console.log(manifest.name);\n * })();\n * ```\n *\n * @example\n * Get the manifest for package `query-registry@1.0.0` from the npm registry:\n *\n * ```typescript\n * import { getRawPackageManifest } from 'query-registry';\n *\n * (async () => {\n * const manifest = await getRawPackageManifest({ name: 'query-registry', version: '1.0.0' });\n *\n * // Output: 'query-registry'\n * console.log(manifest.name);\n *\n * // Output: '1.0.0'\n * console.log(manifest.version);\n * })();\n * ```\n *\n * @see {@link RawPackageManifest}\n * @see {@link npmRegistry}\n * @see {@link npmRegistryMirrors}\n */\nexport async function getRawPackageManifest({\n name,\n version,\n registry,\n mirrors,\n cached,\n}: {\n name: string;\n version?: string;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<RawPackageManifest> {\n const rawPackument = await getRawPackument({\n name,\n registry,\n mirrors,\n cached,\n });\n\n return extractRawPackageManifest({ rawPackument, version });\n}\n","import { getRawPackageManifest } from '../endpoints/get-raw-package-manifest';\nimport { RawPackageManifest } from '../types/raw-package-manifest';\n\nexport async function getDefinitelyTypedName({\n rawPackageManifest,\n registry,\n mirrors,\n cached,\n}: {\n rawPackageManifest: RawPackageManifest;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<string | undefined> {\n const { name, types, typings } = rawPackageManifest;\n const definitelyTypedName = toDefinitelyTypedName({ name });\n const alreadyTyped = name === definitelyTypedName || !!types || !!typings;\n if (alreadyTyped) {\n return undefined;\n }\n\n let ok = false;\n try {\n const { deprecated } = await getRawPackageManifest({\n name: definitelyTypedName,\n registry,\n mirrors,\n cached,\n });\n ok = deprecated === undefined;\n } catch {}\n return ok ? definitelyTypedName : undefined;\n}\n\n/**\n * `toDefinitelyTypedName` returns the name of the corresponding\n * DefinitelyTyped package (for example,\n * `foo` => `@types/foo`,\n * `@bar/baz` => `@types/bar__baz`).\n */\nfunction toDefinitelyTypedName({ name }: { name: string }): string {\n return name.startsWith('@types/')\n ? name\n : `@types/${name.replace('@', '').replace('/', '__')}`;\n}\n","/**\n * `getUntypedName` returns the name of the normal package\n * corresponding to a DefinitelyTyped package.\n */\nexport function getUntypedName({ name }: { name: string }): string | undefined {\n if (!name.startsWith('@types/')) {\n return undefined;\n }\n\n // ['foo', undefined] or ['@bar', 'baz']\n const [scopeOrName, scopedName] = name.replace('@types/', '').split('__');\n\n return scopedName ? `@${scopeOrName}/${scopedName}` : scopeOrName;\n}\n","export function normalizeRawLicense({\n rawLicense,\n}: {\n rawLicense?: any;\n}): string | undefined {\n if (!rawLicense) {\n return undefined;\n }\n\n if (typeof rawLicense !== 'string') {\n return undefined;\n }\n\n return rawLicense;\n}\n","import urlJoin from 'url-join';\nimport { GitRepository } from '../types/git-repository';\nimport { Repository } from '../types/repository';\n\nexport function normalizeRawRepository({\n rawRepository,\n}: {\n rawRepository?: any;\n}): GitRepository | undefined {\n if (isRepository(rawRepository)) {\n return normalizeRepository({ rawRepository });\n }\n\n if (typeof rawRepository === 'string') {\n return normalizeRepository({\n rawRepository: { url: rawRepository },\n });\n }\n\n return undefined;\n}\n\nfunction isRepository(rawRepository: any): rawRepository is Repository {\n return (\n rawRepository &&\n typeof rawRepository === 'object' &&\n typeof rawRepository['url'] === 'string' &&\n ['string', 'undefined'].includes(typeof rawRepository['type']) &&\n ['string', 'undefined'].includes(typeof rawRepository['directory'])\n );\n}\n\nfunction normalizeRepository({\n rawRepository,\n}: {\n rawRepository: Repository;\n}): GitRepository | undefined {\n const { url, directory } = rawRepository;\n\n const parsedUrl = parseGitURL({ url });\n if (!parsedUrl) {\n return undefined;\n }\n\n return {\n type: 'git',\n url: parsedUrl,\n directory,\n };\n}\n\nfunction parseGitURL({ url }: { url: string }): string | undefined {\n const urlWithProtocol = url.includes(':')\n ? // A normal URL or a shortcut like `github:user/repository`\n url\n : // The short form github shortcut `user/repository`\n url.includes('/')\n ? `github:${url}`\n : // Not a URL\n '';\n try {\n const { protocol, hostname, pathname } = new URL(urlWithProtocol);\n const cleanPathname = pathname.replace(/\\.git$/, '');\n if (protocol === 'github:' || hostname === 'github.com') {\n return urlJoin('https://github.com', cleanPathname);\n }\n if (protocol === 'gist:' || hostname === 'gist.github.com') {\n return urlJoin('https://gist.github.com', cleanPathname);\n }\n if (protocol === 'bitbucket:' || hostname === 'bitbucket.org') {\n return urlJoin('https://bitbucket.org', cleanPathname);\n }\n if (protocol === 'gitlab:' || hostname === 'gitlab.com') {\n return urlJoin('https://gitlab.com', cleanPathname);\n }\n return urlWithProtocol;\n } catch {\n return undefined;\n }\n}\n","import { PackageManifest } from '../types/package-manifest';\nimport { RawPackageManifest } from '../types/raw-package-manifest';\nimport { RawPackument } from '../types/raw-packument';\nimport { getDefinitelyTypedName } from './get-definitely-typed-name';\nimport { getUntypedName } from './get-untyped-name';\nimport { normalizeRawLicense } from './normalize-raw-license';\nimport { normalizeRawRepository } from './normalize-raw-repository';\n\nexport async function normalizeRawPackageManifest({\n rawPackageManifest,\n rawPackument,\n registry,\n mirrors,\n cached,\n}: {\n rawPackageManifest: RawPackageManifest;\n rawPackument: RawPackument;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<PackageManifest> {\n const {\n _id: id,\n name,\n version,\n license: rawLicense,\n repository: rawRepository,\n _npmUser: publisher,\n } = rawPackageManifest;\n\n const createdAt = rawPackument.time[version]!;\n const license = normalizeRawLicense({ rawLicense });\n const gitRepository = normalizeRawRepository({ rawRepository });\n const definitelyTypedName = await getDefinitelyTypedName({\n rawPackageManifest,\n registry,\n mirrors,\n cached,\n });\n const untypedName = getUntypedName({ name });\n\n return {\n ...rawPackageManifest,\n id,\n createdAt,\n publisher,\n license,\n gitRepository,\n definitelyTypedName,\n untypedName,\n };\n}\n","import { PackageManifest } from '../types/package-manifest';\nimport { extractRawPackageManifest } from '../utils/extract-package-manifest';\nimport { normalizeRawPackageManifest } from '../utils/normalize-raw-package-manifest';\nimport { getRawPackument } from './get-raw-packument';\n\n/**\n * `getPackageManifest` returns the manifest describing\n * a specific version of a package.\n *\n * @param name - package name\n * @param version - package version (default: `latest`)\n * @param registry - URL of the registry (default: npm registry)\n * @param mirrors - URLs of the registry mirrors (default: npm registry mirrors)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the latest manifest for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getPackageManifest } from 'query-registry';\n *\n * (async () => {\n * const manifest = await getPackageManifest({ name: 'query-registry' });\n *\n * // Output: 'query-registry'\n * console.log(manifest.name);\n * })();\n * ```\n *\n * @example\n * Get the manifest for package `query-registry@1.0.0` from the npm registry:\n *\n * ```typescript\n * import { getPackageManifest } from 'query-registry';\n *\n * (async () => {\n * const manifest = await getPackageManifest({ name: 'query-registry', version: '1.0.0' });\n *\n * // Output: 'query-registry'\n * console.log(manifest.name);\n *\n * // Output: '1.0.0'\n * console.log(manifest.version);\n * })();\n * ```\n *\n * @see {@link PackageManifest}\n * @see {@link RawPackageManifest}\n * @see {@link npmRegistry}\n * @see {@link npmRegistryMirrors}\n */\nexport async function getPackageManifest({\n name,\n version,\n registry,\n mirrors,\n cached,\n}: {\n name: string;\n version?: string;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<PackageManifest> {\n const rawPackument = await getRawPackument({\n name,\n registry,\n mirrors,\n cached,\n });\n\n const rawPackageManifest = extractRawPackageManifest({\n rawPackument,\n version,\n });\n\n const packageManifest = await normalizeRawPackageManifest({\n rawPackageManifest,\n rawPackument,\n registry,\n mirrors,\n cached,\n });\n\n return packageManifest;\n}\n","import { Packument } from '../types/packument';\nimport { RawPackument } from '../types/raw-packument';\nimport { normalizeRawLicense } from './normalize-raw-license';\nimport { normalizeRawRepository } from './normalize-raw-repository';\n\nexport function normalizeRawPackument({\n rawPackument,\n}: {\n rawPackument: RawPackument;\n}): Packument {\n const {\n _id: id,\n 'dist-tags': distTags,\n time,\n license: rawLicense,\n repository: rawRepository,\n } = rawPackument;\n const license = normalizeRawLicense({ rawLicense });\n const gitRepository = normalizeRawRepository({ rawRepository });\n const versionsToTimestamps = Object.fromEntries(\n Object.entries(time).filter(([key]) => {\n return !['created', 'modified'].includes(key);\n })\n );\n\n return {\n ...rawPackument,\n id,\n distTags,\n versionsToTimestamps,\n license,\n gitRepository,\n };\n}\n","import { Packument } from '../types/packument';\nimport { normalizeRawPackument } from '../utils/normalize-raw-packument';\nimport { getRawPackument } from './get-raw-packument';\n\n/**\n * `getPackument` returns the packument (package document) containing\n * all the metadata about a package present on the registry.\n *\n * @param name - package name\n * @param registry - URL of the registry (default: npm registry)\n * @param mirrors - URLs of the registry mirrors (default: npm registry mirrors)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the packument for package `query-registry` from the npm registry:\n *\n * ```typescript\n * import { getPackument } from 'query-registry';\n *\n * (async () => {\n * const packument = await getPackument({ name: 'query-registry' });\n *\n * // Output: 'query-registry'\n * console.log(packument.name);\n * })();\n * ```\n *\n * @see {@link Packument}\n * @see {@link RawPackument}\n * @see {@link npmRegistry}\n * @see {@link npmRegistryMirrors}\n */\nexport async function getPackument({\n name,\n registry,\n mirrors,\n cached,\n}: {\n name: string;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<Packument> {\n const rawPackument = await getRawPackument({\n name,\n registry,\n mirrors,\n cached,\n });\n return normalizeRawPackument({ rawPackument });\n}\n","import { DownloadPeriod } from '../types/download-period';\nimport { RegistryDownloads } from '../types/downloads';\nimport { fetchDownloadsFromRegistry } from '../utils/fetch-downloads-from-registry';\nimport { normalizeRawDownloadPeriod } from '../utils/normalize-download-period';\n\n/**\n * `getRegistryDownloads` returns the number of downloads for all registry packages\n * in a given time period.\n *\n * @param period - time period in which downloads happened (default: `last-week`)\n * @param registryDownloadsAPI - URL of the registry's downloads API (default: npm registry)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the weekly downloads for the npm registry:\n *\n * ```typescript\n * import { getRegistryDownloads } from 'query-registry';\n *\n * (async () => {\n * const downloads = await getRegistryDownloads();\n *\n * // Output: 'number'\n * console.log(typeof downloads.downloads);\n * })();\n * ```\n *\n * @example\n * Get the monthly downloads for the npm registry:\n *\n * ```typescript\n * import { getRegistryDownloads } from 'query-registry';\n *\n * (async () => {\n * const downloads = await getRegistryDownloads({ period: 'last-month' });\n *\n * // Output: 'number'\n * console.log(typeof downloads.downloads);\n * })();\n * ```\n *\n * @see {@link RegistryDownloads}\n * @see {@link DownloadPeriod}\n * @see {@link npmRegistryDownloadsAPI}\n * @see {@link https://github.com/npm/registry/blob/master/docs/download-counts.md#point-values}\n */\nexport async function getRegistryDownloads({\n period: rawDownloadPeriod,\n registryDownloadsAPI,\n cached,\n}: {\n period?: DownloadPeriod;\n registryDownloadsAPI?: string;\n cached?: boolean;\n} = {}): Promise<RegistryDownloads> {\n const period = normalizeRawDownloadPeriod({ rawDownloadPeriod });\n const endpoint = `/downloads/point/${period}`;\n return fetchDownloadsFromRegistry({\n endpoint,\n registryDownloadsAPI,\n cached,\n });\n}\n","import { RegistryMetadata } from '../types/registry-metadata';\nimport { fetchFromRegistry } from '../utils/fetch-from-registry';\n\n/**\n * `getRegistryMetadata` returns the metadata describing the registry itself.\n *\n * @param registry - URL of the registry (default: npm registry)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the metadata for the npm registry:\n *\n * ```typescript\n * import { getRegistryMetadata } from 'query-registry';\n *\n * (async () => {\n * const metadata = await getRegistryMetadata();\n *\n * // Output: 'registry'\n * console.log(metadata.db_name);\n * })();\n * ```\n *\n * @example\n * Get the metadata for a custom registry:\n *\n * ```typescript\n * import { getRegistryMetadata } from 'query-registry';\n *\n * (async () => {\n * const metadata = await getRegistryMetadata({ registry: 'https://example.com' });\n * })();\n * ```\n *\n * @see {@link RegistryMetadata}\n * @see {@link npmRegistry}\n */\nexport async function getRegistryMetadata({\n registry,\n cached,\n}: {\n registry?: string;\n cached?: boolean;\n} = {}): Promise<RegistryMetadata> {\n const endpoint = '/';\n return fetchFromRegistry({ registry, mirrors: [], endpoint, cached });\n}\n","import { SearchCriteria } from '../types/search-criteria';\n\nexport function normalizeRawSearchCriteria({\n rawSearchCriteria,\n}: {\n rawSearchCriteria: SearchCriteria;\n}): string {\n // Convert SearchCriteria to a URL query string\n return Object.entries(rawSearchCriteria)\n .filter(([, value]) => ['string', 'number'].includes(typeof value))\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n}\n","import { SearchCriteria } from '../types/search-criteria';\nimport { SearchResults } from '../types/search-results';\nimport { fetchFromRegistry } from '../utils/fetch-from-registry';\nimport { normalizeRawSearchCriteria } from '../utils/normalize-raw-search-criteria';\n\n/**\n * `searchPackages` returns the packages corresponding to a given query.\n *\n * @param query - one or more search criteria\n * @param registry - URL of the registry (default: npm registry)\n * @param mirrors - URLs of the registry mirrors (default: npm registry mirrors)\n * @param cached - accept cached responses (default: `true`)\n *\n * @example\n * Get the search results for text query `query-registry` from the npm registry:\n *\n * ```typescript\n * import { searchPackages } from 'query-registry';\n *\n * (async () => {\n * const results = await searchPackages({ query: { text: 'query-registry' } });\n *\n * // Output: 'query-registry'\n * console.log(results.objects[0].package.name);\n * })();\n * ```\n *\n * @see {@link SearchResults}\n * @see {@link SearchCriteria}\n * @see {@link npmRegistry}\n * @see {@link npmRegistryMirrors}\n */\nexport async function searchPackages({\n query: rawSearchCriteria,\n registry,\n mirrors,\n cached,\n}: {\n query: SearchCriteria;\n registry?: string;\n mirrors?: string[];\n cached?: boolean;\n}): Promise<SearchResults> {\n const endpoint = '/-/v1/search';\n const query = normalizeRawSearchCriteria({ rawSearchCriteria });\n return fetchFromRegistry({ endpoint, query, registry, mirrors, cached });\n}\n"],"names":["npmRegistry","cloudflareRegistry","yarnRegistry","npmRegistryMirrors","npmRegistryDownloadsAPI","normalizeRawAbbreviatedPackument","rawAbbreviatedPackument","distTags","name","id","modified","modifiedAt","FetchError","BaseError","constructor","url","response","statusText","InvalidPackageNameError","makeError","InvalidPackageVersionError","log","formatter","args","debug","logger","assertValidPackageName","validForOldPackages","validForNewPackages","validatePackageName","valid","maxItems","fiveMinutesTTL","cache","lru","fetch","headers","cached","cacheKey","JSON","stringify","cachedJSON","get","unfetch","ok","status","json","set","fetchFromRegistry","endpoint","query","registry","mirrors","urls","map","base","urlJoin","lastError","err","getRawAbbreviatedPackument","Accept","getAbbreviatedPackument","fetchDownloadsFromRegistry","registryDownloadsAPI","normalizeRawDownloadPeriod","rawDownloadPeriod","Date","getDay","start","end","date","toISOString","split","getDailyPackageDownloads","period","getDailyRegistryDownloads","getPackageDownloads","extractRawPackageManifest","rawPackument","version","versions","versionNumber","manifest","getRawPackument","getRawPackageManifest","getDefinitelyTypedName","rawPackageManifest","types","typings","definitelyTypedName","toDefinitelyTypedName","alreadyTyped","undefined","deprecated","startsWith","replace","getUntypedName","scopeOrName","scopedName","normalizeRawLicense","rawLicense","normalizeRawRepository","rawRepository","isRepository","normalizeRepository","includes","directory","parsedUrl","parseGitURL","type","urlWithProtocol","protocol","hostname","pathname","URL","cleanPathname","normalizeRawPackageManifest","_id","license","repository","_npmUser","publisher","createdAt","time","gitRepository","untypedName","getPackageManifest","packageManifest","normalizeRawPackument","versionsToTimestamps","Object","fromEntries","entries","filter","key","getPackument","getRegistryDownloads","getRegistryMetadata","normalizeRawSearchCriteria","rawSearchCriteria","value","join","searchPackages"],"mappings":"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"}
\No newline at end of file