Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18eadf9c9b | ||
|
|
443f2c0c79 | ||
|
|
94ba3874ff | ||
|
|
c30ce84c21 | ||
|
|
1830b037be | ||
|
|
3bacd9e49a | ||
|
|
3ac4132803 | ||
|
|
b072aaafe1 | ||
|
|
f3ea29dca7 | ||
|
|
889eb279f8 | ||
|
|
5b3ed26ce2 |
16
README.md
16
README.md
@@ -2,6 +2,16 @@
|
||||
|
||||
This action will create a GitHub release and optionally upload an artifact to it.
|
||||
|
||||
<div align="center">
|
||||
<strong>
|
||||
<samp>
|
||||
|
||||
[English](README.md) · [简体中文](README.zh-Hans.md)
|
||||
|
||||
</samp>
|
||||
</strong>
|
||||
</div>
|
||||
|
||||
## Action Inputs
|
||||
| Input name | Description | Required | Default Value |
|
||||
|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|----------------------|
|
||||
@@ -22,13 +32,15 @@ This action will create a GitHub release and optionally upload an artifact to it
|
||||
| omitName | Indicates if the release name should be omitted. | false | false |
|
||||
| omitNameDuringUpdate | Indicates if the release name should be omitted during updates. The name will still be applied for newly created releases. This will preserve the existing name during updates. | false | false |
|
||||
| omitPrereleaseDuringUpdate | Indicates if the prerelease flag should be omitted during updates. The prerelease flag will still be applied for newly created releases. This will preserve the existing prerelease state during updates. | false | false |
|
||||
| owner | Optionally specify the owner of the repo where the release should be generated. Defaults to current repo's owner. | false | "current repo owner" |
|
||||
| owner | Optionally specify the owner of the repo where the release should be generated. Defaults to current repo's owner. | false | "current repo owner" |
|
||||
| prerelease | Optionally marks this release as prerelease. Set to true to enable. | false | "" |
|
||||
| removeArtifacts | Indicates if existing release artifacts should be removed. | false | false |
|
||||
| replacesArtifacts | Indicates if existing release artifacts should be replaced. | false | true |
|
||||
| repo | Optionally specify the repo where the release should be generated. | false | current repo |
|
||||
| skipIfReleaseExists | When skipIfReleaseExists is enabled the action will be skipped if a non-draft release already exists for the provided tag. | false | current repo |
|
||||
| tag | An optional tag for the release. If this is omitted the git ref will be used (if it is a tag). | false | "" |
|
||||
| token | The GitHub token. This will default to the GitHub app token. This is primarily useful if you want to use your personal token (for targeting other repos, etc). If you are using a personal access token it should have access to the `repo` scope. | false | github.token |
|
||||
| updateOnlyUnreleased | When allowUpdates is enabled, this will fail the action if the release it is updating is not a draft or a prerelease. | false | false |
|
||||
|
||||
## Action Outputs
|
||||
| Output name | Description |
|
||||
@@ -60,8 +72,6 @@ jobs:
|
||||
with:
|
||||
artifacts: "release.tar.gz,foo/*.txt"
|
||||
bodyFile: "body.md"
|
||||
token: ${{ secrets.YOUR_GITHUB_TOKEN }}
|
||||
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
83
README.zh-Hans.md
Normal file
83
README.zh-Hans.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# Release Action
|
||||
|
||||
此操作将创建一个 GitHub Release,并可选择将产出文件上传到其中。
|
||||
|
||||
<div align="center">
|
||||
<strong>
|
||||
<samp>
|
||||
|
||||
[English](README.md) · [简体中文](README.zh-Hans.md)
|
||||
|
||||
</samp>
|
||||
</strong>
|
||||
</div>
|
||||
|
||||
## Action 输入
|
||||
|
||||
| 输入名称 | 描述 | 必选 | 默认值 |
|
||||
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | -------------------- |
|
||||
| allowUpdates | 一个可选标志,表示如果版本已经存在,我们是否应该更新它。默认值为 false。 | false | "" |
|
||||
| artifactErrorsFailBuild | 一个可选标志,表示读取或上传产出文件错误时是否应该使构建失败。 | false | "" |
|
||||
| artifacts | 一组可选的路径,表示要上传到版本的产出文件。 这可能是单个路径或以逗号分隔的路径列表(或 globs) | false | "" |
|
||||
| artifactContentType | 产出文件的内容类型。 默认为 raw | false | "" |
|
||||
| body | 发布的可选主体。 | false | "" |
|
||||
| bodyFile | 发布的可选正文文件。 这应该是文件的路径。 | false | "" |
|
||||
| commit | 一个可选的提交 ref。 如果标签不存在,将用于创建标签。 | false | "" |
|
||||
| discussionCategory | 当提供该选项时,将生成对指定类别的 discussion。类别必须存在,否则将导致 Action 失败。这在草案发布中没有使用 | false | "" |
|
||||
| draft | 可选择将此版本标记为草稿版本。 设置为 true 以启用。 | false | "" |
|
||||
| generateReleaseNotes | 指示是否应自动生成发行说明。 | false | false |
|
||||
| name | 版本的可选名称。 如果省略,将使用标签。 | false | "" |
|
||||
| omitBody | 指示是否应省略发布主体。 | false | false |
|
||||
| omitBodyDuringUpdate | 指示在更新期间是否应省略发布主体。 正文仍将应用于新创建的版本。 这将在更新期间保留现有正文。 | false | false |
|
||||
| omitDraftDuringUpdate | 指示是否应在更新期间省略草稿标志。 草稿标志仍将应用于新创建的版本。 这将在更新期间保留现有的草稿状态。 | false | false |
|
||||
| omitName | 指示是否应省略版本名称。 | false | false |
|
||||
| omitNameDuringUpdate | 指示在更新期间是否应省略版本名称。 该名称仍将应用于新创建的版本。 这将在更新期间保留现有名称。 | false | false |
|
||||
| omitPrereleaseDuringUpdate | 指示在更新期间是否应省略预发布标志。 预发布标志仍将应用于新创建的版本。 这将在更新期间保留现有的预发布状态。 | false | false |
|
||||
| owner | (可选)指定应在其中生成版本的存储库的所有者。 默认为当前存储库的所有者。 | false | "current repo owner" |
|
||||
| prerelease | 可选择将此版本标记为预发布。 设置为 true 以启用。 | false | "" |
|
||||
| removeArtifacts | 指示是否应删除现有的发布产出文件。 | false | false |
|
||||
| replacesArtifacts | 指示是否应替换现有的发布产出文件。 | false | true |
|
||||
| repo | (可选)指定应在其中生成版本的存储库。 | false | current repo |
|
||||
| tag | 发布的可选标签。 如果省略,将使用 git ref (如果它是标签)。 | false | "" |
|
||||
| token | GitHub 令牌。 这将默认为 GitHub 应用程序令牌。 如果您想使用您的个人令牌(用于定位其他存储库等),这主要是有用的。 如果您使用的是个人访问令牌,它应该可以访问 `repo` 范围。 | false | github.token |
|
||||
| updateOnlyUnreleased | 启用 allowUpdates 后,如果它正在更新的版本不是草稿或预发布,则该操作将失败。 | false | false |
|
||||
|
||||
## Action 输出
|
||||
|
||||
| 输出名称 | 描述 |
|
||||
| ---------- | ------------------------ |
|
||||
| id | 创建的版本的标识符。 |
|
||||
| html_url | 版本的 HTML URL。 |
|
||||
| upload_url | 将资产上传到版本的 URL。 |
|
||||
|
||||
## 示例
|
||||
|
||||
此示例将在推送一个标签时创建一个 Release:
|
||||
|
||||
```yml
|
||||
name: Releases
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "*"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ncipollo/release-action@v1
|
||||
with:
|
||||
artifacts: "release.tar.gz,foo/*.txt"
|
||||
bodyFile: "body.md"
|
||||
token: ${{ secrets.YOUR_GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
## 注意
|
||||
|
||||
- 您必须通过 Action 输入或 git ref 提供一个标签(即推送/创建标签)。如果不提供标签,Action 将会失败。
|
||||
- 如果您正在创建的版本的标签不存在,您应该同时设置标签和提交 Action 输入。 commit 可以指向提交 Hash 或分支名称(例如 - main)。
|
||||
- 在上面的示例中,只需要指定操作的权限(即 contents: write)。 如果您将其他操作添加到同一工作流程,则应相应地扩展权限。
|
||||
@@ -5,16 +5,18 @@ import {Releases} from "../src/Releases";
|
||||
import {ArtifactUploader} from "../src/ArtifactUploader";
|
||||
import {Outputs} from "../src/Outputs";
|
||||
import {ArtifactDestroyer} from "../src/ArtifactDestroyer";
|
||||
import {ActionSkipper} from "../src/ActionSkipper";
|
||||
|
||||
const applyReleaseDataMock = jest.fn()
|
||||
const artifactDestroyMock = jest.fn()
|
||||
const createMock = jest.fn()
|
||||
const deleteMock = jest.fn()
|
||||
const getMock = jest.fn()
|
||||
const listArtifactsMock = jest.fn()
|
||||
const listMock = jest.fn()
|
||||
const shouldSkipMock = jest.fn()
|
||||
const updateMock = jest.fn()
|
||||
const uploadMock = jest.fn()
|
||||
const artifactDestroyMock = jest.fn()
|
||||
|
||||
const artifacts = [
|
||||
new Artifact('a/art1'),
|
||||
@@ -37,6 +39,7 @@ const updateBody = 'updateBody'
|
||||
const updateDraft = false
|
||||
const updateName = 'updateName'
|
||||
const updatePrerelease = false
|
||||
const updateOnlyUnreleased = false
|
||||
const url = 'http://api.example.com'
|
||||
|
||||
describe("Action", () => {
|
||||
@@ -44,6 +47,7 @@ describe("Action", () => {
|
||||
createMock.mockClear()
|
||||
getMock.mockClear()
|
||||
listMock.mockClear()
|
||||
shouldSkipMock.mockClear()
|
||||
updateMock.mockClear()
|
||||
uploadMock.mockClear()
|
||||
})
|
||||
@@ -149,6 +153,16 @@ describe("Action", () => {
|
||||
assertOutputApplied()
|
||||
})
|
||||
|
||||
it('skips action', async () => {
|
||||
const action = createAction(false, false, false)
|
||||
shouldSkipMock.mockResolvedValue(true)
|
||||
|
||||
await action.perform()
|
||||
|
||||
expect(createMock).not.toBeCalled()
|
||||
expect(updateMock).not.toBeCalled()
|
||||
})
|
||||
|
||||
it('throws error when create fails', async () => {
|
||||
const action = createAction(false, true)
|
||||
createMock.mockRejectedValue("error")
|
||||
@@ -317,7 +331,9 @@ describe("Action", () => {
|
||||
expect(applyReleaseDataMock).toBeCalledWith({id: releaseId, upload_url: url})
|
||||
}
|
||||
|
||||
function createAction(allowUpdates: boolean, hasArtifact: boolean, removeArtifacts: boolean = false): Action {
|
||||
function createAction(allowUpdates: boolean,
|
||||
hasArtifact: boolean,
|
||||
removeArtifacts: boolean = false): Action {
|
||||
let inputArtifact: Artifact[]
|
||||
if (hasArtifact) {
|
||||
inputArtifact = artifacts
|
||||
@@ -350,6 +366,7 @@ describe("Action", () => {
|
||||
listMock.mockResolvedValue({
|
||||
data: []
|
||||
})
|
||||
shouldSkipMock.mockResolvedValue(false)
|
||||
updateMock.mockResolvedValue({
|
||||
data: {
|
||||
id: releaseId,
|
||||
@@ -374,12 +391,14 @@ describe("Action", () => {
|
||||
replacesArtifacts: replacesArtifacts,
|
||||
removeArtifacts: removeArtifacts,
|
||||
repo: "repo",
|
||||
skipIfReleaseExists: false,
|
||||
tag: tag,
|
||||
token: token,
|
||||
updatedDraft: updateDraft,
|
||||
updatedReleaseBody: updateBody,
|
||||
updatedReleaseName: updateName,
|
||||
updatedPrerelease: updatePrerelease
|
||||
updatedPrerelease: updatePrerelease,
|
||||
updateOnlyUnreleased: updateOnlyUnreleased
|
||||
}
|
||||
})
|
||||
const MockOutputs = jest.fn<Outputs, any>(() => {
|
||||
@@ -397,13 +416,20 @@ describe("Action", () => {
|
||||
destroyArtifacts: artifactDestroyMock
|
||||
}
|
||||
})
|
||||
|
||||
const MockActionSkipper = jest.fn<ActionSkipper, any>(() => {
|
||||
return {
|
||||
shouldSkip: shouldSkipMock
|
||||
}
|
||||
})
|
||||
|
||||
const inputs = new MockInputs()
|
||||
const outputs = new MockOutputs()
|
||||
const releases = new MockReleases()
|
||||
const uploader = new MockUploader()
|
||||
const artifactDestroyer = new MockArtifactDestroyer()
|
||||
const actionSkipper = new MockActionSkipper()
|
||||
|
||||
return new Action(inputs, outputs, releases, uploader, artifactDestroyer)
|
||||
return new Action(inputs, outputs, releases, uploader, artifactDestroyer, actionSkipper)
|
||||
}
|
||||
})
|
||||
|
||||
44
__tests__/ActionSkipper.test.ts
Normal file
44
__tests__/ActionSkipper.test.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import {ActionSkipper, ReleaseActionSkipper} from "../src/ActionSkipper";
|
||||
import {Releases} from "../src/Releases";
|
||||
|
||||
describe("shouldSkip", () => {
|
||||
const getMock = jest.fn()
|
||||
const tag = "tag"
|
||||
const MockReleases = jest.fn<Releases, any>(() => {
|
||||
return {
|
||||
create: jest.fn(),
|
||||
deleteArtifact: jest.fn(),
|
||||
getByTag: getMock,
|
||||
listArtifactsForRelease: jest.fn(),
|
||||
listReleases: jest.fn(),
|
||||
update: jest.fn(),
|
||||
uploadArtifact: jest.fn()
|
||||
}
|
||||
})
|
||||
|
||||
it('should return false when skipIfReleaseExists is false', async () => {
|
||||
const actionSkipper = new ReleaseActionSkipper(false, MockReleases(), tag)
|
||||
expect(await actionSkipper.shouldSkip()).toBe(false)
|
||||
})
|
||||
|
||||
it('should return false when error occurs', async () => {
|
||||
getMock.mockRejectedValue(new Error())
|
||||
|
||||
const actionSkipper = new ReleaseActionSkipper(true, MockReleases(), tag)
|
||||
expect(await actionSkipper.shouldSkip()).toBe(false)
|
||||
})
|
||||
|
||||
it('should return false when release does not exist', async () => {
|
||||
getMock.mockResolvedValue({})
|
||||
|
||||
const actionSkipper = new ReleaseActionSkipper(true, MockReleases(), tag)
|
||||
expect(await actionSkipper.shouldSkip()).toBe(false)
|
||||
})
|
||||
|
||||
it('should return true when release does exist', async () => {
|
||||
getMock.mockResolvedValue({data: {}})
|
||||
|
||||
const actionSkipper = new ReleaseActionSkipper(true, MockReleases(), tag)
|
||||
expect(await actionSkipper.shouldSkip()).toBe(true)
|
||||
})
|
||||
})
|
||||
@@ -1,4 +1,5 @@
|
||||
const mockGetInput = jest.fn();
|
||||
const mockGetBooleanInput = jest.fn();
|
||||
const mockGlob = jest.fn()
|
||||
const mockReadFileSync = jest.fn();
|
||||
const mockStatSync = jest.fn();
|
||||
@@ -14,7 +15,10 @@ const artifacts = [
|
||||
]
|
||||
|
||||
jest.mock('@actions/core', () => {
|
||||
return {getInput: mockGetInput};
|
||||
return {
|
||||
getInput: mockGetInput,
|
||||
getBooleanInput: mockGetBooleanInput
|
||||
};
|
||||
})
|
||||
|
||||
jest.mock('fs', () => {
|
||||
@@ -87,7 +91,7 @@ describe('Inputs', () => {
|
||||
expect(mockGlob).toBeCalledTimes(1)
|
||||
expect(mockGlob).toBeCalledWith('art1', 'contentType', true)
|
||||
})
|
||||
|
||||
|
||||
it('returns empty artifacts', () => {
|
||||
mockGetInput.mockReturnValueOnce('')
|
||||
.mockReturnValueOnce('')
|
||||
@@ -202,7 +206,7 @@ describe('Inputs', () => {
|
||||
mockGetInput.mockReturnValue('Release')
|
||||
expect(inputs.discussionCategory).toBe('Release')
|
||||
})
|
||||
|
||||
|
||||
it('returns undefined', () => {
|
||||
mockGetInput.mockReturnValue('')
|
||||
expect(inputs.discussionCategory).toBe(undefined)
|
||||
@@ -220,7 +224,7 @@ describe('Inputs', () => {
|
||||
expect(inputs.generateReleaseNotes).toBe(false)
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
describe('owner', () => {
|
||||
it('returns owner from context', function () {
|
||||
process.env.GITHUB_REPOSITORY = "owner/repo"
|
||||
@@ -278,6 +282,18 @@ describe('Inputs', () => {
|
||||
});
|
||||
})
|
||||
|
||||
describe('skipIfReleaseExists', () => {
|
||||
it('returns false', () => {
|
||||
mockGetBooleanInput.mockReturnValue(false)
|
||||
expect(inputs.skipIfReleaseExists).toBe(false)
|
||||
})
|
||||
|
||||
it('returns true', () => {
|
||||
mockGetBooleanInput.mockReturnValue(true)
|
||||
expect(inputs.skipIfReleaseExists).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe('tag', () => {
|
||||
it('returns input tag', () => {
|
||||
mockGetInput.mockReturnValue('tag')
|
||||
@@ -430,6 +446,17 @@ describe('Inputs', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('updateOnlyUnreleased', () => {
|
||||
it('returns false', () => {
|
||||
expect(inputs.updateOnlyUnreleased).toBe(false)
|
||||
})
|
||||
|
||||
it('returns true', () => {
|
||||
mockGetInput.mockReturnValueOnce('true')
|
||||
expect(inputs.updateOnlyUnreleased).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
function createGlobber(): ArtifactGlobber {
|
||||
const MockGlobber = jest.fn<ArtifactGlobber, any>(() => {
|
||||
return {
|
||||
|
||||
@@ -7,6 +7,7 @@ import * as path from "path";
|
||||
import {FileArtifactGlobber} from "../src/ArtifactGlobber";
|
||||
import {Outputs} from "../src/Outputs";
|
||||
import {GithubArtifactDestroyer} from "../src/ArtifactDestroyer";
|
||||
import {ReleaseActionSkipper} from "../src/ActionSkipper";
|
||||
|
||||
// This test is currently intended to be manually run during development. To run:
|
||||
// - Make sure you have an environment variable named GITHUB_TOKEN assigned to your token
|
||||
@@ -27,8 +28,9 @@ describe.skip('Integration Test', () => {
|
||||
inputs.artifactErrorsFailBuild,
|
||||
)
|
||||
const artifactDestroyer = new GithubArtifactDestroyer(releases)
|
||||
const actionSkipper = new ReleaseActionSkipper(inputs.skipIfReleaseExists, releases, inputs.tag)
|
||||
|
||||
action = new Action(inputs, outputs, releases, uploader, artifactDestroyer)
|
||||
action = new Action(inputs, outputs, releases, uploader, artifactDestroyer, actionSkipper)
|
||||
})
|
||||
|
||||
it('Performs action', async () => {
|
||||
@@ -52,12 +54,14 @@ describe.skip('Integration Test', () => {
|
||||
replacesArtifacts: true,
|
||||
removeArtifacts: false,
|
||||
repo: "actions-playground",
|
||||
skipIfReleaseExists: false,
|
||||
tag: "release-action-test",
|
||||
token: getToken(),
|
||||
updatedDraft: false,
|
||||
updatedReleaseBody: "This release was generated by release-action's integration test",
|
||||
updatedReleaseBody: "This release was updated by release-action's integration test",
|
||||
updatedReleaseName: "Releases Action Integration Test",
|
||||
updatedPrerelease: false
|
||||
updatedPrerelease: false,
|
||||
updateOnlyUnreleased: false
|
||||
}
|
||||
})
|
||||
return new MockInputs();
|
||||
|
||||
74
__tests__/ReleaseValidator.test.ts
Normal file
74
__tests__/ReleaseValidator.test.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import {ReleaseValidator} from "../src/ReleaseValidator";
|
||||
|
||||
describe("validateReleaseUpdate", () => {
|
||||
describe("updateOnlyUnreleased is disabled", () => {
|
||||
const validator = new ReleaseValidator(false)
|
||||
it('should not throw', () => {
|
||||
const releaseResponse = {
|
||||
draft: false,
|
||||
prerelease: false,
|
||||
name: "Name"
|
||||
}
|
||||
expect(() => {
|
||||
validator.validateReleaseUpdate(releaseResponse)
|
||||
}).not.toThrow()
|
||||
})
|
||||
})
|
||||
describe("updateOnlyUnreleased is enabled", () => {
|
||||
const validator = new ReleaseValidator(true)
|
||||
it('should throw if neither draft or prerelease are enabled', () => {
|
||||
const releaseResponse = {
|
||||
draft: false,
|
||||
prerelease: false,
|
||||
name: "Name"
|
||||
}
|
||||
expect(() => {
|
||||
validator.validateReleaseUpdate(releaseResponse)
|
||||
}).toThrow()
|
||||
})
|
||||
|
||||
it('should not throw if draft is enabled', () => {
|
||||
const releaseResponse = {
|
||||
draft: true,
|
||||
prerelease: false,
|
||||
name: "Name"
|
||||
}
|
||||
expect(() => {
|
||||
validator.validateReleaseUpdate(releaseResponse)
|
||||
}).not.toThrow()
|
||||
})
|
||||
|
||||
it('should not throw if prerelease is enabled', () => {
|
||||
const releaseResponse = {
|
||||
draft: false,
|
||||
prerelease: true,
|
||||
name: "Name"
|
||||
}
|
||||
expect(() => {
|
||||
validator.validateReleaseUpdate(releaseResponse)
|
||||
}).not.toThrow()
|
||||
})
|
||||
|
||||
it('should not throw if draft & prerelease is enabled', () => {
|
||||
const releaseResponse = {
|
||||
draft: true,
|
||||
prerelease: true,
|
||||
name: "Name"
|
||||
}
|
||||
expect(() => {
|
||||
validator.validateReleaseUpdate(releaseResponse)
|
||||
}).not.toThrow()
|
||||
})
|
||||
|
||||
it('should default error message release name to release', () => {
|
||||
const releaseResponse = {
|
||||
draft: false,
|
||||
prerelease: false,
|
||||
name: null
|
||||
}
|
||||
expect(() => {
|
||||
validator.validateReleaseUpdate(releaseResponse)
|
||||
}).toThrow(`Tried to update "release" which is neither a draft or prerelease. (updateOnlyUnreleased is on)`)
|
||||
})
|
||||
})
|
||||
})
|
||||
10
action.yml
10
action.yml
@@ -94,7 +94,11 @@ inputs:
|
||||
repo:
|
||||
description: "Optionally specify the repo where the release should be generated. Defaults to current repo"
|
||||
required: false
|
||||
default: ''
|
||||
default: ''
|
||||
skipIfReleaseExists:
|
||||
description: "When skipIfReleaseExists is enabled the action will be skipped if a non-draft release already exists for the provided tag."
|
||||
required: false
|
||||
default: 'false'
|
||||
tag:
|
||||
description: 'An optional tag for the release. If this is omitted the git ref will be used (if it is a tag).'
|
||||
required: false
|
||||
@@ -103,6 +107,10 @@ inputs:
|
||||
description: 'The Github token.'
|
||||
required: false
|
||||
default: ${{ github.token }}
|
||||
updateOnlyUnreleased:
|
||||
description: "When allowUpdates is enabled, this will fail the action if the release it is updating is not a draft or a prerelease."
|
||||
required: false
|
||||
default: 'false'
|
||||
outputs:
|
||||
id:
|
||||
description: 'The identifier of the created release.'
|
||||
|
||||
191
dist/index.js
vendored
191
dist/index.js
vendored
@@ -6,6 +6,25 @@ require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap
|
||||
|
||||
"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.prototype.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) {
|
||||
@@ -17,17 +36,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.Action = void 0;
|
||||
const core = __importStar(__nccwpck_require__(2559));
|
||||
const GithubError_1 = __nccwpck_require__(7433);
|
||||
const ReleaseValidator_1 = __nccwpck_require__(7579);
|
||||
class Action {
|
||||
constructor(inputs, outputs, releases, uploader, artifactDestroyer) {
|
||||
constructor(inputs, outputs, releases, uploader, artifactDestroyer, skipper) {
|
||||
this.inputs = inputs;
|
||||
this.outputs = outputs;
|
||||
this.releases = releases;
|
||||
this.uploader = uploader;
|
||||
this.artifactDestroyer = artifactDestroyer;
|
||||
this.skipper = skipper;
|
||||
this.releaseValidator = new ReleaseValidator_1.ReleaseValidator(inputs.updateOnlyUnreleased);
|
||||
}
|
||||
perform() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (yield this.skipper.shouldSkip()) {
|
||||
core.notice("Skipping action, release already exists and skipIfReleaseExists is enabled.");
|
||||
return;
|
||||
}
|
||||
const releaseResponse = yield this.createOrUpdateRelease();
|
||||
const releaseData = releaseResponse.data;
|
||||
const releaseId = releaseData.id;
|
||||
@@ -52,6 +79,8 @@ class Action {
|
||||
catch (error) {
|
||||
return yield this.checkForMissingReleaseError(error);
|
||||
}
|
||||
// Fail if this isn't an unreleased release & updateOnlyUnreleased is enabled.
|
||||
this.releaseValidator.validateReleaseUpdate(getResponse.data);
|
||||
return yield this.updateRelease(getResponse.data.id);
|
||||
}
|
||||
else {
|
||||
@@ -107,6 +136,50 @@ class Action {
|
||||
exports.Action = Action;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 2746:
|
||||
/***/ (function(__unused_webpack_module, exports) {
|
||||
|
||||
"use strict";
|
||||
|
||||
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.ReleaseActionSkipper = void 0;
|
||||
class ReleaseActionSkipper {
|
||||
constructor(skipIfReleaseExists, releases, tag) {
|
||||
this.skipIfReleaseExists = skipIfReleaseExists;
|
||||
this.releases = releases;
|
||||
this.tag = tag;
|
||||
}
|
||||
shouldSkip() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (!this.skipIfReleaseExists) {
|
||||
// Bail if skip flag isn't set.
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
const getResponse = yield this.releases.getByTag(this.tag);
|
||||
return getResponse.data != null;
|
||||
}
|
||||
catch (error) {
|
||||
// There is either no release or something else went wrong. Either way, run the action.
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.ReleaseActionSkipper = ReleaseActionSkipper;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 8568:
|
||||
@@ -121,14 +194,14 @@ const fs_1 = __nccwpck_require__(7147);
|
||||
class Artifact {
|
||||
constructor(path, contentType = "raw") {
|
||||
this.path = path;
|
||||
this.name = (0, path_1.basename)(path);
|
||||
this.name = path_1.basename(path);
|
||||
this.contentType = contentType;
|
||||
}
|
||||
get contentLength() {
|
||||
return (0, fs_1.statSync)(this.path).size;
|
||||
return fs_1.statSync(this.path).size;
|
||||
}
|
||||
readFile() {
|
||||
return (0, fs_1.readFileSync)(this.path);
|
||||
return fs_1.readFileSync(this.path);
|
||||
}
|
||||
}
|
||||
exports.Artifact = Artifact;
|
||||
@@ -143,11 +216,7 @@ exports.Artifact = Artifact;
|
||||
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -203,11 +272,7 @@ exports.GithubArtifactDestroyer = GithubArtifactDestroyer;
|
||||
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -234,6 +299,7 @@ const Globber_1 = __nccwpck_require__(8259);
|
||||
const Artifact_1 = __nccwpck_require__(8568);
|
||||
const untildify_1 = __importDefault(__nccwpck_require__(6732));
|
||||
const ArtifactPathValidator_1 = __nccwpck_require__(7818);
|
||||
const PathNormalizer_1 = __nccwpck_require__(8103);
|
||||
class FileArtifactGlobber {
|
||||
constructor(globber = new Globber_1.FileGlobber()) {
|
||||
this.globber = globber;
|
||||
@@ -242,6 +308,7 @@ class FileArtifactGlobber {
|
||||
const split = /[,\n]/;
|
||||
return artifact.split(split)
|
||||
.map(path => path.trimStart())
|
||||
.map(path => PathNormalizer_1.PathNormalizer.normalizePath(path))
|
||||
.map(path => FileArtifactGlobber.expandPath(path))
|
||||
.map(pattern => this.globPattern(pattern, errorsFailBuild))
|
||||
.map((globResult) => FileArtifactGlobber.validatePattern(errorsFailBuild, globResult[1], globResult[0]))
|
||||
@@ -271,7 +338,7 @@ class FileArtifactGlobber {
|
||||
throw Error(`Artifact pattern :${pattern} did not match any files`);
|
||||
}
|
||||
static expandPath(path) {
|
||||
return (0, untildify_1.default)(path);
|
||||
return untildify_1.default(path);
|
||||
}
|
||||
}
|
||||
exports.FileArtifactGlobber = FileArtifactGlobber;
|
||||
@@ -286,11 +353,7 @@ exports.FileArtifactGlobber = FileArtifactGlobber;
|
||||
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -328,7 +391,7 @@ class ArtifactPathValidator {
|
||||
}
|
||||
}
|
||||
verifyNotDirectory(path) {
|
||||
const isDir = (0, fs_1.statSync)(path).isDirectory();
|
||||
const isDir = fs_1.statSync(path).isDirectory();
|
||||
if (isDir) {
|
||||
const message = `Artifact is a directory:${path}. Directories can not be uploaded to a release.`;
|
||||
this.reportError(message);
|
||||
@@ -356,11 +419,7 @@ exports.ArtifactPathValidator = ArtifactPathValidator;
|
||||
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -587,11 +646,7 @@ exports.FileGlobber = FileGlobber;
|
||||
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -722,6 +777,9 @@ class CoreInputs {
|
||||
}
|
||||
return this.context.repo.repo;
|
||||
}
|
||||
get skipIfReleaseExists() {
|
||||
return core.getBooleanInput("skipIfReleaseExists");
|
||||
}
|
||||
get tag() {
|
||||
const tag = core.getInput('tag');
|
||||
if (tag) {
|
||||
@@ -766,11 +824,14 @@ class CoreInputs {
|
||||
return undefined;
|
||||
return this.name;
|
||||
}
|
||||
get updateOnlyUnreleased() {
|
||||
return core.getInput('updateOnlyUnreleased') == 'true';
|
||||
}
|
||||
static get omitNameDuringUpdate() {
|
||||
return core.getInput('omitNameDuringUpdate') == 'true';
|
||||
}
|
||||
stringFromFile(path) {
|
||||
return (0, fs_1.readFileSync)(path, 'utf-8');
|
||||
return fs_1.readFileSync(path, 'utf-8');
|
||||
}
|
||||
}
|
||||
exports.CoreInputs = CoreInputs;
|
||||
@@ -785,11 +846,7 @@ exports.CoreInputs = CoreInputs;
|
||||
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -819,6 +876,53 @@ class CoreOutputs {
|
||||
exports.CoreOutputs = CoreOutputs;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 8103:
|
||||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||
|
||||
"use strict";
|
||||
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.PathNormalizer = void 0;
|
||||
const path_1 = __importDefault(__nccwpck_require__(1017));
|
||||
class PathNormalizer {
|
||||
static normalizePath(pathString) {
|
||||
return pathString.split(path_1.default.sep).join("/");
|
||||
}
|
||||
}
|
||||
exports.PathNormalizer = PathNormalizer;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 7579:
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.ReleaseValidator = void 0;
|
||||
class ReleaseValidator {
|
||||
constructor(updateOnlyUnreleased) {
|
||||
this.updateOnlyUnreleased = updateOnlyUnreleased;
|
||||
}
|
||||
validateReleaseUpdate(releaseResponse) {
|
||||
var _a;
|
||||
if (!this.updateOnlyUnreleased) {
|
||||
return;
|
||||
}
|
||||
if (!releaseResponse.draft && !releaseResponse.prerelease) {
|
||||
throw new Error(`Tried to update "${(_a = releaseResponse.name) !== null && _a !== void 0 ? _a : "release"}" which is neither a draft or prerelease. (updateOnlyUnreleased is on)`);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.ReleaseValidator = ReleaseValidator;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 184:
|
||||
@@ -940,11 +1044,7 @@ exports.GithubReleases = GithubReleases;
|
||||
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -981,6 +1081,7 @@ const ArtifactGlobber_1 = __nccwpck_require__(8924);
|
||||
const GithubError_1 = __nccwpck_require__(7433);
|
||||
const Outputs_1 = __nccwpck_require__(6650);
|
||||
const ArtifactDestroyer_1 = __nccwpck_require__(1770);
|
||||
const ActionSkipper_1 = __nccwpck_require__(2746);
|
||||
function run() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
@@ -1001,9 +1102,10 @@ function createAction() {
|
||||
const inputs = new Inputs_1.CoreInputs(globber, context);
|
||||
const outputs = new Outputs_1.CoreOutputs();
|
||||
const releases = new Releases_1.GithubReleases(inputs, git);
|
||||
const skipper = new ActionSkipper_1.ReleaseActionSkipper(inputs.skipIfReleaseExists, releases, inputs.tag);
|
||||
const uploader = new ArtifactUploader_1.GithubArtifactUploader(releases, inputs.replacesArtifacts, inputs.artifactErrorsFailBuild);
|
||||
const artifactDestroyer = new ArtifactDestroyer_1.GithubArtifactDestroyer(releases);
|
||||
return new Action_1.Action(inputs, outputs, releases, uploader, artifactDestroyer);
|
||||
return new Action_1.Action(inputs, outputs, releases, uploader, artifactDestroyer, skipper);
|
||||
}
|
||||
run();
|
||||
|
||||
@@ -5520,6 +5622,9 @@ function range(a, b, str) {
|
||||
var i = ai;
|
||||
|
||||
if (ai >= 0 && bi > 0) {
|
||||
if(a===b) {
|
||||
return [ai, bi];
|
||||
}
|
||||
begs = [];
|
||||
left = str.length;
|
||||
|
||||
|
||||
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -1,4 +1,23 @@
|
||||
"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.prototype.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) {
|
||||
@@ -10,17 +29,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Action = void 0;
|
||||
const core = __importStar(require("@actions/core"));
|
||||
const GithubError_1 = require("./GithubError");
|
||||
const ReleaseValidator_1 = require("./ReleaseValidator");
|
||||
class Action {
|
||||
constructor(inputs, outputs, releases, uploader, artifactDestroyer) {
|
||||
constructor(inputs, outputs, releases, uploader, artifactDestroyer, skipper) {
|
||||
this.inputs = inputs;
|
||||
this.outputs = outputs;
|
||||
this.releases = releases;
|
||||
this.uploader = uploader;
|
||||
this.artifactDestroyer = artifactDestroyer;
|
||||
this.skipper = skipper;
|
||||
this.releaseValidator = new ReleaseValidator_1.ReleaseValidator(inputs.updateOnlyUnreleased);
|
||||
}
|
||||
perform() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (yield this.skipper.shouldSkip()) {
|
||||
core.notice("Skipping action, release already exists and skipIfReleaseExists is enabled.");
|
||||
return;
|
||||
}
|
||||
const releaseResponse = yield this.createOrUpdateRelease();
|
||||
const releaseData = releaseResponse.data;
|
||||
const releaseId = releaseData.id;
|
||||
@@ -45,6 +72,8 @@ class Action {
|
||||
catch (error) {
|
||||
return yield this.checkForMissingReleaseError(error);
|
||||
}
|
||||
// Fail if this isn't an unreleased release & updateOnlyUnreleased is enabled.
|
||||
this.releaseValidator.validateReleaseUpdate(getResponse.data);
|
||||
return yield this.updateRelease(getResponse.data.id);
|
||||
}
|
||||
else {
|
||||
|
||||
36
lib/ActionSkipper.js
Normal file
36
lib/ActionSkipper.js
Normal file
@@ -0,0 +1,36 @@
|
||||
"use strict";
|
||||
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.ReleaseActionSkipper = void 0;
|
||||
class ReleaseActionSkipper {
|
||||
constructor(skipIfReleaseExists, releases, tag) {
|
||||
this.skipIfReleaseExists = skipIfReleaseExists;
|
||||
this.releases = releases;
|
||||
this.tag = tag;
|
||||
}
|
||||
shouldSkip() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (!this.skipIfReleaseExists) {
|
||||
// Bail if skip flag isn't set.
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
const getResponse = yield this.releases.getByTag(this.tag);
|
||||
return getResponse.data != null;
|
||||
}
|
||||
catch (error) {
|
||||
// There is either no release or something else went wrong. Either way, run the action.
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.ReleaseActionSkipper = ReleaseActionSkipper;
|
||||
@@ -6,14 +6,14 @@ const fs_1 = require("fs");
|
||||
class Artifact {
|
||||
constructor(path, contentType = "raw") {
|
||||
this.path = path;
|
||||
this.name = (0, path_1.basename)(path);
|
||||
this.name = path_1.basename(path);
|
||||
this.contentType = contentType;
|
||||
}
|
||||
get contentLength() {
|
||||
return (0, fs_1.statSync)(this.path).size;
|
||||
return fs_1.statSync(this.path).size;
|
||||
}
|
||||
readFile() {
|
||||
return (0, fs_1.readFileSync)(this.path);
|
||||
return fs_1.readFileSync(this.path);
|
||||
}
|
||||
}
|
||||
exports.Artifact = Artifact;
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -32,6 +28,7 @@ const Globber_1 = require("./Globber");
|
||||
const Artifact_1 = require("./Artifact");
|
||||
const untildify_1 = __importDefault(require("untildify"));
|
||||
const ArtifactPathValidator_1 = require("./ArtifactPathValidator");
|
||||
const PathNormalizer_1 = require("./PathNormalizer");
|
||||
class FileArtifactGlobber {
|
||||
constructor(globber = new Globber_1.FileGlobber()) {
|
||||
this.globber = globber;
|
||||
@@ -40,6 +37,7 @@ class FileArtifactGlobber {
|
||||
const split = /[,\n]/;
|
||||
return artifact.split(split)
|
||||
.map(path => path.trimStart())
|
||||
.map(path => PathNormalizer_1.PathNormalizer.normalizePath(path))
|
||||
.map(path => FileArtifactGlobber.expandPath(path))
|
||||
.map(pattern => this.globPattern(pattern, errorsFailBuild))
|
||||
.map((globResult) => FileArtifactGlobber.validatePattern(errorsFailBuild, globResult[1], globResult[0]))
|
||||
@@ -69,7 +67,7 @@ class FileArtifactGlobber {
|
||||
throw Error(`Artifact pattern :${pattern} did not match any files`);
|
||||
}
|
||||
static expandPath(path) {
|
||||
return (0, untildify_1.default)(path);
|
||||
return untildify_1.default(path);
|
||||
}
|
||||
}
|
||||
exports.FileArtifactGlobber = FileArtifactGlobber;
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -43,7 +39,7 @@ class ArtifactPathValidator {
|
||||
}
|
||||
}
|
||||
verifyNotDirectory(path) {
|
||||
const isDir = (0, fs_1.statSync)(path).isDirectory();
|
||||
const isDir = fs_1.statSync(path).isDirectory();
|
||||
if (isDir) {
|
||||
const message = `Artifact is a directory:${path}. Directories can not be uploaded to a release.`;
|
||||
this.reportError(message);
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -136,6 +132,9 @@ class CoreInputs {
|
||||
}
|
||||
return this.context.repo.repo;
|
||||
}
|
||||
get skipIfReleaseExists() {
|
||||
return core.getBooleanInput("skipIfReleaseExists");
|
||||
}
|
||||
get tag() {
|
||||
const tag = core.getInput('tag');
|
||||
if (tag) {
|
||||
@@ -180,11 +179,14 @@ class CoreInputs {
|
||||
return undefined;
|
||||
return this.name;
|
||||
}
|
||||
get updateOnlyUnreleased() {
|
||||
return core.getInput('updateOnlyUnreleased') == 'true';
|
||||
}
|
||||
static get omitNameDuringUpdate() {
|
||||
return core.getInput('omitNameDuringUpdate') == 'true';
|
||||
}
|
||||
stringFromFile(path) {
|
||||
return (0, fs_1.readFileSync)(path, 'utf-8');
|
||||
return fs_1.readFileSync(path, 'utf-8');
|
||||
}
|
||||
}
|
||||
exports.CoreInputs = CoreInputs;
|
||||
|
||||
10
lib/Main.js
10
lib/Main.js
@@ -1,11 +1,7 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
@@ -42,6 +38,7 @@ const ArtifactGlobber_1 = require("./ArtifactGlobber");
|
||||
const GithubError_1 = require("./GithubError");
|
||||
const Outputs_1 = require("./Outputs");
|
||||
const ArtifactDestroyer_1 = require("./ArtifactDestroyer");
|
||||
const ActionSkipper_1 = require("./ActionSkipper");
|
||||
function run() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
@@ -62,8 +59,9 @@ function createAction() {
|
||||
const inputs = new Inputs_1.CoreInputs(globber, context);
|
||||
const outputs = new Outputs_1.CoreOutputs();
|
||||
const releases = new Releases_1.GithubReleases(inputs, git);
|
||||
const skipper = new ActionSkipper_1.ReleaseActionSkipper(inputs.skipIfReleaseExists, releases, inputs.tag);
|
||||
const uploader = new ArtifactUploader_1.GithubArtifactUploader(releases, inputs.replacesArtifacts, inputs.artifactErrorsFailBuild);
|
||||
const artifactDestroyer = new ArtifactDestroyer_1.GithubArtifactDestroyer(releases);
|
||||
return new Action_1.Action(inputs, outputs, releases, uploader, artifactDestroyer);
|
||||
return new Action_1.Action(inputs, outputs, releases, uploader, artifactDestroyer, skipper);
|
||||
}
|
||||
run();
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
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];
|
||||
|
||||
13
lib/PathNormalizer.js
Normal file
13
lib/PathNormalizer.js
Normal file
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.PathNormalizer = void 0;
|
||||
const path_1 = __importDefault(require("path"));
|
||||
class PathNormalizer {
|
||||
static normalizePath(pathString) {
|
||||
return pathString.split(path_1.default.sep).join("/");
|
||||
}
|
||||
}
|
||||
exports.PathNormalizer = PathNormalizer;
|
||||
18
lib/ReleaseValidator.js
Normal file
18
lib/ReleaseValidator.js
Normal file
@@ -0,0 +1,18 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ReleaseValidator = void 0;
|
||||
class ReleaseValidator {
|
||||
constructor(updateOnlyUnreleased) {
|
||||
this.updateOnlyUnreleased = updateOnlyUnreleased;
|
||||
}
|
||||
validateReleaseUpdate(releaseResponse) {
|
||||
var _a;
|
||||
if (!this.updateOnlyUnreleased) {
|
||||
return;
|
||||
}
|
||||
if (!releaseResponse.draft && !releaseResponse.prerelease) {
|
||||
throw new Error(`Tried to update "${(_a = releaseResponse.name) !== null && _a !== void 0 ? _a : "release"}" which is neither a draft or prerelease. (updateOnlyUnreleased is on)`);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.ReleaseValidator = ReleaseValidator;
|
||||
@@ -62,9 +62,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^28.1.1",
|
||||
"@types/node": "^18.7.23",
|
||||
"@types/node": "^18.11.8",
|
||||
"jest": "^28.1.1",
|
||||
"jest-circus": "^29.1.2",
|
||||
"jest-circus": "^29.2.2",
|
||||
"ts-jest": "^28.0.5",
|
||||
"typescript": "^4.8.4"
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import * as core from '@actions/core';
|
||||
import {Inputs} from "./Inputs";
|
||||
import {
|
||||
CreateOrUpdateReleaseResponse,
|
||||
@@ -10,27 +11,40 @@ import {ArtifactUploader} from "./ArtifactUploader";
|
||||
import {GithubError} from "./GithubError";
|
||||
import {Outputs} from "./Outputs";
|
||||
import {ArtifactDestroyer} from "./ArtifactDestroyer";
|
||||
import {ReleaseValidator} from "./ReleaseValidator";
|
||||
import {ActionSkipper} from "./ActionSkipper";
|
||||
|
||||
export class Action {
|
||||
private inputs: Inputs
|
||||
private outputs: Outputs
|
||||
private releases: Releases
|
||||
private artifactDestroyer: ArtifactDestroyer
|
||||
private uploader: ArtifactUploader
|
||||
private artifactDestroyer: ArtifactDestroyer
|
||||
private skipper: ActionSkipper
|
||||
|
||||
private releaseValidator: ReleaseValidator
|
||||
|
||||
constructor(inputs: Inputs,
|
||||
outputs: Outputs,
|
||||
releases: Releases,
|
||||
uploader: ArtifactUploader,
|
||||
artifactDestroyer: ArtifactDestroyer) {
|
||||
artifactDestroyer: ArtifactDestroyer,
|
||||
skipper: ActionSkipper) {
|
||||
this.inputs = inputs
|
||||
this.outputs = outputs
|
||||
this.releases = releases
|
||||
this.uploader = uploader
|
||||
this.artifactDestroyer = artifactDestroyer
|
||||
this.skipper = skipper
|
||||
this.releaseValidator = new ReleaseValidator(inputs.updateOnlyUnreleased)
|
||||
}
|
||||
|
||||
async perform() {
|
||||
if (await this.skipper.shouldSkip()) {
|
||||
core.notice("Skipping action, release already exists and skipIfReleaseExists is enabled.")
|
||||
return
|
||||
}
|
||||
|
||||
const releaseResponse = await this.createOrUpdateRelease();
|
||||
const releaseData = releaseResponse.data
|
||||
const releaseId = releaseData.id
|
||||
@@ -56,6 +70,9 @@ export class Action {
|
||||
} catch (error: any) {
|
||||
return await this.checkForMissingReleaseError(error)
|
||||
}
|
||||
|
||||
// Fail if this isn't an unreleased release & updateOnlyUnreleased is enabled.
|
||||
this.releaseValidator.validateReleaseUpdate(getResponse.data)
|
||||
|
||||
return await this.updateRelease(getResponse.data.id)
|
||||
} else {
|
||||
|
||||
27
src/ActionSkipper.ts
Normal file
27
src/ActionSkipper.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import {Releases} from "./Releases";
|
||||
|
||||
export interface ActionSkipper {
|
||||
shouldSkip(): Promise<boolean>
|
||||
}
|
||||
|
||||
export class ReleaseActionSkipper {
|
||||
constructor(private skipIfReleaseExists: boolean,
|
||||
private releases: Releases,
|
||||
private tag: string) {
|
||||
}
|
||||
|
||||
async shouldSkip(): Promise<boolean> {
|
||||
if (!this.skipIfReleaseExists) {
|
||||
// Bail if skip flag isn't set.
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
const getResponse = await this.releases.getByTag(this.tag)
|
||||
return getResponse.data != null
|
||||
} catch (error: any) {
|
||||
// There is either no release or something else went wrong. Either way, run the action.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ import {Globber, FileGlobber} from "./Globber";
|
||||
import {Artifact} from "./Artifact";
|
||||
import untildify from "untildify";
|
||||
import {ArtifactPathValidator} from "./ArtifactPathValidator";
|
||||
import {PathNormalizer} from "./PathNormalizer";
|
||||
|
||||
export interface ArtifactGlobber {
|
||||
globArtifactString(artifact: string, contentType: string, errorsFailBuild: boolean): Artifact[]
|
||||
@@ -19,6 +20,7 @@ export class FileArtifactGlobber implements ArtifactGlobber {
|
||||
const split = /[,\n]/
|
||||
return artifact.split(split)
|
||||
.map(path => path.trimStart())
|
||||
.map(path => PathNormalizer.normalizePath(path))
|
||||
.map(path => FileArtifactGlobber.expandPath(path))
|
||||
.map(pattern => this.globPattern(pattern, errorsFailBuild))
|
||||
.map((globResult) => FileArtifactGlobber.validatePattern(errorsFailBuild, globResult[1], globResult[0]))
|
||||
|
||||
@@ -19,12 +19,14 @@ export interface Inputs {
|
||||
readonly removeArtifacts: boolean
|
||||
readonly replacesArtifacts: boolean
|
||||
readonly repo: string
|
||||
readonly skipIfReleaseExists: boolean
|
||||
readonly tag: string
|
||||
readonly token: string
|
||||
readonly updatedDraft?: boolean
|
||||
readonly updatedReleaseBody?: string
|
||||
readonly updatedReleaseName?: string
|
||||
readonly updatedPrerelease?: boolean
|
||||
readonly updateOnlyUnreleased: boolean
|
||||
}
|
||||
|
||||
export class CoreInputs implements Inputs {
|
||||
@@ -159,6 +161,10 @@ export class CoreInputs implements Inputs {
|
||||
return this.context.repo.repo
|
||||
}
|
||||
|
||||
get skipIfReleaseExists(): boolean {
|
||||
return core.getBooleanInput("skipIfReleaseExists")
|
||||
}
|
||||
|
||||
get tag(): string {
|
||||
const tag = core.getInput('tag')
|
||||
if (tag) {
|
||||
@@ -209,6 +215,10 @@ export class CoreInputs implements Inputs {
|
||||
if (CoreInputs.omitName || CoreInputs.omitNameDuringUpdate) return undefined
|
||||
return this.name
|
||||
}
|
||||
|
||||
get updateOnlyUnreleased(): boolean {
|
||||
return core.getInput('updateOnlyUnreleased') == 'true'
|
||||
}
|
||||
|
||||
private static get omitNameDuringUpdate(): boolean {
|
||||
return core.getInput('omitNameDuringUpdate') == 'true'
|
||||
|
||||
@@ -8,6 +8,7 @@ import {FileArtifactGlobber} from './ArtifactGlobber';
|
||||
import {GithubError} from './GithubError';
|
||||
import {CoreOutputs} from "./Outputs";
|
||||
import {GithubArtifactDestroyer} from "./ArtifactDestroyer";
|
||||
import {ActionSkipper, ReleaseActionSkipper} from "./ActionSkipper";
|
||||
|
||||
async function run() {
|
||||
try {
|
||||
@@ -28,10 +29,11 @@ function createAction(): Action {
|
||||
const inputs = new CoreInputs(globber, context)
|
||||
const outputs = new CoreOutputs()
|
||||
const releases = new GithubReleases(inputs, git)
|
||||
const skipper = new ReleaseActionSkipper(inputs.skipIfReleaseExists, releases, inputs.tag)
|
||||
const uploader = new GithubArtifactUploader(releases, inputs.replacesArtifacts, inputs.artifactErrorsFailBuild)
|
||||
const artifactDestroyer = new GithubArtifactDestroyer(releases)
|
||||
|
||||
return new Action(inputs, outputs, releases, uploader, artifactDestroyer)
|
||||
return new Action(inputs, outputs, releases, uploader, artifactDestroyer, skipper)
|
||||
}
|
||||
|
||||
run();
|
||||
|
||||
7
src/PathNormalizer.ts
Normal file
7
src/PathNormalizer.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import path from "path";
|
||||
|
||||
export class PathNormalizer {
|
||||
static normalizePath(pathString: string): string {
|
||||
return pathString.split(path.sep).join("/")
|
||||
}
|
||||
}
|
||||
20
src/ReleaseValidator.ts
Normal file
20
src/ReleaseValidator.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
export class ReleaseValidator {
|
||||
constructor(private updateOnlyUnreleased: boolean) {
|
||||
}
|
||||
|
||||
validateReleaseUpdate(releaseResponse: ReleaseStageArguments) {
|
||||
if (!this.updateOnlyUnreleased) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!releaseResponse.draft && !releaseResponse.prerelease) {
|
||||
throw new Error(`Tried to update "${releaseResponse.name ?? "release"}" which is neither a draft or prerelease. (updateOnlyUnreleased is on)`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export type ReleaseStageArguments = {
|
||||
draft: boolean
|
||||
name: string | null
|
||||
prerelease: boolean
|
||||
}
|
||||
426
yarn.lock
426
yarn.lock
@@ -621,16 +621,16 @@
|
||||
jest-util "^28.1.1"
|
||||
slash "^3.0.0"
|
||||
|
||||
"@jest/console@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.1.2.tgz#0ae975a70004696f8320490fcaa1a4152f7b62e4"
|
||||
integrity sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==
|
||||
"@jest/console@^29.2.1":
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.2.1.tgz#5f2c62dcdd5ce66e94b6d6729e021758bceea090"
|
||||
integrity sha512-MF8Adcw+WPLZGBiNxn76DOuczG3BhODTcMlDCA4+cFi41OkaY/lyI0XUUhi73F88Y+7IHoGmD80pN5CtxQUdSw==
|
||||
dependencies:
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/node" "*"
|
||||
chalk "^4.0.0"
|
||||
jest-message-util "^29.1.2"
|
||||
jest-util "^29.1.2"
|
||||
jest-message-util "^29.2.1"
|
||||
jest-util "^29.2.1"
|
||||
slash "^3.0.0"
|
||||
|
||||
"@jest/core@^28.1.1":
|
||||
@@ -678,15 +678,15 @@
|
||||
"@types/node" "*"
|
||||
jest-mock "^28.1.1"
|
||||
|
||||
"@jest/environment@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.1.2.tgz#bb51a43fce9f960ba9a48f0b5b556f30618ebc0a"
|
||||
integrity sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==
|
||||
"@jest/environment@^29.2.2":
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.2.2.tgz#481e729048d42e87d04842c38aa4d09c507f53b0"
|
||||
integrity sha512-OWn+Vhu0I1yxuGBJEFFekMYc8aGBGrY4rt47SOh/IFaI+D7ZHCk7pKRiSoZ2/Ml7b0Ony3ydmEHRx/tEOC7H1A==
|
||||
dependencies:
|
||||
"@jest/fake-timers" "^29.1.2"
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/fake-timers" "^29.2.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/node" "*"
|
||||
jest-mock "^29.1.2"
|
||||
jest-mock "^29.2.2"
|
||||
|
||||
"@jest/expect-utils@^28.1.1":
|
||||
version "28.1.1"
|
||||
@@ -695,12 +695,12 @@
|
||||
dependencies:
|
||||
jest-get-type "^28.0.2"
|
||||
|
||||
"@jest/expect-utils@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.1.2.tgz#66dbb514d38f7d21456bc774419c9ae5cca3f88d"
|
||||
integrity sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg==
|
||||
"@jest/expect-utils@^29.2.2":
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.2.2.tgz#460a5b5a3caf84d4feb2668677393dd66ff98665"
|
||||
integrity sha512-vwnVmrVhTmGgQzyvcpze08br91OL61t9O0lJMDyb6Y/D8EKQ9V7rGUb/p7PDt0GPzK0zFYqXWFo4EO2legXmkg==
|
||||
dependencies:
|
||||
jest-get-type "^29.0.0"
|
||||
jest-get-type "^29.2.0"
|
||||
|
||||
"@jest/expect@^28.1.1":
|
||||
version "28.1.1"
|
||||
@@ -710,13 +710,13 @@
|
||||
expect "^28.1.1"
|
||||
jest-snapshot "^28.1.1"
|
||||
|
||||
"@jest/expect@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.1.2.tgz#334a86395f621f1ab63ad95b06a588b9114d7b7a"
|
||||
integrity sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==
|
||||
"@jest/expect@^29.2.2":
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.2.2.tgz#81edbd33afbde7795ca07ff6b4753d15205032e4"
|
||||
integrity sha512-zwblIZnrIVt8z/SiEeJ7Q9wKKuB+/GS4yZe9zw7gMqfGf4C5hBLGrVyxu1SzDbVSqyMSlprKl3WL1r80cBNkgg==
|
||||
dependencies:
|
||||
expect "^29.1.2"
|
||||
jest-snapshot "^29.1.2"
|
||||
expect "^29.2.2"
|
||||
jest-snapshot "^29.2.2"
|
||||
|
||||
"@jest/fake-timers@^28.1.1":
|
||||
version "28.1.1"
|
||||
@@ -730,17 +730,17 @@
|
||||
jest-mock "^28.1.1"
|
||||
jest-util "^28.1.1"
|
||||
|
||||
"@jest/fake-timers@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.1.2.tgz#f157cdf23b4da48ce46cb00fea28ed1b57fc271a"
|
||||
integrity sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==
|
||||
"@jest/fake-timers@^29.2.2":
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.2.2.tgz#d8332e6e3cfa99cde4bc87d04a17d6b699deb340"
|
||||
integrity sha512-nqaW3y2aSyZDl7zQ7t1XogsxeavNpH6kkdq+EpXncIDvAkjvFD7hmhcIs1nWloengEWUoWqkqSA6MSbf9w6DgA==
|
||||
dependencies:
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@sinonjs/fake-timers" "^9.1.2"
|
||||
"@types/node" "*"
|
||||
jest-message-util "^29.1.2"
|
||||
jest-mock "^29.1.2"
|
||||
jest-util "^29.1.2"
|
||||
jest-message-util "^29.2.1"
|
||||
jest-mock "^29.2.2"
|
||||
jest-util "^29.2.1"
|
||||
|
||||
"@jest/globals@^28.1.1":
|
||||
version "28.1.1"
|
||||
@@ -751,15 +751,15 @@
|
||||
"@jest/expect" "^28.1.1"
|
||||
"@jest/types" "^28.1.1"
|
||||
|
||||
"@jest/globals@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.1.2.tgz#826ede84bc280ae7f789cb72d325c48cd048b9d3"
|
||||
integrity sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==
|
||||
"@jest/globals@^29.2.2":
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.2.2.tgz#205ff1e795aa774301c2c0ba0be182558471b845"
|
||||
integrity sha512-/nt+5YMh65kYcfBhj38B3Hm0Trk4IsuMXNDGKE/swp36yydBWfz3OXkLqkSvoAtPW8IJMSJDFCbTM2oj5SNprw==
|
||||
dependencies:
|
||||
"@jest/environment" "^29.1.2"
|
||||
"@jest/expect" "^29.1.2"
|
||||
"@jest/types" "^29.1.2"
|
||||
jest-mock "^29.1.2"
|
||||
"@jest/environment" "^29.2.2"
|
||||
"@jest/expect" "^29.2.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
jest-mock "^29.2.2"
|
||||
|
||||
"@jest/reporters@^28.1.1":
|
||||
version "28.1.1"
|
||||
@@ -815,10 +815,10 @@
|
||||
callsites "^3.0.0"
|
||||
graceful-fs "^4.2.9"
|
||||
|
||||
"@jest/source-map@^29.0.0":
|
||||
version "29.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.0.0.tgz#f8d1518298089f8ae624e442bbb6eb870ee7783c"
|
||||
integrity sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==
|
||||
"@jest/source-map@^29.2.0":
|
||||
version "29.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744"
|
||||
integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==
|
||||
dependencies:
|
||||
"@jridgewell/trace-mapping" "^0.3.15"
|
||||
callsites "^3.0.0"
|
||||
@@ -834,13 +834,13 @@
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
collect-v8-coverage "^1.0.0"
|
||||
|
||||
"@jest/test-result@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.1.2.tgz#6a8d006eb2b31ce0287d1fc10d12b8ff8504f3c8"
|
||||
integrity sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==
|
||||
"@jest/test-result@^29.2.1":
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.2.1.tgz#f42dbf7b9ae465d0a93eee6131473b8bb3bd2edb"
|
||||
integrity sha512-lS4+H+VkhbX6z64tZP7PAUwPqhwj3kbuEHcaLuaBuB+riyaX7oa1txe0tXgrFj5hRWvZKvqO7LZDlNWeJ7VTPA==
|
||||
dependencies:
|
||||
"@jest/console" "^29.1.2"
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/console" "^29.2.1"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
collect-v8-coverage "^1.0.0"
|
||||
|
||||
@@ -875,22 +875,22 @@
|
||||
slash "^3.0.0"
|
||||
write-file-atomic "^4.0.1"
|
||||
|
||||
"@jest/transform@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.1.2.tgz#20f814696e04f090421f6d505c14bbfe0157062a"
|
||||
integrity sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==
|
||||
"@jest/transform@^29.2.2":
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.2.2.tgz#dfc03fc092b31ffea0c55917728e75bfcf8b5de6"
|
||||
integrity sha512-aPe6rrletyuEIt2axxgdtxljmzH8O/nrov4byy6pDw9S8inIrTV+2PnjyP/oFHMSynzGxJ2s6OHowBNMXp/Jzg==
|
||||
dependencies:
|
||||
"@babel/core" "^7.11.6"
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@jridgewell/trace-mapping" "^0.3.15"
|
||||
babel-plugin-istanbul "^6.1.1"
|
||||
chalk "^4.0.0"
|
||||
convert-source-map "^1.4.0"
|
||||
fast-json-stable-stringify "^2.1.0"
|
||||
graceful-fs "^4.2.9"
|
||||
jest-haste-map "^29.1.2"
|
||||
jest-regex-util "^29.0.0"
|
||||
jest-util "^29.1.2"
|
||||
jest-haste-map "^29.2.1"
|
||||
jest-regex-util "^29.2.0"
|
||||
jest-util "^29.2.1"
|
||||
micromatch "^4.0.4"
|
||||
pirates "^4.0.4"
|
||||
slash "^3.0.0"
|
||||
@@ -908,10 +908,10 @@
|
||||
"@types/yargs" "^17.0.8"
|
||||
chalk "^4.0.0"
|
||||
|
||||
"@jest/types@^29.1.2":
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.1.2.tgz#7442d32b16bcd7592d9614173078b8c334ec730a"
|
||||
integrity sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==
|
||||
"@jest/types@^29.2.1":
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.2.1.tgz#ec9c683094d4eb754e41e2119d8bdaef01cf6da0"
|
||||
integrity sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==
|
||||
dependencies:
|
||||
"@jest/schemas" "^29.0.0"
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
@@ -1206,10 +1206,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||
|
||||
"@types/node@*", "@types/node@>= 8", "@types/node@^18.7.23":
|
||||
version "18.7.23"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f"
|
||||
integrity sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==
|
||||
"@types/node@*", "@types/node@>= 8", "@types/node@^18.11.8":
|
||||
version "18.11.8"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.8.tgz#16d222a58d4363a2a359656dd20b28414de5d265"
|
||||
integrity sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A==
|
||||
|
||||
"@types/prettier@^2.1.5":
|
||||
version "2.3.0"
|
||||
@@ -1340,9 +1340,9 @@ babel-preset-jest@^28.1.1:
|
||||
babel-preset-current-node-syntax "^1.0.0"
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||
|
||||
before-after-hook@^2.2.0:
|
||||
version "2.2.2"
|
||||
@@ -1515,7 +1515,7 @@ color-name@~1.1.4:
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
||||
|
||||
convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
|
||||
version "1.7.0"
|
||||
@@ -1570,10 +1570,10 @@ diff-sequences@^28.1.1:
|
||||
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6"
|
||||
integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==
|
||||
|
||||
diff-sequences@^29.0.0:
|
||||
version "29.0.0"
|
||||
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.0.0.tgz#bae49972ef3933556bcb0800b72e8579d19d9e4f"
|
||||
integrity sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==
|
||||
diff-sequences@^29.2.0:
|
||||
version "29.2.0"
|
||||
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.2.0.tgz#4c55b5b40706c7b5d2c5c75999a50c56d214e8f6"
|
||||
integrity sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw==
|
||||
|
||||
electron-to-chromium@^1.4.118:
|
||||
version "1.4.147"
|
||||
@@ -1653,16 +1653,16 @@ expect@^28.1.1:
|
||||
jest-message-util "^28.1.1"
|
||||
jest-util "^28.1.1"
|
||||
|
||||
expect@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/expect/-/expect-29.1.2.tgz#82f8f28d7d408c7c68da3a386a490ee683e1eced"
|
||||
integrity sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw==
|
||||
expect@^29.2.2:
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/expect/-/expect-29.2.2.tgz#ba2dd0d7e818727710324a6e7f13dd0e6d086106"
|
||||
integrity sha512-hE09QerxZ5wXiOhqkXy5d2G9ar+EqOyifnCXCpMNu+vZ6DG9TJ6CO2c2kPDSLqERTTWrO7OZj8EkYHQqSd78Yw==
|
||||
dependencies:
|
||||
"@jest/expect-utils" "^29.1.2"
|
||||
jest-get-type "^29.0.0"
|
||||
jest-matcher-utils "^29.1.2"
|
||||
jest-message-util "^29.1.2"
|
||||
jest-util "^29.1.2"
|
||||
"@jest/expect-utils" "^29.2.2"
|
||||
jest-get-type "^29.2.0"
|
||||
jest-matcher-utils "^29.2.2"
|
||||
jest-message-util "^29.2.1"
|
||||
jest-util "^29.2.1"
|
||||
|
||||
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
|
||||
version "2.1.0"
|
||||
@@ -1934,28 +1934,28 @@ jest-circus@^28.1.1:
|
||||
stack-utils "^2.0.3"
|
||||
throat "^6.0.1"
|
||||
|
||||
jest-circus@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.1.2.tgz#4551068e432f169a53167fe1aef420cf51c8a735"
|
||||
integrity sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==
|
||||
jest-circus@^29.2.2:
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.2.2.tgz#1dc4d35fd49bf5e64d3cc505fb2db396237a6dfa"
|
||||
integrity sha512-upSdWxx+Mh4DV7oueuZndJ1NVdgtTsqM4YgywHEx05UMH5nxxA2Qu9T9T9XVuR021XxqSoaKvSmmpAbjwwwxMw==
|
||||
dependencies:
|
||||
"@jest/environment" "^29.1.2"
|
||||
"@jest/expect" "^29.1.2"
|
||||
"@jest/test-result" "^29.1.2"
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/environment" "^29.2.2"
|
||||
"@jest/expect" "^29.2.2"
|
||||
"@jest/test-result" "^29.2.1"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/node" "*"
|
||||
chalk "^4.0.0"
|
||||
co "^4.6.0"
|
||||
dedent "^0.7.0"
|
||||
is-generator-fn "^2.0.0"
|
||||
jest-each "^29.1.2"
|
||||
jest-matcher-utils "^29.1.2"
|
||||
jest-message-util "^29.1.2"
|
||||
jest-runtime "^29.1.2"
|
||||
jest-snapshot "^29.1.2"
|
||||
jest-util "^29.1.2"
|
||||
jest-each "^29.2.1"
|
||||
jest-matcher-utils "^29.2.2"
|
||||
jest-message-util "^29.2.1"
|
||||
jest-runtime "^29.2.2"
|
||||
jest-snapshot "^29.2.2"
|
||||
jest-util "^29.2.1"
|
||||
p-limit "^3.1.0"
|
||||
pretty-format "^29.1.2"
|
||||
pretty-format "^29.2.1"
|
||||
slash "^3.0.0"
|
||||
stack-utils "^2.0.3"
|
||||
|
||||
@@ -2025,15 +2025,15 @@ jest-diff@^28.1.1:
|
||||
jest-get-type "^28.0.2"
|
||||
pretty-format "^28.1.1"
|
||||
|
||||
jest-diff@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.1.2.tgz#bb7aaf5353227d6f4f96c5e7e8713ce576a607dc"
|
||||
integrity sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ==
|
||||
jest-diff@^29.2.1:
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.2.1.tgz#027e42f5a18b693fb2e88f81b0ccab533c08faee"
|
||||
integrity sha512-gfh/SMNlQmP3MOUgdzxPOd4XETDJifADpT937fN1iUGz+9DgOu2eUPHH25JDkLVcLwwqxv3GzVyK4VBUr9fjfA==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
diff-sequences "^29.0.0"
|
||||
jest-get-type "^29.0.0"
|
||||
pretty-format "^29.1.2"
|
||||
diff-sequences "^29.2.0"
|
||||
jest-get-type "^29.2.0"
|
||||
pretty-format "^29.2.1"
|
||||
|
||||
jest-docblock@^28.1.1:
|
||||
version "28.1.1"
|
||||
@@ -2053,16 +2053,16 @@ jest-each@^28.1.1:
|
||||
jest-util "^28.1.1"
|
||||
pretty-format "^28.1.1"
|
||||
|
||||
jest-each@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.1.2.tgz#d4c8532c07a846e79f194f7007ce7cb1987d1cd0"
|
||||
integrity sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==
|
||||
jest-each@^29.2.1:
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.2.1.tgz#6b0a88ee85c2ba27b571a6010c2e0c674f5c9b29"
|
||||
integrity sha512-sGP86H/CpWHMyK3qGIGFCgP6mt+o5tu9qG4+tobl0LNdgny0aitLXs9/EBacLy3Bwqy+v4uXClqJgASJWcruYw==
|
||||
dependencies:
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
chalk "^4.0.0"
|
||||
jest-get-type "^29.0.0"
|
||||
jest-util "^29.1.2"
|
||||
pretty-format "^29.1.2"
|
||||
jest-get-type "^29.2.0"
|
||||
jest-util "^29.2.1"
|
||||
pretty-format "^29.2.1"
|
||||
|
||||
jest-environment-node@^28.1.1:
|
||||
version "28.1.1"
|
||||
@@ -2086,10 +2086,10 @@ jest-get-type@^28.0.2:
|
||||
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203"
|
||||
integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==
|
||||
|
||||
jest-get-type@^29.0.0:
|
||||
version "29.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80"
|
||||
integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==
|
||||
jest-get-type@^29.2.0:
|
||||
version "29.2.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408"
|
||||
integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==
|
||||
|
||||
jest-haste-map@^28.1.1:
|
||||
version "28.1.1"
|
||||
@@ -2110,20 +2110,20 @@ jest-haste-map@^28.1.1:
|
||||
optionalDependencies:
|
||||
fsevents "^2.3.2"
|
||||
|
||||
jest-haste-map@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.1.2.tgz#93f3634aa921b6b654e7c94137b24e02e7ca6ac9"
|
||||
integrity sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==
|
||||
jest-haste-map@^29.2.1:
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.2.1.tgz#f803fec57f8075e6c55fb5cd551f99a72471c699"
|
||||
integrity sha512-wF460rAFmYc6ARcCFNw4MbGYQjYkvjovb9GBT+W10Um8q5nHq98jD6fHZMDMO3tA56S8XnmNkM8GcA8diSZfnA==
|
||||
dependencies:
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/graceful-fs" "^4.1.3"
|
||||
"@types/node" "*"
|
||||
anymatch "^3.0.3"
|
||||
fb-watchman "^2.0.0"
|
||||
graceful-fs "^4.2.9"
|
||||
jest-regex-util "^29.0.0"
|
||||
jest-util "^29.1.2"
|
||||
jest-worker "^29.1.2"
|
||||
jest-regex-util "^29.2.0"
|
||||
jest-util "^29.2.1"
|
||||
jest-worker "^29.2.1"
|
||||
micromatch "^4.0.4"
|
||||
walker "^1.0.8"
|
||||
optionalDependencies:
|
||||
@@ -2157,15 +2157,15 @@ jest-matcher-utils@^28.1.1:
|
||||
jest-get-type "^28.0.2"
|
||||
pretty-format "^28.1.1"
|
||||
|
||||
jest-matcher-utils@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz#e68c4bcc0266e70aa1a5c13fb7b8cd4695e318a1"
|
||||
integrity sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw==
|
||||
jest-matcher-utils@^29.2.2:
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz#9202f8e8d3a54733266784ce7763e9a08688269c"
|
||||
integrity sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
jest-diff "^29.1.2"
|
||||
jest-get-type "^29.0.0"
|
||||
pretty-format "^29.1.2"
|
||||
jest-diff "^29.2.1"
|
||||
jest-get-type "^29.2.0"
|
||||
pretty-format "^29.2.1"
|
||||
|
||||
jest-message-util@^28.1.1:
|
||||
version "28.1.1"
|
||||
@@ -2182,18 +2182,18 @@ jest-message-util@^28.1.1:
|
||||
slash "^3.0.0"
|
||||
stack-utils "^2.0.3"
|
||||
|
||||
jest-message-util@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.1.2.tgz#c21a33c25f9dc1ebfcd0f921d89438847a09a501"
|
||||
integrity sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==
|
||||
jest-message-util@^29.2.1:
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.2.1.tgz#3a51357fbbe0cc34236f17a90d772746cf8d9193"
|
||||
integrity sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.12.13"
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/stack-utils" "^2.0.0"
|
||||
chalk "^4.0.0"
|
||||
graceful-fs "^4.2.9"
|
||||
micromatch "^4.0.4"
|
||||
pretty-format "^29.1.2"
|
||||
pretty-format "^29.2.1"
|
||||
slash "^3.0.0"
|
||||
stack-utils "^2.0.3"
|
||||
|
||||
@@ -2205,14 +2205,14 @@ jest-mock@^28.1.1:
|
||||
"@jest/types" "^28.1.1"
|
||||
"@types/node" "*"
|
||||
|
||||
jest-mock@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.1.2.tgz#de47807edbb9d4abf8423f1d8d308d670105678c"
|
||||
integrity sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==
|
||||
jest-mock@^29.2.2:
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.2.2.tgz#9045618b3f9d27074bbcf2d55bdca6a5e2e8bca7"
|
||||
integrity sha512-1leySQxNAnivvbcx0sCB37itu8f4OX2S/+gxLAV4Z62shT4r4dTG9tACDywUAEZoLSr36aYUTsVp3WKwWt4PMQ==
|
||||
dependencies:
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/node" "*"
|
||||
jest-util "^29.1.2"
|
||||
jest-util "^29.2.1"
|
||||
|
||||
jest-pnp-resolver@^1.2.2:
|
||||
version "1.2.2"
|
||||
@@ -2224,10 +2224,10 @@ jest-regex-util@^28.0.2:
|
||||
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead"
|
||||
integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==
|
||||
|
||||
jest-regex-util@^29.0.0:
|
||||
version "29.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de"
|
||||
integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==
|
||||
jest-regex-util@^29.2.0:
|
||||
version "29.2.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b"
|
||||
integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==
|
||||
|
||||
jest-resolve-dependencies@^28.1.1:
|
||||
version "28.1.1"
|
||||
@@ -2252,17 +2252,17 @@ jest-resolve@^28.1.1:
|
||||
resolve.exports "^1.1.0"
|
||||
slash "^3.0.0"
|
||||
|
||||
jest-resolve@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.1.2.tgz#9dd8c2fc83e59ee7d676b14bd45a5f89e877741d"
|
||||
integrity sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==
|
||||
jest-resolve@^29.2.2:
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.2.2.tgz#ad6436053b0638b41e12bbddde2b66e1397b35b5"
|
||||
integrity sha512-3gaLpiC3kr14rJR3w7vWh0CBX2QAhfpfiQTwrFPvVrcHe5VUBtIXaR004aWE/X9B2CFrITOQAp5gxLONGrk6GA==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
graceful-fs "^4.2.9"
|
||||
jest-haste-map "^29.1.2"
|
||||
jest-haste-map "^29.2.1"
|
||||
jest-pnp-resolver "^1.2.2"
|
||||
jest-util "^29.1.2"
|
||||
jest-validate "^29.1.2"
|
||||
jest-util "^29.2.1"
|
||||
jest-validate "^29.2.2"
|
||||
resolve "^1.20.0"
|
||||
resolve.exports "^1.1.0"
|
||||
slash "^3.0.0"
|
||||
@@ -2322,31 +2322,31 @@ jest-runtime@^28.1.1:
|
||||
slash "^3.0.0"
|
||||
strip-bom "^4.0.0"
|
||||
|
||||
jest-runtime@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.1.2.tgz#dbcd57103d61115479108d5864bdcd661d9c6783"
|
||||
integrity sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==
|
||||
jest-runtime@^29.2.2:
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.2.2.tgz#4068ee82423769a481460efd21d45a8efaa5c179"
|
||||
integrity sha512-TpR1V6zRdLynckKDIQaY41od4o0xWL+KOPUCZvJK2bu5P1UXhjobt5nJ2ICNeIxgyj9NGkO0aWgDqYPVhDNKjA==
|
||||
dependencies:
|
||||
"@jest/environment" "^29.1.2"
|
||||
"@jest/fake-timers" "^29.1.2"
|
||||
"@jest/globals" "^29.1.2"
|
||||
"@jest/source-map" "^29.0.0"
|
||||
"@jest/test-result" "^29.1.2"
|
||||
"@jest/transform" "^29.1.2"
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/environment" "^29.2.2"
|
||||
"@jest/fake-timers" "^29.2.2"
|
||||
"@jest/globals" "^29.2.2"
|
||||
"@jest/source-map" "^29.2.0"
|
||||
"@jest/test-result" "^29.2.1"
|
||||
"@jest/transform" "^29.2.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/node" "*"
|
||||
chalk "^4.0.0"
|
||||
cjs-module-lexer "^1.0.0"
|
||||
collect-v8-coverage "^1.0.0"
|
||||
glob "^7.1.3"
|
||||
graceful-fs "^4.2.9"
|
||||
jest-haste-map "^29.1.2"
|
||||
jest-message-util "^29.1.2"
|
||||
jest-mock "^29.1.2"
|
||||
jest-regex-util "^29.0.0"
|
||||
jest-resolve "^29.1.2"
|
||||
jest-snapshot "^29.1.2"
|
||||
jest-util "^29.1.2"
|
||||
jest-haste-map "^29.2.1"
|
||||
jest-message-util "^29.2.1"
|
||||
jest-mock "^29.2.2"
|
||||
jest-regex-util "^29.2.0"
|
||||
jest-resolve "^29.2.2"
|
||||
jest-snapshot "^29.2.2"
|
||||
jest-util "^29.2.1"
|
||||
slash "^3.0.0"
|
||||
strip-bom "^4.0.0"
|
||||
|
||||
@@ -2379,10 +2379,10 @@ jest-snapshot@^28.1.1:
|
||||
pretty-format "^28.1.1"
|
||||
semver "^7.3.5"
|
||||
|
||||
jest-snapshot@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.1.2.tgz#7dd277e88c45f2d2ff5888de1612e63c7ceb575b"
|
||||
integrity sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==
|
||||
jest-snapshot@^29.2.2:
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.2.2.tgz#1016ce60297b77382386bad561107174604690c2"
|
||||
integrity sha512-GfKJrpZ5SMqhli3NJ+mOspDqtZfJBryGA8RIBxF+G+WbDoC7HCqKaeAss4Z/Sab6bAW11ffasx8/vGsj83jyjA==
|
||||
dependencies:
|
||||
"@babel/core" "^7.11.6"
|
||||
"@babel/generator" "^7.7.2"
|
||||
@@ -2390,23 +2390,23 @@ jest-snapshot@^29.1.2:
|
||||
"@babel/plugin-syntax-typescript" "^7.7.2"
|
||||
"@babel/traverse" "^7.7.2"
|
||||
"@babel/types" "^7.3.3"
|
||||
"@jest/expect-utils" "^29.1.2"
|
||||
"@jest/transform" "^29.1.2"
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/expect-utils" "^29.2.2"
|
||||
"@jest/transform" "^29.2.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/babel__traverse" "^7.0.6"
|
||||
"@types/prettier" "^2.1.5"
|
||||
babel-preset-current-node-syntax "^1.0.0"
|
||||
chalk "^4.0.0"
|
||||
expect "^29.1.2"
|
||||
expect "^29.2.2"
|
||||
graceful-fs "^4.2.9"
|
||||
jest-diff "^29.1.2"
|
||||
jest-get-type "^29.0.0"
|
||||
jest-haste-map "^29.1.2"
|
||||
jest-matcher-utils "^29.1.2"
|
||||
jest-message-util "^29.1.2"
|
||||
jest-util "^29.1.2"
|
||||
jest-diff "^29.2.1"
|
||||
jest-get-type "^29.2.0"
|
||||
jest-haste-map "^29.2.1"
|
||||
jest-matcher-utils "^29.2.2"
|
||||
jest-message-util "^29.2.1"
|
||||
jest-util "^29.2.1"
|
||||
natural-compare "^1.4.0"
|
||||
pretty-format "^29.1.2"
|
||||
pretty-format "^29.2.1"
|
||||
semver "^7.3.5"
|
||||
|
||||
jest-util@^28.0.0, jest-util@^28.1.1:
|
||||
@@ -2421,12 +2421,12 @@ jest-util@^28.0.0, jest-util@^28.1.1:
|
||||
graceful-fs "^4.2.9"
|
||||
picomatch "^2.2.3"
|
||||
|
||||
jest-util@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.1.2.tgz#ac5798e93cb6a6703084e194cfa0898d66126df1"
|
||||
integrity sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==
|
||||
jest-util@^29.2.1:
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.2.1.tgz#f26872ba0dc8cbefaba32c34f98935f6cf5fc747"
|
||||
integrity sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==
|
||||
dependencies:
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
"@types/node" "*"
|
||||
chalk "^4.0.0"
|
||||
ci-info "^3.2.0"
|
||||
@@ -2445,17 +2445,17 @@ jest-validate@^28.1.1:
|
||||
leven "^3.1.0"
|
||||
pretty-format "^28.1.1"
|
||||
|
||||
jest-validate@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.1.2.tgz#83a728b8f6354da2e52346878c8bc7383516ca51"
|
||||
integrity sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==
|
||||
jest-validate@^29.2.2:
|
||||
version "29.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.2.2.tgz#e43ce1931292dfc052562a11bc681af3805eadce"
|
||||
integrity sha512-eJXATaKaSnOuxNfs8CLHgdABFgUrd0TtWS8QckiJ4L/QVDF4KVbZFBBOwCBZHOS0Rc5fOxqngXeGXE3nGQkpQA==
|
||||
dependencies:
|
||||
"@jest/types" "^29.1.2"
|
||||
"@jest/types" "^29.2.1"
|
||||
camelcase "^6.2.0"
|
||||
chalk "^4.0.0"
|
||||
jest-get-type "^29.0.0"
|
||||
jest-get-type "^29.2.0"
|
||||
leven "^3.1.0"
|
||||
pretty-format "^29.1.2"
|
||||
pretty-format "^29.2.1"
|
||||
|
||||
jest-watcher@^28.1.1:
|
||||
version "28.1.1"
|
||||
@@ -2480,13 +2480,13 @@ jest-worker@^28.1.1:
|
||||
merge-stream "^2.0.0"
|
||||
supports-color "^8.0.0"
|
||||
|
||||
jest-worker@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.1.2.tgz#a68302af61bce82b42a9a57285ca7499d29b2afc"
|
||||
integrity sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==
|
||||
jest-worker@^29.2.1:
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.2.1.tgz#8ba68255438252e1674f990f0180c54dfa26a3b1"
|
||||
integrity sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
jest-util "^29.1.2"
|
||||
jest-util "^29.2.1"
|
||||
merge-stream "^2.0.0"
|
||||
supports-color "^8.0.0"
|
||||
|
||||
@@ -2605,9 +2605,9 @@ mimic-fn@^2.1.0:
|
||||
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
|
||||
|
||||
minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
@@ -2778,10 +2778,10 @@ pretty-format@^28.1.1:
|
||||
ansi-styles "^5.0.0"
|
||||
react-is "^18.0.0"
|
||||
|
||||
pretty-format@^29.1.2:
|
||||
version "29.1.2"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.1.2.tgz#b1f6b75be7d699be1a051f5da36e8ae9e76a8e6a"
|
||||
integrity sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==
|
||||
pretty-format@^29.2.1:
|
||||
version "29.2.1"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.2.1.tgz#86e7748fe8bbc96a6a4e04fa99172630907a9611"
|
||||
integrity sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==
|
||||
dependencies:
|
||||
"@jest/schemas" "^29.0.0"
|
||||
ansi-styles "^5.0.0"
|
||||
|
||||
Reference in New Issue
Block a user