1 | import { performance } from 'perf_hooks';
|
2 | import * as tsm from 'ts-morph';
|
3 | import { PackageAPI } from '../types/package-api';
|
4 | import { TaggedGitRepository } from '../types/tagged-git-repository';
|
5 | import { log } from '../utils/log';
|
6 | import { getOverview } from './get-overview';
|
7 | import { getPackageDeclarations } from './get-package-declarations';
|
8 | import { getPackageFiles } from './get-package-files';
|
9 | import { getProject } from './get-project';
|
10 | import { getRepositoryFileURLProvider } from './repository-file-url-provider';
|
11 | import { getSourceProvider } from './source-provider';
|
12 | import { getTypeChecker } from './type-checker';
|
13 | import { getUnpkgFileURLProvider } from './unpkg-file-url-provider';
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | export function extractPackageAPI({
|
28 | fileSystem,
|
29 | entryPoint,
|
30 | maxDepth,
|
31 | pattern,
|
32 | repository,
|
33 | id,
|
34 | }: {
|
35 | fileSystem: tsm.FileSystemHost;
|
36 | entryPoint: string;
|
37 | maxDepth?: number;
|
38 | pattern?: string;
|
39 | repository?: TaggedGitRepository;
|
40 | id?: string;
|
41 | }): PackageAPI {
|
42 | const start = performance.now();
|
43 | log('extractPackageAPI: extracting API: %O', {
|
44 | id,
|
45 | entryPoint,
|
46 | maxDepth,
|
47 | pattern,
|
48 | repository,
|
49 | fileSystem,
|
50 | });
|
51 |
|
52 | const project = getProject({ fileSystem, pattern });
|
53 | log('extractPackageAPI: created project: %O', {
|
54 | id,
|
55 | files: project.getSourceFiles().map((file) => file.getFilePath()),
|
56 | });
|
57 |
|
58 | const indexFile = project.getSourceFileOrThrow(entryPoint);
|
59 | log('extractPackageAPI: found index file: %O', {
|
60 | id,
|
61 | indexFile: indexFile.getFilePath(),
|
62 | });
|
63 |
|
64 | const getRepositoryFileURL = getRepositoryFileURLProvider({ repository });
|
65 | log('extractPackageAPI: got repository file URL provider');
|
66 |
|
67 | const getUnpkgFileURL = getUnpkgFileURLProvider({ id });
|
68 | log('extractPackageAPI: got unpkg file URL provider');
|
69 |
|
70 | const getSource = getSourceProvider({
|
71 | getRepositoryFileURL,
|
72 | getUnpkgFileURL,
|
73 | });
|
74 | log('extractPackageAPI: got source provider');
|
75 |
|
76 | const getType = getTypeChecker({ project });
|
77 | log('extractPackageAPI: got type checker');
|
78 |
|
79 | const overview = getOverview({ indexFile });
|
80 | log('extractPackageAPI: got package overview: %O', { id, overview });
|
81 |
|
82 | const declarations = getPackageDeclarations({
|
83 | project,
|
84 | indexFile,
|
85 | maxDepth,
|
86 | getSource,
|
87 | getType,
|
88 | });
|
89 | log('extractPackageAPI: got package declarations: %O', {
|
90 | id,
|
91 | declarations,
|
92 | });
|
93 |
|
94 | const files = getPackageFiles({
|
95 | indexFile,
|
96 | declarations,
|
97 | getRepositoryFileURL,
|
98 | getUnpkgFileURL,
|
99 | });
|
100 | log('extractPackageAPI: got package files: %O', { id, files });
|
101 |
|
102 | const elapsed = Math.round(performance.now() - start);
|
103 | log('extractPackageAPI: performance (ms): %O', { id, elapsed });
|
104 |
|
105 | log('extractPackageAPI: extracted package API: %O', {
|
106 | id,
|
107 | api: { overview, declarations, files },
|
108 | });
|
109 |
|
110 | return { overview, declarations, files };
|
111 | }
|