1 | import * as tsm from 'ts-morph';
|
2 | import { isNamespaceDeclaration } from '../types/declaration-type-guards';
|
3 | import { Declaration, ModuleDeclarations } from '../types/module-declarations';
|
4 | import { PackageFile } from '../types/package-file';
|
5 | import { getFilename } from './get-filename';
|
6 | import { RepositoryFileURLProvider } from './repository-file-url-provider';
|
7 | import { UnpkgFileURLProvider } from './unpkg-file-url-provider';
|
8 |
|
9 | export function getPackageFiles({
|
10 | indexFile,
|
11 | declarations,
|
12 | getRepositoryFileURL,
|
13 | getUnpkgFileURL,
|
14 | }: {
|
15 | indexFile: tsm.SourceFile;
|
16 | declarations: ModuleDeclarations;
|
17 | getRepositoryFileURL: RepositoryFileURLProvider;
|
18 | getUnpkgFileURL: UnpkgFileURLProvider;
|
19 | }): PackageFile[] {
|
20 | const indexFilename = getFilename({ declaration: indexFile });
|
21 | const declarationFilenames = getDeclarationFilenames({ declarations });
|
22 |
|
23 | return Array.from(new Set([indexFilename, ...declarationFilenames]))
|
24 | .sort()
|
25 | .map((filename) => {
|
26 | const url = getRepositoryFileURL({ filename });
|
27 | const unpkgURL = getUnpkgFileURL({ filename });
|
28 |
|
29 | if (filename === indexFilename) {
|
30 | return { isIndexFile: true, filename, url, unpkgURL };
|
31 | }
|
32 |
|
33 | return { filename, url, unpkgURL };
|
34 | });
|
35 | }
|
36 |
|
37 | function getDeclarationFilenames({
|
38 | declarations,
|
39 | }: {
|
40 | declarations: ModuleDeclarations;
|
41 | }): string[] {
|
42 | return Object.values(declarations)
|
43 | .flat()
|
44 | .flatMap((declaration: Declaration) => {
|
45 | const {
|
46 | source: { filename },
|
47 | } = declaration;
|
48 |
|
49 | if (isNamespaceDeclaration(declaration)) {
|
50 | const { declarations } = declaration;
|
51 | return [filename, ...getDeclarationFilenames({ declarations })];
|
52 | }
|
53 |
|
54 | return filename;
|
55 | });
|
56 | }
|