Skip to content
This repository was archived by the owner on Jan 19, 2022. It is now read-only.

Commit 80fe34b

Browse files
committed
fix(api): use opts.algorithms, return true on success
1 parent b5a3446 commit 80fe34b

File tree

4 files changed

+76
-68
lines changed

4 files changed

+76
-68
lines changed

publish.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const validate = require('aproba')
1414

1515
const PublishConfig = figgyPudding({
1616
access: {},
17-
integrityHashes: { default: ['sha512'] },
17+
algorithms: { default: ['sha512'] },
1818
dryRun: 'dry-run',
1919
'dry-run': {},
2020
force: {},
@@ -35,6 +35,8 @@ function publish (manifest, tarball, opts) {
3535
), { code: 'EPRIVATE' })
3636
}
3737
const spec = npa.resolve(manifest.name, manifest.version)
38+
// NOTE: spec is used to pick the appropriate registry/auth combo.
39+
opts = opts.concat({ spec })
3840
const reg = npmFetch.pickRegistry(spec, opts)
3941
const auth = npmAuth(reg, opts)
4042
const pubManifest = patchedManifest(spec, auth, manifest, opts)
@@ -52,24 +54,26 @@ function publish (manifest, tarball, opts) {
5254
const metadata = buildMetadata(
5355
spec, auth, reg, pubManifest, tardata, opts
5456
)
55-
return npmFetch.json(spec.escapedName, opts.concat({
57+
return npmFetch(spec.escapedName, opts.concat({
5658
method: 'PUT',
57-
body: metadata
59+
body: metadata,
60+
ignoreBody: true
5861
})).catch(err => {
5962
if (err.code !== 'E409') { throw err }
6063
return npmFetch.json(spec.escapedName, opts.concat({
6164
query: { write: true }
6265
})).then(
6366
current => patchMetadata(current, metadata, opts)
6467
).then(newMetadata => {
65-
return npmFetch.json(spec.escapedName, opts.concat({
68+
return npmFetch(spec.escapedName, opts.concat({
6669
method: 'PUT',
67-
body: newMetadata
70+
body: newMetadata,
71+
ignoreBody: true
6872
}))
6973
})
7074
})
7175
})
72-
})
76+
}).then(() => true)
7377
}
7478

7579
function patchedManifest (spec, auth, base, opts) {
@@ -128,7 +132,7 @@ function buildMetadata (spec, auth, registry, manifest, tardata, opts) {
128132
const tbName = manifest.name + '-' + manifest.version + '.tgz'
129133
const tbURI = manifest.name + '/-/' + tbName
130134
const integrity = ssri.fromData(tardata, {
131-
algorithms: [...new Set(['sha1'].concat(opts.integrityHashes))]
135+
algorithms: [...new Set(['sha1'].concat(opts.algorithms))]
132136
})
133137

134138
manifest._id = manifest.name + '@' + manifest.version

test/publish.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ test('basic publish', t => {
6969

7070
return publish(manifest, tarData, OPTS.concat({
7171
token: 'deadbeef'
72-
})).then(() => {
73-
t.ok(true, 'publish succeeded')
72+
})).then(ret => {
73+
t.ok(ret, 'publish succeeded')
7474
})
7575
})
7676
})

