Skip to content

Commit 8aeb4ef

Browse files
committed
extract from np, registry
1 parent 1030078 commit 8aeb4ef

File tree

3 files changed

+1015
-112
lines changed

3 files changed

+1015
-112
lines changed

index.js

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,44 @@
11
#!/usr/bin/env node
22
'use strict'
3-
4-
const util = require('util');
3+
const argv = require('yargs-parser')(process.argv.slice(2), {alias:{release: ['r']}})
54
const path = require("path");
65
const chalk = require('chalk');
76
const ora = require("ora");
8-
const unzipper = require('unzipper');
9-
const request_original = require('request');//TODO: maybe use got or smth else as request is deprecated
10-
const request = util.promisify(request_original);
7+
const pacote = require('pacote');
8+
const fs = require("fs-extra");
9+
const os = require('os');
10+
const packageName = 'html5-boilerplate';
1111

12-
const args = process.argv.slice(2);
12+
const extract = async(tempDir, version = '') => {
13+
return new Promise((resolve, reject) => {
14+
pacote.extract(packageName+'@'+version, tempDir, {})
15+
.then(res=>resolve(res))
16+
.catch(err=>{
17+
reject(err);
18+
});
19+
});
20+
}
1321

1422
(async () => {
15-
const spinner = ora('Fetching latest release version').start();
16-
17-
const {error, response, body} = await request({
18-
url:'https://api.github.com/repos/h5bp/html5-boilerplate/releases/latest',
19-
headers: {
20-
'User-Agent': 'request'
23+
const version = argv['release'];
24+
const targetDir = path.resolve(argv['_'][0] || './');
25+
const spinner = ora(`Downloading ${packageName} ${version ? 'version '+version : 'latest version'} to ${targetDir}`).start();
26+
const tempDir = os.tmpdir()+`/${packageName}-staging`;
27+
await fs.ensureDir(tempDir);
28+
try{
29+
const { from: nameWithVersion } = await extract(tempDir, version);//{from, resolved, integrity}
30+
spinner.text = `${nameWithVersion} copied to ${targetDir}. Have fun!`;
31+
}catch(err){
32+
if(err.code === 'ETARGET' && err.type === 'tag'){
33+
console.log(chalk.red(`version '${err.wanted}' not found in npm registry\navaialable versions:`));
34+
console.log(err.versions.reverse().join(' | '));
35+
}else{
36+
console.log(err);
2137
}
22-
});
23-
if(error){
24-
Promise.reject("smth wrong TODO: error message");
25-
}
26-
const data = JSON.parse(body);
27-
const version = data.name;
28-
const zipURL = data.assets[0].browser_download_url;
29-
if(!zipURL){
30-
Promise.reject('Unexpected error: zipURL not defined')
38+
process.exit(0);
3139
}
32-
const extractPath = path.normalize(args[0] || '');
33-
spinner.text = `Copying html5-boilerplate ${version} to ${extractPath}`;
34-
await unzipper.Open.url(request_original, zipURL).then(d=>d.extract({path: path.resolve(extractPath)}));
35-
spinner.text = `html5-boilerplate copied ${version} to ${extractPath}. Have fun!`;
40+
await fs.copy(tempDir+'/dist', targetDir);
41+
await fs.remove(tempDir);
3642
spinner.succeed();
43+
return;
3744
})();

0 commit comments

Comments
 (0)