From 65c9643a080219d322be8ea6b38ba2a90e1c3d32 Mon Sep 17 00:00:00 2001 From: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com> Date: Fri, 12 Jan 2024 16:35:19 +0100 Subject: [PATCH] test: interfaces and ERC-165 (#40) * build: added version number to allow importing * revert: remove osx dependency * fix: use new IDAO * feat: add former voting helpers * feat: refactored helpers * refactor: event function * refactor: improved naming * refactor: improve time helpers * refactor: removed hardhat time * fix: wrong import * refactor: improve time constants * docs: add todo comment * refactor: move over plugin and plugin setups as well as permissions * refactor: renaming and changed folder structure * feat: added bitmap * refactor: moved metadata into separate file * refactor: moved events * refactor: moved permissions * revert: version bump of solhint * refactor: improve folder structure * refactor: folders structure, imports, yarn lock * ci: fix * fix: version mismatch with sdk * revert: remove etherscan * refactor: rename event constants * ci: make sdk an alpha version * feat: move permissions * build: rename package * refactor: structure * build: save yarn lock * build: use same typescript version * refactor: imports * build: contracts start with alpha version * build: use commons-sdk * fix: imports * build: add files to index * v0.0.1-alpha.1 * fix: bump version and fix import * fix: imports * fix: missing export * chore: bump version * chore: save lock file * chore: bump version * build: no postinstall * chore: ignore DS_Store files * v0.0.1-alpha.3 * refactor: remove proxy helper * build: add protocol version * v0.0.1-alpha.4 * feat: made ProtocolVersion non-abstract * refactor: protocol version number remove protocol version constant and bump osx-commons-contracts package version number to match with the protocol version * revert: make ProtocolVersion abstract and use mock instead * v1.4.0-alpha.1 * refactor: renamed function * chore: maintain changelog * build: improve build * ci: added missing secret * revert: remove duplicate * build: remove osx-ethers dependencies * revert: remove TestPlugin * build: use files allowlist instead of .npmignore denylist * refactor: improved mocks * refactor: improved mocks further * refactor: rename test * refactor: remove placeholder setup * feat: added test sekletons and todos * revert: removed todo that has its own task already * build: bump version number * docs: improved plugin setup mock data * refactor: renamed PluginMockData to PluginSetupMockData * refactor: setup mocks * build: remove src folder * refactor: move and added todo * refactor: move auth into dao folder * build: adapt the hardhat solidity source path subtask * refactor: move auth * revert: src removal * revert: delete storage * refactor: move governance into extensions * build: remove governance folder from package.json * fix: wrong path * refactor: harmonize mock contract naming and move CloneFactory * revert: author comment for mock * feat: use name aliases * feat: added interface related tests * fix: added missing await * style: improved linting * fix: contract linting errors * style: improve linting * fix: subgraph linter complaints * docs: remove todos and add test skeleton * style: fix enum values * feat: add custom event error * chore: use new sdk * docs: fix comments * fix: linter * test: added missing interface test --- .eslintrc.yml | 3 + contracts/.eslintrc.yml | 1 + contracts/package.json | 2 + contracts/test/dao/dao.ts | 12 + contracts/test/helpers.ts | 17 + contracts/test/permission/auth/auth.ts | 2 - .../test/permission/auth/dao-authorizable.ts | 2 - .../test/permission/permission-condition.ts | 18 +- .../extensions/governance/addresslist.ts | 134 ++-- .../test/plugin/extensions/membership.ts | 15 +- contracts/test/plugin/extensions/proposal.ts | 29 +- contracts/test/plugin/plugin-clonable.ts | 15 +- .../test/plugin/plugin-uups-upgradeable.ts | 21 +- contracts/test/plugin/plugin.ts | 15 +- contracts/test/plugin/setup/plugin-setup.ts | 50 +- contracts/test/utils/math/bitmap.ts | 12 +- contracts/test/utils/math/ratio.ts | 4 +- .../test/utils/versioning/protocol-version.ts | 23 +- .../versioning/version-comparison-lib.ts | 10 +- contracts/yarn.lock | 9 +- package.json | 2 + subgraph/tests/ids/permissions.test.ts | 1 - yarn.lock | 700 ++++++++++++++++++ 23 files changed, 923 insertions(+), 174 deletions(-) create mode 100644 contracts/test/dao/dao.ts create mode 100644 contracts/test/helpers.ts diff --git a/.eslintrc.yml b/.eslintrc.yml index 473dea05..43fb8a0e 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -8,6 +8,7 @@ extends: plugins: - '@typescript-eslint' + - 'unused-imports' rules: '@typescript-eslint/no-floating-promises': @@ -21,6 +22,8 @@ rules: - argsIgnorePattern: '_' varsIgnorePattern: '_' + 'unused-imports/no-unused-imports': 'error' + ignorePatterns: - '*.log' - '*.env' diff --git a/contracts/.eslintrc.yml b/contracts/.eslintrc.yml index 1c802185..6b61922e 100644 --- a/contracts/.eslintrc.yml +++ b/contracts/.eslintrc.yml @@ -13,6 +13,7 @@ ignorePatterns: - cache - coverage - dist + - docs - typechain # files - coverage.json diff --git a/contracts/package.json b/contracts/package.json index de2ffde8..d60e14bc 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -9,6 +9,8 @@ }, "devDependencies": { "@aragon/osx-commons-sdk": "0.0.1-alpha.3", + "@aragon/osx-ethers-v1.0.0": "npm:@aragon/osx-ethers@1.0.0", + "@aragon/osx-ethers-v1.3.0": "npm:@aragon/osx-ethers@1.3.0", "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", diff --git a/contracts/test/dao/dao.ts b/contracts/test/dao/dao.ts new file mode 100644 index 00000000..a6c1af75 --- /dev/null +++ b/contracts/test/dao/dao.ts @@ -0,0 +1,12 @@ +import {IDAO__factory} from '../../typechain'; +import {getInterfaceId} from '@aragon/osx-commons-sdk'; +import {IDAO__factory as IDAO_V1_0_0__factory} from '@aragon/osx-ethers-v1.0.0'; +import {expect} from 'chai'; + +describe('IDAO', function () { + it('has the same interface ID as its initial version introduced in v1.0.0', async () => { + const current = getInterfaceId(IDAO__factory.createInterface()); + const initial = getInterfaceId(IDAO_V1_0_0__factory.createInterface()); + expect(current).to.equal(initial); + }); +}); diff --git a/contracts/test/helpers.ts b/contracts/test/helpers.ts new file mode 100644 index 00000000..8a01d111 --- /dev/null +++ b/contracts/test/helpers.ts @@ -0,0 +1,17 @@ +import {IERC165__factory} from '../typechain'; +import {getInterfaceId} from '@aragon/osx-commons-sdk'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; +import {expect} from 'chai'; +import {Contract} from 'ethers'; + +export async function erc165ComplianceTests( + contract: Contract, + signer: SignerWithAddress +) { + const erc165Contract = IERC165__factory.connect(contract.address, signer); + const erc165InterfaceId = getInterfaceId(IERC165__factory.createInterface()); + const emptyInterfaceId = '0xffffffff'; + + expect(await erc165Contract.supportsInterface(erc165InterfaceId)).to.be.true; + expect(await erc165Contract.supportsInterface(emptyInterfaceId)).to.be.false; +} diff --git a/contracts/test/permission/auth/auth.ts b/contracts/test/permission/auth/auth.ts index fc20d284..933ee5ba 100644 --- a/contracts/test/permission/auth/auth.ts +++ b/contracts/test/permission/auth/auth.ts @@ -1,7 +1,5 @@ import {expect} from 'chai'; -// TODO - describe.skip('auth', async () => { it('reverts with an error if the permission is not granted', async () => { expect(true).to.equal(false); diff --git a/contracts/test/permission/auth/dao-authorizable.ts b/contracts/test/permission/auth/dao-authorizable.ts index 5d785068..e7dbc35c 100644 --- a/contracts/test/permission/auth/dao-authorizable.ts +++ b/contracts/test/permission/auth/dao-authorizable.ts @@ -1,7 +1,5 @@ import {expect} from 'chai'; -// TODO - describe.skip('DaoAuthorizable', async () => { // TODO abstract these common tests that also apply to `DaoAuthorizableUpgradeable` it('initializes the DAO', async () => { diff --git a/contracts/test/permission/permission-condition.ts b/contracts/test/permission/permission-condition.ts index a592f7e2..a3c194b6 100644 --- a/contracts/test/permission/permission-condition.ts +++ b/contracts/test/permission/permission-condition.ts @@ -1,21 +1,21 @@ import { - IERC165__factory, IPermissionCondition__factory, IProtocolVersion__factory, PermissionConditionMock, PermissionConditionMock__factory, } from '../../typechain'; +import {erc165ComplianceTests} from '../helpers'; import {getInterfaceId} from '@aragon/osx-commons-sdk'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {ethers} from 'hardhat'; -// TODO - describe('PermissionCondition', async () => { let condition: PermissionConditionMock; + let deployer: SignerWithAddress; before(async () => { - const deployer = (await ethers.getSigners())[0]; + [deployer] = await ethers.getSigners(); condition = await new PermissionConditionMock__factory(deployer).deploy(); }); @@ -29,14 +29,8 @@ describe('PermissionCondition', async () => { }); describe('ERC-165', async () => { - it('does not support the empty interface', async () => { - expect(await condition.supportsInterface('0xffffffff')).to.be.false; - }); - - it('supports the `IERC165` interface', async () => { - const iface = IERC165__factory.createInterface(); - expect(await condition.supportsInterface(getInterfaceId(iface))).to.be - .true; + it('supports the `ERC-165` standard', async () => { + await erc165ComplianceTests(condition, deployer); }); it('supports the `IPermissionCondition` interface', async () => { diff --git a/contracts/test/plugin/extensions/governance/addresslist.ts b/contracts/test/plugin/extensions/governance/addresslist.ts index 7de237bc..ccbf5ecb 100644 --- a/contracts/test/plugin/extensions/governance/addresslist.ts +++ b/contracts/test/plugin/extensions/governance/addresslist.ts @@ -4,15 +4,17 @@ import {expect} from 'chai'; import {ethers} from 'hardhat'; describe('AddresslistMock', function () { - let signers: SignerWithAddress[]; + let alice: SignerWithAddress; + let bob: SignerWithAddress; + let carol: SignerWithAddress; let addresslist: AddresslistMock; before(async () => { - signers = await ethers.getSigners(); + [alice, bob, carol] = await ethers.getSigners(); }); beforeEach(async () => { - const AddresslistMock = new AddresslistMock__factory(signers[0]); + const AddresslistMock = new AddresslistMock__factory(alice); addresslist = await AddresslistMock.deploy(); }); @@ -20,41 +22,35 @@ describe('AddresslistMock', function () { it('returns the right length after addresses were added', async () => { expect(await addresslist.addresslistLength()).to.equal(0); - await addresslist.addAddresses([signers[0].address]); + await addresslist.addAddresses([alice.address]); expect(await addresslist.addresslistLength()).to.equal(1); - await addresslist.addAddresses([signers[1].address, signers[2].address]); + await addresslist.addAddresses([bob.address, carol.address]); expect(await addresslist.addresslistLength()).to.equal(3); }); it('returns the right length after addresses were removed', async () => { await addresslist.addAddresses([ - signers[0].address, - signers[1].address, - signers[2].address, + alice.address, + bob.address, + carol.address, ]); expect(await addresslist.addresslistLength()).to.equal(3); - await addresslist.removeAddresses([signers[0].address]); + await addresslist.removeAddresses([alice.address]); expect(await addresslist.addresslistLength()).to.equal(2); - await addresslist.removeAddresses([ - signers[1].address, - signers[2].address, - ]); + await addresslist.removeAddresses([bob.address, carol.address]); expect(await addresslist.addresslistLength()).to.equal(0); }); }); context('addresslistLengthAtBlock', function () { it('returns the right length after addresses were added', async () => { - const tx1 = await addresslist.addAddresses([signers[0].address]); + const tx1 = await addresslist.addAddresses([alice.address]); await ethers.provider.send('evm_mine', []); - const tx2 = await addresslist.addAddresses([ - signers[1].address, - signers[2].address, - ]); + const tx2 = await addresslist.addAddresses([bob.address, carol.address]); await ethers.provider.send('evm_mine', []); const [rc1, rc2] = await Promise.all([tx1.wait(), tx2.wait()]); @@ -72,18 +68,18 @@ describe('AddresslistMock', function () { it('returns the right length after addresses were removed', async () => { const tx1 = await addresslist.addAddresses([ - signers[0].address, - signers[1].address, - signers[2].address, + alice.address, + bob.address, + carol.address, ]); await ethers.provider.send('evm_mine', []); - const tx2 = await addresslist.removeAddresses([signers[0].address]); + const tx2 = await addresslist.removeAddresses([alice.address]); await ethers.provider.send('evm_mine', []); const tx3 = await addresslist.removeAddresses([ - signers[1].address, - signers[2].address, + bob.address, + carol.address, ]); await ethers.provider.send('evm_mine', []); @@ -110,23 +106,23 @@ describe('AddresslistMock', function () { context('isListed', function () { it('returns `true` if the address is listed', async () => { - await addresslist.addAddresses([signers[0].address]); + await addresslist.addAddresses([alice.address]); await ethers.provider.send('evm_mine', []); - expect(await addresslist.isListed(signers[0].address)).to.equal(true); + expect(await addresslist.isListed(alice.address)).to.equal(true); }); it('returns `false` if the address is not listed', async () => { - expect(await addresslist.isListed(signers[0].address)).to.equal(false); + expect(await addresslist.isListed(alice.address)).to.equal(false); }); }); context('isListedAtBlock', function () { it('returns `true` if the address is listed at the specific block', async () => { - const tx1 = await addresslist.addAddresses([signers[0].address]); + const tx1 = await addresslist.addAddresses([alice.address]); await ethers.provider.send('evm_mine', []); - const tx2 = await addresslist.removeAddresses([signers[0].address]); + const tx2 = await addresslist.removeAddresses([alice.address]); await ethers.provider.send('evm_mine', []); const [rc1, rc2] = await Promise.all([tx1.wait(), tx2.wait()]); @@ -134,121 +130,109 @@ describe('AddresslistMock', function () { expect(rc1.blockNumber).to.be.lt(rc2.blockNumber); expect( - await addresslist.isListedAtBlock(signers[0].address, rc1.blockNumber) + await addresslist.isListedAtBlock(alice.address, rc1.blockNumber) ).to.equal(true); expect( - await addresslist.isListedAtBlock(signers[0].address, rc2.blockNumber) + await addresslist.isListedAtBlock(alice.address, rc2.blockNumber) ).to.equal(false); }); it('returns `false` if the address is not listed at the specific block', async () => { - const tx1 = await addresslist.addAddresses([signers[0].address]); + const tx1 = await addresslist.addAddresses([alice.address]); await ethers.provider.send('evm_mine', []); const rc1 = await tx1.wait(); expect( - await addresslist.isListedAtBlock( - signers[0].address, - rc1.blockNumber - 1 - ) + await addresslist.isListedAtBlock(alice.address, rc1.blockNumber - 1) ).to.equal(false); expect( - await addresslist.isListedAtBlock(signers[0].address, rc1.blockNumber) + await addresslist.isListedAtBlock(alice.address, rc1.blockNumber) ).to.equal(true); }); }); context('addAddresses', function () { it('adds new addresses to the address list', async () => { - expect(await addresslist.isListed(signers[0].address)).to.equal(false); - expect(await addresslist.isListed(signers[1].address)).to.equal(false); + expect(await addresslist.isListed(alice.address)).to.equal(false); + expect(await addresslist.isListed(bob.address)).to.equal(false); expect(await addresslist.addresslistLength()).to.equal(0); - await addresslist.addAddresses([signers[0].address, signers[1].address]); + await addresslist.addAddresses([alice.address, bob.address]); await ethers.provider.send('evm_mine', []); - expect(await addresslist.isListed(signers[0].address)).to.equal(true); - expect(await addresslist.isListed(signers[1].address)).to.equal(true); + expect(await addresslist.isListed(alice.address)).to.equal(true); + expect(await addresslist.isListed(bob.address)).to.equal(true); expect(await addresslist.addresslistLength()).to.equal(2); }); it('reverts if an address was listed already', async () => { - await addresslist.addAddresses([signers[0].address, signers[2].address]); + await addresslist.addAddresses([alice.address, carol.address]); await ethers.provider.send('evm_mine', []); expect(await addresslist.addresslistLength()).to.equal(2); - // try to add signer[1] and signer[2], the latter of which is currently listed - await expect( - addresslist.addAddresses([signers[1].address, signers[2].address]) - ) + // try to add bob and carol, the latter of which is currently listed + await expect(addresslist.addAddresses([bob.address, carol.address])) .to.be.revertedWithCustomError(addresslist, 'InvalidAddresslistUpdate') - .withArgs(signers[2].address); + .withArgs(carol.address); // Verify that the address list has not changed await ethers.provider.send('evm_mine', []); - expect(await addresslist.isListed(signers[0].address)).to.equal(true); - expect(await addresslist.isListed(signers[2].address)).to.equal(true); + expect(await addresslist.isListed(alice.address)).to.equal(true); + expect(await addresslist.isListed(carol.address)).to.equal(true); expect(await addresslist.addresslistLength()).to.equal(2); }); it('reverts if the array of new addresses to be added contains an address multiple times', async () => { - await expect( - addresslist.addAddresses([signers[0].address, signers[0].address]) - ) + await expect(addresslist.addAddresses([alice.address, alice.address])) .to.be.revertedWithCustomError(addresslist, 'InvalidAddresslistUpdate') - .withArgs(signers[0].address); + .withArgs(alice.address); }); }); context('removeAddresses', function () { it('removes existing addresses from the address list', async () => { - await addresslist.addAddresses([signers[0].address, signers[1].address]); + await addresslist.addAddresses([alice.address, bob.address]); await ethers.provider.send('evm_mine', []); - expect(await addresslist.isListed(signers[0].address)).to.equal(true); - expect(await addresslist.isListed(signers[1].address)).to.equal(true); + expect(await addresslist.isListed(alice.address)).to.equal(true); + expect(await addresslist.isListed(bob.address)).to.equal(true); expect(await addresslist.addresslistLength()).to.equal(2); - await expect( - addresslist.removeAddresses([signers[0].address, signers[1].address]) - ).not.to.be.reverted; + await expect(addresslist.removeAddresses([alice.address, bob.address])) + .not.to.be.reverted; await ethers.provider.send('evm_mine', []); - expect(await addresslist.isListed(signers[0].address)).to.equal(false); - expect(await addresslist.isListed(signers[1].address)).to.equal(false); + expect(await addresslist.isListed(alice.address)).to.equal(false); + expect(await addresslist.isListed(bob.address)).to.equal(false); expect(await addresslist.addresslistLength()).to.equal(0); }); it('reverts removal if an address is not listed', async () => { - await addresslist.addAddresses([signers[0].address, signers[1].address]); + await addresslist.addAddresses([alice.address, bob.address]); await ethers.provider.send('evm_mine', []); expect(await addresslist.addresslistLength()).to.equal(2); - // try to remove signer[1] and signer[2], the latter of which is currently not listed - await expect( - addresslist.removeAddresses([signers[1].address, signers[2].address]) - ) + // try to remove bob and carol, the latter of which is currently not listed + await expect(addresslist.removeAddresses([bob.address, carol.address])) .to.be.revertedWithCustomError(addresslist, 'InvalidAddresslistUpdate') - .withArgs(signers[2].address); + .withArgs(carol.address); // Verify that the address list has not changed await ethers.provider.send('evm_mine', []); - expect(await addresslist.isListed(signers[0].address)).to.equal(true); - expect(await addresslist.isListed(signers[1].address)).to.equal(true); + expect(await addresslist.isListed(alice.address)).to.equal(true); + expect(await addresslist.isListed(bob.address)).to.equal(true); expect(await addresslist.addresslistLength()).to.equal(2); }); it('reverts if the array of existing addresses to be removed contains an address multiple times', async () => { - await addresslist.addAddresses([signers[0].address, signers[1].address]); + await addresslist.addAddresses([alice.address, bob.address]); await ethers.provider.send('evm_mine', []); - await expect( - addresslist.removeAddresses([signers[0].address, signers[0].address]) - ) + await expect(addresslist.removeAddresses([alice.address, alice.address])) .to.be.revertedWithCustomError(addresslist, 'InvalidAddresslistUpdate') - .withArgs(signers[0].address); + .withArgs(alice.address); }); }); }); diff --git a/contracts/test/plugin/extensions/membership.ts b/contracts/test/plugin/extensions/membership.ts index 70ee36dd..e859326a 100644 --- a/contracts/test/plugin/extensions/membership.ts +++ b/contracts/test/plugin/extensions/membership.ts @@ -1,9 +1,14 @@ +import {IMembership__factory} from '../../../typechain'; +import {getInterfaceId} from '@aragon/osx-commons-sdk'; +import {IMembership__factory as IMembership_V1_0_0__factory} from '@aragon/osx-ethers-v1.0.0'; import {expect} from 'chai'; -// TODO - -describe.skip('IMembership', async () => { - it('has the same interface ID as in OSx v1.0.0', async () => { - expect(true).to.equal(false); +describe('IMembership', function () { + it('has the same interface ID as its initial version introduced in v1.0.0', async () => { + const current = getInterfaceId(IMembership__factory.createInterface()); + const initial = getInterfaceId( + IMembership_V1_0_0__factory.createInterface() + ); + expect(current).to.equal(initial); }); }); diff --git a/contracts/test/plugin/extensions/proposal.ts b/contracts/test/plugin/extensions/proposal.ts index 4d4a94eb..ea2ae595 100644 --- a/contracts/test/plugin/extensions/proposal.ts +++ b/contracts/test/plugin/extensions/proposal.ts @@ -1,21 +1,26 @@ -import {IERC165__factory, IProposal__factory} from '../../../typechain'; +import {IProposal__factory} from '../../../typechain'; +import {erc165ComplianceTests} from '../../helpers'; import {getInterfaceId} from '@aragon/osx-commons-sdk'; +import {IProposal__factory as IProposal_V1_0_0__factory} from '@aragon/osx-ethers-v1.0.0'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {Contract} from 'ethers'; +import {ethers} from 'hardhat'; -// TODO - -describe.skip('IProposal', async () => { - it('has the same interface ID as in OSx v1.0.0', async () => { - expect(true).to.equal(false); +describe('IProposal', function () { + it('has the same interface ID as its initial version introduced in v1.0.0', async () => { + const current = getInterfaceId(IProposal__factory.createInterface()); + const initial = getInterfaceId(IProposal_V1_0_0__factory.createInterface()); + expect(current).to.equal(initial); }); }); describe.skip('Proposal', async () => { + let deployer: SignerWithAddress; let contract: Contract; // TODO create ProposalMock before(async () => { - //const deployer = (await ethers.getSigners())[0]; + [deployer] = await ethers.getSigners(); //contract = await new ProposalMock__factory(deployer).deploy(); }); @@ -45,14 +50,8 @@ describe.skip('Proposal', async () => { }); describe('ERC-165', async () => { - it('does not support the empty interface', async () => { - expect(await contract.supportsInterface('0xffffffff')).to.be.false; - }); - - it('supports the `IERC165` interface', async () => { - const iface = IERC165__factory.createInterface(); - expect(await contract.supportsInterface(getInterfaceId(iface))).to.be - .true; + it('supports the `ERC-165` standard', async () => { + await erc165ComplianceTests(contract, deployer); }); it('supports the `IProposal` interface', async () => { diff --git a/contracts/test/plugin/plugin-clonable.ts b/contracts/test/plugin/plugin-clonable.ts index bd6f283a..3f2a0028 100644 --- a/contracts/test/plugin/plugin-clonable.ts +++ b/contracts/test/plugin/plugin-clonable.ts @@ -1,20 +1,22 @@ import { - IERC165__factory, IPlugin__factory, IProtocolVersion__factory, PluginCloneableMockBuild1, PluginCloneableMockBuild1__factory, } from '../../typechain'; +import {erc165ComplianceTests} from '../helpers'; import {osxCommonsContractsVersion} from '../utils/versioning/protocol-version'; import {getInterfaceId, PluginType} from '@aragon/osx-commons-sdk'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {ethers} from 'hardhat'; describe('PluginCloneable', function () { + let deployer: SignerWithAddress; let plugin: PluginCloneableMockBuild1; before(async () => { - const deployer = (await ethers.getSigners())[0]; + [deployer] = await ethers.getSigners(); plugin = await new PluginCloneableMockBuild1__factory(deployer).deploy(); }); @@ -25,13 +27,8 @@ describe('PluginCloneable', function () { }); describe('ERC-165', async () => { - it('does not support the empty interface', async () => { - expect(await plugin.supportsInterface('0xffffffff')).to.be.false; - }); - - it('supports the `IERC165` interface', async () => { - const iface = IERC165__factory.createInterface(); - expect(await plugin.supportsInterface(getInterfaceId(iface))).to.be.true; + it('supports the `ERC-165` standard', async () => { + await erc165ComplianceTests(plugin, deployer); }); it('supports the `IPlugin` interface', async () => { diff --git a/contracts/test/plugin/plugin-uups-upgradeable.ts b/contracts/test/plugin/plugin-uups-upgradeable.ts index 23b68850..c4da68bd 100644 --- a/contracts/test/plugin/plugin-uups-upgradeable.ts +++ b/contracts/test/plugin/plugin-uups-upgradeable.ts @@ -1,20 +1,23 @@ import { - IERC165__factory, + IERC1822ProxiableUpgradeable__factory, IPlugin__factory, IProtocolVersion__factory, PluginUUPSUpgradeableMockBuild1, PluginUUPSUpgradeableMockBuild1__factory, } from '../../typechain'; +import {erc165ComplianceTests} from '../helpers'; import {osxCommonsContractsVersion as osxCommonsContractsPackageVersion} from '../utils/versioning/protocol-version'; import {getInterfaceId, PluginType} from '@aragon/osx-commons-sdk'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {ethers} from 'hardhat'; describe('PluginUUPSUpgradeable', function () { let plugin: PluginUUPSUpgradeableMockBuild1; + let deployer: SignerWithAddress; before(async () => { - const deployer = (await ethers.getSigners())[0]; + [deployer] = await ethers.getSigners(); plugin = await new PluginUUPSUpgradeableMockBuild1__factory( deployer ).deploy(); @@ -27,13 +30,8 @@ describe('PluginUUPSUpgradeable', function () { }); describe('ERC-165', async () => { - it('does not support the empty interface', async () => { - expect(await plugin.supportsInterface('0xffffffff')).to.be.false; - }); - - it('supports the `IERC165` interface', async () => { - const iface = IERC165__factory.createInterface(); - expect(await plugin.supportsInterface(getInterfaceId(iface))).to.be.true; + it('supports the `ERC-165` standard', async () => { + await erc165ComplianceTests(plugin, deployer); }); it('supports the `IPlugin` interface', async () => { @@ -45,6 +43,11 @@ describe('PluginUUPSUpgradeable', function () { const iface = IProtocolVersion__factory.createInterface(); expect(await plugin.supportsInterface(getInterfaceId(iface))).to.be.true; }); + + it('supports the `IERC1822ProxiableUpgradeable` interface', async () => { + const iface = IERC1822ProxiableUpgradeable__factory.createInterface(); + expect(await plugin.supportsInterface(getInterfaceId(iface))).to.be.true; + }); }); describe('Protocol version', async () => { diff --git a/contracts/test/plugin/plugin.ts b/contracts/test/plugin/plugin.ts index 3e616b3f..7245b7b1 100644 --- a/contracts/test/plugin/plugin.ts +++ b/contracts/test/plugin/plugin.ts @@ -1,20 +1,22 @@ import { - IERC165__factory, IPlugin__factory, IProtocolVersion__factory, PluginMockBuild1, PluginMockBuild1__factory, } from '../../typechain'; +import {erc165ComplianceTests} from '../helpers'; import {osxCommonsContractsVersion} from '../utils/versioning/protocol-version'; import {getInterfaceId, PluginType} from '@aragon/osx-commons-sdk'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {ethers} from 'hardhat'; describe('Plugin', function () { + let deployer: SignerWithAddress; let plugin: PluginMockBuild1; before(async () => { - const deployer = (await ethers.getSigners())[0]; + [deployer] = await ethers.getSigners(); plugin = await new PluginMockBuild1__factory(deployer).deploy( ethers.constants.AddressZero ); @@ -27,13 +29,8 @@ describe('Plugin', function () { }); describe('ERC-165', async () => { - it('does not support the empty interface', async () => { - expect(await plugin.supportsInterface('0xffffffff')).to.be.false; - }); - - it('supports the `IERC165` interface', async () => { - const iface = IERC165__factory.createInterface(); - expect(await plugin.supportsInterface(getInterfaceId(iface))).to.be.true; + it('supports the `ERC-165` standard', async () => { + await erc165ComplianceTests(plugin, deployer); }); it('supports the `IPlugin` interface', async () => { diff --git a/contracts/test/plugin/setup/plugin-setup.ts b/contracts/test/plugin/setup/plugin-setup.ts index e3a01fc2..7400fe21 100644 --- a/contracts/test/plugin/setup/plugin-setup.ts +++ b/contracts/test/plugin/setup/plugin-setup.ts @@ -1,24 +1,36 @@ import { - IERC165__factory, IPluginSetup__factory, IProtocolVersion__factory, + PluginSetupMockBuild1, + PluginSetupMockBuild1__factory, } from '../../../typechain'; +import {erc165ComplianceTests} from '../../helpers'; import {getInterfaceId} from '@aragon/osx-commons-sdk'; +import {IPluginSetup__factory as IPluginSetup_V1_0_0__factory} from '@aragon/osx-ethers-v1.0.0'; +import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; -import {Contract} from 'ethers'; +import {ethers} from 'hardhat'; -// TODO - -describe.skip('IPluginSetup', async () => { - it('has the same interface ID as in OSx v1.0.0', async () => { - expect(true).to.equal(false); +describe('IPluginSetup', function () { + it('has the same interface ID as its initial version introduced in v1.0.0', async () => { + const current = getInterfaceId(IPluginSetup__factory.createInterface()); + const initial = getInterfaceId( + IPluginSetup_V1_0_0__factory.createInterface() + ); + expect(current).to.equal(initial); }); }); -describe.skip('PluginSetup', async () => { - let contract: Contract; // TODO create ProposalMock +describe('PluginSetup', async () => { + let deployer: SignerWithAddress; + let pluginSetup: PluginSetupMockBuild1; + + before(async () => { + [deployer] = await ethers.getSigners(); + pluginSetup = await new PluginSetupMockBuild1__factory(deployer).deploy(); + }); - it('creates ERC1967 proxies', async () => { + it.skip('creates ERC1967 proxies', async () => { // TODO this will likely be refactored with task OS-675 expect(true).to.equal(false); }); @@ -26,34 +38,28 @@ describe.skip('PluginSetup', async () => { // TODO think about more tests describe('ERC-165', async () => { - it('does not support the empty interface', async () => { - expect(await contract.supportsInterface('0xffffffff')).to.be.false; - }); - - it('supports the `IERC165` interface', async () => { - const iface = IERC165__factory.createInterface(); - expect(await contract.supportsInterface(getInterfaceId(iface))).to.be - .true; + it('supports the `ERC-165` standard', async () => { + await erc165ComplianceTests(pluginSetup, deployer); }); it('supports the `IPluginSetup` interface', async () => { const iface = IPluginSetup__factory.createInterface(); - expect(await contract.supportsInterface(getInterfaceId(iface))).to.be + expect(await pluginSetup.supportsInterface(getInterfaceId(iface))).to.be .true; }); it('supports the `IProtocolVersion` interface', async () => { const iface = IProtocolVersion__factory.createInterface(); - expect(await contract.supportsInterface(getInterfaceId(iface))).to.be + expect(await pluginSetup.supportsInterface(getInterfaceId(iface))).to.be .true; }); }); - it('upgrades', async () => { + it.skip('upgrades', async () => { expect(true).to.equal(false); }); - it('can be reinitialized', async () => { + it.skip('can be reinitialized', async () => { expect(true).to.equal(false); }); }); diff --git a/contracts/test/utils/math/bitmap.ts b/contracts/test/utils/math/bitmap.ts index 70b786d1..0f3eca6c 100644 --- a/contracts/test/utils/math/bitmap.ts +++ b/contracts/test/utils/math/bitmap.ts @@ -1 +1,11 @@ -// TODO +import {expect} from 'chai'; + +describe.skip('Bitmap', function () { + it('gets bits', async () => { + expect(true).to.be.false; + }); + + it('flips bits', async () => { + expect(true).to.be.false; + }); +}); diff --git a/contracts/test/utils/math/ratio.ts b/contracts/test/utils/math/ratio.ts index fb525082..30657c2d 100644 --- a/contracts/test/utils/math/ratio.ts +++ b/contracts/test/utils/math/ratio.ts @@ -7,8 +7,8 @@ describe('Ratio', function () { let ratio: RatioMock; before(async () => { - const signers = await ethers.getSigners(); - const RatioMock = new RatioMock__factory(signers[0]); + const [deployer] = await ethers.getSigners(); + const RatioMock = new RatioMock__factory(deployer); ratio = await RatioMock.deploy(); }); diff --git a/contracts/test/utils/versioning/protocol-version.ts b/contracts/test/utils/versioning/protocol-version.ts index 22d3081c..62fb0c3e 100644 --- a/contracts/test/utils/versioning/protocol-version.ts +++ b/contracts/test/utils/versioning/protocol-version.ts @@ -1,5 +1,10 @@ import {version} from '../../../package.json'; -import {ProtocolVersionMock__factory} from '../../../typechain'; +import { + IProtocolVersion__factory, + ProtocolVersionMock__factory, +} from '../../../typechain'; +import {getInterfaceId} from '@aragon/osx-commons-sdk'; +import {IProtocolVersion__factory as IProtocolVersion_V1_3_0__factory} from '@aragon/osx-ethers-v1.3.0'; import {SignerWithAddress} from '@nomiclabs/hardhat-ethers/signers'; import {expect} from 'chai'; import {ethers} from 'hardhat'; @@ -13,15 +18,25 @@ export function osxCommonsContractsVersion(): [number, number, number] { return [Number(semver[0]), Number(semver[1]), Number(semver[2])]; } +describe('IProtocolVersion', function () { + it('has the same interface ID as its initial version introduced in v1.3.0', async () => { + const current = getInterfaceId(IProtocolVersion__factory.createInterface()); + const initial = getInterfaceId( + IProtocolVersion_V1_3_0__factory.createInterface() + ); + expect(current).to.equal(initial); + }); +}); + describe('ProtocolVersion', function () { - let signers: SignerWithAddress[]; + let deployer: SignerWithAddress; before(async () => { - signers = await ethers.getSigners(); + [deployer] = await ethers.getSigners(); }); it('returns the current protocol version that must match the semantic version of the `osx-commons-contracts` package', async () => { const ProtocolVersionMock = await new ProtocolVersionMock__factory( - signers[0] + deployer ).deploy(); expect(await ProtocolVersionMock.protocolVersion()).to.deep.equal( osxCommonsContractsVersion() diff --git a/contracts/test/utils/versioning/version-comparison-lib.ts b/contracts/test/utils/versioning/version-comparison-lib.ts index 9a24b9c4..d01cd97e 100644 --- a/contracts/test/utils/versioning/version-comparison-lib.ts +++ b/contracts/test/utils/versioning/version-comparison-lib.ts @@ -11,8 +11,8 @@ describe('VersionComparisonLib', function () { let cmp: VersionComparisonLibMock; before(async () => { - const signers = await ethers.getSigners(); - cmp = await new VersionComparisonLibMock__factory(signers[0]).deploy(); + const [deployer] = await ethers.getSigners(); + cmp = await new VersionComparisonLibMock__factory(deployer).deploy(); }); describe('eq', async () => { @@ -107,7 +107,7 @@ describe('VersionComparisonLib', function () { }); async function eqChecks( - func: (lhs: SemVer, rhs: SemVer) => Promise, + func: (_lhs: SemVer, _rhs: SemVer) => Promise, expected: boolean ) { const results: boolean[] = await Promise.all([ @@ -129,7 +129,7 @@ async function eqChecks( } async function ltChecks( - func: (lhs: SemVer, rhs: SemVer) => Promise, + func: (_lhs: SemVer, _rhs: SemVer) => Promise, expected: boolean ) { const results: boolean[] = await Promise.all([ @@ -163,7 +163,7 @@ async function ltChecks( } async function gtChecks( - func: (lhs: SemVer, rhs: SemVer) => Promise, + func: (_lhs: SemVer, _rhs: SemVer) => Promise, expected: boolean ) { const results: boolean[] = await Promise.all([ diff --git a/contracts/yarn.lock b/contracts/yarn.lock index 7963f263..4d841ba5 100644 --- a/contracts/yarn.lock +++ b/contracts/yarn.lock @@ -22,6 +22,13 @@ ipfs-http-client "^51.0.0" yup "^1.2.0" +"@aragon/osx-ethers-v1.0.0@npm:@aragon/osx-ethers@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@aragon/osx-ethers/-/osx-ethers-1.0.0.tgz#fa45346a8e3904a296afbd9b77e82e2789089e0e" + integrity sha512-OmiyXG1TxvRYCLGThkEa2OHNEumWqZFYU8tzyzDFSskWmi70uTkoqR25ayaz8QaYOtYlVw9drzPFjJSX4RhZ/g== + dependencies: + ethers "^5.6.2" + "@aragon/osx-ethers-v1.0.0@npm:@aragon/osx-ethers@1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@aragon/osx-ethers/-/osx-ethers-1.2.1.tgz#a442048137153ed5a3ca4eff3f3927b45a5134b5" @@ -29,7 +36,7 @@ dependencies: ethers "^5.6.2" -"@aragon/osx-ethers@^1.3.0-rc0.4": +"@aragon/osx-ethers-v1.3.0@npm:@aragon/osx-ethers@1.3.0", "@aragon/osx-ethers@^1.3.0-rc0.4": version "1.3.0" resolved "https://registry.yarnpkg.com/@aragon/osx-ethers/-/osx-ethers-1.3.0.tgz#85ddd93f4448789e94154b313f9ddd8069dff568" integrity sha512-zfLAYdgZ3SSifHiyJLkBKmoDw/IEX/yzvw6liUAa/gz7HZOsrwp3JsBJaIwB2epOnGa6vhXyWTKKZ15aJvoMaA== diff --git a/package.json b/package.json index 845e052a..c43392a1 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,8 @@ "@typescript-eslint/parser": "^5.44.0", "eslint": "^8.41.0", "eslint-config-prettier": "^8.8.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-unused-imports": "^3.0.0", "prettier": "^2.8.8", "prettier-plugin-solidity": "^1.1.3", "solhint": "^3.6.2", diff --git a/subgraph/tests/ids/permissions.test.ts b/subgraph/tests/ids/permissions.test.ts index 91b0a97f..533bf757 100644 --- a/subgraph/tests/ids/permissions.test.ts +++ b/subgraph/tests/ids/permissions.test.ts @@ -3,7 +3,6 @@ import { generatePluginPermissionEntityId, generatePluginPreparationEntityId, } from '../../src'; -import {PERMISSION_OPERATIONS} from '../../src/utils/constants'; import { ADDRESS_ZERO, ADDRESS_ONE, diff --git a/yarn.lock b/yarn.lock index 43b73ef4..ed586042 100644 --- a/yarn.lock +++ b/yarn.lock @@ -255,6 +255,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "@types/semver@^7.3.12": version "7.5.3" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" @@ -413,11 +418,74 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + ast-parents@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" @@ -428,6 +496,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -455,6 +528,15 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -530,6 +612,13 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -542,6 +631,24 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -549,6 +656,13 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -568,6 +682,76 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -583,6 +767,57 @@ eslint-config-prettier@^8.8.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.29.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.15.0" + +eslint-plugin-unused-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz#d25175b0072ff16a91892c3aa72a09ca3a9e69e7" + integrity sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -760,11 +995,56 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -814,6 +1094,13 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -826,11 +1113,23 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -841,6 +1140,37 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -872,11 +1202,63 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -894,6 +1276,18 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" +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" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -904,6 +1298,54 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -956,6 +1398,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -1032,11 +1481,21 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -1047,6 +1506,54 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +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" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1112,6 +1619,11 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -1163,6 +1675,15 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -1173,6 +1694,15 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -1192,6 +1722,30 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-regex-test@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.1.tgz#207369b445fd007e534864635b28b2ae7b105783" + integrity sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + is-regex "^1.1.4" + +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== + semver@^7.3.7, semver@^7.3.8, semver@^7.5.2: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" @@ -1199,6 +1753,25 @@ semver@^7.3.7, semver@^7.3.8, semver@^7.5.2: dependencies: lru-cache "^6.0.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -1211,6 +1784,15 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -1276,6 +1858,33 @@ string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -1283,6 +1892,11 @@ strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -1302,6 +1916,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + table@^6.8.1: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" @@ -1330,6 +1949,16 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -1354,11 +1983,60 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typescript@5.0.4: version "5.0.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -1366,6 +2044,28 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"