From 073a5220d954205887056d54cef1f21613ac2741 Mon Sep 17 00:00:00 2001 From: claudiahdz Date: Fri, 20 Mar 2020 17:44:11 -0500 Subject: [PATCH] chore: windows fixes --- index.js | 7 ++-- package-lock.json | 31 ++++++---------- package.json | 1 + test/index.js | 94 ++++++++++++++++++++++++++--------------------- utils/mv.js | 35 ------------------ 5 files changed, 68 insertions(+), 100 deletions(-) delete mode 100644 utils/mv.js diff --git a/index.js b/index.js index 6811d63..378f0c0 100644 --- a/index.js +++ b/index.js @@ -6,13 +6,12 @@ const path = require('path') const util = require('util') const pacote = require('pacote') const npa = require('npm-package-arg') - +const mv = require('move-concurrently') const runScript = require('@npmcli/run-script') -const mkdtemp = util.promisify(fs.mkdtemp) const rimraf = util.promisify(require('rimraf')) +const mkdtemp = util.promisify(fs.mkdtemp) -const mv = require('./utils/mv') const { getContents, logTar } = require('./utils/tar') async function pack (spec = 'file:.', opts = {}) { @@ -49,7 +48,7 @@ async function pack (spec = 'file:.', opts = {}) { // moves tarball to dest await mv(tmpTarget, dest) - rimraf(tmpDir) + await rimraf(tmpDir) if (spec.type === 'directory') { // postpack diff --git a/package-lock.json b/package-lock.json index 6d93238..1017f13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -729,18 +729,11 @@ }, "dependencies": { "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } } }, "rimraf": { @@ -2464,6 +2457,11 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, "minipass": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", @@ -2553,18 +2551,11 @@ }, "dependencies": { "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } } }, "rimraf": { diff --git a/package.json b/package.json index 6bdbcd7..54f6351 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "@npmcli/run-script": "^1.3.0", "byte-size": "^6.2.0", "columnify": "^1.5.4", + "move-concurrently": "^1.0.1", "npm-package-arg": "^8.0.0", "pacote": "^11.1.2", "rimraf": "^3.0.2", diff --git a/test/index.js b/test/index.js index b7f443d..eed10c2 100644 --- a/test/index.js +++ b/test/index.js @@ -2,13 +2,16 @@ const t = require('tap') const fs = require('fs') +const util = require('util') const ssri = require('ssri') -const pacote = require('pacote') + const pack = require('../index.js') const tnock = require('./fixtures/tnock.js') +const rimraf = util.promisify(require('rimraf')) + const OPTS = { - registry: 'https://mock.reg/' + registry: 'http://mock.reg/' } const REG = OPTS.registry @@ -23,7 +26,9 @@ t.test('packs from local directory', async t => { }) const target = `${testDir}/my-cool-pkg-1.0.0.tgz` + const cwd = process.cwd() process.chdir(testDir) + const tarContents = await pack() const integrity = await ssri.fromStream(fs.createReadStream(target), { algorithms: ['sha512'] @@ -49,12 +54,18 @@ t.test('packs from local directory', async t => { t.deepEqual(tarContents, contents, 'packed directory matches expectations' ) + + t.teardown(async () => { + process.chdir(cwd) + await rimraf(target) + await rimraf(testDir) + }) }) t.test('packs from local directory on target', async t => { const testDir = t.testdir({ 'package.json': JSON.stringify({ - name: 'my-cool-pkg', + name: 'my-local-pkg', version: '1.0.0', bundledDependencies: ['a'] }, null, 2), @@ -69,7 +80,7 @@ t.test('packs from local directory on target', async t => { } }) - const target = `${testDir}/my-cool-pkg-1.0.0.tgz` + const target = `${testDir}/my-local-pkg-1.0.0.tgz` const tarContents = await pack(testDir, { target }) const integrity = await ssri.fromStream(fs.createReadStream(target), { @@ -77,18 +88,18 @@ t.test('packs from local directory on target', async t => { }) const contents = { - id: 'my-cool-pkg@1.0.0', - name: 'my-cool-pkg', + id: 'my-local-pkg@1.0.0', + name: 'my-local-pkg', version: '1.0.0', - size: 260, - unpackedSize: 133, - shasum: '535bdcc05fd4a1b7f2603c5527a7c63ba5b88cff', + size: 261, + unpackedSize: 134, + shasum: 'dbbd93ed67b3c2941dc8096c5ec66b10f5606690', integrity: ssri.parse(integrity.sha512[0]), - filename: 'my-cool-pkg-1.0.0.tgz', + filename: 'my-local-pkg-1.0.0.tgz', files: [ { path: 'index.js', size: 5, mode: 420 }, { path: 'node_modules/a/package.json', size: 39, mode: 420 }, - { path: 'package.json', size: 89, mode: 420 } + { path: 'package.json', size: 90, mode: 420 } ], entryCount: 3, bundled: ['a'] @@ -97,24 +108,22 @@ t.test('packs from local directory on target', async t => { t.deepEqual(tarContents, contents, 'packed directory matches expectations' ) + + t.teardown(async () => { + await rimraf(target) + await rimraf(testDir) + }) }) t.test('packs from registry spec', async t => { - const testDir = t.testdir({ - 'package.json': JSON.stringify({ - name: 'my-cool-pkg', - version: '1.0.0' - }, null, 2), - 'index.js': 'hello' - }) - const target = `${testDir}/my-cool-pkg-1.0.0.tgz` - const spec = 'my-cool-pkg' + const spec = 'my-pkg' + const testDir = t.testdir() + const target = `${testDir}/my-pkg-1.0.0.tgz` - const tarData = await pacote.tarball(`file:${testDir}`) - const integrity = ssri.fromData(tarData, { algorithms: ['sha512'] }) + const integrity = ssri.fromData('', { algorithms: ['sha512'] }) const packument = { - _id: 'my-cool-pkg', - name: 'my-cool-pkg', + _id: 'my-pkg', + name: 'my-pkg', description: 'some stuff', 'dist-tags': { latest: '1.0.0' @@ -122,13 +131,13 @@ t.test('packs from registry spec', async t => { versions: { '1.0.0': { _nodeVersion: process.versions.node, - name: 'my-cool-pkg', + name: 'my-pkg', version: '1.0.0', description: 'some stuff', dist: { shasum: 'some-shasum', - integrity: integrity.toString(), - tarball: testDir + integrity: '123', + tarball: 'http://mock.reg/my-pkg/-/my-pkg-1.0.0.tgz' } } }, @@ -137,34 +146,37 @@ t.test('packs from registry spec', async t => { _attachments: { 'my-cool-pkg-1.0.0.tgz': { content_type: 'application/octet-stream', - data: tarData.toString('base64'), - length: tarData.length + data: '', + length: '0' } } } const srv = tnock(t, REG) - srv.get('/my-cool-pkg').reply(200, packument) + srv.get('/my-pkg').reply(200, packument) + srv.get('/my-pkg/-/my-pkg-1.0.0.tgz').reply(200, '') const tarContents = await pack(spec, { ...OPTS, target }) const contents = { - id: 'my-cool-pkg@1.0.0', - name: 'my-cool-pkg', + id: 'my-pkg@1.0.0', + name: 'my-pkg', version: '1.0.0', - size: 187, - unpackedSize: 54, - shasum: 'e4db5fa79b694e5f94cb7a48250eb5a728f9669f', + size: 0, + unpackedSize: 0, + shasum: 'da39a3ee5e6b4b0d3255bfef95601890afd80709', integrity, - filename: 'my-cool-pkg-1.0.0.tgz', - files: [ - { path: 'index.js', size: 5, mode: 420 }, - { path: 'package.json', size: 49, mode: 420 } - ], - entryCount: 2, + filename: 'my-pkg-1.0.0.tgz', + files: [], + entryCount: 0, bundled: [] } t.deepEqual(tarContents, contents, 'packed directory matches expectations' ) + + t.teardown(async () => { + await rimraf(target) + await rimraf(testDir) + }) }) diff --git a/utils/mv.js b/utils/mv.js deleted file mode 100644 index 425641d..0000000 --- a/utils/mv.js +++ /dev/null @@ -1,35 +0,0 @@ -const fs = require('fs') -const util = require('util') -const rename = util.promisify(fs.rename) -const unlink = util.promisify(fs.unlink) - -module.exports = move -async function move (oldPath, newPath) { - try { - return await rename(oldPath, newPath) - } catch (e) { - /* istanbul ignore next */ - if (e.code === 'EXDEV') { - return copy(oldPath, newPath) - } else { - throw e - } - } -} - -/* istanbul ignore next */ -function copy (oldPath, newPath) { - return new Promise((resolve, reject) => { - const readStream = fs.createReadStream(oldPath) - const writeStream = fs.createWriteStream(newPath) - - readStream.on('error', (e) => { reject(e) }) - writeStream.on('error', (e) => { reject(e) }) - - readStream.on('close', function () { - resolve(unlink(oldPath)) - }) - - readStream.pipe(writeStream) - }) -}