MCPcopy Index your code
hub / github.com/nodejs/corepack / execute

Method execute

sources/commands/deprecated/Hydrate.ts:20–70  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

18 fileName = Option.String();
19
20 async execute() {
21 const installFolder = folderUtils.getInstallFolder();
22 const fileName = path.resolve(this.context.cwd, this.fileName);
23
24 const archiveEntries = new Map<string, Set<string>>();
25 let hasShortEntries = false;
26
27 const {list: tarT} = await import(`tar/list`);
28
29 await tarT({file: fileName, onentry: entry => {
30 const segments = entry.path.split(/\//g);
31
32 if (segments.length < 3) {
33 hasShortEntries = true;
34 } else {
35 let references = archiveEntries.get(segments[0]);
36 if (typeof references === `undefined`)
37 archiveEntries.set(segments[0], references = new Set());
38
39 references.add(segments[1]);
40 }
41 }});
42
43 if (hasShortEntries || archiveEntries.size < 1)
44 throw new UsageError(`Invalid archive format; did it get generated by 'corepack prepare'?`);
45
46 const {extract: tarX} = await import(`tar/extract`);
47
48 for (const [name, references] of archiveEntries) {
49 for (const reference of references) {
50 if (!isSupportedPackageManager(name))
51 throw new UsageError(`Unsupported package manager '${name}'`);
52
53 if (this.activate)
54 this.context.stdout.write(`Hydrating ${name}@${reference} for immediate activation...\n`);
55 else
56 this.context.stdout.write(`Hydrating ${name}@${reference}...\n`);
57
58 // Recreate the folder in case it was deleted somewhere else:
59 await mkdir(installFolder, {recursive: true});
60
61 await tarX({file: fileName, cwd: installFolder}, [`${name}/${reference}`]);
62
63 if (this.activate) {
64 await this.context.engine.activatePackageManager({name, reference});
65 }
66 }
67 }
68
69 this.context.stdout.write(`All done!\n`);
70 }
71}

Callers

nothing calls this directly

Calls 2

Tested by

no test coverage detected