added initial version for testing

This commit is contained in:
Carlos Lapao 2023-12-14 13:14:21 +00:00
parent de087ee1a9
commit f6b8c64495
14 changed files with 1326 additions and 413 deletions

View File

@ -0,0 +1,76 @@
const core = require('@actions/core')
const downloadVersion = require('../src/download-version')
const fs = require('fs')
const { t } = require('tar')
// Mock the GitHub Actions core library
const setFailedMock = jest.spyOn(core, 'setFailed').mockImplementation()
describe('downloadVersion', () => {
const tempDir = '/tmp/setup-flutter/temp'
const tempCache = '/tmp/setup-flutter/cache'
if (!fs.existsSync(tempDir)) {
fs.mkdirSync(tempDir, { recursive: true })
}
if (!fs.existsSync(tempCache)) {
fs.mkdirSync(tempCache, { recursive: true })
}
beforeEach(() => {
process.env['RUNNER_OS'] = 'macos'
process.env['RUNNER_TEMP'] = tempDir
process.env['RUNNER_TOOL_CACHE'] = tempCache
jest.clearAllMocks()
})
afterAll(() => {
fs.rm(tempDir, { recursive: true }, () => {
core.info('tempDir removed')
})
fs.rm(tempCache, { recursive: true }, () => {
core.info('tempCache removed')
})
})
const downloadVersionMock = jest.spyOn(downloadVersion, 'downloadVersion')
const tarReleaseMock = {
hash: 'b0366e0a3f089e15fd89c97604ab402fe26b724c',
channel: 'stable',
version: '3.16.3',
dart_sdk_version: '3.2.3',
dart_sdk_arch: 'x64',
release_date: '2023-12-06T18:02:04.383556Z',
archive: 'stable/linux/flutter_linux_3.16.3-stable.tar.xz',
sha256: '22196f6e5d8b67cbdddf1fc94f62da07addb67da0210d0498cbcff6ddcb7127e'
}
const zipReleaseMock = {
hash: 'b0366e0a3f089e15fd89c97604ab402fe26b724c',
channel: 'stable',
version: '3.16.3',
dart_sdk_version: '3.2.3',
dart_sdk_arch: 'x64',
release_date: '2023-12-06T17:56:58.013613Z',
archive: 'stable/macos/flutter_macos_3.16.3-stable.zip',
sha256: '0230d67d13817b65e2006bcd3330d72e4161f5c10b558afd1c72a818cd7c578e'
}
it('no release defined', async () => {
await downloadVersion.downloadVersion()
expect(downloadVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(
1,
'No release defined to download'
)
})
it('get zip version', async () => {
await downloadVersion.downloadVersion(zipReleaseMock)
expect(downloadVersionMock).toHaveReturned()
}, 300000)
it('get tar version', async () => {
await downloadVersion.downloadVersion(tarReleaseMock)
expect(downloadVersionMock).toHaveReturned()
}, 300000)
})

View File

@ -0,0 +1,134 @@
const core = require('@actions/core')
const getLatestVersion = require('../src/get-latest-version')
const setFailedMock = jest.spyOn(core, 'setFailed').mockImplementation()
const setOutputMock = jest.spyOn(core, 'setOutput').mockImplementation()
describe('getLatestVersion', () => {
beforeEach(() => {
process.env['RUNNER_OS'] = 'macos'
process.env['RUNNER_ARCH'] = 'arm64'
jest.clearAllMocks()
})
const getLatestVersionMock = jest.spyOn(getLatestVersion, 'getLatestVersion')
it('[0] wrong os', async () => {
process.env['RUNNER_OS'] = 'test'
await getLatestVersion.getLatestVersion('', 'dev', 'x64', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(
1,
'Failed to get the latest version'
)
})
it('[1] convert darwin to macos', async () => {
await getLatestVersion.getLatestVersion('darwin', 'beta', '', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
}, 300000)
it('[2] gets the latest stable version', async () => {
await getLatestVersion.getLatestVersion('', 'stable', '', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('[3] gets the latest beta version', async () => {
await getLatestVersion.getLatestVersion('', 'beta', '', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('[4] gets the latest dev version', async () => {
await getLatestVersion.getLatestVersion('', 'dev', '', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('[5] gets a specific version', async () => {
await getLatestVersion.getLatestVersion('', 'stable', '', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('[6] gets a specific arch', async () => {
await getLatestVersion.getLatestVersion('', 'stable', 'arm64', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('[7] gets a specific arch and version', async () => {
await getLatestVersion.getLatestVersion('', 'stable', 'arm64', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('[8] gets the x64 as amd64 version', async () => {
await getLatestVersion.getLatestVersion('', 'stable', 'amd64', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('[9] no channel found', async () => {
await getLatestVersion.getLatestVersion('', 'mock', '', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(1, 'Channel mock not found')
})
it('[10] no version found for version', async () => {
await getLatestVersion.getLatestVersion('', 'dev', '', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(1, expect.any(String))
})
it('[11] no version found for arch', async () => {
await getLatestVersion.getLatestVersion('', 'dev', 'x641', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(
1,
'Architecture x641 not found'
)
})
it('[12] no version found for version and arch', async () => {
await getLatestVersion.getLatestVersion('', 'dev', 'x64', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(
1,
'Version 3.16.3 with architecture x64 not found'
)
})
})

View File

@ -2,13 +2,22 @@
* Unit tests for the action's main functionality, src/main.js
*/
const core = require('@actions/core')
const tc = require('@actions/tool-cache')
const main = require('../src/main')
const fs = require('fs')
const { t } = require('tar')
// Mock the GitHub Actions core library
const debugMock = jest.spyOn(core, 'debug').mockImplementation()
const getInputMock = jest.spyOn(core, 'getInput').mockImplementation()
const getBooleanInput = jest.spyOn(core, 'getBooleanInput').mockImplementation()
const addPathMock = jest.spyOn(core, 'addPath').mockImplementation()
const exportVariableMock = jest
.spyOn(core, 'exportVariable')
.mockImplementation()
const setFailedMock = jest.spyOn(core, 'setFailed').mockImplementation()
const setOutputMock = jest.spyOn(core, 'setOutput').mockImplementation()
const tcFindMock = jest.spyOn(tc, 'find').mockImplementation()
// Mock the action's main function
const runMock = jest.spyOn(main, 'run')
@ -16,211 +25,141 @@ const runMock = jest.spyOn(main, 'run')
// Other utilities
const timeRegex = /^\d{2}:\d{2}:\d{2}/
describe('action', () => {
describe('run', () => {
const tempDir = '/tmp/setup-flutter/temp'
const tempCache = '/tmp/setup-flutter/cache'
beforeAll(() => {
if (!fs.existsSync(tempDir)) {
fs.mkdirSync(tempDir, { recursive: true })
}
if (!fs.existsSync(tempCache)) {
fs.mkdirSync(tempCache, { recursive: true })
}
})
beforeEach(() => {
process.env['RUNNER_OS'] = process.platform
process.env['RUNNER_ARCH'] = process.arch
process.env['RUNNER_TEMP'] = tempDir
process.env['RUNNER_TOOL_CACHE'] = tempCache
jest.clearAllMocks()
})
it('sets the time output', async () => {
// Set the action's inputs as return values from core.getInput()
getInputMock.mockImplementation(name => {
afterAll(() => {
fs.rm(tempDir, { recursive: true }, () => {
core.info('tempDir removed')
})
fs.rm(tempCache, { recursive: true }, () => {
core.info('tempCache removed')
})
})
const setupMock = jest.spyOn(main, 'run')
it('[1] query only', async () => {
getBooleanInput.mockImplementation(name => {
switch (name) {
case 'milliseconds':
return '500'
case 'query-only':
return true
default:
return ''
}
})
await main.run()
expect(runMock).toHaveReturned()
expect(setupMock).toHaveReturned()
expect(setOutputMock).toHaveBeenCalledWith('channel', 'stable')
expect(setOutputMock).toHaveBeenCalledWith('version', expect.any(String))
expect(setOutputMock).toHaveBeenCalledWith('architecture', process.arch)
expect(setOutputMock).toHaveBeenCalledWith('cache-path', expect.any(String))
expect(setOutputMock).toHaveBeenCalledWith('cache-key', expect.any(String))
}, 300000)
// Verify that all of the core library functions were called correctly
expect(debugMock).toHaveBeenNthCalledWith(1, 'Waiting 500 milliseconds ...')
expect(debugMock).toHaveBeenNthCalledWith(
it('[2] run without cache', async () => {
getBooleanInput.mockImplementation(name => {
switch (name) {
case 'query-only':
return false
case 'cache':
return false
default:
return ''
}
})
await main.run()
expect(setupMock).toHaveReturned()
expect(setOutputMock).toHaveBeenCalledWith('channel', 'stable')
expect(setOutputMock).toHaveBeenCalledWith('version', expect.any(String))
expect(setOutputMock).toHaveBeenCalledWith('architecture', process.arch)
expect(setOutputMock).toHaveBeenCalledWith('cache-path', expect.any(String))
expect(setOutputMock).toHaveBeenCalledWith('cache-key', expect.any(String))
expect(setOutputMock).toHaveBeenCalledWith(
'doctor-output',
expect.any(String)
)
expect(setOutputMock).toHaveBeenCalledWith(
'version-output',
expect.any(String)
)
expect(setOutputMock).toHaveBeenCalledWith(
'precache-output',
expect.any(String)
)
expect(addPathMock).toHaveBeenNthCalledWith(1, expect.any(String))
expect(addPathMock).toHaveBeenNthCalledWith(2, expect.any(String))
expect(addPathMock).toHaveBeenNthCalledWith(3, expect.any(String))
expect(exportVariableMock).toHaveBeenNthCalledWith(
1,
'FLUTTER_HOME',
expect.any(String)
)
expect(exportVariableMock).toHaveBeenNthCalledWith(
2,
expect.stringMatching(timeRegex)
'PUB_CACHE',
expect.any(String)
)
expect(debugMock).toHaveBeenNthCalledWith(
3,
expect.stringMatching(timeRegex)
)
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'time',
expect.stringMatching(timeRegex)
)
})
}, 300000)
it('sets a failed status', async () => {
// Set the action's inputs as return values from core.getInput()
getInputMock.mockImplementation(name => {
it('[3] run with cache', async () => {
getBooleanInput.mockImplementation(name => {
switch (name) {
case 'milliseconds':
return 'this is not a number'
case 'query-only':
return false
case 'cache':
return true
default:
return ''
}
})
await main.run()
expect(runMock).toHaveReturned()
// Verify that all of the core library functions were called correctly
expect(setFailedMock).toHaveBeenNthCalledWith(
1,
'milliseconds not a number'
)
})
it('fails if no input is provided', async () => {
// Set the action's inputs as return values from core.getInput()
getInputMock.mockImplementation(name => {
switch (name) {
case 'milliseconds':
throw new Error('Input required and not supplied: milliseconds')
default:
return ''
}
tcFindMock.mockImplementation(() => {
return tempCache
})
await main.run()
expect(runMock).toHaveReturned()
// Verify that all of the core library functions were called correctly
expect(setFailedMock).toHaveBeenNthCalledWith(
expect(setupMock).toHaveReturned()
expect(setOutputMock).toHaveBeenCalledWith('used-cached', 'true')
expect(setOutputMock).toHaveBeenCalledWith('channel', 'stable')
expect(setOutputMock).toHaveBeenCalledWith('version', expect.any(String))
expect(setOutputMock).toHaveBeenCalledWith('architecture', process.arch)
expect(setOutputMock).toHaveBeenCalledWith('cache-path', expect.any(String))
expect(setOutputMock).toHaveBeenCalledWith('cache-key', expect.any(String))
expect(addPathMock).toHaveBeenNthCalledWith(1, expect.any(String))
expect(addPathMock).toHaveBeenNthCalledWith(2, expect.any(String))
expect(addPathMock).toHaveBeenNthCalledWith(3, expect.any(String))
expect(exportVariableMock).toHaveBeenNthCalledWith(
1,
'Input required and not supplied: milliseconds'
'FLUTTER_HOME',
expect.any(String)
)
})
})
describe('getLatestVersion', () => {
beforeEach(() => {
process.env['RUNNER_OS'] = 'macos'
jest.clearAllMocks()
})
const getLatestVersionMock = jest.spyOn(main, 'getLatestVersion')
it('wrong os', async () => {
process.env['RUNNER_OS'] = 'test'
await main.getLatestVersion('dev', 'x64', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(
1,
'Failed to get the latest version'
)
})
it('convert darwin to macos', async () => {
process.env['RUNNER_OS'] = 'darwin'
await main.getLatestVersion('stable')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('gets the latest stable version', async () => {
await main.getLatestVersion('stable')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('gets the latest beta version', async () => {
await main.getLatestVersion('beta')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('gets the latest dev version', async () => {
await main.getLatestVersion('dev')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('gets a specific version', async () => {
await main.getLatestVersion('stable', '', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('gets a specific arch', async () => {
await main.getLatestVersion('stable', 'arm64', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('gets a specific arch and version', async () => {
await main.getLatestVersion('stable', 'arm64', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('gets the x64 as amd64 version', async () => {
await main.getLatestVersion('stable', 'amd64', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'version',
expect.any(String)
)
})
it('no version found', async () => {
await main.getLatestVersion('mock')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(1, 'Channel mock not found')
})
it('no version found for version', async () => {
await main.getLatestVersion('dev', '', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(1, 'Version 3.16.3 not found')
})
it('no version found for arch', async () => {
await main.getLatestVersion('dev', 'x641', '')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(
1,
'Architecture x641 not found'
)
})
it('no version found for version and arch', async () => {
await main.getLatestVersion('dev', 'x64', '3.16.3')
expect(getLatestVersionMock).toHaveReturned()
expect(setFailedMock).toHaveBeenNthCalledWith(
1,
'Version 3.16.3 with architecture x64 not found'
)
})
expect(exportVariableMock).toHaveBeenNthCalledWith(
2,
'PUB_CACHE',
expect.any(String)
)
}, 300000)
})

View File

@ -1,24 +0,0 @@
/**
* Unit tests for src/wait.js
*/
const { wait } = require('../src/wait')
const { expect } = require('@jest/globals')
describe('wait.js', () => {
it('throws an invalid number', async () => {
const input = parseInt('foo', 10)
expect(isNaN(input)).toBe(true)
await expect(wait(input)).rejects.toThrow('milliseconds not a number')
})
it('waits with a valid number', async () => {
const start = new Date()
await wait(500)
const end = new Date()
const delta = Math.abs(end.getTime() - start.getTime())
expect(delta).toBeGreaterThan(450)
})
})

View File

@ -1,18 +1,51 @@
name: 'Setup Flutter'
description: 'Setup Flutter SDK on GitHub Actions'
author: 'Carlos Lapao'
branding:
icon: 'maximize'
color: 'blue'
# Define your inputs here.
inputs:
milliseconds:
description: 'Your input description here'
required: true
default: '1000'
flutter-version:
description: 'The Flutter version to make available on the path'
required: false
default: 'any'
channel:
description: 'The Flutter build release channel'
required: false
default: 'stable'
query-only:
description: 'Query the Flutter SDK version without installing it'
required: false
default: 'false'
cache:
description: 'Cache the Flutter SDK'
required: false
default: 'true'
cache-key:
description: 'Identifier for the Flutter SDK cache'
required: false
cache-path:
description: 'Flutter SDK cache path'
required: false
architecture:
description: 'The architecture of Flutter SDK executable (x64 or arm64)'
required: false
default: '${{ runner.arch }}'
# Define your outputs here.
outputs:
time:
description: 'Your output description here'
cache-patch:
description: 'Flutter SDK cache path'
cache-key:
description: 'Flutter SDK cache key'
channel:
description: 'The Flutter build release channel'
version:
description: 'The Flutter version to make available on the path'
architecture:
description: 'The architecture of Flutter SDK executable (x64 or arm64)'
runs:
using: node20

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="106" height="20" role="img" aria-label="Coverage: 100%"><title>Coverage: 100%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="106" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="63" height="20" fill="#555"/><rect x="63" width="43" height="20" fill="#4c1"/><rect width="106" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="325" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="530">Coverage</text><text x="325" y="140" transform="scale(.1)" fill="#fff" textLength="530">Coverage</text><text aria-hidden="true" x="835" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="330">100%</text><text x="835" y="140" transform="scale(.1)" fill="#fff" textLength="330">100%</text></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="116" height="20" role="img" aria-label="Coverage: 88.12%"><title>Coverage: 88.12%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="116" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="63" height="20" fill="#555"/><rect x="63" width="53" height="20" fill="#dfb317"/><rect width="116" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="325" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="530">Coverage</text><text x="325" y="140" transform="scale(.1)" fill="#fff" textLength="530">Coverage</text><text aria-hidden="true" x="885" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">88.12%</text><text x="885" y="140" transform="scale(.1)" fill="#fff" textLength="430">88.12%</text></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,82 +1,85 @@
{
"name": "setup-flutter",
"description": "Setup your GitHub Actions workflow with Flutter SDK",
"version": "0.0.1",
"author": "",
"private": true,
"homepage": "https://github.com/actions/javascript-action#readme",
"repository": {
"type": "git",
"url": "git+https://github.com/actions/javascript-action.git"
},
"bugs": {
"url": "https://github.com/actions/javascript-action/issues"
},
"keywords": [
"GitHub",
"Actions",
"JavaScript"
],
"exports": {
".": "./dist/index.js"
},
"engines": {
"node": ">=20"
},
"scripts": {
"bundle": "npm run format:write && npm run package",
"ci-test": "jest",
"format:write": "prettier --write **/*.js",
"format:check": "prettier --check **/*.js",
"lint": "npx eslint . -c ./.github/linters/.eslintrc.yml",
"package": "ncc build src/index.js --license licenses.txt",
"package:watch": "npm run package -- --watch",
"test": "(jest && make-coverage-badge --output-path ./badges/coverage.svg) || make-coverage-badge --output-path ./badges/coverage.svg",
"all": "npm run format:write && npm run lint && npm run test && npm run package"
},
"license": "MIT",
"eslintConfig": {
"extends": "./.github/linters/.eslintrc.yml"
},
"jest": {
"verbose": true,
"clearMocks": true,
"testEnvironment": "node",
"moduleFileExtensions": [
"js"
"name": "setup-flutter",
"description": "Setup your GitHub Actions workflow with Flutter SDK",
"version": "0.0.1",
"author": "",
"private": true,
"homepage": "https://github.com/actions/javascript-action#readme",
"repository": {
"type": "git",
"url": "git+https://github.com/actions/javascript-action.git"
},
"bugs": {
"url": "https://github.com/actions/javascript-action/issues"
},
"keywords": [
"GitHub",
"Actions",
"JavaScript"
],
"testMatch": [
"**/*.test.js"
],
"testPathIgnorePatterns": [
"/node_modules/",
"/dist/"
],
"coverageReporters": [
"json-summary",
"text",
"lcov"
],
"collectCoverage": true,
"collectCoverageFrom": [
"./src/**"
]
},
"dependencies": {
"@actions/core": "^1.10.1",
"axios": "^1.6.2"
},
"devDependencies": {
"@babel/core": "^7.23.5",
"@babel/eslint-parser": "^7.23.3",
"@babel/preset-env": "^7.23.5",
"@vercel/ncc": "^0.38.1",
"babel-preset-jest": "^29.6.3",
"eslint": "^8.55.0",
"eslint-plugin-github": "^4.10.1",
"eslint-plugin-jest": "^27.6.0",
"jest": "^29.7.0",
"make-coverage-badge": "^1.2.0",
"prettier": "^3.1.1"
}
}
"exports": {
".": "./dist/index.js"
},
"engines": {
"node": ">=20"
},
"scripts": {
"bundle": "npm run format:write && npm run package",
"ci-test": "jest",
"format:write": "prettier --write **/*.js",
"format:check": "prettier --check **/*.js",
"lint": "npx eslint . -c ./.github/linters/.eslintrc.yml",
"package": "ncc build src/index.js --license licenses.txt",
"package:watch": "npm run package -- --watch",
"test": "(jest && make-coverage-badge --output-path ./badges/coverage.svg) || make-coverage-badge --output-path ./badges/coverage.svg",
"all": "npm run format:write && npm run lint && npm run test && npm run package"
},
"license": "MIT",
"eslintConfig": {
"extends": "./.github/linters/.eslintrc.yml"
},
"jest": {
"verbose": true,
"clearMocks": true,
"testEnvironment": "node",
"moduleFileExtensions": [
"js"
],
"testMatch": [
"**/*.test.js"
],
"testPathIgnorePatterns": [
"/node_modules/",
"/dist/"
],
"coverageReporters": [
"json-summary",
"text",
"lcov"
],
"collectCoverage": true,
"collectCoverageFrom": [
"./src/**"
]
},
"dependencies": {
"@actions/core": "^1.10.1",
"@actions/exec": "^1.1.1",
"@actions/http-client": "^2.2.0",
"@actions/tool-cache": "^2.0.1",
"axios": "^1.6.2"
},
"devDependencies": {
"@babel/core": "^7.23.5",
"@babel/eslint-parser": "^7.23.3",
"@babel/preset-env": "^7.23.5",
"@vercel/ncc": "^0.38.1",
"babel-preset-jest": "^29.6.3",
"eslint": "^8.55.0",
"eslint-plugin-github": "^4.10.1",
"eslint-plugin-jest": "^27.6.0",
"jest": "^29.7.0",
"make-coverage-badge": "^1.2.0",
"prettier": "^3.1.1"
}
}

8
src/constants.js Normal file
View File

@ -0,0 +1,8 @@
const decompressTempFolder = '__decompress_temp'
const manifestBaseUrl =
'https://storage.googleapis.com/flutter_infra_release/releases'
module.exports = {
decompressTempFolder,
manifestBaseUrl
}

83
src/download-version.js Normal file
View File

@ -0,0 +1,83 @@
const fs = require('fs')
const stream = require('stream')
const util = require('util')
const core = require('@actions/core')
const axios = require('axios')
const tc = require('@actions/tool-cache')
const path = require('path')
const { clean } = require('./helpers')
const { decompressTempFolder, manifestBaseUrl } = require('./constants')
/**
* Downloads a release version from the specified URL and extracts it if necessary.
* @param {Object} releaseEntity - The release entity containing information about the release.
* @returns {Promise<void>} - A promise that resolves when the download and extraction are complete.
*/
async function downloadVersion(releaseEntity) {
if (!releaseEntity || releaseEntity.archive === '') {
core.setFailed('No release defined to download')
return
}
const finished = util.promisify(stream.finished)
const filename = path.basename(releaseEntity.archive)
const baseFolder = process.env['RUNNER_TEMP']
const localFilePath = path.join(baseFolder, filename)
const downloadUrl = `${manifestBaseUrl}/${releaseEntity.archive}`
const tempFolder = path.join(baseFolder, decompressTempFolder)
clean(localFilePath)
core.info(`Downloading ${filename} from ${downloadUrl}`)
const writer = fs.createWriteStream(localFilePath)
const response = await axios.get(downloadUrl, { responseType: 'stream' })
response.data.pipe(writer)
// Wait for the stream to finish
await finished(writer)
core.info(`Downloaded ${filename}`)
if (filename.endsWith('.zip')) {
try {
core.info(`Extracting ${filename} to ${baseFolder}`)
const files = await tc.extractZip(localFilePath, tempFolder)
core.info(`Extracted ${files} files`)
return
} catch (error) {
clean(localFilePath)
core.setFailed(`Error extracting ${filename}: ${error}`)
}
return
}
if (filename.endsWith('.tar.xz')) {
try {
core.info(`Extracting ${filename} to ${localFilePath}`)
const files = await tc.extractTar(localFilePath, tempFolder)
core.info(`Extracted ${files} files`)
return
// const decompressor = new xz.Decompressor()
// const reader = fs.createReadStream(localFilePath).pipe(decompressor)
// const tarWriter = tar.extract(tempFolder)
// reader.pipe(tarWriter)
// return new Promise((resolve, reject) => {
// tarWriter.on('finish', () => {
// core.info(`Extracted ${filename}`)
// resolve()
// })
// tarWriter.on('error', err => {
// core.setFailed(`Error extracting ${filename}: ${err}`)
// clean(localFilePath)
// reject(err)
// })
// })
} catch (error) {
clean(localFilePath)
core.setFailed(`Error extracting ${filename}: ${error}`)
}
return
}
}
module.exports = { downloadVersion }

112
src/get-latest-version.js Normal file
View File

@ -0,0 +1,112 @@
const core = require('@actions/core')
const axios = require('axios')
const { manifestBaseUrl } = require('./constants')
/**
* Retrieves the latest version of a Flutter SDK release based on the specified parameters.
* @param {string} osName - The name of the operating system.
* @param {string} channel - The release channel (e.g., stable, beta, dev).
* @param {string} arch - The architecture (e.g., x64, arm64).
* @param {string} version - The specific version of the Flutter SDK (optional).
* @returns {Promise<Object>} - The filtered entry containing the latest version details.
* @throws {Error} - If the latest version cannot be retrieved or if the specified version or architecture is not found.
*/
async function getLatestVersion(osName, channel, arch, version) {
if (!osName || osName === '') {
osName = process.env['RUNNER_OS']
}
if (osName === 'darwin') {
osName = 'macos'
}
if (!channel || channel === '') {
channel = 'stable'
}
if (!arch || arch === '') {
arch = process.env['RUNNER_ARCH'].toLowerCase()
}
if (arch === 'amd64') {
arch = 'x64'
}
const json_path = `releases_${osName}.json`
const manifestUrl = `${manifestBaseUrl}/${json_path}`
try {
core.info('Getting latest version...')
const response = await axios.get(manifestUrl)
const channelHash = response.data.current_release[channel]
if (!channelHash) {
core.setFailed(`Channel ${channel} not found`)
return
}
const channelEntries = []
for (const [key, value] of Object.entries(response.data.releases)) {
if (!version || version === '') {
if (value.channel === channel) {
channelEntries.push(value)
}
} else {
if (arch && arch !== '') {
if (
value.version === version &&
value.dart_sdk_arch === arch &&
value.channel === channel
) {
channelEntries.push(value)
}
} else {
channelEntries.push(value)
}
}
}
let filteredEntry = {}
for (const entry of channelEntries) {
if (version && version !== '' && arch && arch !== '') {
if (entry.version === version && entry.dart_sdk_arch === arch) {
filteredEntry = entry
break
}
} else if (version && version !== '') {
if (entry.version === version) {
filteredEntry = entry
break
}
} else if (arch && arch !== '') {
if (entry.dart_sdk_arch === arch) {
filteredEntry = entry
break
}
}
}
if (!filteredEntry.version) {
if (version && version !== '' && arch && arch !== '') {
core.setFailed(`Version ${version} with architecture ${arch} not found`)
return
}
if (version && version !== '') {
core.setFailed(`Version ${version} not found`)
return
}
if (arch && arch !== '') {
core.setFailed(`Architecture ${arch} not found`)
return
}
} else {
core.setOutput('version', filteredEntry.version)
core.setOutput('channel', filteredEntry.channel)
core.setOutput('arch', filteredEntry.dart_sdk_arch)
core.setOutput('archive', filteredEntry.archive)
core.setOutput('hash', filteredEntry.sha256)
core.info(`Latest version: ${filteredEntry.version}`)
return filteredEntry
}
} catch (error) {
core.setFailed('Failed to get the latest version')
}
}
module.exports = { getLatestVersion }

45
src/helpers.js Normal file
View File

@ -0,0 +1,45 @@
const core = require('@actions/core')
const path = require('path')
const fs = require('fs')
const { decompressTempFolder } = require('./constants')
/**
* Generates a cache key based on the provided release entity.
* If no release entity is provided, the cache key is generated based on the current environment variables.
*
* @param {Object} releaseEntity - The release entity object.
* @returns {string} The generated cache key.
*/
function getCacheKey(releaseEntity) {
const cacheKey = core.getInput('cache-key')
if (cacheKey && cacheKey !== '') {
return cacheKey
}
if (!releaseEntity) {
return `flutter-${process.env['RUNNER_OS']}-${process.env['RUNNER_ARCH']}`
}
return `flutter-${releaseEntity.channel}-${releaseEntity.version}-${releaseEntity.dart_sdk_arch}-${releaseEntity.hash}-${releaseEntity.sha256}`
}
/**
* Cleans up the temporary folder used for decompression.
*/
function clean() {
const baseFolder = process.env['RUNNER_TEMP']
const tempFolder = path.join(baseFolder, decompressTempFolder)
if (fs.existsSync(tempFolder)) {
core.info(`Cleaning up ${tempFolder}`)
fs.rm(tempFolder, { recursive: true }, err => {
if (err) {
core.warning(`Error cleaning up ${tempFolder}: ${err}`)
}
})
}
}
module.exports = {
getCacheKey,
clean
}

View File

@ -1,6 +1,20 @@
/**
* @fileoverview This file contains the main logic for the setup-flutter action.
* It exports the `run` and `getLatestVersion` functions.
* The `run` function is the entry point of the action and handles the main workflow.
* The `getLatestVersion` function retrieves the latest version of Flutter based on the specified channel, architecture, and version.
*/
const fs = require('fs')
const core = require('@actions/core')
const axios = require('axios')
const { wait } = require('./wait')
const path = require('path')
const { getLatestVersion } = require('./get-latest-version')
const exec = require('@actions/exec')
const { clean, getCacheKey } = require('./helpers')
const { downloadVersion } = require('./download-version')
const tc = require('@actions/tool-cache')
const decompressTempFolder = '__decompress_temp'
/**
* The main function for the action.
@ -8,109 +22,166 @@ const { wait } = require('./wait')
*/
async function run() {
try {
const ms = core.getInput('milliseconds', { required: true })
let arch = core.getInput('architecture')
const version = core.getInput('flutter-version')
let channel = core.getInput('channel')
// Debug logs are only output if the `ACTIONS_STEP_DEBUG` secret is true
core.debug(`Waiting ${ms} milliseconds ...`)
let osName = process.env['RUNNER_OS']
if (osName === 'darwin') {
osName = 'macos'
}
// Log the current timestamp, wait, then log the new timestamp
core.debug(new Date().toTimeString())
await wait(parseInt(ms, 10))
core.debug(new Date().toTimeString())
if (!arch || arch === '') {
arch = process.env['RUNNER_ARCH'].toLowerCase()
}
// Set outputs for other workflow steps to use
core.setOutput('time', new Date().toTimeString())
if (!channel || channel === '') {
channel = 'stable'
}
// sometimes the x64 architecture is reported as amd64
if (arch !== undefined && arch !== '') {
if (arch === 'amd64') {
arch = 'x64'
}
}
const releaseEntity = await getLatestVersion(osName, channel, arch, version)
const baseFolder = process.env['RUNNER_TEMP']
const tempFolder = path.join(baseFolder, decompressTempFolder)
const flutterFolder = path.join(tempFolder, 'flutter')
let cacheBaseFolder = core.getInput('cache-path')
if (!cacheBaseFolder || cacheBaseFolder === '') {
cacheBaseFolder = process.env['RUNNER_TOOL_CACHE']
}
const cacheFolder = path.join(cacheBaseFolder, getCacheKey(releaseEntity))
if (core.getBooleanInput('query-only')) {
core.setOutput('channel', releaseEntity.channel)
core.setOutput('version', releaseEntity.version)
core.setOutput('architecture', releaseEntity.dart_sdk_arch)
core.setOutput('cache-path', cacheFolder)
core.setOutput('cache-key', getCacheKey(releaseEntity))
} else {
const flutterDirectory = tc.find(
'flutter',
releaseEntity.version,
releaseEntity.dart_sdk_arch
)
if (flutterDirectory) {
core.info(
`Found Flutter in cache ${flutterDirectory}, skipping installation`
)
core.setOutput('used-cached', 'true')
core.addPath(path.join(flutterDirectory, 'bin'))
core.exportVariable('FLUTTER_HOME', flutterDirectory)
core.exportVariable(
'PUB_CACHE',
path.join(flutterDirectory, '.pub-cache')
)
core.addPath(path.join(flutterDirectory, 'bin'))
core.addPath(
path.join(flutterDirectory, 'bin', 'cache', 'dart-sdk', 'bin')
)
core.addPath(path.join(flutterDirectory, '.pub-cache', 'bin'))
core.setOutput('channel', releaseEntity.channel)
core.setOutput('version', releaseEntity.version)
core.setOutput('architecture', releaseEntity.dart_sdk_arch)
core.setOutput('cache-path', cacheFolder)
core.setOutput('cache-key', getCacheKey(releaseEntity))
return
}
try {
await downloadVersion(releaseEntity)
} catch (error) {
core.setFailed(error)
return
}
core.info(`Installing Flutter ${releaseEntity.version}...`)
fs.mkdirSync(cacheFolder, { recursive: true })
try {
fs.renameSync(flutterFolder, cacheFolder)
} catch (error) {
core.error(`Error moving ${flutterFolder} to ${cacheFolder}: ${error}`)
core.setFailed(
`Error moving ${flutterFolder} to ${cacheFolder}: ${error}`
)
return
}
let output = ''
let errorOutput = ''
const options = {}
options.listeners = {
stdout: data => {
output += data.toString()
},
stderr: data => {
errorOutput += data.toString()
}
}
await exec.exec(
`"${path.join(cacheFolder, 'bin', 'flutter')}"`,
['doctor', '-v'],
options
)
core.setOutput('doctor-output', output)
output = ''
errorOutput = ''
await exec.exec(
`"${path.join(cacheFolder, 'bin', 'flutter')}"`,
['--version'],
options
)
core.setOutput('version-output', output)
output = ''
errorOutput = ''
await exec.exec(
`"${path.join(cacheFolder, 'bin', 'flutter')}"`,
['precache'],
options
)
core.setOutput('precache-output', output)
core.exportVariable('FLUTTER_HOME', path.join(cacheFolder))
core.exportVariable('PUB_CACHE', path.join(cacheFolder, '.pub-cache'))
core.addPath(path.join(cacheFolder, 'bin'))
core.addPath(path.join(cacheFolder, 'bin', 'cache', 'dart-sdk', 'bin'))
core.addPath(path.join(cacheFolder, '.pub-cache', 'bin'))
core.setOutput('channel', releaseEntity.channel)
core.setOutput('version', releaseEntity.version)
core.setOutput('architecture', releaseEntity.dart_sdk_arch)
core.setOutput('cache-path', cacheFolder)
core.setOutput('cache-key', getCacheKey(releaseEntity))
clean()
if (core.getBooleanInput('cache')) {
core.info(`Caching ${cacheFolder}...`)
const cachePath = await tc.cacheDir(
cacheFolder,
'flutter',
releaseEntity.version,
releaseEntity.dart_sdk_arch
)
core.info(`Cache ID: ${cachePath}`)
core.addPath(cachePath)
}
}
} catch (error) {
// Fail the workflow run if an error occurs
core.setFailed(error.message)
}
}
async function getLatestVersion(channel, arch, version) {
let osName = process.env['RUNNER_OS']
if (osName === 'darwin') {
osName = 'macos'
}
// sometimes the x64 architecture is reported as amd64
if (arch !== undefined && arch !== '') {
if (arch === 'amd64') {
arch = 'x64'
}
}
const manifestBaseUrl =
'https://storage.googleapis.com/flutter_infra_release/releases'
const json_path = `releases_${osName}.json`
const manifestUrl = `${manifestBaseUrl}/${json_path}`
try {
core.info('Getting latest version...')
const response = await axios.get(manifestUrl)
const channelHash = response.data.current_release[channel]
if (!channelHash) {
core.setFailed(`Channel ${channel} not found`)
return
}
const channelEntries = []
for (const [key, value] of Object.entries(response.data.releases)) {
if (value.hash === channelHash) {
channelEntries.push(value)
}
}
if ((!arch || arch === '') && (!version || version === '')) {
core.setOutput('version', channelEntries[0].version)
core.info(`Latest version: ${channelEntries[0].version}`)
return channelEntries[0].version
}
let filteredEntry = {}
for (const entry of channelEntries) {
if (version && version !== '' && arch && arch !== '') {
if (entry.version === version && entry.dart_sdk_arch === arch) {
filteredEntry = entry
break
}
} else if (version && version !== '') {
if (entry.version === version) {
filteredEntry = entry
break
}
} else if (arch && arch !== '') {
if (entry.dart_sdk_arch === arch) {
filteredEntry = entry
break
}
}
}
if (!filteredEntry.version) {
if (version && version !== '' && arch && arch !== '') {
core.setFailed(`Version ${version} with architecture ${arch} not found`)
return
}
if (version && version !== '') {
core.setFailed(`Version ${version} not found`)
return
}
if (arch && arch !== '') {
core.setFailed(`Architecture ${arch} not found`)
return
}
} else {
core.setOutput('version', filteredEntry.version)
core.info(`Latest version: ${filteredEntry.version}`)
return filteredEntry.version
}
} catch (error) {
core.setFailed('Failed to get the latest version')
}
}
module.exports = {
run,
getLatestVersion
run
}

View File

@ -1,17 +0,0 @@
/**
* Wait for a number of milliseconds.
*
* @param {number} milliseconds The number of milliseconds to wait.
* @returns {Promise<string>} Resolves with 'done!' after the wait is over.
*/
async function wait(milliseconds) {
return new Promise(resolve => {
if (isNaN(milliseconds)) {
throw new Error('milliseconds not a number')
}
setTimeout(() => resolve('done!'), milliseconds)
})
}
module.exports = { wait }

462
yarn.lock
View File

@ -7,7 +7,7 @@
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
"@actions/core@^1.10.1":
"@actions/core@^1.10.1", "@actions/core@^1.2.6":
version "1.10.1"
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.1.tgz#61108e7ac40acae95ee36da074fa5850ca4ced8a"
integrity sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==
@ -15,7 +15,14 @@
"@actions/http-client" "^2.0.1"
uuid "^8.3.2"
"@actions/http-client@^2.0.1":
"@actions/exec@^1.0.0", "@actions/exec@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.1.1.tgz#2e43f28c54022537172819a7cf886c844221a611"
integrity sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==
dependencies:
"@actions/io" "^1.0.1"
"@actions/http-client@^2.0.1", "@actions/http-client@^2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.0.tgz#f8239f375be6185fcd07765efdcf0031ad5df1a0"
integrity sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==
@ -23,6 +30,23 @@
tunnel "^0.0.6"
undici "^5.25.4"
"@actions/io@^1.0.1", "@actions/io@^1.1.1":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.1.3.tgz#4cdb6254da7962b07473ff5c335f3da485d94d71"
integrity sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==
"@actions/tool-cache@^2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@actions/tool-cache/-/tool-cache-2.0.1.tgz#8a649b9c07838d9d750c9864814e66a7660ab720"
integrity sha512-iPU+mNwrbA8jodY8eyo/0S/QqCKDajiR8OxWTnSk/SnYg0sj8Hp4QcUEVC1YFpHWXtrfbQrE13Jz4k4HXJQKcA==
dependencies:
"@actions/core" "^1.2.6"
"@actions/exec" "^1.0.0"
"@actions/http-client" "^2.0.1"
"@actions/io" "^1.1.1"
semver "^6.1.0"
uuid "^3.3.2"
"@ampproject/remapping@^2.2.0":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
@ -1789,6 +1813,11 @@ axobject-query@^3.2.1:
dependencies:
dequal "^2.0.3"
b4a@^1.6.4:
version "1.6.4"
resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9"
integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==
babel-jest@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5"
@ -1878,11 +1907,24 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
big-integer@^1.6.44:
version "1.6.52"
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
bl@^1.0.0:
version "1.2.3"
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7"
integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==
dependencies:
readable-stream "^2.3.5"
safe-buffer "^5.1.1"
bplist-parser@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e"
@ -1922,11 +1964,42 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
buffer-alloc-unsafe@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
buffer-alloc@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
dependencies:
buffer-alloc-unsafe "^1.1.0"
buffer-fill "^1.0.0"
buffer-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
buffer-fill@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
buffer@^5.2.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
dependencies:
base64-js "^1.3.1"
ieee754 "^1.1.13"
bundle-name@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
@ -1985,6 +2058,11 @@ char-regex@^1.0.2:
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
chownr@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
ci-info@^3.2.0:
version "3.9.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
@ -2045,6 +2123,11 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
commander@^2.8.1:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@ -2062,6 +2145,11 @@ core-js-compat@^3.31.0, core-js-compat@^3.33.1:
dependencies:
browserslist "^4.22.2"
core-util-is@~1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
create-jest@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320"
@ -2103,6 +2191,59 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
dependencies:
ms "2.1.2"
decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
dependencies:
file-type "^5.2.0"
is-stream "^1.1.0"
tar-stream "^1.5.2"
decompress-tarbz2@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
dependencies:
decompress-tar "^4.1.0"
file-type "^6.1.0"
is-stream "^1.1.0"
seek-bzip "^1.0.5"
unbzip2-stream "^1.0.9"
decompress-targz@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
dependencies:
decompress-tar "^4.1.1"
file-type "^5.2.0"
is-stream "^1.1.0"
decompress-unzip@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==
dependencies:
file-type "^3.8.0"
get-stream "^2.2.0"
pify "^2.3.0"
yauzl "^2.4.2"
decompress@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118"
integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==
dependencies:
decompress-tar "^4.0.0"
decompress-tarbz2 "^4.0.0"
decompress-targz "^4.0.0"
decompress-unzip "^4.0.1"
graceful-fs "^4.1.10"
make-dir "^1.0.0"
pify "^2.3.0"
strip-dirs "^2.0.0"
dedent@^1.0.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
@ -2220,6 +2361,13 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@ -2650,6 +2798,11 @@ fast-diff@^1.1.2:
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0"
integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==
fast-fifo@^1.1.0, fast-fifo@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c"
integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==
fast-glob@^3.2.9, fast-glob@^3.3.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
@ -2685,6 +2838,13 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
fd-slicer@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
dependencies:
pend "~1.2.0"
file-entry-cache@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@ -2692,6 +2852,21 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
file-type@^3.8.0:
version "3.9.0"
resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==
file-type@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==
file-type@^6.1.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@ -2750,6 +2925,18 @@ form-data@^4.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
fs-constants@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
fs-minipass@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
dependencies:
minipass "^3.0.0"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@ -2805,6 +2992,14 @@ get-package-type@^0.1.0:
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
get-stream@^2.2.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==
dependencies:
object-assign "^4.0.1"
pinkie-promise "^2.0.0"
get-stream@^6.0.0, get-stream@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
@ -2882,7 +3077,7 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
graceful-fs@^4.2.9:
graceful-fs@^4.1.10, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@ -2953,6 +3148,11 @@ human-signals@^4.3.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
ignore@^5.0.5, ignore@^5.2.0, ignore@^5.2.4:
version "5.3.0"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
@ -2987,7 +3187,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@2:
inherits@2, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@ -3114,6 +3314,11 @@ is-map@^2.0.1:
resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
is-natural-number@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==
is-negative-zero@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
@ -3156,6 +3361,11 @@ is-shared-array-buffer@^1.0.2:
dependencies:
call-bind "^1.0.2"
is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
is-stream@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
@ -3219,6 +3429,11 @@ isarray@^2.0.5:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@ -3825,6 +4040,13 @@ make-coverage-badge@^1.2.0:
dependencies:
mri "1.1.4"
make-dir@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
dependencies:
pify "^3.0.0"
make-dir@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
@ -3891,6 +4113,36 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
minipass@^3.0.0:
version "3.3.6"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
dependencies:
yallist "^4.0.0"
minipass@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
minizlib@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
dependencies:
minipass "^3.0.0"
yallist "^4.0.0"
mkdirp-classic@^0.5.2:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
mkdirp@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mri@1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a"
@ -3911,6 +4163,11 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
node-addon-api@^1.6.1:
version "1.7.2"
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d"
integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@ -3940,6 +4197,11 @@ npm-run-path@^5.1.0:
dependencies:
path-key "^4.0.0"
object-assign@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
object-inspect@^1.13.1, object-inspect@^1.9.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
@ -3997,7 +4259,7 @@ object.values@^1.1.6, object.values@^1.1.7:
define-properties "^1.2.0"
es-abstract "^1.22.1"
once@^1.3.0:
once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
@ -4120,6 +4382,11 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
pend@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
@ -4130,6 +4397,28 @@ picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
pinkie-promise@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
dependencies:
pinkie "^2.0.0"
pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
pirates@^4.0.4:
version "4.0.6"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
@ -4168,6 +4457,11 @@ pretty-format@^29.7.0:
ansi-styles "^5.0.0"
react-is "^18.0.0"
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
prompts@^2.0.1:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
@ -4181,6 +4475,14 @@ proxy-from-env@^1.1.0:
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
punycode@^2.1.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
@ -4196,11 +4498,29 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
queue-tick@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142"
integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==
react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
readable-stream@^2.3.0, readable-stream@^2.3.5:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
isarray "~1.0.0"
process-nextick-args "~2.0.0"
safe-buffer "~5.1.1"
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
reflect.getprototypeof@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3"
@ -4337,6 +4657,16 @@ safe-array-concat@^1.0.1:
has-symbols "^1.0.3"
isarray "^2.0.5"
safe-buffer@^5.1.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-regex-test@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
@ -4346,7 +4676,14 @@ safe-regex-test@^1.0.0:
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
semver@^6.3.0, semver@^6.3.1:
seek-bzip@^1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4"
integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==
dependencies:
commander "^2.8.1"
semver@^6.1.0, semver@^6.3.0, semver@^6.3.1:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
@ -4438,6 +4775,14 @@ stack-utils@^2.0.3:
dependencies:
escape-string-regexp "^2.0.0"
streamx@^2.15.0:
version "2.15.6"
resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.6.tgz#28bf36997ebc7bf6c08f9eba958735231b833887"
integrity sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==
dependencies:
fast-fifo "^1.1.0"
queue-tick "^1.0.1"
string-length@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
@ -4482,6 +4827,13 @@ string.prototype.trimstart@^1.0.7:
define-properties "^1.2.0"
es-abstract "^1.22.1"
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
dependencies:
safe-buffer "~5.1.0"
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@ -4499,6 +4851,13 @@ strip-bom@^4.0.0:
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
strip-dirs@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
dependencies:
is-natural-number "^4.0.1"
strip-final-newline@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
@ -4553,6 +4912,49 @@ synckit@^0.8.5:
"@pkgr/utils" "^2.4.2"
tslib "^2.6.2"
tar-fs@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf"
integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==
dependencies:
mkdirp-classic "^0.5.2"
pump "^3.0.0"
tar-stream "^3.1.5"
tar-stream@^1.5.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
dependencies:
bl "^1.0.0"
buffer-alloc "^1.2.0"
end-of-stream "^1.0.0"
fs-constants "^1.0.0"
readable-stream "^2.3.0"
to-buffer "^1.1.1"
xtend "^4.0.0"
tar-stream@^3.1.5:
version "3.1.6"
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab"
integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==
dependencies:
b4a "^1.6.4"
fast-fifo "^1.2.0"
streamx "^2.15.0"
tar@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73"
integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
minipass "^5.0.0"
minizlib "^2.1.1"
mkdirp "^1.0.3"
yallist "^4.0.0"
test-exclude@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
@ -4567,6 +4969,11 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
through@^2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
titleize@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
@ -4577,6 +4984,11 @@ tmpl@1.0.5:
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
to-buffer@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
@ -4697,6 +5109,14 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
unbzip2-stream@^1.0.9:
version "1.4.3"
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
dependencies:
buffer "^5.2.1"
through "^2.3.8"
undici-types@~5.26.4:
version "5.26.5"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
@ -4752,6 +5172,16 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
uuid@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
@ -4852,6 +5282,18 @@ write-file-atomic@^4.0.2:
imurmurhash "^0.1.4"
signal-exit "^3.0.7"
xtend@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
xz@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/xz/-/xz-2.0.2.tgz#6f9effc94319c96e8919be8779a3af2689742dd1"
integrity sha512-K0rWxVLh2yRuvM0alMiwzxkkygUZcrJ8pNZ0JT0yTGoZ0FyqwHnY6Mbt7BcATP9abMVeCpiEqmear2ixHZSaLQ==
dependencies:
node-addon-api "^1.6.1"
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
@ -4885,6 +5327,14 @@ yargs@^17.3.1:
y18n "^5.0.5"
yargs-parser "^21.1.1"
yauzl@^2.4.2:
version "2.10.0"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"