-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathLocalDependencyTreeLoader.ts
More file actions
56 lines (45 loc) · 1.34 KB
/
LocalDependencyTreeLoader.ts
File metadata and controls
56 lines (45 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Import Node.js Dependencies
import path from "node:path";
import fs from "node:fs/promises";
// Import Third-party Dependencies
import Arborist from "@npmcli/arborist";
// Import Internal Dependencies
import {
TreeDependencies,
type TreeDependenciesOptions
} from "./TreeDependencies.js";
import * as utils from "../utils/index.js";
export interface LocalDependencyTreeLoaderProvider {
load(
location: string,
options?: LocalDependencyTreeLoaderOptions
): Promise<TreeDependencies>;
}
export interface LocalDependencyTreeLoaderOptions extends TreeDependenciesOptions {
registry?: string;
}
export class LocalDependencyTreeLoader implements LocalDependencyTreeLoaderProvider {
async load(
location: string,
options: LocalDependencyTreeLoaderOptions = {}
): Promise<TreeDependencies> {
const { registry, ...treeDepOptions } = options;
const arb = new Arborist({
...utils.NPM_TOKEN,
path: location,
registry
});
try {
await fs.access(
path.join(location, "node_modules")
);
await arb.loadActual();
const treeNode = await arb.buildIdealTree();
return TreeDependencies.fromArboristNode(treeNode, treeDepOptions);
}
catch {
const treeNode = await arb.loadVirtual();
return TreeDependencies.fromArboristNode(treeNode, treeDepOptions);
}
}
}