diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index 6eb775f2..4874f0fd 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -21,7 +21,7 @@ jobs:
needs: [ verify ]
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2.3.4
+ - uses: actions/checkout@v2.4.0
with:
token: ${{ secrets.ACTION_TOKEN }}
ref: ${{ github.event.pull_request.head.sha }}
@@ -37,7 +37,7 @@ jobs:
enforce-changelog:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2.3.4
+ - uses: actions/checkout@v2.4.0
with:
token: ${{ secrets.ACTION_TOKEN }}
ref: ${{ github.event.pull_request.head.ref }}
@@ -62,7 +62,6 @@ jobs:
with:
skipLabels: "skip-changelog"
expectedLatestVersion: ${{ steps.read-version.outputs.tag }}
- token: ${{ secrets.GITHUB_TOKEN }}
- if: failure()
uses: unsplash/comment-on-pr@master
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 2f9a8dd0..ad031694 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -9,7 +9,7 @@ jobs:
release:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2.3.4
+ - uses: actions/checkout@v2.4.0
- name: read versions
id: read-version
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9b45afc2..6ee5753c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,18 @@
# CHANGELOG
Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+## [v3.0.0]
+:rocket: The 3.0.0 release of the Changelog Enforcer is here! This release relies soley on the GitHub API instead of local git commands from a cloned repository. This means, for example, that `actions/checkout` does **not** need to be run before running the enforcer.
+### Fixes
+- Fixes issue #142
+### Dependencies
+- Bumps `@vercel/ncc` from 0.28.6 to 0.31.1
+- Bumps `@actions/core` from 1.4.0 to 1.6.0
+- Bumps `jest` from 27.0.5 to 27.3.1
+- Bumps `actions/checkout` from 2.3.4 to 2.4.0
+- Bumps `uglify-js` from 3.13.9 to 3.14.3
+- Bumps `eslint` from 7.28.0 to 8.2.0
+
## [v2.3.1]
### Changed
- Only runs on `pull_request` and `pull_request_target` events. This is to address issue #140
diff --git a/README.md b/README.md
index f4ec55ad..a04a781a 100644
--- a/README.md
+++ b/README.md
@@ -25,9 +25,7 @@ jobs:
changelog:
runs-on: ubuntu-latest
steps:
- # The checkout step is needed since the enforcer relies on local git commands
- - uses: actions/checkout@v2
- - uses: dangoslen/changelog-enforcer@v2
+ - uses: dangoslen/changelog-enforcer@v3
```
Other examples can be seen in the [example-workflows](./example-workflows) directory in this repository.
@@ -66,6 +64,10 @@ Below are the properties allowed by the Changelog Enforcer. These properties are
Because the regex is passed as a `String` object, you will need to escape backslash characters (`\`) via `\\`.
+#### `token`
+* Default: `${{ github.token }}`
+* The token used to authenticate to the GitHub API. Uses the default token from the `github.token` context. Can be any access token you have configured for your repository.
+
### Outputs
#### `errorMessage`
diff --git a/__tests__/changelog-enforcer.test.js b/__tests__/changelog-enforcer.test.js
index 6260d001..8f504575 100644
--- a/__tests__/changelog-enforcer.test.js
+++ b/__tests__/changelog-enforcer.test.js
@@ -1,6 +1,8 @@
+jest.mock('node-fetch');
+
const core = require('@actions/core')
-const exec = require('@actions/exec')
-const versionExtractor = require('../src/version-extractor')
+const fetch = require('node-fetch')
+const { Response } = jest.requireActual('node-fetch');
const changelogEnforcer = require('../src/changelog-enforcer')
const SKIP_LABELS = "SomeLabel,Skip-Changelog,Skip-Release"
@@ -13,7 +15,6 @@ let inputs = {}
// Mocks via Jest
let infoSpy
let failureSpy
-let execSpy
let outputSpy
describe('the changelog-enforcer', () => {
@@ -27,305 +28,167 @@ describe('the changelog-enforcer', () => {
inputs['skipLabels'] = SKIP_LABELS
inputs['changeLogPath'] = CHANGELOG
- inputs['expectedLatestVersion'] = ''
+ inputs['expectedLatestVersion'] = ''
inputs['versionPattern'] = VERSION_PATTERN
+ inputs['token'] = 'token'
jest.spyOn(core, 'getInput').mockImplementation((name) => {
return inputs[name]
})
+ octokit = {}
+
infoSpy = jest.spyOn(core, 'info').mockImplementation(jest.fn())
failureSpy = jest.spyOn(core, 'setFailed').mockImplementation(jest.fn())
outputSpy = jest.spyOn(core, 'setOutput').mockImplementation(jest.fn())
- execSpy = jest.spyOn(exec, 'exec').mockImplementation((command, args, options) => { return 0 })
})
+ prepareResponse = (body) => {
+ return Promise.resolve(new Response(body, { Headers: { 'Content-Type': 'application/json' } }))
+ }
+
it('should skip enforcing when label is present', (done) => {
changelogEnforcer.enforce()
- .then(() => {
- expect(infoSpy.mock.calls.length).toBe(5)
- expect(execSpy).not.toHaveBeenCalled()
- expect(failureSpy).not.toHaveBeenCalled()
- expect(outputSpy).not.toHaveBeenCalled()
+ .then(() => {
+ expect(infoSpy).toHaveBeenCalledTimes(5)
+ expect(failureSpy).not.toHaveBeenCalled()
+ expect(outputSpy).not.toHaveBeenCalled()
- done()
- })
+ done()
+ })
})
-
- it('should enforce when label is not present; changelog is changed; branch checked out; latest version does not match', (done) => {
- inputs['skipLabels'] = 'A different label'
- inputs['expectedLatestVersion'] = 'v1.10'
- execSpy = jest.spyOn(exec, 'exec').mockImplementation((command, args, options) => {
- let stdout = ''
- if (args[0] == 'diff') {
- stdout =
-`M CHANGELOG.md
-A an_added_changed_file.js`
- }
- if (args[0] == 'branch') {
- stdout =
-` * (HEAD detached at pull/27/merge) 6a67f6e Merge
- remotes/origin/master somecommithash
- remotes/origin/changes someotherhash`
- }
- options.listeners.stdout(stdout)
- return 0
- })
- const versionSpy = jest.spyOn(versionExtractor, 'getVersions').mockImplementation((pattern, path) => {
- return ['v1.11', 'v1.10']
- })
+ it('should throw an error when token is missing', (done) => {
+ inputs['token'] = ''
changelogEnforcer.enforce()
- .then(() => {
- expect(infoSpy.mock.calls.length).toBe(5)
- expect(execSpy.mock.calls.length).toBe(2)
- expect(versionSpy.mock.calls.length).toBe(1)
- expect(failureSpy).toHaveBeenCalled()
- expect(outputSpy).toHaveBeenCalled()
-
- const command_branch = execSpy.mock.calls[0][0]
- const command_branch_args = execSpy.mock.calls[0][1].join(' ')
- expect(command_branch).toBe('git')
- expect(command_branch_args).toBe('branch --verbose --all')
-
- const command_diff = execSpy.mock.calls[1][0]
- const command_diff_args = execSpy.mock.calls[1][1].join(' ')
- expect(command_diff).toBe('git')
- expect(command_diff_args).toBe('diff origin/master --name-status --diff-filter=AM')
-
- done()
- })
+ .then(() => {
+ expect(infoSpy).not.toHaveBeenCalled()
+ expect(failureSpy).toHaveBeenCalled()
+ expect(outputSpy).toHaveBeenCalled()
+
+ done()
+ })
})
- it('should not enforce when label is not present; changelog is changed; branch checked out; latest version is Unreleased', (done) => {
- inputs['skipLabels'] = 'A different label'
- inputs['expectedLatestVersion'] = 'v1.10'
-
- execSpy = jest.spyOn(exec, 'exec').mockImplementation((command, args, options) => {
- let stdout = ''
- if (args[0] == 'diff') {
- stdout =
-`M .env.js
-M CHANGELOG.md
-A an_added_changed_file.js`
- }
- if (args[0] == 'branch') {
- stdout =
-` * (HEAD detached at pull/27/merge) 6a67f6e Merge
- remotes/origin/master somecommithash
- remotes/origin/changes someotherhash`
+ it('should enforce when label is not present; changelog is changed', (done) => {
+ inputs['skipLabels'] = 'A different label'
+
+ const files = [
+ {
+ "filename": "CHANGELOG.md",
+ "status": "modified",
+ "raw_url": "./path/to/CHANGELOG.md"
}
- options.listeners.stdout(stdout)
- return 0
- })
+ ]
- const versionSpy = jest.spyOn(versionExtractor, 'getVersions').mockImplementation((pattern, path) => {
- return ['Unreleased', 'v1.10']
+ fetch.mockImplementation((url, options) => {
+ return prepareResponse(JSON.stringify(files))
})
changelogEnforcer.enforce()
- .then(() => {
- expect(infoSpy.mock.calls.length).toBe(5)
- expect(execSpy.mock.calls.length).toBe(2)
- expect(versionSpy.mock.calls.length).toBe(1)
- expect(failureSpy).not.toHaveBeenCalled()
- expect(outputSpy).not.toHaveBeenCalled()
-
- const command_branch = execSpy.mock.calls[0][0]
- const command_branch_args = execSpy.mock.calls[0][1].join(' ')
- expect(command_branch).toBe('git')
- expect(command_branch_args).toBe('branch --verbose --all')
-
- const command_diff = execSpy.mock.calls[1][0]
- const command_diff_args = execSpy.mock.calls[1][1].join(' ')
- expect(command_diff).toBe('git')
- expect(command_diff_args).toBe('diff origin/master --name-status --diff-filter=AM')
-
- done()
- })
+ .then(() => {
+ expect(infoSpy).toHaveBeenCalledTimes(5)
+ expect(failureSpy).not.toHaveBeenCalled()
+ expect(outputSpy).not.toHaveBeenCalled()
+
+ expect(fetch).toHaveBeenCalledTimes(1)
+
+ done()
+ })
})
- it('should enforce when label is not present; changelog is not changed; branch checked out', (done) => {
- inputs['skipLabels'] = 'A different label'
+ it('should enforce when label is not present; changelog is not changed', (done) => {
+ inputs['skipLabels'] = 'A different label'
- execSpy = jest.spyOn(exec, 'exec').mockImplementation((command, args, options) => {
- let stdout = ''
- if (args[0] == 'diff') {
- stdout =
-`M .env.js
-A an_added_changed_file.js`
- }
- if (args[0] == 'branch') {
- stdout =
-` * (HEAD detached at pull/27/merge) 6a67f6e Merge
- remotes/origin/master somecommithash
- remotes/origin/changes someotherhash`
+ const files = [
+ {
+ "filename": "AnotherFile.md",
+ "status": "modified",
+ "raw_url": "/path/to/AnotherFile.md"
}
- options.listeners.stdout(stdout)
- return 0
+ ]
+
+
+ fetch.mockImplementation((url, options) => {
+ return prepareResponse(JSON.stringify(files))
})
changelogEnforcer.enforce()
- .then(() => {
- expect(infoSpy.mock.calls.length).toBe(5)
- expect(execSpy.mock.calls.length).toBe(2)
- expect(failureSpy).toHaveBeenCalled()
- expect(outputSpy).toHaveBeenCalled()
-
- const command_branch = execSpy.mock.calls[0][0]
- const command_branch_args = execSpy.mock.calls[0][1].join(' ')
- expect(command_branch).toBe('git')
- expect(command_branch_args).toBe('branch --verbose --all')
-
- const command_diff = execSpy.mock.calls[1][0]
- const command_diff_args = execSpy.mock.calls[1][1].join(' ')
- expect(command_diff).toBe('git')
- expect(command_diff_args).toBe('diff origin/master --name-status --diff-filter=AM')
-
- done()
- })
+ .then(() => {
+ expect(infoSpy).toHaveBeenCalledTimes(5)
+ expect(failureSpy).toHaveBeenCalled()
+ expect(outputSpy).toHaveBeenCalled()
+
+ expect(fetch).toHaveBeenCalledTimes(1)
+
+ done()
+ })
})
- it('should enforce when label is not present; changelog is not changed; branch checked out; custom error message', (done) => {
+ it('should enforce when label is not present; changelog is not changed; custom error message', (done) => {
const customErrorMessage = 'Some Message for you @Author!'
- inputs['skipLabels'] = 'A different label'
+ inputs['skipLabels'] = 'A different label'
inputs['missingUpdateErrorMessage'] = customErrorMessage
- execSpy = jest.spyOn(exec, 'exec').mockImplementation((command, args, options) => {
- let stdout = ''
- if (args[0] == 'diff') {
- stdout =
-`M .env.js
-A an_added_changed_file.js`
+ const files = [
+ {
+ "filename": "AnotherFile.md",
+ "status": "modified",
+ "raw_url": "/path/to/AnotherFile.md"
}
- if (args[0] == 'branch') {
- stdout =
-` * (HEAD detached at pull/27/merge) 6a67f6e Merge
- remotes/origin/master somecommithash
- remotes/origin/changes someotherhash`
- }
- options.listeners.stdout(stdout)
- return 0
+ ]
+
+ fetch.mockImplementation((url, options) => {
+ return prepareResponse(JSON.stringify(files))
})
changelogEnforcer.enforce()
- .then(() => {
- expect(infoSpy.mock.calls.length).toBe(5)
- expect(execSpy.mock.calls.length).toBe(2)
- expect(failureSpy).toHaveBeenCalled()
- expect(outputSpy).toHaveBeenCalledWith('errorMessage', customErrorMessage)
-
- const command_branch = execSpy.mock.calls[0][0]
- const command_branch_args = execSpy.mock.calls[0][1].join(' ')
- expect(command_branch).toBe('git')
- expect(command_branch_args).toBe('branch --verbose --all')
-
- const command_diff = execSpy.mock.calls[1][0]
- const command_diff_args = execSpy.mock.calls[1][1].join(' ')
- expect(command_diff).toBe('git')
- expect(command_diff_args).toBe('diff origin/master --name-status --diff-filter=AM')
-
- done()
- })
- })
-
- it('should enforce when label is not present; changelog is changed; branch not checked out', (done) => {
- inputs['skipLabels'] = 'A different label'
+ .then(() => {
+ expect(infoSpy).toHaveBeenCalledTimes(5)
+ expect(failureSpy).toHaveBeenCalled()
+ expect(outputSpy).toHaveBeenCalledWith('errorMessage', customErrorMessage)
- execSpy = jest.spyOn(exec, 'exec').mockImplementation((command, args, options) => {
- if (args[2] == 'fetch') {
- return 0
- }
-
- let stdout = ''
- if (args[0] == 'diff') {
- stdout =
-`M .env.js
-M CHANGELOG.md`
- }
- if (args[0] == 'branch') {
- stdout =
-` * (HEAD detached at pull/27/merge) 6a67f6e Merge
- pull/27/merge 6a67f6f`
- }
- options.listeners.stdout(stdout)
- return 0
- })
+ expect(fetch).toHaveBeenCalledTimes(1)
- changelogEnforcer.enforce()
- .then(() => {
- expect(infoSpy.mock.calls.length).toBe(5)
- expect(execSpy.mock.calls.length).toBe(3)
- expect(failureSpy).not.toHaveBeenCalled()
- expect(outputSpy).not.toHaveBeenCalled()
-
- const command_branch = execSpy.mock.calls[0][0]
- const command_branch_args = execSpy.mock.calls[0][1].join(' ')
- expect(command_branch).toBe('git')
- expect(command_branch_args).toBe('branch --verbose --all')
-
- const command_fetch = execSpy.mock.calls[1][0]
- const command_fetch_args = execSpy.mock.calls[1][1].join(' ')
- expect(command_fetch).toBe('git')
- expect(command_fetch_args).toBe('-c protocol.version=2 fetch --depth=1 origin master')
-
- const command_diff = execSpy.mock.calls[2][0]
- const command_diff_args = execSpy.mock.calls[2][1].join(' ')
- expect(command_diff).toBe('git')
- expect(command_diff_args).toBe('diff origin/master --name-status --diff-filter=AM')
-
- done()
- })
+ done()
+ })
})
- it('should enforce when label is not present; changelog is changed; branch not checked out; custom path', (done) => {
- inputs['skipLabels'] = 'A different label'
- inputs['changeLogPath'] = './path/to/CHANGELOG.md'
+ it('should enforce when label is not present; changelog is changed; versions do not match', (done) => {
+ const rawUrl = 'some-url'
+ inputs['skipLabels'] = 'A different label'
+ inputs['expectedLatestVersion'] = 'v2.0.0'
- execSpy = jest.spyOn(exec, 'exec').mockImplementation((command, args, options) => {
- if (args[2] == 'fetch') {
- return 0
+ const files = [
+ {
+ "filename": "CHANGELOG.md",
+ "status": "modified",
+ "raw_url": rawUrl
}
-
- let stdout = ''
- if (args[0] == 'diff') {
- stdout =
-`M .env.js
-M path/to/CHANGELOG.md`
- }
- if (args[0] == 'branch') {
- stdout =
-` * (HEAD detached at pull/27/merge) 6a67f6e Merge
- pull/27/merge 6a67f6f`
+ ]
+
+ const changelog =
+ `## [v2.1.0]
+ - Changelog
+`
+
+ fetch.mockImplementation((url, options) => {
+ if (url === rawUrl) {
+ return Promise.resolve(new Response(changelog))
}
- options.listeners.stdout(stdout)
- return 0
+ return prepareResponse(JSON.stringify(files))
})
changelogEnforcer.enforce()
- .then(() => {
- expect(infoSpy.mock.calls.length).toBe(5)
- expect(execSpy.mock.calls.length).toBe(3)
- expect(failureSpy).not.toHaveBeenCalled()
- expect(outputSpy).not.toHaveBeenCalled()
-
- const command_branch = execSpy.mock.calls[0][0]
- const command_branch_args = execSpy.mock.calls[0][1].join(' ')
- expect(command_branch).toBe('git')
- expect(command_branch_args).toBe('branch --verbose --all')
-
- const command_fetch = execSpy.mock.calls[1][0]
- const command_fetch_args = execSpy.mock.calls[1][1].join(' ')
- expect(command_fetch).toBe('git')
- expect(command_fetch_args).toBe('-c protocol.version=2 fetch --depth=1 origin master')
-
- const command_diff = execSpy.mock.calls[2][0]
- const command_diff_args = execSpy.mock.calls[2][1].join(' ')
- expect(command_diff).toBe('git')
- expect(command_diff_args).toBe('diff origin/master --name-status --diff-filter=AM')
-
- done()
- })
+ .then(() => {
+ expect(infoSpy).toHaveBeenCalledTimes(5)
+ expect(failureSpy).toHaveBeenCalled()
+ expect(outputSpy).toHaveBeenCalled()
+
+ expect(fetch).toHaveBeenCalledTimes(2)
+
+ done()
+ })
})
})
\ No newline at end of file
diff --git a/__tests__/client.test.js b/__tests__/client.test.js
new file mode 100644
index 00000000..1f32f5a1
--- /dev/null
+++ b/__tests__/client.test.js
@@ -0,0 +1,71 @@
+jest.mock('node-fetch');
+
+const fetch = require('node-fetch')
+const { Response } = jest.requireActual('node-fetch');
+const client = require('../src/client')
+
+describe('the client', () => {
+
+ afterAll(() => {
+ jest.restoreAllMocks()
+ })
+
+ beforeEach(() => {
+ jest.clearAllMocks()
+ })
+
+ prepareResponse = (body) => {
+ return Promise.resolve(new Response(body, { Headers: { 'Content-Type': 'application/json' } }))
+ }
+
+ it('should find the change file', async () => {
+ const files = [
+ {
+ "filename": "CHANGELOG.md",
+ "status": "modified",
+ "raw_url": "./path/to/CHANGELOG.md"
+ }
+ ]
+
+ fetch.mockReturnValueOnce(prepareResponse(JSON.stringify(files)))
+
+ const changelogFile = await client.findChangelog('token', 'repo', 1, 1, 'CHANGELOG.md')
+ expect(fetch).toHaveBeenCalled()
+ expect(changelogFile).toStrictEqual({
+ "filename": "CHANGELOG.md",
+ "status": "modified",
+ "raw_url": "./path/to/CHANGELOG.md"
+ })
+ })
+
+ it('should not find the change file', async () => {
+ const firstPage = [
+ {
+ "filename": "random.md",
+ "status": "modified",
+ "raw_url": "./path/to/random.md"
+ }
+ ]
+
+ const secondPage = []
+
+ fetch
+ .mockReturnValueOnce(prepareResponse(JSON.stringify(firstPage)))
+ .mockReturnValueOnce(prepareResponse(JSON.stringify(secondPage)))
+
+ const changelogFile = await client.findChangelog('token', 'repo', 1, 1, 'CHANGELOG.md')
+ expect(fetch).toHaveBeenCalledTimes(2)
+ expect(changelogFile).toBeUndefined()
+ })
+
+ it('should get an error with bad response code', async () => {
+ fetch
+ .mockReturnValueOnce(Promise.resolve(new Response("", { status: 401 })))
+
+ try {
+ await client.findChangelog('token', 'repo', 1, 1, 'CHANGELOG.md')
+ } catch (err) {
+ expect(fetch).toHaveBeenCalled()
+ }
+ })
+})
\ No newline at end of file
diff --git a/__tests__/env.js b/__tests__/env.js
index b3ff3302..25ecf726 100644
--- a/__tests__/env.js
+++ b/__tests__/env.js
@@ -1,3 +1,3 @@
const path = require('path')
-const eventPath = path.resolve(__dirname, 'pull_request.json')
+const eventPath = path.resolve(__dirname, 'test_pull_request.json')
process.env.GITHUB_EVENT_PATH = eventPath
diff --git a/__tests__/pull_request.json b/__tests__/test_pull_request.json
similarity index 100%
rename from __tests__/pull_request.json
rename to __tests__/test_pull_request.json
diff --git a/__tests__/version-extractor.test.js b/__tests__/version-extractor.test.js
index c2ea8a50..4655f087 100644
--- a/__tests__/version-extractor.test.js
+++ b/__tests__/version-extractor.test.js
@@ -17,42 +17,18 @@ const CUSTOM = `
* v1.2.0
- Some changes
`
-const CHANGELOG = "CHANGELOG.md"
const VERSION_PATTERN = "^## \\[?((v|V)?\\d*\\.\\d*\\.\\d*-?\\w*|unreleased|Unreleased|UNRELEASED)\\]?"
const CUSTOM_VERSION_PATTERN = "^\\* ((v|V)?\\d*\\.\\d*\\.\\d*-?\\w*|Unreleased)"
describe('the verstion-extractor', () => {
- afterAll(() => {
- // Restore
- jest.restoreAllMocks()
- })
-
- beforeEach(() => {
- jest.clearAllMocks()
- })
-
it('should return all versions via keep a changelog format', () => {
- jest.spyOn(fs, 'readFileSync').mockImplementation((path, encoding) => {
- if (encoding == 'utf8' && path == CHANGELOG) {
- return KEEP_A_CHANGELOG
- }
- })
-
- const versions = versionExtractor.getVersions(VERSION_PATTERN, CHANGELOG)
-
+ const versions = versionExtractor.getVersions(VERSION_PATTERN, KEEP_A_CHANGELOG)
expect(versions).toStrictEqual(['Unreleased', 'v1.10.0', 'v1.9.2'])
})
it('should return all versions via custom format', () => {
- jest.spyOn(fs, 'readFileSync').mockImplementation((path, encoding) => {
- if (encoding == 'utf8' && path == CHANGELOG) {
- return CUSTOM
- }
- })
-
- const versions = versionExtractor.getVersions(CUSTOM_VERSION_PATTERN, CHANGELOG)
-
+ const versions = versionExtractor.getVersions(CUSTOM_VERSION_PATTERN, CUSTOM)
expect(versions).toStrictEqual(['Unreleased', 'v1.2.0'])
})
diff --git a/action.yml b/action.yml
index 9aaeb7f8..45cc0a6a 100644
--- a/action.yml
+++ b/action.yml
@@ -38,6 +38,10 @@ inputs:
missingUpdateErrorMessage:
description: "The error message logged and returned in the 'errorMessage' output when no update to the changelog has been found."
required: false
+ token:
+ description: "The secret value from your GITHUB_TOKEN or another token to access the GitHub API. Defaults to the token at `github.token`"
+ required: true
+ default: ${{ github.token }}
runs:
using: 'node12'
main: 'dist/index.js'
diff --git a/coverage/badge.svg b/coverage/badge.svg
index acf643ef..74290098 100644
--- a/coverage/badge.svg
+++ b/coverage/badge.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/dist/index.js b/dist/index.js
index 81079286..da51fbd8 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -134,12 +134,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
+exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
const command_1 = __nccwpck_require__(7351);
const file_command_1 = __nccwpck_require__(717);
const utils_1 = __nccwpck_require__(5278);
const os = __importStar(__nccwpck_require__(2087));
const path = __importStar(__nccwpck_require__(5622));
+const oidc_utils_1 = __nccwpck_require__(8041);
/**
* The code to exit an action
*/
@@ -312,19 +313,30 @@ exports.debug = debug;
/**
* Adds an error issue
* @param message error issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
*/
-function error(message) {
- command_1.issue('error', message instanceof Error ? message.toString() : message);
+function error(message, properties = {}) {
+ command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
}
exports.error = error;
/**
- * Adds an warning issue
+ * Adds a warning issue
* @param message warning issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
*/
-function warning(message) {
- command_1.issue('warning', message instanceof Error ? message.toString() : message);
+function warning(message, properties = {}) {
+ command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
}
exports.warning = warning;
+/**
+ * Adds a notice issue
+ * @param message notice issue message. Errors will be converted to string via toString()
+ * @param properties optional properties to add to the annotation.
+ */
+function notice(message, properties = {}) {
+ command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
+}
+exports.notice = notice;
/**
* Writes info to log with console.log.
* @param message info message
@@ -397,6 +409,12 @@ function getState(name) {
return process.env[`STATE_${name}`] || '';
}
exports.getState = getState;
+function getIDToken(aud) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return yield oidc_utils_1.OidcClient.getIDToken(aud);
+ });
+}
+exports.getIDToken = getIDToken;
//# sourceMappingURL=core.js.map
/***/ }),
@@ -450,57 +468,11 @@ exports.issueCommand = issueCommand;
/***/ }),
-/***/ 5278:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-// We use any as a valid input type
-/* eslint-disable @typescript-eslint/no-explicit-any */
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.toCommandValue = void 0;
-/**
- * Sanitizes an input into a string so it can be passed into issueCommand safely
- * @param input input to sanitize into a string
- */
-function toCommandValue(input) {
- if (input === null || input === undefined) {
- return '';
- }
- else if (typeof input === 'string' || input instanceof String) {
- return input;
- }
- return JSON.stringify(input);
-}
-exports.toCommandValue = toCommandValue;
-//# sourceMappingURL=utils.js.map
-
-/***/ }),
-
-/***/ 1514:
+/***/ 8041:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
@@ -511,704 +483,119 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.getExecOutput = exports.exec = void 0;
-const string_decoder_1 = __nccwpck_require__(4304);
-const tr = __importStar(__nccwpck_require__(8159));
-/**
- * Exec a command.
- * Output will be streamed to the live console.
- * Returns promise with return code
- *
- * @param commandLine command to execute (can include additional args). Must be correctly escaped.
- * @param args optional arguments for tool. Escaping is handled by the lib.
- * @param options optional exec options. See ExecOptions
- * @returns Promise exit code
- */
-function exec(commandLine, args, options) {
- return __awaiter(this, void 0, void 0, function* () {
- const commandArgs = tr.argStringToArray(commandLine);
- if (commandArgs.length === 0) {
- throw new Error(`Parameter 'commandLine' cannot be null or empty.`);
- }
- // Path to tool to execute should be first arg
- const toolPath = commandArgs[0];
- args = commandArgs.slice(1).concat(args || []);
- const runner = new tr.ToolRunner(toolPath, args, options);
- return runner.exec();
- });
-}
-exports.exec = exec;
-/**
- * Exec a command and get the output.
- * Output will be streamed to the live console.
- * Returns promise with the exit code and collected stdout and stderr
- *
- * @param commandLine command to execute (can include additional args). Must be correctly escaped.
- * @param args optional arguments for tool. Escaping is handled by the lib.
- * @param options optional exec options. See ExecOptions
- * @returns Promise exit code, stdout, and stderr
- */
-function getExecOutput(commandLine, args, options) {
- var _a, _b;
- return __awaiter(this, void 0, void 0, function* () {
- let stdout = '';
- let stderr = '';
- //Using string decoder covers the case where a mult-byte character is split
- const stdoutDecoder = new string_decoder_1.StringDecoder('utf8');
- const stderrDecoder = new string_decoder_1.StringDecoder('utf8');
- const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout;
- const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr;
- const stdErrListener = (data) => {
- stderr += stderrDecoder.write(data);
- if (originalStdErrListener) {
- originalStdErrListener(data);
- }
- };
- const stdOutListener = (data) => {
- stdout += stdoutDecoder.write(data);
- if (originalStdoutListener) {
- originalStdoutListener(data);
- }
- };
- const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener });
- const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners }));
- //flush any remaining characters
- stdout += stdoutDecoder.end();
- stderr += stderrDecoder.end();
- return {
- exitCode,
- stdout,
- stderr
+exports.OidcClient = void 0;
+const http_client_1 = __nccwpck_require__(9925);
+const auth_1 = __nccwpck_require__(3702);
+const core_1 = __nccwpck_require__(2186);
+class OidcClient {
+ static createHttpClient(allowRetry = true, maxRetry = 10) {
+ const requestOptions = {
+ allowRetries: allowRetry,
+ maxRetries: maxRetry
};
- });
-}
-exports.getExecOutput = getExecOutput;
-//# sourceMappingURL=exec.js.map
-
-/***/ }),
-
-/***/ 8159:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.argStringToArray = exports.ToolRunner = void 0;
-const os = __importStar(__nccwpck_require__(2087));
-const events = __importStar(__nccwpck_require__(8614));
-const child = __importStar(__nccwpck_require__(3129));
-const path = __importStar(__nccwpck_require__(5622));
-const io = __importStar(__nccwpck_require__(7436));
-const ioUtil = __importStar(__nccwpck_require__(1962));
-const timers_1 = __nccwpck_require__(8213);
-/* eslint-disable @typescript-eslint/unbound-method */
-const IS_WINDOWS = process.platform === 'win32';
-/*
- * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.
- */
-class ToolRunner extends events.EventEmitter {
- constructor(toolPath, args, options) {
- super();
- if (!toolPath) {
- throw new Error("Parameter 'toolPath' cannot be null or empty.");
- }
- this.toolPath = toolPath;
- this.args = args || [];
- this.options = options || {};
+ return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);
}
- _debug(message) {
- if (this.options.listeners && this.options.listeners.debug) {
- this.options.listeners.debug(message);
+ static getRequestToken() {
+ const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];
+ if (!token) {
+ throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');
}
+ return token;
}
- _getCommandString(options, noPrefix) {
- const toolPath = this._getSpawnFileName();
- const args = this._getSpawnArgs(options);
- let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
- if (IS_WINDOWS) {
- // Windows + cmd file
- if (this._isCmdFile()) {
- cmd += toolPath;
- for (const a of args) {
- cmd += ` ${a}`;
- }
- }
- // Windows + verbatim
- else if (options.windowsVerbatimArguments) {
- cmd += `"${toolPath}"`;
- for (const a of args) {
- cmd += ` ${a}`;
- }
- }
- // Windows (regular)
- else {
- cmd += this._windowsQuoteCmdArg(toolPath);
- for (const a of args) {
- cmd += ` ${this._windowsQuoteCmdArg(a)}`;
- }
- }
+ static getIDTokenUrl() {
+ const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];
+ if (!runtimeUrl) {
+ throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');
}
- else {
- // OSX/Linux - this can likely be improved with some form of quoting.
- // creating processes on Unix is fundamentally different than Windows.
- // on Unix, execvp() takes an arg array.
- cmd += toolPath;
- for (const a of args) {
- cmd += ` ${a}`;
- }
- }
- return cmd;
+ return runtimeUrl;
}
- _processLineBuffer(data, strBuffer, onLine) {
- try {
- let s = strBuffer + data.toString();
- let n = s.indexOf(os.EOL);
- while (n > -1) {
- const line = s.substring(0, n);
- onLine(line);
- // the rest of the string ...
- s = s.substring(n + os.EOL.length);
- n = s.indexOf(os.EOL);
+ static getCall(id_token_url) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const httpclient = OidcClient.createHttpClient();
+ const res = yield httpclient
+ .getJson(id_token_url)
+ .catch(error => {
+ throw new Error(`Failed to get ID Token. \n
+ Error Code : ${error.statusCode}\n
+ Error Message: ${error.result.message}`);
+ });
+ const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;
+ if (!id_token) {
+ throw new Error('Response json body do not have ID Token field');
}
- return s;
- }
- catch (err) {
- // streaming lines to console is best effort. Don't fail a build.
- this._debug(`error processing line. Failed with error ${err}`);
- return '';
- }
+ return id_token;
+ });
}
- _getSpawnFileName() {
- if (IS_WINDOWS) {
- if (this._isCmdFile()) {
- return process.env['COMSPEC'] || 'cmd.exe';
- }
- }
- return this.toolPath;
- }
- _getSpawnArgs(options) {
- if (IS_WINDOWS) {
- if (this._isCmdFile()) {
- let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;
- for (const a of this.args) {
- argline += ' ';
- argline += options.windowsVerbatimArguments
- ? a
- : this._windowsQuoteCmdArg(a);
+ static getIDToken(audience) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ // New ID Token is requested from action service
+ let id_token_url = OidcClient.getIDTokenUrl();
+ if (audience) {
+ const encodedAudience = encodeURIComponent(audience);
+ id_token_url = `${id_token_url}&audience=${encodedAudience}`;
}
- argline += '"';
- return [argline];
- }
- }
- return this.args;
- }
- _endsWith(str, end) {
- return str.endsWith(end);
- }
- _isCmdFile() {
- const upperToolPath = this.toolPath.toUpperCase();
- return (this._endsWith(upperToolPath, '.CMD') ||
- this._endsWith(upperToolPath, '.BAT'));
- }
- _windowsQuoteCmdArg(arg) {
- // for .exe, apply the normal quoting rules that libuv applies
- if (!this._isCmdFile()) {
- return this._uvQuoteCmdArg(arg);
- }
- // otherwise apply quoting rules specific to the cmd.exe command line parser.
- // the libuv rules are generic and are not designed specifically for cmd.exe
- // command line parser.
- //
- // for a detailed description of the cmd.exe command line parser, refer to
- // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912
- // need quotes for empty arg
- if (!arg) {
- return '""';
- }
- // determine whether the arg needs to be quoted
- const cmdSpecialChars = [
- ' ',
- '\t',
- '&',
- '(',
- ')',
- '[',
- ']',
- '{',
- '}',
- '^',
- '=',
- ';',
- '!',
- "'",
- '+',
- ',',
- '`',
- '~',
- '|',
- '<',
- '>',
- '"'
- ];
- let needsQuotes = false;
- for (const char of arg) {
- if (cmdSpecialChars.some(x => x === char)) {
- needsQuotes = true;
- break;
- }
- }
- // short-circuit if quotes not needed
- if (!needsQuotes) {
- return arg;
- }
- // the following quoting rules are very similar to the rules that by libuv applies.
- //
- // 1) wrap the string in quotes
- //
- // 2) double-up quotes - i.e. " => ""
- //
- // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately
- // doesn't work well with a cmd.exe command line.
- //
- // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app.
- // for example, the command line:
- // foo.exe "myarg:""my val"""
- // is parsed by a .NET console app into an arg array:
- // [ "myarg:\"my val\"" ]
- // which is the same end result when applying libuv quoting rules. although the actual
- // command line from libuv quoting rules would look like:
- // foo.exe "myarg:\"my val\""
- //
- // 3) double-up slashes that precede a quote,
- // e.g. hello \world => "hello \world"
- // hello\"world => "hello\\""world"
- // hello\\"world => "hello\\\\""world"
- // hello world\ => "hello world\\"
- //
- // technically this is not required for a cmd.exe command line, or the batch argument parser.
- // the reasons for including this as a .cmd quoting rule are:
- //
- // a) this is optimized for the scenario where the argument is passed from the .cmd file to an
- // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
- //
- // b) it's what we've been doing previously (by deferring to node default behavior) and we
- // haven't heard any complaints about that aspect.
- //
- // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
- // escaped when used on the command line directly - even though within a .cmd file % can be escaped
- // by using %%.
- //
- // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
- // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
- //
- // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
- // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
- // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
- // to an external program.
- //
- // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
- // % can be escaped within a .cmd file.
- let reverse = '"';
- let quoteHit = true;
- for (let i = arg.length; i > 0; i--) {
- // walk the string in reverse
- reverse += arg[i - 1];
- if (quoteHit && arg[i - 1] === '\\') {
- reverse += '\\'; // double the slash
- }
- else if (arg[i - 1] === '"') {
- quoteHit = true;
- reverse += '"'; // double the quote
- }
- else {
- quoteHit = false;
- }
- }
- reverse += '"';
- return reverse
- .split('')
- .reverse()
- .join('');
- }
- _uvQuoteCmdArg(arg) {
- // Tool runner wraps child_process.spawn() and needs to apply the same quoting as
- // Node in certain cases where the undocumented spawn option windowsVerbatimArguments
- // is used.
- //
- // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,
- // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),
- // pasting copyright notice from Node within this function:
- //
- // Copyright Joyent, Inc. and other Node contributors. All rights reserved.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- if (!arg) {
- // Need double quotation for empty argument
- return '""';
- }
- if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) {
- // No quotation needed
- return arg;
- }
- if (!arg.includes('"') && !arg.includes('\\')) {
- // No embedded double quotes or backslashes, so I can just wrap
- // quote marks around the whole thing.
- return `"${arg}"`;
- }
- // Expected input/output:
- // input : hello"world
- // output: "hello\"world"
- // input : hello""world
- // output: "hello\"\"world"
- // input : hello\world
- // output: hello\world
- // input : hello\\world
- // output: hello\\world
- // input : hello\"world
- // output: "hello\\\"world"
- // input : hello\\"world
- // output: "hello\\\\\"world"
- // input : hello world\
- // output: "hello world\\" - note the comment in libuv actually reads "hello world\"
- // but it appears the comment is wrong, it should be "hello world\\"
- let reverse = '"';
- let quoteHit = true;
- for (let i = arg.length; i > 0; i--) {
- // walk the string in reverse
- reverse += arg[i - 1];
- if (quoteHit && arg[i - 1] === '\\') {
- reverse += '\\';
- }
- else if (arg[i - 1] === '"') {
- quoteHit = true;
- reverse += '\\';
+ core_1.debug(`ID token url is ${id_token_url}`);
+ const id_token = yield OidcClient.getCall(id_token_url);
+ core_1.setSecret(id_token);
+ return id_token;
}
- else {
- quoteHit = false;
- }
- }
- reverse += '"';
- return reverse
- .split('')
- .reverse()
- .join('');
- }
- _cloneExecOptions(options) {
- options = options || {};
- const result = {
- cwd: options.cwd || process.cwd(),
- env: options.env || process.env,
- silent: options.silent || false,
- windowsVerbatimArguments: options.windowsVerbatimArguments || false,
- failOnStdErr: options.failOnStdErr || false,
- ignoreReturnCode: options.ignoreReturnCode || false,
- delay: options.delay || 10000
- };
- result.outStream = options.outStream || process.stdout;
- result.errStream = options.errStream || process.stderr;
- return result;
- }
- _getSpawnOptions(options, toolPath) {
- options = options || {};
- const result = {};
- result.cwd = options.cwd;
- result.env = options.env;
- result['windowsVerbatimArguments'] =
- options.windowsVerbatimArguments || this._isCmdFile();
- if (options.windowsVerbatimArguments) {
- result.argv0 = `"${toolPath}"`;
- }
- return result;
- }
- /**
- * Exec a tool.
- * Output will be streamed to the live console.
- * Returns promise with return code
- *
- * @param tool path to tool to exec
- * @param options optional exec options. See ExecOptions
- * @returns number
- */
- exec() {
- return __awaiter(this, void 0, void 0, function* () {
- // root the tool path if it is unrooted and contains relative pathing
- if (!ioUtil.isRooted(this.toolPath) &&
- (this.toolPath.includes('/') ||
- (IS_WINDOWS && this.toolPath.includes('\\')))) {
- // prefer options.cwd if it is specified, however options.cwd may also need to be rooted
- this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);
+ catch (error) {
+ throw new Error(`Error message: ${error.message}`);
}
- // if the tool is only a file name, then resolve it from the PATH
- // otherwise verify it exists (add extension on Windows if necessary)
- this.toolPath = yield io.which(this.toolPath, true);
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
- this._debug(`exec tool: ${this.toolPath}`);
- this._debug('arguments:');
- for (const arg of this.args) {
- this._debug(` ${arg}`);
- }
- const optionsNonNull = this._cloneExecOptions(this.options);
- if (!optionsNonNull.silent && optionsNonNull.outStream) {
- optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);
- }
- const state = new ExecState(optionsNonNull, this.toolPath);
- state.on('debug', (message) => {
- this._debug(message);
- });
- if (this.options.cwd && !(yield ioUtil.exists(this.options.cwd))) {
- return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`));
- }
- const fileName = this._getSpawnFileName();
- const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
- let stdbuffer = '';
- if (cp.stdout) {
- cp.stdout.on('data', (data) => {
- if (this.options.listeners && this.options.listeners.stdout) {
- this.options.listeners.stdout(data);
- }
- if (!optionsNonNull.silent && optionsNonNull.outStream) {
- optionsNonNull.outStream.write(data);
- }
- stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => {
- if (this.options.listeners && this.options.listeners.stdline) {
- this.options.listeners.stdline(line);
- }
- });
- });
- }
- let errbuffer = '';
- if (cp.stderr) {
- cp.stderr.on('data', (data) => {
- state.processStderr = true;
- if (this.options.listeners && this.options.listeners.stderr) {
- this.options.listeners.stderr(data);
- }
- if (!optionsNonNull.silent &&
- optionsNonNull.errStream &&
- optionsNonNull.outStream) {
- const s = optionsNonNull.failOnStdErr
- ? optionsNonNull.errStream
- : optionsNonNull.outStream;
- s.write(data);
- }
- errbuffer = this._processLineBuffer(data, errbuffer, (line) => {
- if (this.options.listeners && this.options.listeners.errline) {
- this.options.listeners.errline(line);
- }
- });
- });
- }
- cp.on('error', (err) => {
- state.processError = err.message;
- state.processExited = true;
- state.processClosed = true;
- state.CheckComplete();
- });
- cp.on('exit', (code) => {
- state.processExitCode = code;
- state.processExited = true;
- this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);
- state.CheckComplete();
- });
- cp.on('close', (code) => {
- state.processExitCode = code;
- state.processExited = true;
- state.processClosed = true;
- this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);
- state.CheckComplete();
- });
- state.on('done', (error, exitCode) => {
- if (stdbuffer.length > 0) {
- this.emit('stdline', stdbuffer);
- }
- if (errbuffer.length > 0) {
- this.emit('errline', errbuffer);
- }
- cp.removeAllListeners();
- if (error) {
- reject(error);
- }
- else {
- resolve(exitCode);
- }
- });
- if (this.options.input) {
- if (!cp.stdin) {
- throw new Error('child process missing stdin');
- }
- cp.stdin.end(this.options.input);
- }
- }));
});
}
}
-exports.ToolRunner = ToolRunner;
+exports.OidcClient = OidcClient;
+//# sourceMappingURL=oidc-utils.js.map
+
+/***/ }),
+
+/***/ 5278:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+// We use any as a valid input type
+/* eslint-disable @typescript-eslint/no-explicit-any */
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.toCommandProperties = exports.toCommandValue = void 0;
/**
- * Convert an arg string to an array of args. Handles escaping
- *
- * @param argString string of arguments
- * @returns string[] array of arguments
+ * Sanitizes an input into a string so it can be passed into issueCommand safely
+ * @param input input to sanitize into a string
*/
-function argStringToArray(argString) {
- const args = [];
- let inQuotes = false;
- let escaped = false;
- let arg = '';
- function append(c) {
- // we only escape double quotes.
- if (escaped && c !== '"') {
- arg += '\\';
- }
- arg += c;
- escaped = false;
- }
- for (let i = 0; i < argString.length; i++) {
- const c = argString.charAt(i);
- if (c === '"') {
- if (!escaped) {
- inQuotes = !inQuotes;
- }
- else {
- append(c);
- }
- continue;
- }
- if (c === '\\' && escaped) {
- append(c);
- continue;
- }
- if (c === '\\' && inQuotes) {
- escaped = true;
- continue;
- }
- if (c === ' ' && !inQuotes) {
- if (arg.length > 0) {
- args.push(arg);
- arg = '';
- }
- continue;
- }
- append(c);
- }
- if (arg.length > 0) {
- args.push(arg.trim());
- }
- return args;
-}
-exports.argStringToArray = argStringToArray;
-class ExecState extends events.EventEmitter {
- constructor(options, toolPath) {
- super();
- this.processClosed = false; // tracks whether the process has exited and stdio is closed
- this.processError = '';
- this.processExitCode = 0;
- this.processExited = false; // tracks whether the process has exited
- this.processStderr = false; // tracks whether stderr was written to
- this.delay = 10000; // 10 seconds
- this.done = false;
- this.timeout = null;
- if (!toolPath) {
- throw new Error('toolPath must not be empty');
- }
- this.options = options;
- this.toolPath = toolPath;
- if (options.delay) {
- this.delay = options.delay;
- }
- }
- CheckComplete() {
- if (this.done) {
- return;
- }
- if (this.processClosed) {
- this._setResult();
- }
- else if (this.processExited) {
- this.timeout = timers_1.setTimeout(ExecState.HandleTimeout, this.delay, this);
- }
- }
- _debug(message) {
- this.emit('debug', message);
+function toCommandValue(input) {
+ if (input === null || input === undefined) {
+ return '';
}
- _setResult() {
- // determine whether there is an error
- let error;
- if (this.processExited) {
- if (this.processError) {
- error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);
- }
- else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {
- error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
- }
- else if (this.processStderr && this.options.failOnStdErr) {
- error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);
- }
- }
- // clear the timeout
- if (this.timeout) {
- clearTimeout(this.timeout);
- this.timeout = null;
- }
- this.done = true;
- this.emit('done', error, this.processExitCode);
+ else if (typeof input === 'string' || input instanceof String) {
+ return input;
}
- static HandleTimeout(state) {
- if (state.done) {
- return;
- }
- if (!state.processClosed && state.processExited) {
- const message = `The STDIO streams did not close within ${state.delay /
- 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;
- state._debug(message);
- }
- state._setResult();
+ return JSON.stringify(input);
+}
+exports.toCommandValue = toCommandValue;
+/**
+ *
+ * @param annotationProperties
+ * @returns The command properties to send with the actual annotation command
+ * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
+ */
+function toCommandProperties(annotationProperties) {
+ if (!Object.keys(annotationProperties).length) {
+ return {};
}
+ return {
+ title: annotationProperties.title,
+ file: annotationProperties.file,
+ line: annotationProperties.startLine,
+ endLine: annotationProperties.endLine,
+ col: annotationProperties.startColumn,
+ endColumn: annotationProperties.endColumn
+ };
}
-//# sourceMappingURL=toolrunner.js.map
+exports.toCommandProperties = toCommandProperties;
+//# sourceMappingURL=utils.js.map
/***/ }),
@@ -1425,6 +812,72 @@ function getOctokitOptions(token, options) {
exports.getOctokitOptions = getOctokitOptions;
//# sourceMappingURL=utils.js.map
+/***/ }),
+
+/***/ 3702:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+class BasicCredentialHandler {
+ constructor(username, password) {
+ this.username = username;
+ this.password = password;
+ }
+ prepareRequest(options) {
+ options.headers['Authorization'] =
+ 'Basic ' +
+ Buffer.from(this.username + ':' + this.password).toString('base64');
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication(response) {
+ return false;
+ }
+ handleAuthentication(httpClient, requestInfo, objs) {
+ return null;
+ }
+}
+exports.BasicCredentialHandler = BasicCredentialHandler;
+class BearerCredentialHandler {
+ constructor(token) {
+ this.token = token;
+ }
+ // currently implements pre-authorization
+ // TODO: support preAuth = false where it hooks on 401
+ prepareRequest(options) {
+ options.headers['Authorization'] = 'Bearer ' + this.token;
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication(response) {
+ return false;
+ }
+ handleAuthentication(httpClient, requestInfo, objs) {
+ return null;
+ }
+}
+exports.BearerCredentialHandler = BearerCredentialHandler;
+class PersonalAccessTokenCredentialHandler {
+ constructor(token) {
+ this.token = token;
+ }
+ // currently implements pre-authorization
+ // TODO: support preAuth = false where it hooks on 401
+ prepareRequest(options) {
+ options.headers['Authorization'] =
+ 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64');
+ }
+ // This handler cannot handle 401
+ canHandleAuthentication(response) {
+ return false;
+ }
+ handleAuthentication(httpClient, requestInfo, objs) {
+ return null;
+ }
+}
+exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
+
+
/***/ }),
/***/ 9925:
@@ -1860,712 +1313,180 @@ class HttpClient {
maxSockets: maxSockets,
keepAlive: this._keepAlive,
proxy: {
- ...((proxyUrl.username || proxyUrl.password) && {
- proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
- }),
- host: proxyUrl.hostname,
- port: proxyUrl.port
- }
- };
- let tunnelAgent;
- const overHttps = proxyUrl.protocol === 'https:';
- if (usingSsl) {
- tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
- }
- else {
- tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
- }
- agent = tunnelAgent(agentOptions);
- this._proxyAgent = agent;
- }
- // if reusing agent across request and tunneling agent isn't assigned create a new agent
- if (this._keepAlive && !agent) {
- const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
- agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
- this._agent = agent;
- }
- // if not using private agent and tunnel agent isn't setup then use global agent
- if (!agent) {
- agent = usingSsl ? https.globalAgent : http.globalAgent;
- }
- if (usingSsl && this._ignoreSslError) {
- // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
- // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
- // we have to cast it to any and change it directly
- agent.options = Object.assign(agent.options || {}, {
- rejectUnauthorized: false
- });
- }
- return agent;
- }
- _performExponentialBackoff(retryNumber) {
- retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
- const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
- return new Promise(resolve => setTimeout(() => resolve(), ms));
- }
- static dateTimeDeserializer(key, value) {
- if (typeof value === 'string') {
- let a = new Date(value);
- if (!isNaN(a.valueOf())) {
- return a;
- }
- }
- return value;
- }
- async _processResponse(res, options) {
- return new Promise(async (resolve, reject) => {
- const statusCode = res.message.statusCode;
- const response = {
- statusCode: statusCode,
- result: null,
- headers: {}
- };
- // not found leads to null obj returned
- if (statusCode == HttpCodes.NotFound) {
- resolve(response);
- }
- let obj;
- let contents;
- // get the result from the body
- try {
- contents = await res.readBody();
- if (contents && contents.length > 0) {
- if (options && options.deserializeDates) {
- obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
- }
- else {
- obj = JSON.parse(contents);
- }
- response.result = obj;
- }
- response.headers = res.message.headers;
- }
- catch (err) {
- // Invalid resource (contents not json); leaving result obj null
- }
- // note that 3xx redirects are handled by the http layer.
- if (statusCode > 299) {
- let msg;
- // if exception/error in body, attempt to get better error
- if (obj && obj.message) {
- msg = obj.message;
- }
- else if (contents && contents.length > 0) {
- // it may be the case that the exception is in the body message as string
- msg = contents;
- }
- else {
- msg = 'Failed request: (' + statusCode + ')';
- }
- let err = new HttpClientError(msg, statusCode);
- err.result = response.result;
- reject(err);
- }
- else {
- resolve(response);
- }
- });
- }
-}
-exports.HttpClient = HttpClient;
-
-
-/***/ }),
-
-/***/ 6443:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-function getProxyUrl(reqUrl) {
- let usingSsl = reqUrl.protocol === 'https:';
- let proxyUrl;
- if (checkBypass(reqUrl)) {
- return proxyUrl;
- }
- let proxyVar;
- if (usingSsl) {
- proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];
- }
- else {
- proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];
- }
- if (proxyVar) {
- proxyUrl = new URL(proxyVar);
- }
- return proxyUrl;
-}
-exports.getProxyUrl = getProxyUrl;
-function checkBypass(reqUrl) {
- if (!reqUrl.hostname) {
- return false;
- }
- let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
- if (!noProxy) {
- return false;
- }
- // Determine the request port
- let reqPort;
- if (reqUrl.port) {
- reqPort = Number(reqUrl.port);
- }
- else if (reqUrl.protocol === 'http:') {
- reqPort = 80;
- }
- else if (reqUrl.protocol === 'https:') {
- reqPort = 443;
- }
- // Format the request hostname and hostname with port
- let upperReqHosts = [reqUrl.hostname.toUpperCase()];
- if (typeof reqPort === 'number') {
- upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
- }
- // Compare request host against noproxy
- for (let upperNoProxyItem of noProxy
- .split(',')
- .map(x => x.trim().toUpperCase())
- .filter(x => x)) {
- if (upperReqHosts.some(x => x === upperNoProxyItem)) {
- return true;
- }
- }
- return false;
-}
-exports.checkBypass = checkBypass;
-
-
-/***/ }),
-
-/***/ 1962:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var _a;
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.getCmdPath = exports.tryGetExecutablePath = exports.isRooted = exports.isDirectory = exports.exists = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rename = exports.readlink = exports.readdir = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0;
-const fs = __importStar(__nccwpck_require__(5747));
-const path = __importStar(__nccwpck_require__(5622));
-_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;
-exports.IS_WINDOWS = process.platform === 'win32';
-function exists(fsPath) {
- return __awaiter(this, void 0, void 0, function* () {
- try {
- yield exports.stat(fsPath);
- }
- catch (err) {
- if (err.code === 'ENOENT') {
- return false;
- }
- throw err;
- }
- return true;
- });
-}
-exports.exists = exists;
-function isDirectory(fsPath, useStat = false) {
- return __awaiter(this, void 0, void 0, function* () {
- const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);
- return stats.isDirectory();
- });
-}
-exports.isDirectory = isDirectory;
-/**
- * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
- * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
- */
-function isRooted(p) {
- p = normalizeSeparators(p);
- if (!p) {
- throw new Error('isRooted() parameter "p" cannot be empty');
- }
- if (exports.IS_WINDOWS) {
- return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello
- ); // e.g. C: or C:\hello
- }
- return p.startsWith('/');
-}
-exports.isRooted = isRooted;
-/**
- * Best effort attempt to determine whether a file exists and is executable.
- * @param filePath file path to check
- * @param extensions additional file extensions to try
- * @return if file exists and is executable, returns the file path. otherwise empty string.
- */
-function tryGetExecutablePath(filePath, extensions) {
- return __awaiter(this, void 0, void 0, function* () {
- let stats = undefined;
- try {
- // test file exists
- stats = yield exports.stat(filePath);
- }
- catch (err) {
- if (err.code !== 'ENOENT') {
- // eslint-disable-next-line no-console
- console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
- }
- }
- if (stats && stats.isFile()) {
- if (exports.IS_WINDOWS) {
- // on Windows, test for valid extension
- const upperExt = path.extname(filePath).toUpperCase();
- if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {
- return filePath;
- }
- }
- else {
- if (isUnixExecutable(stats)) {
- return filePath;
- }
- }
- }
- // try each extension
- const originalFilePath = filePath;
- for (const extension of extensions) {
- filePath = originalFilePath + extension;
- stats = undefined;
- try {
- stats = yield exports.stat(filePath);
- }
- catch (err) {
- if (err.code !== 'ENOENT') {
- // eslint-disable-next-line no-console
- console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
- }
- }
- if (stats && stats.isFile()) {
- if (exports.IS_WINDOWS) {
- // preserve the case of the actual file (since an extension was appended)
- try {
- const directory = path.dirname(filePath);
- const upperName = path.basename(filePath).toUpperCase();
- for (const actualName of yield exports.readdir(directory)) {
- if (upperName === actualName.toUpperCase()) {
- filePath = path.join(directory, actualName);
- break;
- }
- }
- }
- catch (err) {
- // eslint-disable-next-line no-console
- console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);
- }
- return filePath;
- }
- else {
- if (isUnixExecutable(stats)) {
- return filePath;
- }
- }
- }
- }
- return '';
- });
-}
-exports.tryGetExecutablePath = tryGetExecutablePath;
-function normalizeSeparators(p) {
- p = p || '';
- if (exports.IS_WINDOWS) {
- // convert slashes on Windows
- p = p.replace(/\//g, '\\');
- // remove redundant slashes
- return p.replace(/\\\\+/g, '\\');
- }
- // remove redundant slashes
- return p.replace(/\/\/+/g, '/');
-}
-// on Mac/Linux, test the execute bit
-// R W X R W X R W X
-// 256 128 64 32 16 8 4 2 1
-function isUnixExecutable(stats) {
- return ((stats.mode & 1) > 0 ||
- ((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||
- ((stats.mode & 64) > 0 && stats.uid === process.getuid()));
-}
-// Get the path of cmd.exe in windows
-function getCmdPath() {
- var _a;
- return (_a = process.env['COMSPEC']) !== null && _a !== void 0 ? _a : `cmd.exe`;
-}
-exports.getCmdPath = getCmdPath;
-//# sourceMappingURL=io-util.js.map
-
-/***/ }),
-
-/***/ 7436:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.findInPath = exports.which = exports.mkdirP = exports.rmRF = exports.mv = exports.cp = void 0;
-const assert_1 = __nccwpck_require__(2357);
-const childProcess = __importStar(__nccwpck_require__(3129));
-const path = __importStar(__nccwpck_require__(5622));
-const util_1 = __nccwpck_require__(1669);
-const ioUtil = __importStar(__nccwpck_require__(1962));
-const exec = util_1.promisify(childProcess.exec);
-const execFile = util_1.promisify(childProcess.execFile);
-/**
- * Copies a file or folder.
- * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
- *
- * @param source source path
- * @param dest destination path
- * @param options optional. See CopyOptions.
- */
-function cp(source, dest, options = {}) {
- return __awaiter(this, void 0, void 0, function* () {
- const { force, recursive, copySourceDirectory } = readCopyOptions(options);
- const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
- // Dest is an existing file, but not forcing
- if (destStat && destStat.isFile() && !force) {
- return;
- }
- // If dest is an existing directory, should copy inside.
- const newDest = destStat && destStat.isDirectory() && copySourceDirectory
- ? path.join(dest, path.basename(source))
- : dest;
- if (!(yield ioUtil.exists(source))) {
- throw new Error(`no such file or directory: ${source}`);
- }
- const sourceStat = yield ioUtil.stat(source);
- if (sourceStat.isDirectory()) {
- if (!recursive) {
- throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);
- }
- else {
- yield cpDirRecursive(source, newDest, 0, force);
- }
- }
- else {
- if (path.relative(source, newDest) === '') {
- // a file cannot be copied to itself
- throw new Error(`'${newDest}' and '${source}' are the same file`);
- }
- yield copyFile(source, newDest, force);
- }
- });
-}
-exports.cp = cp;
-/**
- * Moves a path.
- *
- * @param source source path
- * @param dest destination path
- * @param options optional. See MoveOptions.
- */
-function mv(source, dest, options = {}) {
- return __awaiter(this, void 0, void 0, function* () {
- if (yield ioUtil.exists(dest)) {
- let destExists = true;
- if (yield ioUtil.isDirectory(dest)) {
- // If dest is directory copy src into dest
- dest = path.join(dest, path.basename(source));
- destExists = yield ioUtil.exists(dest);
- }
- if (destExists) {
- if (options.force == null || options.force) {
- yield rmRF(dest);
- }
- else {
- throw new Error('Destination already exists');
- }
- }
- }
- yield mkdirP(path.dirname(dest));
- yield ioUtil.rename(source, dest);
- });
-}
-exports.mv = mv;
-/**
- * Remove a path recursively with force
- *
- * @param inputPath path to remove
- */
-function rmRF(inputPath) {
- return __awaiter(this, void 0, void 0, function* () {
- if (ioUtil.IS_WINDOWS) {
- // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another
- // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.
- // Check for invalid characters
- // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
- if (/[*"<>|]/.test(inputPath)) {
- throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');
- }
- try {
- const cmdPath = ioUtil.getCmdPath();
- if (yield ioUtil.isDirectory(inputPath, true)) {
- yield exec(`${cmdPath} /s /c "rd /s /q "%inputPath%""`, {
- env: { inputPath }
- });
- }
- else {
- yield exec(`${cmdPath} /s /c "del /f /a "%inputPath%""`, {
- env: { inputPath }
- });
- }
- }
- catch (err) {
- // if you try to delete a file that doesn't exist, desired result is achieved
- // other errors are valid
- if (err.code !== 'ENOENT')
- throw err;
- }
- // Shelling out fails to remove a symlink folder with missing source, this unlink catches that
- try {
- yield ioUtil.unlink(inputPath);
- }
- catch (err) {
- // if you try to delete a file that doesn't exist, desired result is achieved
- // other errors are valid
- if (err.code !== 'ENOENT')
- throw err;
- }
- }
- else {
- let isDir = false;
- try {
- isDir = yield ioUtil.isDirectory(inputPath);
- }
- catch (err) {
- // if you try to delete a file that doesn't exist, desired result is achieved
- // other errors are valid
- if (err.code !== 'ENOENT')
- throw err;
- return;
- }
- if (isDir) {
- yield execFile(`rm`, [`-rf`, `${inputPath}`]);
+ ...((proxyUrl.username || proxyUrl.password) && {
+ proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
+ }),
+ host: proxyUrl.hostname,
+ port: proxyUrl.port
+ }
+ };
+ let tunnelAgent;
+ const overHttps = proxyUrl.protocol === 'https:';
+ if (usingSsl) {
+ tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
}
else {
- yield ioUtil.unlink(inputPath);
+ tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
}
+ agent = tunnelAgent(agentOptions);
+ this._proxyAgent = agent;
}
- });
-}
-exports.rmRF = rmRF;
-/**
- * Make a directory. Creates the full path with folders in between
- * Will throw if it fails
- *
- * @param fsPath path to create
- * @returns Promise
- */
-function mkdirP(fsPath) {
- return __awaiter(this, void 0, void 0, function* () {
- assert_1.ok(fsPath, 'a path argument must be provided');
- yield ioUtil.mkdir(fsPath, { recursive: true });
- });
-}
-exports.mkdirP = mkdirP;
-/**
- * Returns path of a tool had the tool actually been invoked. Resolves via paths.
- * If you check and the tool does not exist, it will throw.
- *
- * @param tool name of the tool
- * @param check whether to check if tool exists
- * @returns Promise path to tool
- */
-function which(tool, check) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!tool) {
- throw new Error("parameter 'tool' is required");
- }
- // recursive when check=true
- if (check) {
- const result = yield which(tool, false);
- if (!result) {
- if (ioUtil.IS_WINDOWS) {
- throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);
- }
- else {
- throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
- }
- }
- return result;
+ // if reusing agent across request and tunneling agent isn't assigned create a new agent
+ if (this._keepAlive && !agent) {
+ const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
+ agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
+ this._agent = agent;
}
- const matches = yield findInPath(tool);
- if (matches && matches.length > 0) {
- return matches[0];
+ // if not using private agent and tunnel agent isn't setup then use global agent
+ if (!agent) {
+ agent = usingSsl ? https.globalAgent : http.globalAgent;
}
- return '';
- });
-}
-exports.which = which;
-/**
- * Returns a list of all occurrences of the given tool on the system path.
- *
- * @returns Promise the paths of the tool
- */
-function findInPath(tool) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!tool) {
- throw new Error("parameter 'tool' is required");
+ if (usingSsl && this._ignoreSslError) {
+ // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
+ // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
+ // we have to cast it to any and change it directly
+ agent.options = Object.assign(agent.options || {}, {
+ rejectUnauthorized: false
+ });
}
- // build the list of extensions to try
- const extensions = [];
- if (ioUtil.IS_WINDOWS && process.env['PATHEXT']) {
- for (const extension of process.env['PATHEXT'].split(path.delimiter)) {
- if (extension) {
- extensions.push(extension);
- }
+ return agent;
+ }
+ _performExponentialBackoff(retryNumber) {
+ retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
+ const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
+ return new Promise(resolve => setTimeout(() => resolve(), ms));
+ }
+ static dateTimeDeserializer(key, value) {
+ if (typeof value === 'string') {
+ let a = new Date(value);
+ if (!isNaN(a.valueOf())) {
+ return a;
}
}
- // if it's rooted, return it if exists. otherwise return empty.
- if (ioUtil.isRooted(tool)) {
- const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
- if (filePath) {
- return [filePath];
+ return value;
+ }
+ async _processResponse(res, options) {
+ return new Promise(async (resolve, reject) => {
+ const statusCode = res.message.statusCode;
+ const response = {
+ statusCode: statusCode,
+ result: null,
+ headers: {}
+ };
+ // not found leads to null obj returned
+ if (statusCode == HttpCodes.NotFound) {
+ resolve(response);
}
- return [];
- }
- // if any path separators, return empty
- if (tool.includes(path.sep)) {
- return [];
- }
- // build the list of directories
- //
- // Note, technically "where" checks the current directory on Windows. From a toolkit perspective,
- // it feels like we should not do this. Checking the current directory seems like more of a use
- // case of a shell, and the which() function exposed by the toolkit should strive for consistency
- // across platforms.
- const directories = [];
- if (process.env.PATH) {
- for (const p of process.env.PATH.split(path.delimiter)) {
- if (p) {
- directories.push(p);
+ let obj;
+ let contents;
+ // get the result from the body
+ try {
+ contents = await res.readBody();
+ if (contents && contents.length > 0) {
+ if (options && options.deserializeDates) {
+ obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
+ }
+ else {
+ obj = JSON.parse(contents);
+ }
+ response.result = obj;
}
+ response.headers = res.message.headers;
}
- }
- // find all matches
- const matches = [];
- for (const directory of directories) {
- const filePath = yield ioUtil.tryGetExecutablePath(path.join(directory, tool), extensions);
- if (filePath) {
- matches.push(filePath);
+ catch (err) {
+ // Invalid resource (contents not json); leaving result obj null
}
- }
- return matches;
- });
-}
-exports.findInPath = findInPath;
-function readCopyOptions(options) {
- const force = options.force == null ? true : options.force;
- const recursive = Boolean(options.recursive);
- const copySourceDirectory = options.copySourceDirectory == null
- ? true
- : Boolean(options.copySourceDirectory);
- return { force, recursive, copySourceDirectory };
-}
-function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
- return __awaiter(this, void 0, void 0, function* () {
- // Ensure there is not a run away recursive copy
- if (currentDepth >= 255)
- return;
- currentDepth++;
- yield mkdirP(destDir);
- const files = yield ioUtil.readdir(sourceDir);
- for (const fileName of files) {
- const srcFile = `${sourceDir}/${fileName}`;
- const destFile = `${destDir}/${fileName}`;
- const srcFileStat = yield ioUtil.lstat(srcFile);
- if (srcFileStat.isDirectory()) {
- // Recurse
- yield cpDirRecursive(srcFile, destFile, currentDepth, force);
+ // note that 3xx redirects are handled by the http layer.
+ if (statusCode > 299) {
+ let msg;
+ // if exception/error in body, attempt to get better error
+ if (obj && obj.message) {
+ msg = obj.message;
+ }
+ else if (contents && contents.length > 0) {
+ // it may be the case that the exception is in the body message as string
+ msg = contents;
+ }
+ else {
+ msg = 'Failed request: (' + statusCode + ')';
+ }
+ let err = new HttpClientError(msg, statusCode);
+ err.result = response.result;
+ reject(err);
}
else {
- yield copyFile(srcFile, destFile, force);
+ resolve(response);
}
- }
- // Change the mode for the newly created directory
- yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);
- });
+ });
+ }
}
-// Buffered file copy
-function copyFile(srcFile, destFile, force) {
- return __awaiter(this, void 0, void 0, function* () {
- if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {
- // unlink/re-link it
- try {
- yield ioUtil.lstat(destFile);
- yield ioUtil.unlink(destFile);
- }
- catch (e) {
- // Try to override file permission
- if (e.code === 'EPERM') {
- yield ioUtil.chmod(destFile, '0666');
- yield ioUtil.unlink(destFile);
- }
- // other errors = it doesn't exist, no work to do
- }
- // Copy over symlink
- const symlinkFull = yield ioUtil.readlink(srcFile);
- yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);
- }
- else if (!(yield ioUtil.exists(destFile)) || force) {
- yield ioUtil.copyFile(srcFile, destFile);
+exports.HttpClient = HttpClient;
+
+
+/***/ }),
+
+/***/ 6443:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+function getProxyUrl(reqUrl) {
+ let usingSsl = reqUrl.protocol === 'https:';
+ let proxyUrl;
+ if (checkBypass(reqUrl)) {
+ return proxyUrl;
+ }
+ let proxyVar;
+ if (usingSsl) {
+ proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];
+ }
+ else {
+ proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];
+ }
+ if (proxyVar) {
+ proxyUrl = new URL(proxyVar);
+ }
+ return proxyUrl;
+}
+exports.getProxyUrl = getProxyUrl;
+function checkBypass(reqUrl) {
+ if (!reqUrl.hostname) {
+ return false;
+ }
+ let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
+ if (!noProxy) {
+ return false;
+ }
+ // Determine the request port
+ let reqPort;
+ if (reqUrl.port) {
+ reqPort = Number(reqUrl.port);
+ }
+ else if (reqUrl.protocol === 'http:') {
+ reqPort = 80;
+ }
+ else if (reqUrl.protocol === 'https:') {
+ reqPort = 443;
+ }
+ // Format the request hostname and hostname with port
+ let upperReqHosts = [reqUrl.hostname.toUpperCase()];
+ if (typeof reqPort === 'number') {
+ upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
+ }
+ // Compare request host against noproxy
+ for (let upperNoProxyItem of noProxy
+ .split(',')
+ .map(x => x.trim().toUpperCase())
+ .filter(x => x)) {
+ if (upperReqHosts.some(x => x === upperNoProxyItem)) {
+ return true;
}
- });
+ }
+ return false;
}
-//# sourceMappingURL=io.js.map
+exports.checkBypass = checkBypass;
+
/***/ }),
@@ -7304,10 +6225,10 @@ function wrappy (fn, cb) {
const core = __nccwpck_require__(2186)
const github = __nccwpck_require__(5438)
-const exec = __nccwpck_require__(1514)
const versionExtractor = __nccwpck_require__(5568)
const labelExtractor = __nccwpck_require__(863)
const contextExtractor = __nccwpck_require__(6155)
+const { findChangelog, downloadChangelog } = __nccwpck_require__(4349)
// Input keys
const IN_CHANGELOG_PATH = 'changeLogPath'
@@ -7315,17 +6236,19 @@ const IN_EXPECTED_LATEST_VERSION = 'expectedLatestVersion'
const IN_VERSION_PATTERN = 'versionPattern'
const IN_UPDATE_CUSTOM_ERROR = 'missingUpdateErrorMessage'
const IN_SKIP_LABELS = 'skipLabels'
+const IN_TOKEN = "token"
// Output keys
const OUT_ERROR_MESSAGE = 'errorMessage'
-module.exports.enforce = async function() {
+module.exports.enforce = async function () {
try {
const skipLabelList = getSkipLabels()
const changeLogPath = core.getInput(IN_CHANGELOG_PATH)
const missingUpdateErrorMessage = getMissingUpdateErrorMessage(changeLogPath)
const expectedLatestVersion = core.getInput(IN_EXPECTED_LATEST_VERSION)
const versionPattern = core.getInput(IN_VERSION_PATTERN)
+ const token = getToken()
core.info(`Skip Labels: ${skipLabelList}`)
core.info(`Changelog Path: ${changeLogPath}`)
@@ -7333,22 +6256,25 @@ module.exports.enforce = async function() {
core.info(`Expected Latest Version: ${expectedLatestVersion}`)
core.info(`Version Pattern: ${versionPattern}`)
- const pullRequest = contextExtractor.getPullRequestContext(github.context)
+ const context = github.context
+ const pullRequest = contextExtractor.getPullRequestContext(context)
if (!pullRequest) {
return
}
+ const repository = `${context.repo.owner}/${context.repo.repo}`
const labelNames = pullRequest.labels.map(l => l.name)
- const baseRef = pullRequest.base.ref
-
- if (shouldEnforceChangelog(labelNames, skipLabelList)) {
- await ensureBranchExists(baseRef)
- await checkChangeLog(baseRef, changeLogPath, missingUpdateErrorMessage)
- await validateLatestVersion(expectedLatestVersion, versionPattern, changeLogPath)
+ if (!shouldEnforceChangelog(labelNames, skipLabelList)) {
+ return
+ }
+ const changelog = await checkChangeLog(token, repository, pullRequest.number, changeLogPath, missingUpdateErrorMessage)
+ if (shouldEnforceVersion(expectedLatestVersion)) {
+ return
}
- } catch(error) {
- core.setOutput(OUT_ERROR_MESSAGE, error.message)
- core.setFailed(error.message)
+ await validateLatestVersion(token, expectedLatestVersion, versionPattern, changelog.raw_url)
+ } catch (err) {
+ core.setOutput(OUT_ERROR_MESSAGE, err.message)
+ core.setFailed(err.message)
}
};
@@ -7365,76 +6291,108 @@ function getMissingUpdateErrorMessage(changeLogPath) {
return `No update to ${changeLogPath} found!`
}
+function getToken() {
+ const token = core.getInput(IN_TOKEN)
+ if (!token) {
+ throw new Error("Did not find token for using the GitHub API")
+ }
+ return token
+}
+
function shouldEnforceChangelog(labelNames, skipLabelList) {
return !labelNames.some(l => skipLabelList.includes(l))
}
-async function ensureBranchExists(baseRef) {
- let output = ''
- const options = {}
- options.listeners = {
- stdout: (data) => {
- output += data.toString();
- }
- }
-
- await exec.exec('git', ['branch', '--verbose', '--all'], options)
-
- const branches = output.split(/\r?\n/)
- let branchNames = []
- branches.map(change => {
- const branchName = change.replace(/(^\s*[\.\w+/-]*)(\s*)([\w+].*)\n?$/g, '$1').trim()
- branchNames.push(branchName)
- })
-
- if (!branchNames.includes(`remotes/origin/${baseRef}`)) {
- await exec.exec('git', ['-c', 'protocol.version=2', 'fetch', '--depth=1', 'origin', `${baseRef}`], {})
- }
+function shouldEnforceVersion(expectedLatestVersion) {
+ return expectedLatestVersion === ''
}
-async function checkChangeLog(baseRef, changeLogPath, missingUpdateErrorMessage) {
- let output = ''
- const options = {}
- options.listeners = {
- stdout: (data) => {
- output += data.toString();
- }
+function normalizeChangelogPath(changeLogPath) {
+ if (changeLogPath.startsWith('./')) {
+ return changeLogPath.substring(2)
}
-
- await exec.exec('git', ['diff', `origin/${baseRef}`, '--name-status', '--diff-filter=AM'], options)
-
- const changes = output.split(/\r?\n/)
- let fileNames = []
- changes.map(change => {
- const fileName = change.replace(/(^[A-Z])(\s*)(.*)(\n)?$/g, '$3')
- fileNames.push(fileName)
- })
+ return changeLogPath
+}
- let normalizedChangeLogPath = changeLogPath
- if (normalizedChangeLogPath.startsWith('./')) {
- normalizedChangeLogPath = normalizedChangeLogPath.substring(2)
- }
- if (!fileNames.includes(normalizedChangeLogPath)) {
+async function checkChangeLog(token, repository, pullRequestNumber, changeLogPath, missingUpdateErrorMessage) {
+ const normalizedChangeLogPath = normalizeChangelogPath(changeLogPath)
+ const changelog = await findChangelog(token, repository, pullRequestNumber, 100, normalizedChangeLogPath)
+ if (!changelog) {
throw new Error(missingUpdateErrorMessage)
}
+ return changelog
}
-async function validateLatestVersion(expectedLatestVersion, versionPattern, changeLogPath) {
- if (expectedLatestVersion == null || expectedLatestVersion.length == 0) {
- return
- }
-
- const versions = versionExtractor.getVersions(versionPattern, changeLogPath)
+async function validateLatestVersion(token, expectedLatestVersion, versionPattern, changelogUrl) {
+ const changelog = await downloadChangelog(token, changelogUrl)
+ const versions = versionExtractor.getVersions(versionPattern, changelog)
let latest = versions[0]
+ core.debug(`Latest version is ${latest}`)
if (latest.toUpperCase() == "UNRELEASED") {
latest = versions[1]
}
- if (latest != expectedLatestVersion) {
+ if (latest !== expectedLatestVersion) {
throw new Error(`The latest version in the changelog does not match the expected latest version of ${expectedLatestVersion}!`)
}
}
+/***/ }),
+
+/***/ 4349:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const fetch = __nccwpck_require__(467)
+const core = __nccwpck_require__(2186)
+
+module.exports.findChangelog = async function (token, repository, pullRequestNumber, pageSize, changeLogPath) {
+ let complete = false;
+ let page = 1
+ while (!complete) {
+ core.debug(`Downloading page ${page} of pull request files from /repos/${repository}/pulls/${pullRequestNumber}/files`)
+ const options = addAuth(token, {})
+ const response = await fetch(`https://api.github.com/repos/${repository}/pulls/${pullRequestNumber}/files?per_page=${pageSize}&page=${page}`, options)
+ if (!response.ok) {
+ throw new Error(`Got a ${response.status} response from GitHub API`)
+ }
+ const files = await response.json()
+ core.debug(`Downloaded page ${page} of pull request files`)
+
+ core.debug("Filtering for changelog")
+ const filtered = files
+ .filter(f => f.status !== 'deleted')
+ .filter(f => f.filename === changeLogPath)
+
+ if (filtered.length == 1) {
+ return filtered[0]
+ } else if (files.length < pageSize) {
+ complete = true
+ } else {
+ page++
+ }
+ }
+ return undefined
+}
+
+module.exports.downloadChangelog = async function (token, changelogUrl) {
+ core.debug(`Downloading changelog from ${changelogUrl}`)
+ const options = addAuth(token, {})
+ const response = await fetch(`${changelogUrl}`, options)
+ if (!response.ok) {
+ throw new Error(`Got a ${response.status} response from GitHub API`)
+ }
+ const changelog = await response.text()
+ core.debug("Downloaded changelog")
+ return changelog
+}
+function addAuth(token, options) {
+ const enriched = { ...options }
+ if (!enriched['headers']) {
+ enriched['headers'] = {}
+ }
+ enriched['headers']['Authorization'] = `Bearer ${token}`
+ return enriched
+}
/***/ }),
@@ -7481,19 +6439,20 @@ module.exports.extractLabels = function (labelsString) {
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
const fs = __nccwpck_require__(5747)
+const core = __nccwpck_require__(2186)
-module.exports.getVersions = function (pattern, changeLogPath) {
+module.exports.getVersions = function (pattern, changelog) {
const regex = new RegExp(`${pattern}`, 'gm')
- const changelog = fs.readFileSync(changeLogPath, 'utf8')
let groups = false
let versions = []
do {
groups = regex.exec(changelog)
if (groups) {
// The actual group we want to match is the version
+ core.debug(`Found version ${groups[1]}`)
versions.push(groups[1])
}
- } while(groups)
+ } while (groups)
return versions
}
@@ -7511,15 +6470,7 @@ module.exports = eval("require")("encoding");
/***/ ((module) => {
"use strict";
-module.exports = require("assert");;
-
-/***/ }),
-
-/***/ 3129:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("child_process");;
+module.exports = require("assert");
/***/ }),
@@ -7527,7 +6478,7 @@ module.exports = require("child_process");;
/***/ ((module) => {
"use strict";
-module.exports = require("events");;
+module.exports = require("events");
/***/ }),
@@ -7535,7 +6486,7 @@ module.exports = require("events");;
/***/ ((module) => {
"use strict";
-module.exports = require("fs");;
+module.exports = require("fs");
/***/ }),
@@ -7543,7 +6494,7 @@ module.exports = require("fs");;
/***/ ((module) => {
"use strict";
-module.exports = require("http");;
+module.exports = require("http");
/***/ }),
@@ -7551,7 +6502,7 @@ module.exports = require("http");;
/***/ ((module) => {
"use strict";
-module.exports = require("https");;
+module.exports = require("https");
/***/ }),
@@ -7559,7 +6510,7 @@ module.exports = require("https");;
/***/ ((module) => {
"use strict";
-module.exports = require("net");;
+module.exports = require("net");
/***/ }),
@@ -7567,7 +6518,7 @@ module.exports = require("net");;
/***/ ((module) => {
"use strict";
-module.exports = require("os");;
+module.exports = require("os");
/***/ }),
@@ -7575,7 +6526,7 @@ module.exports = require("os");;
/***/ ((module) => {
"use strict";
-module.exports = require("path");;
+module.exports = require("path");
/***/ }),
@@ -7583,23 +6534,7 @@ module.exports = require("path");;
/***/ ((module) => {
"use strict";
-module.exports = require("stream");;
-
-/***/ }),
-
-/***/ 4304:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("string_decoder");;
-
-/***/ }),
-
-/***/ 8213:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("timers");;
+module.exports = require("stream");
/***/ }),
@@ -7607,7 +6542,7 @@ module.exports = require("timers");;
/***/ ((module) => {
"use strict";
-module.exports = require("tls");;
+module.exports = require("tls");
/***/ }),
@@ -7615,7 +6550,7 @@ module.exports = require("tls");;
/***/ ((module) => {
"use strict";
-module.exports = require("url");;
+module.exports = require("url");
/***/ }),
@@ -7623,7 +6558,7 @@ module.exports = require("url");;
/***/ ((module) => {
"use strict";
-module.exports = require("util");;
+module.exports = require("util");
/***/ }),
@@ -7631,7 +6566,7 @@ module.exports = require("util");;
/***/ ((module) => {
"use strict";
-module.exports = require("zlib");;
+module.exports = require("zlib");
/***/ })
@@ -7670,7 +6605,9 @@ module.exports = require("zlib");;
/************************************************************************/
/******/ /* webpack/runtime/compat */
/******/
-/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";/************************************************************************/
+/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";
+/******/
+/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
(() => {
diff --git a/example-workflows/with-different-token.yaml b/example-workflows/with-different-token.yaml
new file mode 100644
index 00000000..12f6f038
--- /dev/null
+++ b/example-workflows/with-different-token.yaml
@@ -0,0 +1,16 @@
+```yaml
+name: "Different Token"
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled]
+
+jobs:
+ # Enforces the update of a changelog file on every pull request
+ changelog:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: dangoslen/changelog-enforcer@v2
+ with:
+ token: ${{ secrets. }}
+```
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index de5b701b..4d84d75c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,13 +1,16 @@
{
"name": "changelog-enforcer",
- "version": "2.3.1",
+ "version": "3.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@actions/core": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.4.0.tgz",
- "integrity": "sha512-CGx2ilGq5i7zSLgiiGUtBCxhRRxibJYU6Fim0Q1Wg2aQL2LTnF27zbqZOrxfvFQ55eSBW0L8uVStgtKMpa0Qlg=="
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz",
+ "integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==",
+ "requires": {
+ "@actions/http-client": "^1.0.11"
+ }
},
"@actions/exec": {
"version": "1.1.0",
@@ -42,27 +45,27 @@
"integrity": "sha512-Qi4JoKXjmE0O67wAOH6y0n26QXhMKMFo7GD/4IXNVcrtLjUlGjGuVys6pQgwF3ArfGTQu0XpqaNr0YhED2RaRA=="
},
"@babel/code-frame": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
- "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
- "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
+ "version": "7.15.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
+ "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
"dev": true
},
"@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz",
+ "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.15.7",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
@@ -81,26 +84,26 @@
}
},
"@babel/compat-data": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz",
- "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz",
+ "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==",
"dev": true
},
"@babel/core": {
- "version": "7.14.6",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz",
- "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.14.5",
- "@babel/helper-compilation-targets": "^7.14.5",
- "@babel/helper-module-transforms": "^7.14.5",
- "@babel/helpers": "^7.14.6",
- "@babel/parser": "^7.14.6",
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
+ "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-compilation-targets": "^7.16.0",
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helpers": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -118,12 +121,12 @@
}
},
"@babel/generator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz",
- "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz",
+ "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5",
+ "@babel/types": "^7.16.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
@@ -137,95 +140,95 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz",
- "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz",
+ "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.14.5",
+ "@babel/compat-data": "^7.16.0",
"@babel/helper-validator-option": "^7.14.5",
"browserslist": "^4.16.6",
"semver": "^6.3.0"
}
},
"@babel/helper-function-name": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz",
- "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz",
+ "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.14.5",
- "@babel/template": "^7.14.5",
- "@babel/types": "^7.14.5"
+ "@babel/helper-get-function-arity": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz",
- "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz",
+ "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz",
- "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz",
+ "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz",
- "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
+ "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-module-imports": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
- "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz",
+ "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-module-transforms": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz",
- "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.14.5",
- "@babel/helper-replace-supers": "^7.14.5",
- "@babel/helper-simple-access": "^7.14.5",
- "@babel/helper-split-export-declaration": "^7.14.5",
- "@babel/helper-validator-identifier": "^7.14.5",
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5"
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
+ "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-simple-access": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
- "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
+ "version": "7.15.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
+ "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
"dev": true
}
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz",
- "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz",
+ "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-plugin-utils": {
@@ -235,41 +238,35 @@
"dev": true
},
"@babel/helper-replace-supers": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz",
- "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
+ "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
"dev": true,
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.14.5",
- "@babel/helper-optimise-call-expression": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5"
+ "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-simple-access": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz",
- "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz",
+ "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz",
- "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz",
+ "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/types": "^7.16.0"
}
},
- "@babel/helper-validator-identifier": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
- "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
- "dev": true
- },
"@babel/helper-validator-option": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
@@ -277,44 +274,20 @@
"dev": true
},
"@babel/helpers": {
- "version": "7.14.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz",
- "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz",
+ "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==",
"dev": true,
"requires": {
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.14.5",
- "@babel/types": "^7.14.5"
- }
- },
- "@babel/highlight": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
- "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.14.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- }
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
}
},
"@babel/parser": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
- "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz",
+ "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==",
"dev": true
},
"@babel/plugin-syntax-async-generators": {
@@ -426,56 +399,56 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz",
+ "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.14.5"
}
},
"@babel/template": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz",
- "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz",
+ "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/parser": "^7.14.5",
- "@babel/types": "^7.14.5"
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
}
},
"@babel/traverse": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
- "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.14.5",
- "@babel/helper-function-name": "^7.14.5",
- "@babel/helper-hoist-variables": "^7.14.5",
- "@babel/helper-split-export-declaration": "^7.14.5",
- "@babel/parser": "^7.14.7",
- "@babel/types": "^7.14.5",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz",
+ "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz",
- "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz",
+ "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.15.7",
"to-fast-properties": "^2.0.0"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
- "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
+ "version": "7.15.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
+ "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
"dev": true
}
}
@@ -487,33 +460,74 @@
"dev": true
},
"@eslint/eslintrc": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
- "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz",
+ "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
+ "debug": "^4.3.2",
+ "espree": "^9.0.0",
"globals": "^13.9.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
"globals": {
- "version": "13.9.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
- "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==",
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
}
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
}
}
},
+ "@humanwhocodes/config-array": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
+ "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -534,104 +548,104 @@
"dev": true
},
"@jest/console": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz",
- "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz",
+ "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^27.0.2",
- "jest-util": "^27.0.2",
+ "jest-message-util": "^27.3.1",
+ "jest-util": "^27.3.1",
"slash": "^3.0.0"
}
},
"@jest/core": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.5.tgz",
- "integrity": "sha512-g73//jF0VwsOIrWUC9Cqg03lU3QoAMFxVjsm6n6yNmwZcQPN/o8w+gLWODw5VfKNFZT38otXHWxc6b8eGDUpEA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz",
+ "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==",
"dev": true,
"requires": {
- "@jest/console": "^27.0.2",
- "@jest/reporters": "^27.0.5",
- "@jest/test-result": "^27.0.2",
- "@jest/transform": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "@jest/console": "^27.3.1",
+ "@jest/reporters": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"emittery": "^0.8.1",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.0.2",
- "jest-config": "^27.0.5",
- "jest-haste-map": "^27.0.5",
- "jest-message-util": "^27.0.2",
- "jest-regex-util": "^27.0.1",
- "jest-resolve": "^27.0.5",
- "jest-resolve-dependencies": "^27.0.5",
- "jest-runner": "^27.0.5",
- "jest-runtime": "^27.0.5",
- "jest-snapshot": "^27.0.5",
- "jest-util": "^27.0.2",
- "jest-validate": "^27.0.2",
- "jest-watcher": "^27.0.2",
+ "jest-changed-files": "^27.3.0",
+ "jest-config": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-regex-util": "^27.0.6",
+ "jest-resolve": "^27.3.1",
+ "jest-resolve-dependencies": "^27.3.1",
+ "jest-runner": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
+ "jest-watcher": "^27.3.1",
"micromatch": "^4.0.4",
- "p-each-series": "^2.1.0",
"rimraf": "^3.0.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
}
},
"@jest/environment": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.5.tgz",
- "integrity": "sha512-IAkJPOT7bqn0GiX5LPio6/e1YpcmLbrd8O5EFYpAOZ6V+9xJDsXjdgN2vgv9WOKIs/uA1kf5WeD96HhlBYO+FA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz",
+ "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "@jest/fake-timers": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.0.3"
+ "jest-mock": "^27.3.0"
}
},
"@jest/fake-timers": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.5.tgz",
- "integrity": "sha512-d6Tyf7iDoKqeUdwUKrOBV/GvEZRF67m7lpuWI0+SCD9D3aaejiOQZxAOxwH2EH/W18gnfYaBPLi0VeTGBHtQBg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz",
+ "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
- "@sinonjs/fake-timers": "^7.0.2",
+ "@jest/types": "^27.2.5",
+ "@sinonjs/fake-timers": "^8.0.1",
"@types/node": "*",
- "jest-message-util": "^27.0.2",
- "jest-mock": "^27.0.3",
- "jest-util": "^27.0.2"
+ "jest-message-util": "^27.3.1",
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1"
}
},
"@jest/globals": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.5.tgz",
- "integrity": "sha512-qqKyjDXUaZwDuccpbMMKCCMBftvrbXzigtIsikAH/9ca+kaae8InP2MDf+Y/PdCSMuAsSpHS6q6M25irBBUh+Q==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz",
+ "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==",
"dev": true,
"requires": {
- "@jest/environment": "^27.0.5",
- "@jest/types": "^27.0.2",
- "expect": "^27.0.2"
+ "@jest/environment": "^27.3.1",
+ "@jest/types": "^27.2.5",
+ "expect": "^27.3.1"
}
},
"@jest/reporters": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.5.tgz",
- "integrity": "sha512-4uNg5+0eIfRafnpgu3jCZws3NNcFzhu5JdRd1mKQ4/53+vkIqwB6vfZ4gn5BdGqOaLtYhlOsPaL5ATkKzyBrJw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz",
+ "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.0.2",
- "@jest/test-result": "^27.0.2",
- "@jest/transform": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "@jest/console": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
+ "@jest/types": "^27.2.5",
+ "@types/node": "*",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
@@ -642,21 +656,21 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.0.5",
- "jest-resolve": "^27.0.5",
- "jest-util": "^27.0.2",
- "jest-worker": "^27.0.2",
+ "jest-haste-map": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
"terminal-link": "^2.0.0",
- "v8-to-istanbul": "^8.0.0"
+ "v8-to-istanbul": "^8.1.0"
}
},
"@jest/source-map": {
- "version": "27.0.1",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz",
- "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==",
+ "version": "27.0.6",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz",
+ "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==",
"dev": true,
"requires": {
"callsites": "^3.0.0",
@@ -665,45 +679,45 @@
}
},
"@jest/test-result": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz",
- "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz",
+ "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==",
"dev": true,
"requires": {
- "@jest/console": "^27.0.2",
- "@jest/types": "^27.0.2",
+ "@jest/console": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
}
},
"@jest/test-sequencer": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.5.tgz",
- "integrity": "sha512-opztnGs+cXzZ5txFG2+omBaV5ge/0yuJNKbhE3DREMiXE0YxBuzyEa6pNv3kk2JuucIlH2Xvgmn9kEEHSNt/SA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz",
+ "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.0.2",
+ "@jest/test-result": "^27.3.1",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.5",
- "jest-runtime": "^27.0.5"
+ "jest-haste-map": "^27.3.1",
+ "jest-runtime": "^27.3.1"
}
},
"@jest/transform": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.5.tgz",
- "integrity": "sha512-lBD6OwKXSc6JJECBNk4mVxtSVuJSBsQrJ9WCBisfJs7EZuYq4K6vM9HmoB7hmPiLIDGeyaerw3feBV/bC4z8tg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz",
+ "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"babel-plugin-istanbul": "^6.0.0",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.5",
- "jest-regex-util": "^27.0.1",
- "jest-util": "^27.0.2",
+ "jest-haste-map": "^27.3.1",
+ "jest-regex-util": "^27.0.6",
+ "jest-util": "^27.3.1",
"micromatch": "^4.0.4",
"pirates": "^4.0.1",
"slash": "^3.0.0",
@@ -712,9 +726,9 @@
}
},
"@jest/types": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz",
- "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==",
+ "version": "27.2.5",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz",
+ "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -843,9 +857,9 @@
}
},
"@sinonjs/fake-timers": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz",
- "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz",
+ "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==",
"dev": true,
"requires": {
"@sinonjs/commons": "^1.7.0"
@@ -858,9 +872,9 @@
"dev": true
},
"@types/babel__core": {
- "version": "7.1.14",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz",
- "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==",
+ "version": "7.1.16",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz",
+ "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
@@ -871,18 +885,18 @@
}
},
"@types/babel__generator": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
- "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
+ "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0"
}
},
"@types/babel__template": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz",
- "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==",
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
+ "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
@@ -890,9 +904,9 @@
}
},
"@types/babel__traverse": {
- "version": "7.11.1",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz",
- "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==",
+ "version": "7.14.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz",
+ "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==",
"dev": true,
"requires": {
"@babel/types": "^7.3.0"
@@ -932,42 +946,42 @@
}
},
"@types/node": {
- "version": "15.12.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz",
- "integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==",
+ "version": "16.11.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz",
+ "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==",
"dev": true
},
"@types/prettier": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.0.tgz",
- "integrity": "sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz",
+ "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==",
"dev": true
},
"@types/stack-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
- "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
+ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
"dev": true
},
"@types/yargs": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz",
- "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==",
+ "version": "16.0.4",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
+ "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
}
},
"@types/yargs-parser": {
- "version": "20.2.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz",
- "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==",
+ "version": "20.2.1",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz",
+ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
"dev": true
},
"@vercel/ncc": {
- "version": "0.28.6",
- "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.28.6.tgz",
- "integrity": "sha512-t4BoSSuyK8BZaUE0gV18V6bkFs4st7baumtFGa50dv1tMu2GDBEBF8sUZaKBdKiL6DzJ2D2+XVCwYWWDcQOYdQ==",
+ "version": "0.31.1",
+ "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.31.1.tgz",
+ "integrity": "sha512-g0FAxwdViI6UzsiVz5HssIHqjcPa1EHL6h+2dcJD893SoCJaGdqqgUF09xnMW6goWnnhbLvgiKlgJWrJa+7qYA==",
"dev": true
},
"abab": {
@@ -993,9 +1007,9 @@
}
},
"acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true
},
"acorn-walk": {
@@ -1049,9 +1063,9 @@
}
},
"ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
},
"ansi-styles": {
@@ -1082,12 +1096,6 @@
"sprintf-js": "~1.0.2"
}
},
- "astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true
- },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -1095,38 +1103,53 @@
"dev": true
},
"babel-jest": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.5.tgz",
- "integrity": "sha512-bTMAbpCX7ldtfbca2llYLeSFsDM257aspyAOpsdrdSrBqoLkWCy4HPYTXtXWaSLgFPjrJGACL65rzzr4RFGadw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz",
+ "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==",
"dev": true,
"requires": {
- "@jest/transform": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "@jest/transform": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^27.0.1",
+ "babel-preset-jest": "^27.2.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"slash": "^3.0.0"
}
},
"babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-instrument": "^5.0.4",
"test-exclude": "^6.0.0"
+ },
+ "dependencies": {
+ "istanbul-lib-instrument": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz",
+ "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ }
+ }
}
},
"babel-plugin-jest-hoist": {
- "version": "27.0.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz",
- "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==",
+ "version": "27.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz",
+ "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==",
"dev": true,
"requires": {
"@babel/template": "^7.3.3",
@@ -1156,12 +1179,12 @@
}
},
"babel-preset-jest": {
- "version": "27.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz",
- "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==",
+ "version": "27.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz",
+ "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^27.0.1",
+ "babel-plugin-jest-hoist": "^27.2.0",
"babel-preset-current-node-syntax": "^1.0.0"
}
},
@@ -1202,16 +1225,16 @@
"dev": true
},
"browserslist": {
- "version": "4.16.6",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
- "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz",
+ "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30001219",
- "colorette": "^1.2.2",
- "electron-to-chromium": "^1.3.723",
+ "caniuse-lite": "^1.0.30001271",
+ "electron-to-chromium": "^1.3.878",
"escalade": "^3.1.1",
- "node-releases": "^1.1.71"
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
}
},
"bser": {
@@ -1224,9 +1247,9 @@
}
},
"buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
"callsites": {
@@ -1242,9 +1265,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001239",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz",
- "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==",
+ "version": "1.0.30001274",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz",
+ "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==",
"dev": true
},
"chalk": {
@@ -1311,9 +1334,9 @@
"dev": true
},
"cjs-module-lexer": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz",
- "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
+ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
"dev": true
},
"cliui": {
@@ -1354,12 +1377,6 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
- "colorette": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
- "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
- "dev": true
- },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -1439,9 +1456,9 @@
}
},
"decimal.js": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.0.tgz",
- "integrity": "sha512-MrQRs2gyD//7NeHi9TtsfClkf+cFAewDz+PZHR8ILKglLmBMyVX3ymQ+oeznE3tjrS7beTN+6JXb2C3JDHm7ug==",
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
"dev": true
},
"dedent": {
@@ -1480,9 +1497,9 @@
"dev": true
},
"diff-sequences": {
- "version": "27.0.1",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz",
- "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==",
+ "version": "27.0.6",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
+ "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
"dev": true
},
"dist": {
@@ -1529,9 +1546,9 @@
}
},
"electron-to-chromium": {
- "version": "1.3.755",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.755.tgz",
- "integrity": "sha512-BJ1s/kuUuOeo1bF/EM2E4yqW9te0Hpof3wgwBx40AWJE18zsD1Tqo0kr7ijnOc+lRsrlrqKPauJAHqaxOItoUA==",
+ "version": "1.3.885",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz",
+ "integrity": "sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg==",
"dev": true
},
"emittery": {
@@ -1581,44 +1598,44 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
},
"eslint": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz",
- "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz",
+ "integrity": "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==",
"dev": true,
"requires": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.2",
+ "@eslint/eslintrc": "^1.0.4",
+ "@humanwhocodes/config-array": "^0.6.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
"enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
+ "eslint-scope": "^6.0.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.0.0",
+ "espree": "^9.0.0",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
+ "glob-parent": "^6.0.1",
"globals": "^13.6.0",
"ignore": "^4.0.6",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
@@ -1626,22 +1643,27 @@
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
"progress": "^2.0.0",
- "regexpp": "^3.1.0",
+ "regexpp": "^3.2.0",
"semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.10.4"
+ "ms": "2.1.2"
}
},
"escape-string-regexp": {
@@ -1651,14 +1673,23 @@
"dev": true
},
"globals": {
- "version": "13.9.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
- "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==",
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
}
},
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
"levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -1698,6 +1729,15 @@
"lru-cache": "^6.0.0"
}
},
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -1710,53 +1750,53 @@
}
},
"eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz",
+ "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
+ "estraverse": "^5.2.0"
}
},
"eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
"dev": true,
"requires": {
- "eslint-visitor-keys": "^1.1.0"
+ "eslint-visitor-keys": "^2.0.0"
},
"dependencies": {
"eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true
}
}
},
"eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
+ "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
"dev": true
},
"espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz",
+ "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==",
"dev": true,
"requires": {
- "acorn": "^7.4.0",
+ "acorn": "^8.5.0",
"acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
+ "eslint-visitor-keys": "^3.0.0"
},
"dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "acorn": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
+ "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
"dev": true
}
}
@@ -1774,14 +1814,6 @@
"dev": true,
"requires": {
"estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
}
},
"esrecurse": {
@@ -1791,20 +1823,12 @@
"dev": true,
"requires": {
"estraverse": "^5.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
}
},
"estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
},
"esutils": {
@@ -1837,17 +1861,17 @@
"dev": true
},
"expect": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz",
- "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz",
+ "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"ansi-styles": "^5.0.0",
- "jest-get-type": "^27.0.1",
- "jest-matcher-utils": "^27.0.2",
- "jest-message-util": "^27.0.2",
- "jest-regex-util": "^27.0.1"
+ "jest-get-type": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-regex-util": "^27.0.6"
},
"dependencies": {
"ansi-styles": {
@@ -1929,9 +1953,9 @@
}
},
"flatted": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
- "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
+ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
"dev": true
},
"form-data": {
@@ -2009,12 +2033,12 @@
}
},
"glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"requires": {
- "is-glob": "^4.0.1"
+ "is-glob": "^4.0.3"
}
},
"globals": {
@@ -2024,9 +2048,9 @@
"dev": true
},
"graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
"dev": true
},
"has": {
@@ -2120,9 +2144,9 @@
}
},
"import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz",
+ "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==",
"dev": true,
"requires": {
"pkg-dir": "^4.2.0",
@@ -2151,19 +2175,10 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
- "is-ci": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
- "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
- "dev": true,
- "requires": {
- "ci-info": "^3.1.1"
- }
- },
"is-core-module": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
- "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
+ "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -2188,9 +2203,9 @@
"dev": true
},
"is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
@@ -2209,9 +2224,9 @@
"dev": true
},
"is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true
},
"is-typedarray": {
@@ -2227,9 +2242,9 @@
"dev": true
},
"istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
"dev": true
},
"istanbul-lib-instrument": {
@@ -2273,9 +2288,9 @@
}
},
"istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
"requires": {
"debug": "^4.1.1",
@@ -2284,9 +2299,9 @@
}
},
"istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz",
+ "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==",
"dev": true,
"requires": {
"html-escaper": "^2.0.0",
@@ -2294,267 +2309,267 @@
}
},
"jest": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.5.tgz",
- "integrity": "sha512-4NlVMS29gE+JOZvgmSAsz3eOjkSsHqjTajlIsah/4MVSmKvf3zFP/TvgcLoWe2UVHiE9KF741sReqhF0p4mqbQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz",
+ "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==",
"dev": true,
"requires": {
- "@jest/core": "^27.0.5",
+ "@jest/core": "^27.3.1",
"import-local": "^3.0.2",
- "jest-cli": "^27.0.5"
+ "jest-cli": "^27.3.1"
},
"dependencies": {
"jest-cli": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.5.tgz",
- "integrity": "sha512-kZqY020QFOFQKVE2knFHirTBElw3/Q0kUbDc3nMfy/x+RQ7zUY89SUuzpHHJoSX1kX7Lq569ncvjNqU3Td/FCA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz",
+ "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==",
"dev": true,
"requires": {
- "@jest/core": "^27.0.5",
- "@jest/test-result": "^27.0.2",
- "@jest/types": "^27.0.2",
+ "@jest/core": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/types": "^27.2.5",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.0.5",
- "jest-util": "^27.0.2",
- "jest-validate": "^27.0.2",
+ "jest-config": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"prompts": "^2.0.1",
- "yargs": "^16.0.3"
+ "yargs": "^16.2.0"
}
}
}
},
"jest-changed-files": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz",
- "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==",
+ "version": "27.3.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz",
+ "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"execa": "^5.0.0",
"throat": "^6.0.1"
}
},
"jest-circus": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.5.tgz",
- "integrity": "sha512-p5rO90o1RTh8LPOG6l0Fc9qgp5YGv+8M5CFixhMh7gGHtGSobD1AxX9cjFZujILgY8t30QZ7WVvxlnuG31r8TA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz",
+ "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==",
"dev": true,
"requires": {
- "@jest/environment": "^27.0.5",
- "@jest/test-result": "^27.0.2",
- "@jest/types": "^27.0.2",
+ "@jest/environment": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
- "expect": "^27.0.2",
+ "expect": "^27.3.1",
"is-generator-fn": "^2.0.0",
- "jest-each": "^27.0.2",
- "jest-matcher-utils": "^27.0.2",
- "jest-message-util": "^27.0.2",
- "jest-runtime": "^27.0.5",
- "jest-snapshot": "^27.0.5",
- "jest-util": "^27.0.2",
- "pretty-format": "^27.0.2",
+ "jest-each": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3",
"throat": "^6.0.1"
}
},
"jest-config": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.5.tgz",
- "integrity": "sha512-zCUIXag7QIXKEVN4kUKbDBDi9Q53dV5o3eNhGqe+5zAbt1vLs4VE3ceWaYrOub0L4Y7E9pGfM84TX/0ARcE+Qw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz",
+ "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.0.5",
- "@jest/types": "^27.0.2",
- "babel-jest": "^27.0.5",
+ "@jest/test-sequencer": "^27.3.1",
+ "@jest/types": "^27.2.5",
+ "babel-jest": "^27.3.1",
"chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.0.5",
- "jest-environment-jsdom": "^27.0.5",
- "jest-environment-node": "^27.0.5",
- "jest-get-type": "^27.0.1",
- "jest-jasmine2": "^27.0.5",
- "jest-regex-util": "^27.0.1",
- "jest-resolve": "^27.0.5",
- "jest-runner": "^27.0.5",
- "jest-util": "^27.0.2",
- "jest-validate": "^27.0.2",
+ "jest-circus": "^27.3.1",
+ "jest-environment-jsdom": "^27.3.1",
+ "jest-environment-node": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "jest-jasmine2": "^27.3.1",
+ "jest-regex-util": "^27.0.6",
+ "jest-resolve": "^27.3.1",
+ "jest-runner": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"micromatch": "^4.0.4",
- "pretty-format": "^27.0.2"
+ "pretty-format": "^27.3.1"
}
},
"jest-diff": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz",
- "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz",
+ "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "diff-sequences": "^27.0.1",
- "jest-get-type": "^27.0.1",
- "pretty-format": "^27.0.2"
+ "diff-sequences": "^27.0.6",
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
}
},
"jest-docblock": {
- "version": "27.0.1",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz",
- "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==",
+ "version": "27.0.6",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz",
+ "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==",
"dev": true,
"requires": {
"detect-newline": "^3.0.0"
}
},
"jest-each": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz",
- "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz",
+ "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"chalk": "^4.0.0",
- "jest-get-type": "^27.0.1",
- "jest-util": "^27.0.2",
- "pretty-format": "^27.0.2"
+ "jest-get-type": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1"
}
},
"jest-environment-jsdom": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.5.tgz",
- "integrity": "sha512-ToWhViIoTl5738oRaajTMgYhdQL73UWPoV4GqHGk2DPhs+olv8OLq5KoQW8Yf+HtRao52XLqPWvl46dPI88PdA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz",
+ "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==",
"dev": true,
"requires": {
- "@jest/environment": "^27.0.5",
- "@jest/fake-timers": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "@jest/environment": "^27.3.1",
+ "@jest/fake-timers": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.0.3",
- "jest-util": "^27.0.2",
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1",
"jsdom": "^16.6.0"
}
},
"jest-environment-node": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.5.tgz",
- "integrity": "sha512-47qqScV/WMVz5OKF5TWpAeQ1neZKqM3ySwNveEnLyd+yaE/KT6lSMx/0SOx60+ZUcVxPiESYS+Kt2JS9y4PpkQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz",
+ "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==",
"dev": true,
"requires": {
- "@jest/environment": "^27.0.5",
- "@jest/fake-timers": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "@jest/environment": "^27.3.1",
+ "@jest/fake-timers": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.0.3",
- "jest-util": "^27.0.2"
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1"
}
},
"jest-get-type": {
- "version": "27.0.1",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz",
- "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz",
+ "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==",
"dev": true
},
"jest-haste-map": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.5.tgz",
- "integrity": "sha512-3LFryGSHxwPFHzKIs6W0BGA2xr6g1MvzSjR3h3D8K8Uqy4vbRm/grpGHzbPtIbOPLC6wFoViRrNEmd116QWSkw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz",
+ "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"@types/graceful-fs": "^4.1.2",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"fsevents": "^2.3.2",
"graceful-fs": "^4.2.4",
- "jest-regex-util": "^27.0.1",
- "jest-serializer": "^27.0.1",
- "jest-util": "^27.0.2",
- "jest-worker": "^27.0.2",
+ "jest-regex-util": "^27.0.6",
+ "jest-serializer": "^27.0.6",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
}
},
"jest-jasmine2": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.5.tgz",
- "integrity": "sha512-m3TojR19sFmTn79QoaGy1nOHBcLvtLso6Zh7u+gYxZWGcza4rRPVqwk1hciA5ZOWWZIJOukAcore8JRX992FaA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz",
+ "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==",
"dev": true,
"requires": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.0.5",
- "@jest/source-map": "^27.0.1",
- "@jest/test-result": "^27.0.2",
- "@jest/types": "^27.0.2",
+ "@jest/environment": "^27.3.1",
+ "@jest/source-map": "^27.0.6",
+ "@jest/test-result": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "expect": "^27.0.2",
+ "expect": "^27.3.1",
"is-generator-fn": "^2.0.0",
- "jest-each": "^27.0.2",
- "jest-matcher-utils": "^27.0.2",
- "jest-message-util": "^27.0.2",
- "jest-runtime": "^27.0.5",
- "jest-snapshot": "^27.0.5",
- "jest-util": "^27.0.2",
- "pretty-format": "^27.0.2",
+ "jest-each": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1",
"throat": "^6.0.1"
}
},
"jest-leak-detector": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz",
- "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz",
+ "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==",
"dev": true,
"requires": {
- "jest-get-type": "^27.0.1",
- "pretty-format": "^27.0.2"
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
}
},
"jest-matcher-utils": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz",
- "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz",
+ "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^27.0.2",
- "jest-get-type": "^27.0.1",
- "pretty-format": "^27.0.2"
+ "jest-diff": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
}
},
"jest-message-util": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz",
- "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz",
+ "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.0.2",
+ "pretty-format": "^27.3.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
}
},
"jest-mock": {
- "version": "27.0.3",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz",
- "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==",
+ "version": "27.3.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz",
+ "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"@types/node": "*"
}
},
@@ -2565,107 +2580,108 @@
"dev": true
},
"jest-regex-util": {
- "version": "27.0.1",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz",
- "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==",
+ "version": "27.0.6",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz",
+ "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==",
"dev": true
},
"jest-resolve": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.5.tgz",
- "integrity": "sha512-Md65pngRh8cRuWVdWznXBB5eDt391OJpdBaJMxfjfuXCvOhM3qQBtLMCMTykhuUKiBMmy5BhqCW7AVOKmPrW+Q==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz",
+ "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"chalk": "^4.0.0",
- "escalade": "^3.1.1",
"graceful-fs": "^4.2.4",
+ "jest-haste-map": "^27.3.1",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.0.2",
- "jest-validate": "^27.0.2",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"resolve": "^1.20.0",
+ "resolve.exports": "^1.1.0",
"slash": "^3.0.0"
}
},
"jest-resolve-dependencies": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.5.tgz",
- "integrity": "sha512-xUj2dPoEEd59P+nuih4XwNa4nJ/zRd/g4rMvjHrZPEBWeWRq/aJnnM6mug+B+Nx+ILXGtfWHzQvh7TqNV/WbuA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz",
+ "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
- "jest-regex-util": "^27.0.1",
- "jest-snapshot": "^27.0.5"
+ "@jest/types": "^27.2.5",
+ "jest-regex-util": "^27.0.6",
+ "jest-snapshot": "^27.3.1"
}
},
"jest-runner": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.5.tgz",
- "integrity": "sha512-HNhOtrhfKPArcECgBTcWOc+8OSL8GoFoa7RsHGnfZR1C1dFohxy9eLtpYBS+koybAHlJLZzNCx2Y/Ic3iEtJpQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz",
+ "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==",
"dev": true,
"requires": {
- "@jest/console": "^27.0.2",
- "@jest/environment": "^27.0.5",
- "@jest/test-result": "^27.0.2",
- "@jest/transform": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "@jest/console": "^27.3.1",
+ "@jest/environment": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.8.1",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
- "jest-docblock": "^27.0.1",
- "jest-environment-jsdom": "^27.0.5",
- "jest-environment-node": "^27.0.5",
- "jest-haste-map": "^27.0.5",
- "jest-leak-detector": "^27.0.2",
- "jest-message-util": "^27.0.2",
- "jest-resolve": "^27.0.5",
- "jest-runtime": "^27.0.5",
- "jest-util": "^27.0.2",
- "jest-worker": "^27.0.2",
+ "jest-docblock": "^27.0.6",
+ "jest-environment-jsdom": "^27.3.1",
+ "jest-environment-node": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-leak-detector": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
}
},
"jest-runtime": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.5.tgz",
- "integrity": "sha512-V/w/+VasowPESbmhXn5AsBGPfb35T7jZPGZybYTHxZdP7Gwaa+A0EXE6rx30DshHKA98lVCODbCO8KZpEW3hiQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^27.0.2",
- "@jest/environment": "^27.0.5",
- "@jest/fake-timers": "^27.0.5",
- "@jest/globals": "^27.0.5",
- "@jest/source-map": "^27.0.1",
- "@jest/test-result": "^27.0.2",
- "@jest/transform": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz",
+ "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^27.3.1",
+ "@jest/environment": "^27.3.1",
+ "@jest/globals": "^27.3.1",
+ "@jest/source-map": "^27.0.6",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
+ "execa": "^5.0.0",
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.5",
- "jest-message-util": "^27.0.2",
- "jest-mock": "^27.0.3",
- "jest-regex-util": "^27.0.1",
- "jest-resolve": "^27.0.5",
- "jest-snapshot": "^27.0.5",
- "jest-util": "^27.0.2",
- "jest-validate": "^27.0.2",
+ "jest-haste-map": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-mock": "^27.3.0",
+ "jest-regex-util": "^27.0.6",
+ "jest-resolve": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"slash": "^3.0.0",
"strip-bom": "^4.0.0",
- "yargs": "^16.0.3"
+ "yargs": "^16.2.0"
}
},
"jest-serializer": {
- "version": "27.0.1",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz",
- "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==",
+ "version": "27.0.6",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz",
+ "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -2673,9 +2689,9 @@
}
},
"jest-snapshot": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.5.tgz",
- "integrity": "sha512-H1yFYdgnL1vXvDqMrnDStH6yHFdMEuzYQYc71SnC/IJnuuhW6J16w8GWG1P+qGd3Ag3sQHjbRr0TcwEo/vGS+g==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz",
+ "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==",
"dev": true,
"requires": {
"@babel/core": "^7.7.2",
@@ -2684,23 +2700,23 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.0.5",
- "@jest/types": "^27.0.2",
+ "@jest/transform": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^27.0.2",
+ "expect": "^27.3.1",
"graceful-fs": "^4.2.4",
- "jest-diff": "^27.0.2",
- "jest-get-type": "^27.0.1",
- "jest-haste-map": "^27.0.5",
- "jest-matcher-utils": "^27.0.2",
- "jest-message-util": "^27.0.2",
- "jest-resolve": "^27.0.5",
- "jest-util": "^27.0.2",
+ "jest-diff": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-util": "^27.3.1",
"natural-compare": "^1.4.0",
- "pretty-format": "^27.0.2",
+ "pretty-format": "^27.3.1",
"semver": "^7.3.2"
},
"dependencies": {
@@ -2716,31 +2732,31 @@
}
},
"jest-util": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz",
- "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz",
+ "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
"graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
"picomatch": "^2.2.3"
}
},
"jest-validate": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz",
- "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz",
+ "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
+ "@jest/types": "^27.2.5",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^27.0.1",
+ "jest-get-type": "^27.3.1",
"leven": "^3.1.0",
- "pretty-format": "^27.0.2"
+ "pretty-format": "^27.3.1"
},
"dependencies": {
"camelcase": {
@@ -2752,24 +2768,24 @@
}
},
"jest-watcher": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz",
- "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz",
+ "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.0.2",
- "@jest/types": "^27.0.2",
+ "@jest/test-result": "^27.3.1",
+ "@jest/types": "^27.2.5",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "jest-util": "^27.0.2",
+ "jest-util": "^27.3.1",
"string-length": "^4.0.1"
}
},
"jest-worker": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz",
- "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz",
+ "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -2811,9 +2827,9 @@
}
},
"jsdom": {
- "version": "16.6.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz",
- "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==",
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
+ "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
"dev": true,
"requires": {
"abab": "^2.0.5",
@@ -2841,14 +2857,14 @@
"whatwg-encoding": "^1.0.5",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.5.0",
- "ws": "^7.4.5",
+ "ws": "^7.4.6",
"xml-name-validator": "^3.0.0"
},
"dependencies": {
"acorn": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz",
- "integrity": "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==",
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
+ "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
"dev": true
}
}
@@ -2917,24 +2933,12 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
- },
"lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
- "lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
- "dev": true
- },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -2962,12 +2966,12 @@
}
},
"makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
"requires": {
- "tmpl": "1.0.x"
+ "tmpl": "1.0.5"
}
},
"merge-stream": {
@@ -2987,18 +2991,18 @@
}
},
"mime-db": {
- "version": "1.48.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
- "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==",
+ "version": "1.50.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
+ "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==",
"dev": true
},
"mime-types": {
- "version": "2.1.31",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
- "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
+ "version": "2.1.33",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
+ "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
"dev": true,
"requires": {
- "mime-db": "1.48.0"
+ "mime-db": "1.50.0"
}
},
"mimic-fn": {
@@ -3057,9 +3061,9 @@
"dev": true
},
"node-releases": {
- "version": "1.1.73",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz",
- "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
+ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
"dev": true
},
"normalize-path": {
@@ -3122,12 +3126,6 @@
"word-wrap": "~1.2.3"
}
},
- "p-each-series": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
- "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
- "dev": true
- },
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -3191,6 +3189,12 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
"picomatch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
@@ -3222,13 +3226,13 @@
"dev": true
},
"pretty-format": {
- "version": "27.0.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz",
- "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz",
+ "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.2",
- "ansi-regex": "^5.0.0",
+ "@jest/types": "^27.2.5",
+ "ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
"react-is": "^17.0.1"
},
@@ -3248,9 +3252,9 @@
"dev": true
},
"prompts": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
- "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"dev": true,
"requires": {
"kleur": "^3.0.3",
@@ -3276,9 +3280,9 @@
"dev": true
},
"regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
"dev": true
},
"require-directory": {
@@ -3287,12 +3291,6 @@
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true
- },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -3318,6 +3316,12 @@
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
},
+ "resolve.exports": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
+ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
+ "dev": true
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -3370,9 +3374,9 @@
"dev": true
},
"signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
+ "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
"dev": true
},
"sisteransi": {
@@ -3387,43 +3391,6 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
- "slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
- }
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -3431,9 +3398,9 @@
"dev": true
},
"source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "version": "0.5.20",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
+ "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
@@ -3447,9 +3414,9 @@
"dev": true
},
"stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
+ "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
"dev": true,
"requires": {
"escape-string-regexp": "^2.0.0"
@@ -3553,40 +3520,6 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
- "table": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
- "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
- "dev": true,
- "requires": {
- "ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz",
- "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
- }
- },
"terminal-link": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
@@ -3621,9 +3554,9 @@
"dev": true
},
"tmpl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
- "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true
},
"to-fast-properties": {
@@ -3697,9 +3630,9 @@
}
},
"uglify-js": {
- "version": "3.13.9",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.9.tgz",
- "integrity": "sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g=="
+ "version": "3.14.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.3.tgz",
+ "integrity": "sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g=="
},
"universal-user-agent": {
"version": "6.0.0",
@@ -3728,9 +3661,9 @@
"dev": true
},
"v8-to-istanbul": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz",
- "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
+ "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.1",
@@ -3765,12 +3698,12 @@
}
},
"walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
"requires": {
- "makeerror": "1.0.x"
+ "makeerror": "1.0.12"
}
},
"webidl-conversions": {
@@ -3795,9 +3728,9 @@
"dev": true
},
"whatwg-url": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.6.0.tgz",
- "integrity": "sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==",
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
"dev": true,
"requires": {
"lodash": "^4.7.0",
@@ -3880,9 +3813,9 @@
}
},
"ws": {
- "version": "7.5.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
- "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
+ "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
"dev": true
},
"xml-name-validator": {
diff --git a/package.json b/package.json
index 1e7715f7..ca9a0821 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "changelog-enforcer",
- "version": "2.3.1",
+ "version": "3.0.0",
"description": "Enforces that a changelog is kept up-to-date",
"main": "index.js",
"scripts": {
@@ -30,17 +30,18 @@
},
"homepage": "https://github.com/dangoslen/changelog-enforcer#readme",
"dependencies": {
- "@actions/core": "^1.4.0",
+ "@actions/core": "^1.6.0",
"@actions/exec": "^1.1.0",
"@actions/github": "^5.0.0",
"dist": "^0.1.2",
"make-coverage-badge": "^1.2.0",
- "uglify-js": "^3.13.9"
+ "uglify-js": "^3.14.3",
+ "node-fetch": "^2.6.1"
},
"devDependencies": {
- "@vercel/ncc": "^0.28.6",
- "eslint": "^7.28.0",
- "jest": "^27.0.5",
+ "@vercel/ncc": "^0.31.1",
+ "eslint": "^8.2.0",
+ "jest": "^27.3.1",
"y18n": "^5.0.8"
}
}
diff --git a/src/changelog-enforcer.js b/src/changelog-enforcer.js
index d1cafcdd..f07338fb 100644
--- a/src/changelog-enforcer.js
+++ b/src/changelog-enforcer.js
@@ -1,9 +1,9 @@
const core = require('@actions/core')
const github = require('@actions/github')
-const exec = require('@actions/exec')
const versionExtractor = require('./version-extractor')
const labelExtractor = require('./label-extractor')
const contextExtractor = require('./context-extractor')
+const { findChangelog, downloadChangelog } = require('./client')
// Input keys
const IN_CHANGELOG_PATH = 'changeLogPath'
@@ -11,17 +11,19 @@ const IN_EXPECTED_LATEST_VERSION = 'expectedLatestVersion'
const IN_VERSION_PATTERN = 'versionPattern'
const IN_UPDATE_CUSTOM_ERROR = 'missingUpdateErrorMessage'
const IN_SKIP_LABELS = 'skipLabels'
+const IN_TOKEN = "token"
// Output keys
const OUT_ERROR_MESSAGE = 'errorMessage'
-module.exports.enforce = async function() {
+module.exports.enforce = async function () {
try {
const skipLabelList = getSkipLabels()
const changeLogPath = core.getInput(IN_CHANGELOG_PATH)
const missingUpdateErrorMessage = getMissingUpdateErrorMessage(changeLogPath)
const expectedLatestVersion = core.getInput(IN_EXPECTED_LATEST_VERSION)
const versionPattern = core.getInput(IN_VERSION_PATTERN)
+ const token = getToken()
core.info(`Skip Labels: ${skipLabelList}`)
core.info(`Changelog Path: ${changeLogPath}`)
@@ -29,22 +31,25 @@ module.exports.enforce = async function() {
core.info(`Expected Latest Version: ${expectedLatestVersion}`)
core.info(`Version Pattern: ${versionPattern}`)
- const pullRequest = contextExtractor.getPullRequestContext(github.context)
+ const context = github.context
+ const pullRequest = contextExtractor.getPullRequestContext(context)
if (!pullRequest) {
return
}
+ const repository = `${context.repo.owner}/${context.repo.repo}`
const labelNames = pullRequest.labels.map(l => l.name)
- const baseRef = pullRequest.base.ref
-
- if (shouldEnforceChangelog(labelNames, skipLabelList)) {
- await ensureBranchExists(baseRef)
- await checkChangeLog(baseRef, changeLogPath, missingUpdateErrorMessage)
- await validateLatestVersion(expectedLatestVersion, versionPattern, changeLogPath)
+ if (!shouldEnforceChangelog(labelNames, skipLabelList)) {
+ return
+ }
+ const changelog = await checkChangeLog(token, repository, pullRequest.number, changeLogPath, missingUpdateErrorMessage)
+ if (shouldEnforceVersion(expectedLatestVersion)) {
+ return
}
- } catch(error) {
- core.setOutput(OUT_ERROR_MESSAGE, error.message)
- core.setFailed(error.message)
+ await validateLatestVersion(token, expectedLatestVersion, versionPattern, changelog.raw_url)
+ } catch (err) {
+ core.setOutput(OUT_ERROR_MESSAGE, err.message)
+ core.setFailed(err.message)
}
};
@@ -61,72 +66,47 @@ function getMissingUpdateErrorMessage(changeLogPath) {
return `No update to ${changeLogPath} found!`
}
+function getToken() {
+ const token = core.getInput(IN_TOKEN)
+ if (!token) {
+ throw new Error("Did not find token for using the GitHub API")
+ }
+ return token
+}
+
function shouldEnforceChangelog(labelNames, skipLabelList) {
return !labelNames.some(l => skipLabelList.includes(l))
}
-async function ensureBranchExists(baseRef) {
- let output = ''
- const options = {}
- options.listeners = {
- stdout: (data) => {
- output += data.toString();
- }
- }
-
- await exec.exec('git', ['branch', '--verbose', '--all'], options)
-
- const branches = output.split(/\r?\n/)
- let branchNames = []
- branches.map(change => {
- const branchName = change.replace(/(^\s*[\.\w+/-]*)(\s*)([\w+].*)\n?$/g, '$1').trim()
- branchNames.push(branchName)
- })
-
- if (!branchNames.includes(`remotes/origin/${baseRef}`)) {
- await exec.exec('git', ['-c', 'protocol.version=2', 'fetch', '--depth=1', 'origin', `${baseRef}`], {})
- }
+function shouldEnforceVersion(expectedLatestVersion) {
+ return expectedLatestVersion === ''
}
-async function checkChangeLog(baseRef, changeLogPath, missingUpdateErrorMessage) {
- let output = ''
- const options = {}
- options.listeners = {
- stdout: (data) => {
- output += data.toString();
- }
+function normalizeChangelogPath(changeLogPath) {
+ if (changeLogPath.startsWith('./')) {
+ return changeLogPath.substring(2)
}
-
- await exec.exec('git', ['diff', `origin/${baseRef}`, '--name-status', '--diff-filter=AM'], options)
-
- const changes = output.split(/\r?\n/)
- let fileNames = []
- changes.map(change => {
- const fileName = change.replace(/(^[A-Z])(\s*)(.*)(\n)?$/g, '$3')
- fileNames.push(fileName)
- })
+ return changeLogPath
+}
- let normalizedChangeLogPath = changeLogPath
- if (normalizedChangeLogPath.startsWith('./')) {
- normalizedChangeLogPath = normalizedChangeLogPath.substring(2)
- }
- if (!fileNames.includes(normalizedChangeLogPath)) {
+async function checkChangeLog(token, repository, pullRequestNumber, changeLogPath, missingUpdateErrorMessage) {
+ const normalizedChangeLogPath = normalizeChangelogPath(changeLogPath)
+ const changelog = await findChangelog(token, repository, pullRequestNumber, 100, normalizedChangeLogPath)
+ if (!changelog) {
throw new Error(missingUpdateErrorMessage)
}
+ return changelog
}
-async function validateLatestVersion(expectedLatestVersion, versionPattern, changeLogPath) {
- if (expectedLatestVersion == null || expectedLatestVersion.length == 0) {
- return
- }
-
- const versions = versionExtractor.getVersions(versionPattern, changeLogPath)
+async function validateLatestVersion(token, expectedLatestVersion, versionPattern, changelogUrl) {
+ const changelog = await downloadChangelog(token, changelogUrl)
+ const versions = versionExtractor.getVersions(versionPattern, changelog)
let latest = versions[0]
+ core.debug(`Latest version is ${latest}`)
if (latest.toUpperCase() == "UNRELEASED") {
latest = versions[1]
}
- if (latest != expectedLatestVersion) {
+ if (latest !== expectedLatestVersion) {
throw new Error(`The latest version in the changelog does not match the expected latest version of ${expectedLatestVersion}!`)
}
-}
-
+}
\ No newline at end of file
diff --git a/src/client.js b/src/client.js
new file mode 100644
index 00000000..607cb0a0
--- /dev/null
+++ b/src/client.js
@@ -0,0 +1,52 @@
+const fetch = require('node-fetch')
+const core = require('@actions/core')
+
+module.exports.findChangelog = async function (token, repository, pullRequestNumber, pageSize, changeLogPath) {
+ let complete = false;
+ let page = 1
+ while (!complete) {
+ core.debug(`Downloading page ${page} of pull request files from /repos/${repository}/pulls/${pullRequestNumber}/files`)
+ const options = addAuth(token, {})
+ const response = await fetch(`https://api.github.com/repos/${repository}/pulls/${pullRequestNumber}/files?per_page=${pageSize}&page=${page}`, options)
+ if (!response.ok) {
+ throw new Error(`Got a ${response.status} response from GitHub API`)
+ }
+ const files = await response.json()
+ core.debug(`Downloaded page ${page} of pull request files`)
+
+ core.debug("Filtering for changelog")
+ const filtered = files
+ .filter(f => f.status !== 'deleted')
+ .filter(f => f.filename === changeLogPath)
+
+ if (filtered.length == 1) {
+ return filtered[0]
+ } else if (files.length < pageSize) {
+ complete = true
+ } else {
+ page++
+ }
+ }
+ return undefined
+}
+
+module.exports.downloadChangelog = async function (token, changelogUrl) {
+ core.debug(`Downloading changelog from ${changelogUrl}`)
+ const options = addAuth(token, {})
+ const response = await fetch(`${changelogUrl}`, options)
+ if (!response.ok) {
+ throw new Error(`Got a ${response.status} response from GitHub API`)
+ }
+ const changelog = await response.text()
+ core.debug("Downloaded changelog")
+ return changelog
+}
+
+function addAuth(token, options) {
+ const enriched = { ...options }
+ if (!enriched['headers']) {
+ enriched['headers'] = {}
+ }
+ enriched['headers']['Authorization'] = `Bearer ${token}`
+ return enriched
+}
\ No newline at end of file
diff --git a/src/version-extractor.js b/src/version-extractor.js
index be4f5003..6b79bd58 100644
--- a/src/version-extractor.js
+++ b/src/version-extractor.js
@@ -1,16 +1,17 @@
const fs = require('fs')
+const core = require('@actions/core')
-module.exports.getVersions = function (pattern, changeLogPath) {
+module.exports.getVersions = function (pattern, changelog) {
const regex = new RegExp(`${pattern}`, 'gm')
- const changelog = fs.readFileSync(changeLogPath, 'utf8')
let groups = false
let versions = []
do {
groups = regex.exec(changelog)
if (groups) {
// The actual group we want to match is the version
+ core.debug(`Found version ${groups[1]}`)
versions.push(groups[1])
}
- } while(groups)
+ } while (groups)
return versions
}
\ No newline at end of file
diff --git a/test.txt b/test.txt
new file mode 100644
index 00000000..e69de29b