Fixed #1 - Fixed the whatsnew-** script for loading release notes into builds

Added test to ensure that release notes are parsed properly
Updated to latest dependencies to fix security vulnerability
Updated GH Actions Workflow to run test before updating tag
Updated README.md to reflect proper whatsnew documentation.
This commit is contained in:
Drew Heavner
2020-01-30 11:14:51 -05:00
parent b6496ac4e3
commit bdde081050
2660 changed files with 251487 additions and 213182 deletions

View File

@@ -0,0 +1,37 @@
const normalize = require('../')
const t = require('tap')
t.test('benign array', async t => {
const pkg = { name: 'hello', version: 'world', bin: ['./x/y', 'y/z', './a'] }
const expect = { name: 'hello', version: 'world', bin: {
y: 'x/y',
z: 'y/z',
a: 'a',
} }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('conflicting array', async t => {
const pkg = { name: 'hello', version: 'world', bin: ['./x/y', 'z/y', './a'] }
const expect = { name: 'hello', version: 'world', bin: {
y: 'z/y',
a: 'a',
} }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('slashy array', async t => {
const pkg = { name: 'hello', version: 'world', bin: [ '/etc/passwd' ] }
const expect = { name: 'hello', version: 'world', bin: { passwd: 'etc/passwd' } }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('dotty array', async t => {
const pkg = { name: 'hello', version: 'world', bin: ['../../../../etc/passwd'] }
const expect = { name: 'hello', version: 'world', bin: { passwd: 'etc/passwd' } }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})

View File

@@ -0,0 +1,35 @@
const normalize = require('../')
const t = require('tap')
// all of these just delete the bins, so expect the same value
const expect = { name: 'hello', version: 'world' }
t.test('no bin in object', async t => {
const pkg = { name: 'hello', version: 'world' }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('empty string bin in object', async t => {
const pkg = { name: 'hello', version: 'world', bin: '' }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('false bin in object', async t => {
const pkg = { name: 'hello', version: 'world', bin: false }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('null bin in object', async t => {
const pkg = { name: 'hello', version: 'world', bin: null }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('number bin', async t => {
const pkg = { name: 'hello', version: 'world', bin: 42069 }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})

View File

@@ -0,0 +1,141 @@
const normalize = require('../')
const t = require('tap')
t.test('benign object', async t => {
// just clean up the ./ in the targets and remove anything weird
const pkg = { name: 'hello', version: 'world', bin: {
y: './x/y',
z: './y/z',
a: './a',
} }
const expect = { name: 'hello', version: 'world', bin: {
y: 'x/y',
z: 'y/z',
a: 'a',
} }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('empty and non-string targets', async t => {
// just clean up the ./ in the targets and remove anything weird
const pkg = { name: 'hello', version: 'world', bin: {
z: './././',
y: '',
'./x': 'x.js',
re: /asdf/,
foo: { bar: 'baz' },
false: false,
null: null,
array: [1,2,3],
func: function () {},
} }
const expect = { name: 'hello', version: 'world', bin: {
x: 'x.js',
} }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('slashy object', async t => {
const pkg = { name: 'hello', version: 'world', bin: {
'/path/foo': '/etc/passwd',
'bar': '/etc/passwd',
'/etc/glorb/baz': '/etc/passwd',
'/etc/passwd:/bin/usr/exec': '/etc/passwd',
} }
const expect = {
name: 'hello',
version: 'world',
bin: {
foo: 'etc/passwd',
bar: 'etc/passwd',
baz: 'etc/passwd',
exec: 'etc/passwd',
}
}
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('dotty object', async t => {
const pkg = {
name: 'hello',
version: 'world',
bin: {
'nodots': '../../../../etc/passwd',
'../../../../../../dots': '../../../../etc/passwd',
'.././../\\./..//C:\\./': 'this is removed',
'.././../\\./..//C:\\/': 'super safe programming language',
'.././../\\./..//C:\\x\\y\\z/': 'xyz',
} }
const expect = { name: 'hello', version: 'world', bin: {
nodots: 'etc/passwd',
dots: 'etc/passwd',
C: 'super safe programming language',
z: 'xyz',
} }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('weird object', async t => {
const pkg = { name: 'hello', version: 'world', bin: /asdf/ }
const expect = { name: 'hello', version: 'world' }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('oddball keys', async t => {
const pkg = {
bin: {
'~': 'target',
'£': 'target',
'ζ': 'target',
'ぎ': 'target',
'操': 'target',
'🎱': 'target',
'💎': 'target',
'💸': 'target',
'🦉': 'target',
'сheck-dom': 'target',
'Ωpm': 'target',
'ζλ': 'target',
'мга': 'target',
'пше': 'target',
'тзч': 'target',
'тзь': 'target',
'нфкт': 'target',
'ссср': 'target',
'君の名は': 'target',
'君の名は': 'target',
}
}
const expect = {
bin: {
'~': 'target',
'£': 'target',
'ζ': 'target',
'ぎ': 'target',
'操': 'target',
'🎱': 'target',
'💎': 'target',
'💸': 'target',
'🦉': 'target',
'сheck-dom': 'target',
'Ωpm': 'target',
'ζλ': 'target',
'мга': 'target',
'пше': 'target',
'тзч': 'target',
'тзь': 'target',
'нфкт': 'target',
'ссср': 'target',
'君の名は': 'target',
},
}
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})

View File

@@ -0,0 +1,37 @@
const normalize = require('../')
const t = require('tap')
t.test('benign string', async t => {
const pkg = { name: 'hello', version: 'world', bin: 'hello.js' }
const expect = { name: 'hello', version: 'world', bin: { hello: 'hello.js' } }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('slashy string', async t => {
const pkg = { name: 'hello', version: 'world', bin: '/etc/passwd' }
const expect = { name: 'hello', version: 'world', bin: { hello: 'etc/passwd' } }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('dotty string', async t => {
const pkg = { name: 'hello', version: 'world', bin: '../../../../etc/passwd' }
const expect = { name: 'hello', version: 'world', bin: { hello: 'etc/passwd' } }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('double path', async t => {
const pkg = { name: 'hello', version: 'world', bin: '/etc/passwd:/bin/usr/exec' }
const expect = { name: 'hello', version: 'world', bin: { hello: 'etc/passwd:/bin/usr/exec' } }
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})
t.test('string with no name', async t => {
const pkg = { bin: 'foobar.js' }
const expect = {}
t.strictSame(normalize(pkg), expect)
t.strictSame(normalize(normalize(pkg)), expect, 'double sanitize ok')
})