@@ -14,69 +14,73 @@ const UnpublishConfig = figgyPudding({
14
14
module . exports = unpublish
15
15
function unpublish ( spec , opts ) {
16
16
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 === '*' ) {
38
26
return npmFetch ( `${ pkgUri } /-rev/${ pkg . _rev } ` , opts . concat ( {
39
27
method : 'DELETE' ,
40
28
ignoreBody : true
41
29
} ) )
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
54
37
}
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
+ } )
55
52
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
+ } )
73
77
} )
74
- } )
78
+ }
79
+ }
80
+ } , err => {
81
+ if ( err . code !== 'E404' ) {
82
+ throw err
75
83
}
76
- }
77
- } , err => {
78
- if ( err . code !== 'E404' ) {
79
- throw err
80
- }
81
- } )
84
+ } )
85
+ } ) . then ( ( ) => true )
82
86
}
0 commit comments