Skip to content

Commit d44f0e8

Browse files
committed
feat: add unpkg URL for declarations and files
1 parent 6ed4165 commit d44f0e8

File tree

65 files changed

+17945
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+17945
-5
lines changed

src/api-extractor/extract-package-api.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { getProject } from './get-project';
1010
import { getRepositoryFileURLProvider } from './repository-file-url-provider';
1111
import { getSourceProvider } from './source-provider';
1212
import { getTypeChecker } from './type-checker';
13+
import { getUnpkgFileURLProvider } from './unpkg-file-url-provider';
1314

1415
/**
1516
* `extractPackageAPI` extracts the public API from a package.
@@ -63,7 +64,13 @@ export function extractPackageAPI({
6364
const getRepositoryFileURL = getRepositoryFileURLProvider({ repository });
6465
log('extractPackageAPI: got repository file URL provider');
6566

66-
const getSource = getSourceProvider({ getRepositoryFileURL });
67+
const getUnpkgFileURL = getUnpkgFileURLProvider({ id });
68+
log('extractPackageAPI: got unpkg file URL provider');
69+
70+
const getSource = getSourceProvider({
71+
getRepositoryFileURL,
72+
getUnpkgFileURL,
73+
});
6774
log('extractPackageAPI: got source provider');
6875

6976
const getType = getTypeChecker({ project });
@@ -88,6 +95,7 @@ export function extractPackageAPI({
8895
indexFile,
8996
declarations,
9097
getRepositoryFileURL,
98+
getUnpkgFileURL,
9199
});
92100
log('extractPackageAPI: got package files: %O', { id, files });
93101

@@ -98,5 +106,6 @@ export function extractPackageAPI({
98106
id,
99107
api: { overview, declarations, files },
100108
});
109+
101110
return { overview, declarations, files };
102111
}

src/api-extractor/get-package-files.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@ import { Declaration, ModuleDeclarations } from '../types/module-declarations';
44
import { PackageFile } from '../types/package-file';
55
import { getFilename } from './get-filename';
66
import { RepositoryFileURLProvider } from './repository-file-url-provider';
7+
import { UnpkgFileURLProvider } from './unpkg-file-url-provider';
78

89
export function getPackageFiles({
910
indexFile,
1011
declarations,
1112
getRepositoryFileURL,
13+
getUnpkgFileURL,
1214
}: {
1315
indexFile: tsm.SourceFile;
1416
declarations: ModuleDeclarations;
1517
getRepositoryFileURL: RepositoryFileURLProvider;
18+
getUnpkgFileURL: UnpkgFileURLProvider;
1619
}): PackageFile[] {
1720
const indexFilename = getFilename({ declaration: indexFile });
1821
const declarationFilenames = getDeclarationFilenames({ declarations });
@@ -21,12 +24,13 @@ export function getPackageFiles({
2124
.sort()
2225
.map((filename) => {
2326
const url = getRepositoryFileURL({ filename });
27+
const unpkgURL = getUnpkgFileURL({ filename });
2428

2529
if (filename === indexFilename) {
26-
return { isIndexFile: true, filename, url };
30+
return { isIndexFile: true, filename, url, unpkgURL };
2731
}
2832

29-
return { filename, url };
33+
return { filename, url, unpkgURL };
3034
});
3135
}
3236

src/api-extractor/source-provider.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { DeclarationSource } from '../types/module-declarations';
33
import { getFilename } from './get-filename';
44
import { getStartLineNumber } from './get-start-line-number';
55
import { RepositoryFileURLProvider } from './repository-file-url-provider';
6+
import { UnpkgFileURLProvider } from './unpkg-file-url-provider';
67

78
export type SourceProvider = ({
89
declaration,
@@ -12,13 +13,16 @@ export type SourceProvider = ({
1213

1314
export function getSourceProvider({
1415
getRepositoryFileURL,
16+
getUnpkgFileURL,
1517
}: {
1618
getRepositoryFileURL: RepositoryFileURLProvider;
19+
getUnpkgFileURL: UnpkgFileURLProvider;
1720
}): SourceProvider {
1821
return ({ declaration }) => {
1922
const filename = getFilename({ declaration });
2023
const line = getStartLineNumber({ declaration });
2124
const url = getRepositoryFileURL({ filename, line });
22-
return { filename, line, url };
25+
const unpkgURL = getUnpkgFileURL({ filename, line });
26+
return { filename, line, url, unpkgURL };
2327
};
2428
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
export type UnpkgFileURLProvider = ({
2+
filename,
3+
line,
4+
}: {
5+
filename: string;
6+
line?: number;
7+
}) => string | undefined;
8+
9+
export function getUnpkgFileURLProvider({
10+
id,
11+
}: {
12+
id?: string;
13+
}): UnpkgFileURLProvider {
14+
if (!id) {
15+
return () => undefined;
16+
}
17+
18+
return ({ filename, line }) => {
19+
const fileURL = `https://unpkg.com/browse/${id}/${filename}`;
20+
if (!line) {
21+
return fileURL;
22+
}
23+
24+
return `${fileURL}#L${line}`;
25+
};
26+
}

src/types/module-declarations.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,9 @@ export interface DeclarationSource {
275275
/** Starting line number */
276276
readonly line: number;
277277

278-
/** URL in a remote repository linking to to the declaration */
278+
/** URL in a remote repository linking to the declaration */
279279
readonly url?: string;
280+
281+
/** URL on unpkg.com linking to the declaration */
282+
readonly unpkgURL?: string;
280283
}

src/types/package-file.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,7 @@ export interface PackageFile {
1010

1111
/** URL in a remote repository linking to the file */
1212
readonly url?: string;
13+
14+
/** URL on unpkg.com linking to the file */
15+
readonly unpkgURL?: string;
1316
}

