UNPKG

1.86 kBPlain TextView Raw
1import * as tsm from 'ts-morph';
2import { isNamespaceDeclaration } from '../types/declaration-type-guards';
3import { Declaration, ModuleDeclarations } from '../types/module-declarations';
4import { PackageFile } from '../types/package-file';
5import { getFilename } from './get-filename';
6import { RepositoryFileURLProvider } from './repository-file-url-provider';
7import { UnpkgFileURLProvider } from './unpkg-file-url-provider';
8
9export 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
37function 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}