UNPKG

1.34 kBPlain TextView Raw
1import { getRawPackageManifest } from '../endpoints/get-raw-package-manifest';
2import { RawPackageManifest } from '../types/raw-package-manifest';
3
4export async function getDefinitelyTypedName({
5 rawPackageManifest,
6 registry,
7 mirrors,
8 cached,
9}: {
10 rawPackageManifest: RawPackageManifest;
11 registry?: string;
12 mirrors?: string[];
13 cached?: boolean;
14}): Promise<string | undefined> {
15 const { name, types, typings } = rawPackageManifest;
16 const definitelyTypedName = toDefinitelyTypedName({ name });
17 const alreadyTyped = name === definitelyTypedName || !!types || !!typings;
18 if (alreadyTyped) {
19 return undefined;
20 }
21
22 let ok = false;
23 try {
24 const { deprecated } = await getRawPackageManifest({
25 name: definitelyTypedName,
26 registry,
27 mirrors,
28 cached,
29 });
30 ok = deprecated === undefined;
31 } catch {}
32 return ok ? definitelyTypedName : undefined;
33}
34
35/**
36 * `toDefinitelyTypedName` returns the name of the corresponding
37 * DefinitelyTyped package (for example,
38 * `foo` => `@types/foo`,
39 * `@bar/baz` => `@types/bar__baz`).
40 */
41function toDefinitelyTypedName({ name }: { name: string }): string {
42 return name.startsWith('@types/')
43 ? name
44 : `@types/${name.replace('@', '').replace('/', '__')}`;
45}