diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7fbea26..017be26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,12 +16,12 @@ jobs: build: runs-on: "ubuntu-latest" steps: - - uses: "actions/checkout@v2" + - uses: "actions/checkout@v3" - - uses: "actions/setup-node@v2" + - uses: "actions/setup-node@v3" with: node-version: "14.x" - - run: npm install + - run: npm install --ignore-scripts --no-fund - - run: node test/index.js + - run: npm test -- --no-check-coverage --timeout=60 diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/cancelable-pump/index.js b/cancelable-pump/index.js index 4a329bf..7a8b86e 100644 --- a/cancelable-pump/index.js +++ b/cancelable-pump/index.js @@ -1,6 +1,6 @@ 'use strict'; -const pump = require('pump'); +const {pipeline: pump} = require('stream'); const cancel = new Error('Canceled.'); diff --git a/dl-tar/index.js b/dl-tar/index.js index aa2ebe8..e9a610e 100644 --- a/dl-tar/index.js +++ b/dl-tar/index.js @@ -1,18 +1,16 @@ 'use strict'; -const {inspect, promisify} = require('util'); +const {inspect} = require('util'); const {resolve} = require('path'); const {Transform} = require('stream'); +const {promises: fs} = require('fs'); const cancelablePump = require('../cancelable-pump/index.js'); const {Unpack} = require('tar'); const isPlainObj = require('is-plain-obj'); -const request = require('request'); -const mkdirp = require('mkdirp'); +const fetch = require('make-fetch-happen'); const Observable = require('zen-observable'); -const promisifiedMkdirp = promisify(mkdirp); - class InternalUnpack extends Unpack { constructor(options) { super({ @@ -173,7 +171,7 @@ module.exports = function dlTar(...args) { (async () => { try { if (absoluteDest !== cwd) { - await promisifiedMkdirp(absoluteDest); + await fs.mkdir(absoluteDest, {recursive: true}); } if (ended) { @@ -186,21 +184,24 @@ module.exports = function dlTar(...args) { observer }); - const pipe = [ - request({url, ...options, encoding: null}) - .on('response', function(response) { - if (response.statusCode < 200 || 299 < response.statusCode) { - this.emit('error', new Error(`${response.statusCode} ${response.statusMessage}`)); - return; - } + const {baseUrl, headers} = options; + const {href} = new URL(url, baseUrl); - if (typeof response.headers['content-length'] === 'string') { - response.headers['content-length'] = Number(response.headers['content-length']); - } + const res = await fetch(href, {headers}).then(response => { - unpackStream.url = response.request.uri.href; - unpackStream.responseHeaders = response.headers; - }), + if (response.ok !== true) { + throw new Error(`${response.status} ${response.statusText}`); + } + + unpackStream.url = response.url; + unpackStream.responseHeaders = response.headers; + + return response; + + }); + + const pipe = [ + res.body, new Transform({ transform(chunk, encoding, cb) { unpackStream.responseBytes += chunk.length; diff --git a/install-purescript/index.js b/install-purescript/index.js index 1f16a02..ab4f3e9 100644 --- a/install-purescript/index.js +++ b/install-purescript/index.js @@ -4,14 +4,13 @@ const fs = require('fs'); const {execFile} = require('child_process'); const path = require('path'); const {inspect, promisify} = require('util'); -const {Writable} = require('stream'); +const {pipeline: pump} = require('stream'); const arch = require('arch'); const {create, Unpack} = require('tar'); const cacache = require('cacache'); const isPlainObj = require('is-plain-obj'); const Observable = require('zen-observable'); -const pump = require('pump'); const envPaths = require('env-paths'); const downloadOrBuildPurescript = require('../download-or-build-purescript/index.js'); diff --git a/package.json b/package.json index ee07534..a83b2c9 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "install-purescript": "index.js" }, "engines": { - "node": ">=8.3.0" + "node": ">=12" }, "dependencies": { "arch": "^2.1.1", @@ -18,21 +18,19 @@ "filesize": "^4.1.2", "is-plain-obj": "^2.0.0", "log-symbols": "^3.0.0", - "log-update": "^3.2.0", + "log-update": "^4.0.0", + "make-fetch-happen": "^10.0.0", "minimist": "^1.2.0", - "mkdirp": "^0.5.1", "ms": "^2.1.2", "once": "^1.4.0", - "pump": "^3.0.0", - "request": "^2.88.0", "rimraf": "^2.6.3", "semver": "^7.3.7", - "tar": "^4.4.6", + "tar": "^6.1.11", "which": "^1.3.1", "zen-observable": "^0.8.14" }, "devDependencies": { - "tap": "^14.2.3" + "tap": "^16.2.0" }, "scripts": { "test": "tap"