Skip to content

Commit 0d290d1

Browse files
committed
feat: add semrel context paths remapping
1 parent 24f0e15 commit 0d290d1

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

README.md

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ Follow [its docs](https://github.com/semantic-release/npm/blob/master/README.md)
3333
}]
3434
]
3535
}
36-
3736
```
3837

3938
### License

src/main/js/index.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
const plugin = require('@semantic-release/npm')
2+
const { castArray } = require('lodash')
23

34
let verified
45
let result
56

6-
async function verifyConditionsHooked(...args) {
7+
async function verifyConditionsHooked(pluginConfig, context) {
78
if (verified) {
89
return result
910
}
1011

11-
return plugin.verifyConditions(...args).then(r => {
12+
// Options remapping
13+
if (context.options.publish) {
14+
const pluginConfig = castArray(context.options.publish).find((config) => config.path === '@semrel-extra/npm') || {}
15+
pluginConfig.path = '@semantic-release/npm'
16+
}
17+
18+
return plugin.verifyConditions(pluginConfig, context).then(r => {
1219
result = r
1320
verified = true
1421
})

src/test/js/index.js

+20-7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const assert = require('uvu/assert')
44
const plugin = require('../../main/js')
55
const realNpmPlugin = require('@semantic-release/npm')
66

7+
78
test('prepare, publish, addChannel are re-exported as is', () => {
89
assert.is(realNpmPlugin.addChannel, plugin.addChannel)
910
assert.is(realNpmPlugin.publish, plugin.publish)
@@ -12,24 +13,36 @@ test('prepare, publish, addChannel are re-exported as is', () => {
1213

1314
test('verifyConditions passes args down to `semrel/npm`', async () => {
1415
const mock = sinon.mock(realNpmPlugin)
15-
mock.expects('verifyConditions').once().withArgs('test').returns(Promise.resolve())
16+
const context = {options: {}}
17+
mock.expects('verifyConditions').once().withArgs('test', context).returns(Promise.resolve())
18+
19+
await plugin.verifyConditions('test', context)
20+
21+
mock.verify()
22+
plugin.verifyConditions._reset()
23+
})
24+
25+
test('verifyConditions replaces context paths `', async () => {
26+
const mock = sinon.mock(realNpmPlugin)
27+
const context = {options: {publish: {path: '@semrel-extra/npm'}}}
28+
const _context = {options: {publish: {path: '@semantic-release/npm'}}}
29+
mock.expects('verifyConditions').once().withArgs('test', _context).returns(Promise.resolve())
1630

17-
await plugin.verifyConditions('test')
31+
await plugin.verifyConditions('test', context)
1832

1933
mock.verify()
20-
mock.restore()
2134
plugin.verifyConditions._reset()
2235
})
2336

2437
test('prevents multiple `verifyConditions` invocations', async () => {
2538
const mock = sinon.mock(realNpmPlugin)
26-
mock.expects('verifyConditions').once().withArgs('test').returns(Promise.resolve())
39+
const context = {options: {publish: {}}}
40+
mock.expects('verifyConditions').once().withArgs('test', context).returns(Promise.resolve())
2741

28-
await plugin.verifyConditions('test')
29-
await plugin.verifyConditions('test')
42+
await plugin.verifyConditions('test', context)
43+
await plugin.verifyConditions('test', context)
3044

3145
mock.verify()
32-
mock.restore()
3346
plugin.verifyConditions._reset()
3447
})
3548

0 commit comments

Comments
 (0)