test/unpublish.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ test('basic test', t => {
3232
const srv = tnock(t, REG)
3333
srv.get('/foo?write=true').reply(200, doc)
3434
srv.delete(`/foo/-rev/${REV}`).reply(201)
35-
return unpub('foo', OPTS).then(() => {
36-
t.ok(true, 'foo was unpublished')
35+
return unpub('foo', OPTS).then(ret => {
36+
t.ok(ret, 'foo was unpublished')
3737
})
3838
})
3939

unpublish.js

Lines changed: 61 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -14,69 +14,73 @@ const UnpublishConfig = figgyPudding({
1414
module.exports = unpublish
1515
function unpublish (spec, opts) {
1616
opts = UnpublishConfig(opts)
17-
spec = npa(spec)
18-
const pkgUri = spec.escapedName
19-
return npmFetch.json(pkgUri, opts.concat({
20-
query: { write: true }
21-
})).then(pkg => {
22-
if (!spec.rawSpec || spec.rawSpec === '*') {
23-
return npmFetch(`${pkgUri}/-rev/${pkg._rev}`, opts.concat({
24-
method: 'DELETE',
25-
ignoreBody: true
26-
}))
27-
} else {
28-
const version = spec.rawSpec
29-
const allVersions = pkg.versions || {}
30-
const versionPublic = allVersions[version]
31-
let dist
32-
if (versionPublic) {
33-
dist = allVersions[version].dist
34-
}
35-
delete allVersions[version]
36-
// if it was the only version, then delete the whole package.
37-
if (!Object.keys(allVersions).length) {
17+
return new opts.Promise(resolve => resolve()).then(() => {
18+
spec = npa(spec)
19+
// NOTE: spec is used to pick the appropriate registry/auth combo.
20+
opts = opts.concat({ spec })
21+
const pkgUri = spec.escapedName
22+
return npmFetch.json(pkgUri, opts.concat({
23+
query: { write: true }
24+
})).then(pkg => {
25+
if (!spec.rawSpec || spec.rawSpec === '*') {
3826
return npmFetch(`${pkgUri}/-rev/${pkg._rev}`, opts.concat({
3927
method: 'DELETE',
4028
ignoreBody: true
4129
}))
42-
} else if (versionPublic) {
43-
const latestVer = pkg['dist-tags'].latest
44-
Object.keys(pkg['dist-tags']).forEach(tag => {
45-
if (pkg['dist-tags'][tag] === version) {
46-
delete pkg['dist-tags'][tag]
47-
}
48-
})
49-
50-
if (latestVer === version) {
51-
pkg['dist-tags'].latest = Object.keys(
52-
allVersions
53-
).sort(semver.compareLoose).pop()
30+
} else {
31+
const version = spec.rawSpec
32+
const allVersions = pkg.versions || {}
33+
const versionPublic = allVersions[version]
34+
let dist
35+
if (versionPublic) {
36+
dist = allVersions[version].dist
5437
}
38+
delete allVersions[version]
39+
// if it was the only version, then delete the whole package.
40+
if (!Object.keys(allVersions).length) {
41+
return npmFetch(`${pkgUri}/-rev/${pkg._rev}`, opts.concat({
42+
method: 'DELETE',
43+
ignoreBody: true
44+
}))
45+
} else if (versionPublic) {
46+
const latestVer = pkg['dist-tags'].latest
47+
Object.keys(pkg['dist-tags']).forEach(tag => {
48+
if (pkg['dist-tags'][tag] === version) {
49+
delete pkg['dist-tags'][tag]
50+
}
51+
})
5552

56-
delete pkg._revisions
57-
delete pkg._attachments
58-
// Update packument with removed versions
59-
return npmFetch(`${pkgUri}/-rev/${pkg._rev}`, opts.concat({
60-
method: 'PUT',
61-
body: pkg,
62-
ignoreBody: true
63-
})).then(() => {
64-
// Remove the tarball itself
65-
return npmFetch.json(pkgUri, opts.concat({
66-
query: { write: true }
67-
})).then(({ _rev, _id }) => {
68-
const tarballUrl = url.parse(dist.tarball).pathname.substr(1)
69-
return npmFetch(`${tarballUrl}/-rev/${_rev}`, opts.concat({
70-
method: 'DELETE',
71-
ignoreBody: true
72-
}))
53+
if (latestVer === version) {
54+
pkg['dist-tags'].latest = Object.keys(
55+
allVersions
56+
).sort(semver.compareLoose).pop()
57+
}
58+
59+
delete pkg._revisions
60+
delete pkg._attachments
61+
// Update packument with removed versions
62+
return npmFetch(`${pkgUri}/-rev/${pkg._rev}`, opts.concat({
63+
method: 'PUT',
64+
body: pkg,
65+
ignoreBody: true
66+
})).then(() => {
67+
// Remove the tarball itself
68+
return npmFetch.json(pkgUri, opts.concat({
69+
query: { write: true }
70+
})).then(({ _rev, _id }) => {
71+
const tarballUrl = url.parse(dist.tarball).pathname.substr(1)
72+
return npmFetch(`${tarballUrl}/-rev/${_rev}`, opts.concat({
73+
method: 'DELETE',
74+
ignoreBody: true
75+
}))
76+
})
7377
})
74-
})
78+
}
79+
}
80+
}, err => {
81+
if (err.code !== 'E404') {
82+
throw err
7583
}
76-
}
77-
}, err => {
78-
if (err.code !== 'E404') {
79-
throw err
80-
}
81-
})
84+
})
85+
}).then(() => true)
8286
}

0 commit comments

Comments
 (0)