1 | import { getRawPackageManifest } from '../endpoints/get-raw-package-manifest';
|
2 | import { RawPackageManifest } from '../types/raw-package-manifest';
|
3 |
|
4 | export 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 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | function toDefinitelyTypedName({ name }: { name: string }): string {
|
42 | return name.startsWith('@types/')
|
43 | ? name
|
44 | : `@types/${name.replace('@', '').replace('/', '__')}`;
|
45 | }
|