test/api-extractor-snapshots/__snapshots__/ambient-modules.test.ts.snap

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Object {
2828
"source": Object {
2929
"filename": "index.d.ts",
3030
"line": 7,
31+
"unpkgURL": undefined,
3132
"url": undefined,
3233
},
3334
"type": "string",
@@ -44,6 +45,7 @@ Object {
4445
"source": Object {
4546
"filename": "index.d.ts",
4647
"line": 10,
48+
"unpkgURL": undefined,
4749
"url": undefined,
4850
},
4951
"type": "boolean",
@@ -61,6 +63,7 @@ Object {
6163
"source": Object {
6264
"filename": "index.d.ts",
6365
"line": 5,
66+
"unpkgURL": undefined,
6467
"url": undefined,
6568
},
6669
},
@@ -84,6 +87,7 @@ Object {
8487
"source": Object {
8588
"filename": "index.d.ts",
8689
"line": 2,
90+
"unpkgURL": undefined,
8791
"url": undefined,
8892
},
8993
},
@@ -101,6 +105,7 @@ Object {
101105
"source": Object {
102106
"filename": "index.d.ts",
103107
"line": 15,
108+
"unpkgURL": undefined,
104109
"url": undefined,
105110
},
106111
"type": "(a: number, b: number) => number",
@@ -121,6 +126,7 @@ Object {
121126
"source": Object {
122127
"filename": "index.d.ts",
123128
"line": 14,
129+
"unpkgURL": undefined,
124130
"url": undefined,
125131
},
126132
},
@@ -132,6 +138,7 @@ Object {
132138
Object {
133139
"filename": "index.d.ts",
134140
"isIndexFile": true,
141+
"unpkgURL": undefined,
135142
"url": undefined,
136143
},
137144
],

test/api-extractor-snapshots/__snapshots__/ambient-namespaces.test.ts.snap

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Object {
1717
"source": Object {
1818
"filename": "index.d.ts",
1919
"line": 20,
20+
"unpkgURL": undefined,
2021
"url": undefined,
2122
},
2223
"type": "(a: number, b: number) => number",
@@ -55,6 +56,7 @@ Object {
5556
"source": Object {
5657
"filename": "index.d.ts",
5758
"line": 6,
59+
"unpkgURL": undefined,
5860
"url": undefined,
5961
},
6062
"type": "string",
@@ -66,6 +68,7 @@ Object {
6668
"source": Object {
6769
"filename": "index.d.ts",
6870
"line": 4,
71+
"unpkgURL": undefined,
6972
"url": undefined,
7073
},
7174
},
@@ -84,6 +87,7 @@ Object {
8487
"source": Object {
8588
"filename": "index.d.ts",
8689
"line": 10,
90+
"unpkgURL": undefined,
8791
"url": undefined,
8892
},
8993
"type": "boolean",
@@ -101,6 +105,7 @@ Object {
101105
"source": Object {
102106
"filename": "index.d.ts",
103107
"line": 2,
108+
"unpkgURL": undefined,
104109
"url": undefined,
105110
},
106111
},
@@ -118,6 +123,7 @@ Object {
118123
"source": Object {
119124
"filename": "index.d.ts",
120125
"line": 17,
126+
"unpkgURL": undefined,
121127
"url": undefined,
122128
},
123129
"type": "Foo.Bar",
@@ -134,6 +140,7 @@ Object {
134140
"source": Object {
135141
"filename": "index.d.ts",
136142
"line": 14,
143+
"unpkgURL": undefined,
137144
"url": undefined,
138145
},
139146
"type": "Foo.Bar",
@@ -145,6 +152,7 @@ Object {
145152
Object {
146153
"filename": "index.d.ts",
147154
"isIndexFile": true,
155+
"unpkgURL": undefined,
148156
"url": undefined,
149157
},
150158
],

test/api-extractor-snapshots/__snapshots__/class-with-overloaded-methods.test.ts.snap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Object {
2525
"source": Object {
2626
"filename": "index.d.ts",
2727
"line": 3,
28+
"unpkgURL": undefined,
2829
"url": undefined,
2930
},
3031
"type": "{ (a: string): number; (b: number): string; }",
@@ -37,6 +38,7 @@ Object {
3738
"source": Object {
3839
"filename": "index.d.ts",
3940
"line": 1,
41+
"unpkgURL": undefined,
4042
"url": undefined,
4143
},
4244
},
@@ -52,6 +54,7 @@ Object {
5254
Object {
5355
"filename": "index.d.ts",
5456
"isIndexFile": true,
57+
"unpkgURL": undefined,
5558
"url": undefined,
5659
},
5760
],

test/api-extractor-snapshots/__snapshots__/export-all-as-namespace.test.ts.snap

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Object {
2828
"source": Object {
2929
"filename": "foo.d.ts",
3030
"line": 6,
31+
"unpkgURL": undefined,
3132
"url": undefined,
3233
},
3334
"type": "string",
@@ -47,6 +48,7 @@ Object {
4748
"source": Object {
4849
"filename": "foo.d.ts",
4950
"line": 1,
51+
"unpkgURL": undefined,
5052
"url": undefined,
5153
},
5254
},
@@ -57,11 +59,13 @@ Object {
5759
"files": Array [
5860
Object {
5961
"filename": "foo.d.ts",
62+
"unpkgURL": undefined,
6063
"url": undefined,
6164
},
6265
Object {
6366
"filename": "index.d.ts",
6467
"isIndexFile": true,
68+
"unpkgURL": undefined,
6569
"url": undefined,
6670
},
6771
],

0 commit comments

Comments
 (0)