()
| 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 | } |
nothing calls this directly
no test coverage detected