diff --git a/.gitignore b/.gitignore index 01a0d7ac..6285dc51 100644 --- a/.gitignore +++ b/.gitignore @@ -76,5 +76,6 @@ yarn-error.log* **/types packages/sdk-js/.yarn/install-state.gz .vercel +!.vercel/project.json .vscode/settings.json packages/contracts/deployments/*/solcInputs \ No newline at end of file diff --git a/.vercel/project.json b/.vercel/project.json new file mode 100644 index 00000000..bf7b85c0 --- /dev/null +++ b/.vercel/project.json @@ -0,0 +1,16 @@ +{ + "projectId": "prj_WbZ26ibOrzAavodIzIRbg30YCzF0", + "orgId": "team_0fLkvhhsRuNmvdbakI3Z7r9e", + "projectName": "good-collective", + "settings": { + "createdAt": 1691023624297, + "framework": null, + "devCommand": null, + "installCommand": "yarn", + "buildCommand": "yarn build:web", + "outputDirectory": null, + "rootDirectory": "packages/app", + "directoryListing": false, + "nodeVersion": "20.x" + } +} diff --git a/package.json b/package.json index f34edcaf..fad4d9d9 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "shx": "^0.3.4", "syncpack": "^8.2.4", "ts-node": "^10.9.1", - "vercel": "^37.1.1" + "vercel": "^50.15.1" }, "lint-staged": { "packages/app/**/*.{ts,tsx}": [ diff --git a/packages/contracts/contracts/DirectPayments/DirectPaymentsFactory.sol b/packages/contracts/contracts/DirectPayments/DirectPaymentsFactory.sol index 6083abc4..5b3dc1b2 100644 --- a/packages/contracts/contracts/DirectPayments/DirectPaymentsFactory.sol +++ b/packages/contracts/contracts/DirectPayments/DirectPaymentsFactory.sol @@ -30,6 +30,7 @@ contract DirectPaymentsFactory is AccessControlUpgradeable, UUPSUpgradeable { event PoolDetailsChanged(address indexed pool, string ipfs); event PoolVerifiedChanged(address indexed pool, bool isVerified); event UpdatedImpl(address indexed impl); + event MemberAdded(address indexed member, address indexed pool); struct PoolRegistry { string ipfs; @@ -187,8 +188,19 @@ contract DirectPaymentsFactory is AccessControlUpgradeable, UUPSUpgradeable { feeRecipient = _feeRecipient; } - function addMember(address member) external onlyPool { + function addMember(address member) public onlyPool { + _addMemberToRegistry(member); + } + + function _addMemberToRegistry(address member) internal { memberPools[member].push(msg.sender); + emit MemberAdded(member, msg.sender); + } + + function addMembers(address[] calldata members) external onlyPool { + for (uint i = 0; i < members.length; i++) { + _addMemberToRegistry(members[i]); + } } function removeMember(address member) external onlyPool { diff --git a/packages/contracts/contracts/DirectPayments/DirectPaymentsPool.sol b/packages/contracts/contracts/DirectPayments/DirectPaymentsPool.sol index b76568d6..03975fff 100644 --- a/packages/contracts/contracts/DirectPayments/DirectPaymentsPool.sol +++ b/packages/contracts/contracts/DirectPayments/DirectPaymentsPool.sol @@ -48,6 +48,7 @@ contract DirectPaymentsPool is error NO_BALANCE(); error NFTTYPE_CHANGED(); error EMPTY_MANAGER(); + error LENGTH_MISMATCH(); bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); bytes32 public constant MEMBER_ROLE = keccak256("MEMBER_ROLE"); @@ -74,6 +75,14 @@ contract DirectPaymentsPool is uint256 rewardPerContributer ); event NFTClaimed(uint256 indexed tokenId, uint256 totalRewards); + /** + * @dev Emitted when a contributor is skipped during reward distribution. + * This occurs when a contributor is either: + * - Not a member of the pool (does not have MEMBER_ROLE) + * - Not whitelisted (uniquenessValidator returns address(0)) + * - Exceeds member limits (daily or monthly limits exceeded) + * @param contributer The address of the contributor that was skipped + */ event NOT_MEMBER_OR_WHITELISTED_OR_LIMITS(address contributer); // Define functions @@ -214,6 +223,19 @@ contract DirectPaymentsPool is return true; } + /** + * @dev Adds multiple members to the pool in a single transaction. + * @param members Array of member addresses to add. + * @param extraData Array of additional validation data for each member. + */ + function addMembers(address[] calldata members, bytes[] calldata extraData) external onlyRole(MANAGER_ROLE) { + if (members.length != extraData.length) revert LENGTH_MISMATCH(); + + for (uint i = 0; i < members.length; i++) { + _addMember(members[i], extraData[i]); + } + } + function _grantRole(bytes32 role, address account) internal virtual override { if (role == MEMBER_ROLE) { registry.addMember(account); diff --git a/packages/contracts/contracts/UBI/UBIPool.sol b/packages/contracts/contracts/UBI/UBIPool.sol index 4df98e0f..244ceb7a 100644 --- a/packages/contracts/contracts/UBI/UBIPool.sol +++ b/packages/contracts/contracts/UBI/UBIPool.sol @@ -5,7 +5,6 @@ import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils import { IERC721Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol"; import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; -import { IERC721ReceiverUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol"; import "../GoodCollective/GoodCollectiveSuperApp.sol"; import "./UBIPoolFactory.sol"; @@ -23,6 +22,7 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad error EMPTY_MANAGER(); error MAX_MEMBERS_REACHED(); error MAX_PERIOD_CLAIMERS_REACHED(uint256 claimers); + error LENGTH_MISMATCH(); bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); bytes32 public constant MEMBER_ROLE = keccak256("MEMBER_ROLE"); @@ -189,10 +189,8 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad nextPeriodPool = status.dailyCyclePool; nextDailyUbi; - if ( - (currentDayInCycle() + 1) >= status.currentCycleLength || shouldStartEarlyCycle - ) //start of cycle or first time - { + if ((currentDayInCycle() + 1) >= status.currentCycleLength || shouldStartEarlyCycle) { + //start of cycle or first time nextPeriodPool = currentBalance / ubiSettings.cycleLengthDays; newCycle = true; } @@ -271,38 +269,83 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad } /** - * @dev Adds a member to the contract. + * @dev Internal function to add a member with validation. + * Always validates members, even when called by manager. * @param member The address of the member to add. * @param extraData Additional data to validate the member. + * @return isMember True if member was added, false if validation failed. */ + function _addMember(address member, bytes memory extraData) internal returns (bool isMember) { + if (hasRole(MEMBER_ROLE, member)) return true; - function addMember(address member, bytes memory extraData) external returns (bool isMember) { if (address(settings.uniquenessValidator) != address(0)) { address rootAddress = settings.uniquenessValidator.getWhitelistedRoot(member); - if (rootAddress == address(0)) revert NOT_WHITELISTED(member); + if (rootAddress == address(0)) return false; } - if (address(settings.membersValidator) != address(0) && hasRole(MANAGER_ROLE, msg.sender) == false) { + // Always check membersValidator if it exists, regardless of caller role + if (address(settings.membersValidator) != address(0)) { if (settings.membersValidator.isMemberValid(address(this), msg.sender, member, extraData) == false) { - revert NOT_MEMBER(member); + return false; } } // if no members validator then if members only only manager can add members else if (ubiSettings.onlyMembers && hasRole(MANAGER_ROLE, msg.sender) == false) { - revert NOT_MANAGER(member); + return false; } _grantRole(MEMBER_ROLE, member); return true; } + /** + * @dev Adds a member to the contract. + * @param member The address of the member to add. + * @param extraData Additional data to validate the member. + */ + function addMember(address member, bytes memory extraData) public returns (bool isMember) { + bool success = _addMember(member, extraData); + + if (!success) { + // Determine the specific error to revert with + if (address(settings.uniquenessValidator) != address(0)) { + address rootAddress = settings.uniquenessValidator.getWhitelistedRoot(member); + if (rootAddress == address(0)) revert NOT_WHITELISTED(member); + } + + if (address(settings.membersValidator) != address(0) && hasRole(MANAGER_ROLE, msg.sender) == false) { + revert NOT_MEMBER(member); + } + + if (ubiSettings.onlyMembers && hasRole(MANAGER_ROLE, msg.sender) == false) { + revert NOT_MANAGER(member); + } + } + + return success; + } + + /** + * @dev Adds multiple members to the pool in a single transaction. + * Invalid members are skipped instead of causing the transaction to revert. + * @param members Array of member addresses to add. + * @param extraData Array of additional validation data for each member. + */ + function addMembers(address[] calldata members, bytes[] calldata extraData) external onlyRole(MANAGER_ROLE) { + if (members.length != extraData.length) revert LENGTH_MISMATCH(); + + for (uint i = 0; i < members.length; i++) { + _addMember(members[i], extraData[i]); + } + } + function removeMember(address member) external onlyRole(MANAGER_ROLE) { _revokeRole(MEMBER_ROLE, member); } function _grantRole(bytes32 role, address account) internal virtual override { if (role == MEMBER_ROLE && hasRole(MEMBER_ROLE, account) == false) { - if (ubiSettings.maxMembers > 0 && status.membersCount > ubiSettings.maxMembers) + if (ubiSettings.maxMembers > 0 && status.membersCount >= ubiSettings.maxMembers) revert MAX_MEMBERS_REACHED(); registry.addMember(account); status.membersCount += 1; @@ -357,11 +400,8 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad } function _verifyPoolSettings(PoolSettings memory _poolSettings) internal pure { - if ( - _poolSettings.manager == address(0) || - address(_poolSettings.uniquenessValidator) == address(0) || - address(_poolSettings.rewardToken) == address(0) - ) revert INVALID_0_VALUE(); + if (_poolSettings.manager == address(0) || address(_poolSettings.rewardToken) == address(0)) + revert INVALID_0_VALUE(); } function estimateNextDailyUBI() public view returns (uint256 nextDailyUbi) { @@ -391,7 +431,11 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad } function hasClaimed(address _member) public view returns (bool) { - address whitelistedRoot = IIdentityV2(settings.uniquenessValidator).getWhitelistedRoot(_member); + address whitelistedRoot = _member; + if (address(settings.uniquenessValidator) != address(0)) { + whitelistedRoot = IIdentityV2(settings.uniquenessValidator).getWhitelistedRoot(_member); + } + whitelistedRoot = IIdentityV2(settings.uniquenessValidator).getWhitelistedRoot(_member); return status.lastClaimed[whitelistedRoot] == getCurrentDay(); } diff --git a/packages/contracts/contracts/UBI/UBIPoolFactory.sol b/packages/contracts/contracts/UBI/UBIPoolFactory.sol index 9865e571..55d883e5 100644 --- a/packages/contracts/contracts/UBI/UBIPoolFactory.sol +++ b/packages/contracts/contracts/UBI/UBIPoolFactory.sol @@ -32,6 +32,7 @@ contract UBIPoolFactory is AccessControlUpgradeable, UUPSUpgradeable { event PoolDetailsChanged(address indexed pool, string ipfs); event PoolVerifiedChanged(address indexed pool, bool isVerified); event UpdatedImpl(address indexed impl); + event MemberAdded(address indexed member, address indexed pool); struct PoolRegistry { string ipfs; @@ -170,8 +171,19 @@ contract UBIPoolFactory is AccessControlUpgradeable, UUPSUpgradeable { feeRecipient = _feeRecipient; } - function addMember(address account) external onlyPool { + function addMember(address account) public onlyPool { + _addMemberToRegistry(account); + } + + function _addMemberToRegistry(address account) internal { memberPools[account].push(msg.sender); + emit MemberAdded(account, msg.sender); + } + + function addMembers(address[] calldata members) external onlyPool { + for (uint i = 0; i < members.length; i++) { + addMember(members[i]); + } } function removeMember(address member) external onlyPool { diff --git a/packages/contracts/test/DirectPayments/DirectPayments.bulkMembers.test.ts b/packages/contracts/test/DirectPayments/DirectPayments.bulkMembers.test.ts new file mode 100644 index 00000000..c0062f64 --- /dev/null +++ b/packages/contracts/test/DirectPayments/DirectPayments.bulkMembers.test.ts @@ -0,0 +1,201 @@ +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import "@nomicfoundation/hardhat-toolbox"; +import { expect } from "chai"; +import { DirectPaymentsFactory, DirectPaymentsPool, ProvableNFT } from "typechain-types"; +import { ethers } from "hardhat"; +import { MockContract } from "ethereum-waffle"; +import { + SignerWithAddress, + setupDirectPaymentsTest, + createFactoryPoolFixture, + TestSetup +} from "./DirectPayments.claim.test"; + +describe("DirectPayments Bulk Members", () => { + let pool: DirectPaymentsPool; + let factory: DirectPaymentsFactory; + let nft: ProvableNFT; + let signer: SignerWithAddress; + let signers: SignerWithAddress[]; + let poolSettings: DirectPaymentsPool.PoolSettingsStruct; + let poolLimits: DirectPaymentsPool.SafetyLimitsStruct; + let membersValidator: MockContract; + let testSetup: TestSetup; + + before(async () => { + testSetup = await setupDirectPaymentsTest(); + signers = testSetup.signers; + signer = testSetup.signer; + poolSettings = testSetup.poolSettings; + poolLimits = testSetup.poolLimits; + }); + + const fixture = async () => { + const factorySetup = await createFactoryPoolFixture(testSetup, "test-project", "ipfs"); + pool = factorySetup.pool; + factory = factorySetup.factory; + nft = factorySetup.nft; + membersValidator = factorySetup.membersValidator; + }; + + beforeEach(async function () { + await loadFixture(fixture); + }); + + describe("addMembers - Pool", () => { + it("should add multiple valid members successfully", async () => { + const members = [signers[1].address, signers[2].address, signers[3].address]; + const extraData = ["0x", "0x", "0x"]; + + const tx = await pool.connect(signer).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify all members have MEMBER_ROLE + for (const member of members) { + expect(await pool.hasRole(await pool.MEMBER_ROLE(), member)).to.be.true; + } + + // Verify RoleGranted events emitted + const receipt = await tx.wait(); + const roleGrantedEvents = receipt.events?.filter( + (e) => e.event === "RoleGranted" && e.address === pool.address + ); + expect(roleGrantedEvents?.length).to.equal(3); + }); + + it("should skip duplicate members without reverting", async () => { + const members = [signers[1].address, signers[2].address, signers[1].address]; // duplicate + const extraData = ["0x", "0x", "0x"]; + + const tx = await pool.connect(signer).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify unique members were added + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[1].address)).to.be.true; + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[2].address)).to.be.true; + + // Verify only 2 RoleGranted events emitted (duplicate skipped) + const receipt = await tx.wait(); + const roleGrantedEvents = receipt.events?.filter( + (e) => e.event === "RoleGranted" && e.address === pool.address + ); + expect(roleGrantedEvents?.length).to.equal(2); + }); + + it("should skip invalid members when membersValidator rejects them", async () => { + const members = [signers[1].address, signers[2].address, signers[3].address]; + const extraData = ["0x", "0x", "0x"]; + + // Set up membersValidator mocks - signers[2] should be rejected + await membersValidator.mock["isMemberValid"] + .withArgs(pool.address, signer.address, signers[1].address, "0x") + .returns(true); + await membersValidator.mock["isMemberValid"] + .withArgs(pool.address, signer.address, signers[2].address, "0x") + .returns(false); + await membersValidator.mock["isMemberValid"] + .withArgs(pool.address, signer.address, signers[3].address, "0x") + .returns(true); + + const tx = await pool.connect(signer).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify valid members were added + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[1].address)).to.be.true; + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[3].address)).to.be.true; + + // Verify invalid member was skipped + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[2].address)).to.be.false; + }); + + it("should revert if members and extraData arrays have different lengths", async () => { + const members = [signers[1].address, signers[2].address]; + const extraData = ["0x"]; // mismatched length + + await expect(pool.connect(signer).addMembers(members, extraData)).to.be.revertedWithCustomError( + pool, + "LENGTH_MISMATCH" + ); + }); + + it("should update factory registry for all added members", async () => { + const members = [signers[1].address, signers[2].address, signers[3].address]; + const extraData = ["0x", "0x", "0x"]; + + await pool.connect(signer).addMembers(members, extraData); + + // Verify factory registry updated + for (const member of members) { + const memberPools = await factory.memberPools(member, 0); + expect(memberPools).to.equal(pool.address); + } + }); + + it("should emit MemberAdded events from factory for each new member", async () => { + const members = [signers[1].address, signers[2].address, signers[3].address]; + const extraData = ["0x", "0x", "0x"]; + + const tx = await pool.connect(signer).addMembers(members, extraData); + const receipt = await tx.wait(); + + // Parse MemberAdded events from the receipt + const factoryInterface = factory.interface; + const memberAddedEvents = receipt.logs + .map((log) => { + try { + return factoryInterface.parseLog(log); + } catch { + return null; + } + }) + .filter((parsed) => parsed && parsed.name === "MemberAdded"); + + expect(memberAddedEvents.length).to.equal(3); + + // Verify event args + const eventMembers = memberAddedEvents.map((e) => e?.args?.member?.toLowerCase()); + for (const member of members) { + expect(eventMembers).to.include(member.toLowerCase()); + } + + // Verify all events have the correct pool address + for (const event of memberAddedEvents) { + expect(event?.args?.pool?.toLowerCase()).to.equal(pool.address.toLowerCase()); + } + }); + + it("should handle large batch of 100 members", async () => { + const members = Array(100) + .fill(0) + .map((_, i) => ethers.Wallet.createRandom().address); + const extraData = Array(100).fill("0x"); + + const tx = await pool.connect(signer).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify all members added + for (const member of members) { + expect(await pool.hasRole(await pool.MEMBER_ROLE(), member)).to.be.true; + } + }); + }); + + describe("Gas Measurement", () => { + it("should measure gas for different batch sizes", async () => { + const batchSizes = [10, 50, 100]; + + for (const size of batchSizes) { + const members = Array(size) + .fill(0) + .map((_, i) => ethers.Wallet.createRandom().address); + const extraData = Array(size).fill("0x"); + + const tx = await pool.connect(signer).addMembers(members, extraData); + const receipt = await tx.wait(); + + console.log(`Gas used for ${size} members: ${receipt.gasUsed.toString()}`); + expect(receipt.gasUsed).to.be.lt(30000000); // Should be under block gas limit + } + }); + }); +}); diff --git a/packages/contracts/test/DirectPayments/DirectPayments.claim.test.ts b/packages/contracts/test/DirectPayments/DirectPayments.claim.test.ts index e6bb0069..c52c7884 100644 --- a/packages/contracts/test/DirectPayments/DirectPayments.claim.test.ts +++ b/packages/contracts/test/DirectPayments/DirectPayments.claim.test.ts @@ -6,7 +6,114 @@ import { DirectPaymentsFactory, DirectPaymentsPool, ProvableNFT } from 'typechai import { ethers, upgrades } from 'hardhat'; import { MockContract, deployMockContract } from 'ethereum-waffle'; -type SignerWithAddress = Awaited>; +export type SignerWithAddress = Awaited>; + +export interface TestSetup { + gdframework: Awaited>; + signers: SignerWithAddress[]; + signer: SignerWithAddress; + poolSettings: DirectPaymentsPool.PoolSettingsStruct; + poolLimits: DirectPaymentsPool.SafetyLimitsStruct; +} + +export async function setupDirectPaymentsTest(): Promise { + const { frameworkDeployer } = await deployTestFramework(); + const sfFramework = await frameworkDeployer.getFramework(); + + const signers = await ethers.getSigners(); + const signer = signers[0]; + + const gdframework = await deploySuperGoodDollar(signer, sfFramework, [ + ethers.constants.AddressZero, + ethers.constants.AddressZero, + ]); + + const poolSettings: DirectPaymentsPool.PoolSettingsStruct = { + nftType: 1, + uniquenessValidator: ethers.constants.AddressZero, + rewardPerEvent: [100, 300], + validEvents: [1, 2], + manager: signer.address, + membersValidator: ethers.constants.AddressZero, + rewardToken: gdframework.GoodDollar.address, + allowRewardOverride: false, + }; + + const poolLimits: DirectPaymentsPool.SafetyLimitsStruct = { + maxMemberPerDay: 300, + maxMemberPerMonth: 1000, + maxTotalPerMonth: 3000, + }; + + return { + gdframework, + signers, + signer, + poolSettings, + poolLimits, + }; +} + +export interface FactorySetup { + pool: DirectPaymentsPool; + factory: DirectPaymentsFactory; + nft: ProvableNFT; + membersValidator: MockContract; +} + +export async function createFactoryPoolFixture( + setup: TestSetup, + projectName: string = 'xx', + ipfsHash: string = 'ipfs' +): Promise { + const { gdframework, signers, signer, poolSettings, poolLimits } = setup; + + const factory = await ethers.getContractFactory('ProvableNFT'); + const nft = (await upgrades.deployProxy(factory, ['nft', 'cc'], { kind: 'uups' })) as ProvableNFT; + const helper = await ethers.deployContract('HelperLibrary'); + const helper2 = await ethers.deployContract('DirectPaymentsLibrary'); + + const Pool = await ethers.getContractFactory('DirectPaymentsPool', { + libraries: { HelperLibrary: helper.address, DirectPaymentsLibrary: helper2.address }, + }); + const membersValidator = await deployMockContract(signers[0], [ + 'function isMemberValid(address pool,address operator,address member,bytes memory extraData) external returns (bool)', + ]); + const poolImpl = await Pool.deploy(await gdframework.GoodDollar.getHost(), ethers.constants.AddressZero); + + const poolFactory = (await upgrades.deployProxy( + await ethers.getContractFactory('DirectPaymentsFactory'), + [signer.address, poolImpl.address, nft.address, ethers.constants.AddressZero, 0], + { kind: 'uups' } + )) as DirectPaymentsFactory; + + await nft.grantRole(ethers.constants.HashZero, poolFactory.address); + // all members are valid by default + membersValidator.mock['isMemberValid'].returns(true); + + const poolTx = await ( + await poolFactory.createPool( + projectName, + ipfsHash, + { ...poolSettings, membersValidator: membersValidator.address }, + poolLimits, + 0 + ) + ).wait(); + const poolAddress = poolTx.events?.find((_) => _.event === 'PoolCreated')?.args?.[0]; + const pool = Pool.attach(poolAddress) as DirectPaymentsPool; + + await gdframework.GoodDollar.mint(pool.address, ethers.constants.WeiPerEther.mul(100000)).then((_: any) => + _.wait() + ); + + return { + pool, + factory: poolFactory, + nft, + membersValidator, + }; +} describe('DirectPaymentsPool Claim', () => { let pool: DirectPaymentsPool; @@ -35,80 +142,25 @@ describe('DirectPaymentsPool Claim', () => { }; let nftSampleId = '56540060779879397317558633372065109751397093370573329176446590137680733287562'; + let testSetup: TestSetup; + before(async () => { - const { frameworkDeployer } = await deployTestFramework(); - const sfFramework = await frameworkDeployer.getFramework(); - - signers = await ethers.getSigners(); - - gdframework = await deploySuperGoodDollar(signers[0], sfFramework, [ - ethers.constants.AddressZero, - ethers.constants.AddressZero, - ]); - signer = signers[0]; - poolSettings = { - nftType: 1, - uniquenessValidator: ethers.constants.AddressZero, - rewardPerEvent: [100, 300], - validEvents: [1, 2], - manager: signer.address, - membersValidator: ethers.constants.AddressZero, - rewardToken: gdframework.GoodDollar.address, - allowRewardOverride: false, - }; - - poolLimits = { - maxMemberPerDay: 300, - maxMemberPerMonth: 1000, - maxTotalPerMonth: 3000, - }; + testSetup = await setupDirectPaymentsTest(); + gdframework = testSetup.gdframework; + signers = testSetup.signers; + signer = testSetup.signer; + poolSettings = testSetup.poolSettings; + poolLimits = testSetup.poolLimits; }); const fixture = async () => { - const factory = await ethers.getContractFactory('ProvableNFT'); - nft = (await upgrades.deployProxy(factory, ['nft', 'cc'], { kind: 'uups' })) as ProvableNFT; - const helper = await ethers.deployContract('HelperLibrary'); - const helper2 = await ethers.deployContract('DirectPaymentsLibrary'); - - const Pool = await ethers.getContractFactory('DirectPaymentsPool', { - libraries: { HelperLibrary: helper.address, DirectPaymentsLibrary: helper2.address }, - }); - membersValidator = await deployMockContract(signers[0], [ - 'function isMemberValid(address pool,address operator,address member,bytes memory extraData) external returns (bool)', - ]); - const poolImpl = await Pool.deploy(await gdframework.GoodDollar.getHost(), ethers.constants.AddressZero); - - const poolFactory = (await upgrades.deployProxy( - await ethers.getContractFactory('DirectPaymentsFactory'), - [signer.address, poolImpl.address, nft.address, ethers.constants.AddressZero, 0], - { kind: 'uups' } - )) as DirectPaymentsFactory; - - // console.log("deployed factory:", poolFactory.address) - - await nft.grantRole(ethers.constants.HashZero, poolFactory.address); - // all members are valid by default - membersValidator.mock['isMemberValid'].returns(true); - - const poolTx = await ( - await poolFactory.createPool( - 'xx', - 'ipfs', - { ...poolSettings, membersValidator: membersValidator.address }, - poolLimits, - 0 - ) - ).wait(); - // console.log("created pool:", poolTx.events) - const poolAddress = poolTx.events?.find((_) => _.event === 'PoolCreated')?.args?.[0]; - pool = Pool.attach(poolAddress) as DirectPaymentsPool; + const factorySetup = await createFactoryPoolFixture(testSetup, 'xx', 'ipfs'); + pool = factorySetup.pool; + nft = factorySetup.nft; + membersValidator = factorySetup.membersValidator; const tx = await nft.mintPermissioned(signers[0].address, nftSample, true, []).then((_) => _.wait()); - await gdframework.GoodDollar.mint(pool.address, ethers.constants.WeiPerEther.mul(100000)).then((_: any) => - _.wait() - ); nftSampleId = tx.events?.find((e) => e.event === 'Transfer')?.args?.tokenId; - // return { pool, nft, membersValidator }; }; beforeEach(async function () { @@ -117,12 +169,13 @@ describe('DirectPaymentsPool Claim', () => { describe('claim', () => { it('non member should not be able to get rewards', async () => { - const membersValidator = await deployMockContract(signers[0], [ + const newMembersValidator = await deployMockContract(signers[0], [ 'function isMemberValid(address pool,address operator,address member,bytes memory extraData) external returns (bool)', ]); - membersValidator.mock['isMemberValid'].returns(false); + // Set up mock to return false for all calls (reject all members) + await newMembersValidator.mock.isMemberValid.returns(false); - await pool.setPoolSettings({ ...poolSettings, membersValidator: membersValidator.address }, 0); + await pool.setPoolSettings({ ...poolSettings, membersValidator: newMembersValidator.address, uniquenessValidator: ethers.constants.AddressZero }, 0); await expect(pool['claim(uint256)'](nftSampleId)).not.reverted; const contributer = nftSample.events[0].contributers[0]; const initialBalance = await gdframework.GoodDollar.balanceOf(contributer); diff --git a/packages/contracts/test/UBIPool/UBIPool.bulkMembers.test.ts b/packages/contracts/test/UBIPool/UBIPool.bulkMembers.test.ts new file mode 100644 index 00000000..5e2bf1e9 --- /dev/null +++ b/packages/contracts/test/UBIPool/UBIPool.bulkMembers.test.ts @@ -0,0 +1,374 @@ +import { deploySuperGoodDollar } from "@gooddollar/goodprotocol"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { deployTestFramework } from "@superfluid-finance/ethereum-contracts/dev-scripts/deploy-test-framework"; +import { expect } from "chai"; +import { UBIPoolFactory, UBIPool, ProvableNFT } from "typechain-types"; +import { ethers, upgrades } from "hardhat"; +import { MockContract, deployMockContract } from "ethereum-waffle"; +import { PoolSettingsStruct } from "typechain-types/contracts/UBI/UBIPool"; + +type SignerWithAddress = Awaited>; + +describe("UBIPool Bulk Members", () => { + let factory: UBIPoolFactory; + let pool: UBIPool; + let signer: SignerWithAddress; + let signers: SignerWithAddress[]; + let poolSettings: PoolSettingsStruct; + let extendedPoolSettings: UBIPool.ExtendedSettingsStruct; + let poolLimits: UBIPool.UBISettingsStruct; + let gdframework: Awaited>; + let sfFramework: { [key: string]: string }; + let membersValidator: MockContract; + let uniquenessValidator: MockContract; + + before(async () => { + const { frameworkDeployer } = await deployTestFramework(); + sfFramework = await frameworkDeployer.getFramework(); + signers = await ethers.getSigners(); + gdframework = await deploySuperGoodDollar(signers[0], sfFramework, [ + ethers.constants.AddressZero, + ethers.constants.AddressZero + ]); + signer = signers[0]; + poolSettings = { + uniquenessValidator: ethers.constants.AddressZero, + manager: signers[1].address, + membersValidator: ethers.constants.AddressZero, + rewardToken: gdframework.GoodDollar.address + }; + extendedPoolSettings = { + maxPeriodClaimers: 500, + minClaimAmount: ethers.utils.parseEther("1"), + managerFeeBps: 0 + }; + poolLimits = { + cycleLengthDays: ethers.BigNumber.from(60), + claimPeriodDays: ethers.BigNumber.from(1), + minActiveUsers: ethers.BigNumber.from(100), + claimForEnabled: true, + maxClaimAmount: ethers.utils.parseEther("100"), + maxMembers: 500, + onlyMembers: true + }; + }); + + const fixture = async () => { + const f = await ethers.getContractFactory("UBIPoolFactory"); + const swapMock = await ethers.deployContract("SwapRouterMock", [gdframework.GoodDollar.address]); + const helper = await ethers.deployContract("HelperLibrary"); + + // Get host from framework, with fallback to GoodDollar contract + const sfHost = sfFramework?.['host'] || await gdframework.GoodDollar.getHost(); + const dpimpl = await ethers.deployContract("UBIPool", [sfHost, swapMock.address], { + libraries: { HelperLibrary: helper.address } + }); + + factory = (await upgrades.deployProxy(f, [signer.address, dpimpl.address, signers[1].address, 1000], { + kind: "uups", + unsafeAllowLinkedLibraries: true + })) as UBIPoolFactory; + + // Create mock validators + membersValidator = await deployMockContract(signers[0], [ + "function isMemberValid(address pool,address operator,address member,bytes memory extraData) external returns (bool)" + ]); + uniquenessValidator = await deployMockContract(signers[0], [ + "function getWhitelistedRoot(address member) external view returns (address)" + ]); + + // Default: all members are valid + membersValidator.mock["isMemberValid"].returns(true); + // For uniqueness validator, default return must be non-zero (valid/whitelisted). + // Waffle mock returns zero for unmocked calls; use a non-zero default so we only + // need to mock addresses we want to treat as invalid (return zero). + const nonZeroDefaultRoot = "0x0000000000000000000000000000000000000001"; + uniquenessValidator.mock["getWhitelistedRoot"].returns(nonZeroDefaultRoot); + + const poolTx = await factory.createPool( + "test", + "pool1", + { + ...poolSettings, + membersValidator: membersValidator.address, + uniquenessValidator: uniquenessValidator.address + }, + poolLimits, + extendedPoolSettings + ); + const receipt = await poolTx.wait(); + const poolAddr = receipt.events?.find((_) => _.event === "PoolCreated")?.args?.[0]; + pool = (await ethers.getContractAt("UBIPool", poolAddr)) as UBIPool; + + // Fund the pool + await gdframework.GoodDollar.mint(pool.address, ethers.utils.parseEther("100000")); + }; + + beforeEach(async function () { + await loadFixture(fixture); + }); + + describe("addMembers - Pool", () => { + it("should add multiple valid members successfully", async () => { + const members = [signers[2].address, signers[3].address, signers[4].address]; + const extraData = ["0x", "0x", "0x"]; + + // Set up uniqueness validator mocks for these specific addresses + for (const member of members) { + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(member).returns(member); + } + + const tx = await pool.connect(signers[1]).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify all members have MEMBER_ROLE + for (const member of members) { + expect(await pool.hasRole(await pool.MEMBER_ROLE(), member)).to.be.true; + } + + // Verify membersCount incremented + const status = await pool.status(); + expect(status.membersCount).to.equal(3); + + // Verify RoleGranted events emitted + const receipt = await tx.wait(); + const roleGrantedEvents = receipt.events?.filter( + (e) => e.event === "RoleGranted" && e.address === pool.address + ); + expect(roleGrantedEvents?.length).to.equal(3); + }); + + it("should skip duplicate members without reverting", async () => { + const members = [signers[2].address, signers[3].address, signers[2].address]; // duplicate + const extraData = ["0x", "0x", "0x"]; + + // Set up uniqueness validator mocks for these specific addresses + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(signers[2].address).returns(signers[2].address); + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(signers[3].address).returns(signers[3].address); + + const tx = await pool.connect(signers[1]).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify unique members were added + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[2].address)).to.be.true; + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[3].address)).to.be.true; + + // Verify membersCount is 2 (not 3) + const status = await pool.status(); + expect(status.membersCount).to.equal(2); + }); + + it("should revert when adding members would exceed maxMembers", async () => { + // Create pool with maxMembers = 5 + const limitedPoolLimits = { ...poolLimits, maxMembers: 5 }; + const poolTx = await factory.createPool( + "test2", + "pool2", + { + ...poolSettings, + membersValidator: membersValidator.address, + uniquenessValidator: uniquenessValidator.address + }, + limitedPoolLimits, + extendedPoolSettings + ); + const receipt = await poolTx.wait(); + const poolAddr = receipt.events?.find((_) => _.event === "PoolCreated")?.args?.[0]; + const limitedPool = (await ethers.getContractAt("UBIPool", poolAddr)) as UBIPool; + + const members = Array(6) + .fill(0) + .map((_, i) => ethers.Wallet.createRandom().address); + const extraData = Array(6).fill("0x"); + + // Set up uniqueness validator mocks for these random addresses + for (const member of members) { + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(member).returns(member); + } + + await expect(limitedPool.connect(signers[1]).addMembers(members, extraData)).to.be.revertedWithCustomError( + limitedPool, + "MAX_MEMBERS_REACHED" + ); + }); + + it("should skip members failing uniqueness validation", async () => { + const members = [signers[5].address, signers[6].address, signers[7].address]; + const extraData = ["0x", "0x", "0x"]; + + // Set up mocks: signers[5] and signers[7] are valid, signers[6] is invalid + await uniquenessValidator.mock["getWhitelistedRoot"].withArgs(signers[5].address).returns(signers[5].address); + await uniquenessValidator.mock["getWhitelistedRoot"] + .withArgs(signers[6].address) + .returns(ethers.constants.AddressZero); + await uniquenessValidator.mock["getWhitelistedRoot"].withArgs(signers[7].address).returns(signers[7].address); + + const tx = await pool.connect(signers[1]).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify valid members were added + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[5].address)).to.be.true; + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[7].address)).to.be.true; + + // Verify invalid member was skipped + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[6].address)).to.be.false; + + // Verify membersCount is 2 + const status = await pool.status(); + expect(status.membersCount).to.equal(2); + }); + + it("should skip members failing membersValidator check", async () => { + const members = [signers[2].address, signers[3].address, signers[4].address]; + const extraData = ["0x", "0x", "0x"]; + + // Set up uniqueness validator mocks (all valid) + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(signers[2].address).returns(signers[2].address); + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(signers[3].address).returns(signers[3].address); + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(signers[4].address).returns(signers[4].address); + + // Set up membersValidator mocks - signers[3] should be rejected + await membersValidator.mock["isMemberValid"] + .withArgs(pool.address, signers[1].address, signers[2].address, "0x") + .returns(true); + await membersValidator.mock["isMemberValid"] + .withArgs(pool.address, signers[1].address, signers[3].address, "0x") + .returns(false); + await membersValidator.mock["isMemberValid"] + .withArgs(pool.address, signers[1].address, signers[4].address, "0x") + .returns(true); + + const tx = await pool.connect(signers[1]).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify valid members were added + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[2].address)).to.be.true; + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[4].address)).to.be.true; + + // Verify invalid member was skipped + expect(await pool.hasRole(await pool.MEMBER_ROLE(), signers[3].address)).to.be.false; + }); + + it("should enforce onlyMembers and MANAGER_ROLE access control", async () => { + const members = [signers[2].address, signers[3].address]; + const extraData = ["0x", "0x"]; + + // Non-manager should not be able to add members + await expect(pool.connect(signers[5]).addMembers(members, extraData)).to.be.reverted; + }); + + it("should revert if members and extraData arrays have different lengths", async () => { + const members = [signers[2].address, signers[3].address]; + const extraData = ["0x"]; // mismatched length + + await expect(pool.connect(signers[1]).addMembers(members, extraData)).to.be.revertedWithCustomError( + pool, + "LENGTH_MISMATCH" + ); + }); + + it("should update factory registry for all added members", async () => { + const members = [signers[2].address, signers[3].address, signers[4].address]; + const extraData = ["0x", "0x", "0x"]; + + // Set up uniqueness validator mocks for these addresses + for (const member of members) { + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(member).returns(member); + } + + await pool.connect(signers[1]).addMembers(members, extraData); + + // Verify factory registry updated + for (const member of members) { + const memberPools = await factory.memberPools(member, 0); + expect(memberPools).to.equal(pool.address); + } + }); + + it("should emit MemberAdded events from factory for each new member", async () => { + const members = [signers[2].address, signers[3].address, signers[4].address]; + const extraData = ["0x", "0x", "0x"]; + + // Set up uniqueness validator mocks for these addresses + for (const member of members) { + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(member).returns(member); + } + + const tx = await pool.connect(signers[1]).addMembers(members, extraData); + const receipt = await tx.wait(); + + // Parse MemberAdded events from the receipt - UBIPoolFactory events + const factoryInterface = factory.interface; + const memberAddedEvents = receipt.logs + .map((log) => { + try { + return factoryInterface.parseLog(log); + } catch { + return null; + } + }) + .filter((parsed) => parsed && parsed.name === "MemberAdded"); + + expect(memberAddedEvents.length).to.equal(3); + + // Verify event args + const eventMembers = memberAddedEvents.map((e) => e?.args?.member?.toLowerCase()); + for (const member of members) { + expect(eventMembers).to.include(member.toLowerCase()); + } + + // Verify all events have the correct pool address + for (const event of memberAddedEvents) { + expect(event?.args?.pool?.toLowerCase()).to.equal(pool.address.toLowerCase()); + } + }); + + it("should handle large batch of 100 members", async () => { + const members = Array(100) + .fill(0) + .map((_, i) => ethers.Wallet.createRandom().address); + const extraData = Array(100).fill("0x"); + + // Set up uniqueness validator mocks for these random addresses + for (const member of members) { + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(member).returns(member); + } + + const tx = await pool.connect(signers[1]).addMembers(members, extraData); + await expect(tx).not.reverted; + + // Verify all members added + for (const member of members) { + expect(await pool.hasRole(await pool.MEMBER_ROLE(), member)).to.be.true; + } + + // Verify membersCount + const status = await pool.status(); + expect(status.membersCount).to.equal(100); + }); + }); + + describe("Gas Measurement", () => { + it("should measure gas for different batch sizes", async () => { + const batchSizes = [10, 50, 100]; + + for (const size of batchSizes) { + const members = Array(size) + .fill(0) + .map((_, i) => ethers.Wallet.createRandom().address); + const extraData = Array(size).fill("0x"); + + // Set up uniqueness validator mocks for these random addresses + for (const member of members) { + uniquenessValidator.mock["getWhitelistedRoot"].withArgs(member).returns(member); + } + + const tx = await pool.connect(signers[1]).addMembers(members, extraData); + const receipt = await tx.wait(); + + console.log(`Gas used for ${size} members: ${receipt.gasUsed.toString()}`); + expect(receipt.gasUsed).to.be.lt(30000000); // Should be under block gas limit + } + }); + }); +}); diff --git a/packages/sdk-js/src/goodcollective/goodcollective.ts b/packages/sdk-js/src/goodcollective/goodcollective.ts index 5fef14eb..a0317336 100644 --- a/packages/sdk-js/src/goodcollective/goodcollective.ts +++ b/packages/sdk-js/src/goodcollective/goodcollective.ts @@ -793,4 +793,23 @@ export class GoodCollectiveSDK { }; } } + + /** + * Adds multiple members to a pool in a single transaction + * Works for both DirectPayments and UBI pools + * @param {ethers.Signer} signer - The signer object for the transaction + * @param {string} poolAddress - The address of the pool contract + * @param {string[]} members - Array of member addresses to add + * @param {string[]} extraData - Array of additional validation data for each member + * @returns {Promise} A promise that resolves to a transaction object + */ + async addPoolMembers( + signer: ethers.Signer, + poolAddress: string, + members: string[], + extraData: string[] + ): Promise { + const connected = this.pool.attach(poolAddress).connect(signer); + return connected.addMembers(members, extraData, { ...CHAIN_OVERRIDES[this.chainId] }); + } } diff --git a/yarn.lock b/yarn.lock index 5ba689e5..8a041c3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2108,6 +2108,13 @@ __metadata: languageName: node linkType: hard +"@bytecodealliance/preview2-shim@npm:0.17.6": + version: 0.17.6 + resolution: "@bytecodealliance/preview2-shim@npm:0.17.6" + checksum: dcb680942a1143fc76935873cc95b8492e05c1c81404f3f9b5ef20be1a4d8572103f8447a253fd632ec7da6f5be0b4371c3f97e4ba1b6d2eabbe7c3f8e825dcf + languageName: node + linkType: hard + "@celo-tools/celo-ethers-wrapper@npm:^0.4.0": version: 0.4.0 resolution: "@celo-tools/celo-ethers-wrapper@npm:0.4.0" @@ -2540,6 +2547,34 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.7.1": + version: 1.8.1 + resolution: "@emnapi/core@npm:1.8.1" + dependencies: + "@emnapi/wasi-threads": 1.1.0 + tslib: ^2.4.0 + checksum: 2a2fb36f4e2f90e25f419f8979435160313664bbb833d852d9de4487ff47f05fd36bf2cd77c3555f704ec2b67ce3a949ed5542598664c775cdd5ef35ae1c85a4 + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.7.1": + version: 1.8.1 + resolution: "@emnapi/runtime@npm:1.8.1" + dependencies: + tslib: ^2.4.0 + checksum: 0000a91d2d0ec3aaa37cbab9c360de3ff8250592f3ce4706b8c9c6d93e54151e623a8983c85543f33cb6f66cf30bb24bf0ddde466de484d6a6bf1fb2650382de + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.1.0": + version: 1.1.0 + resolution: "@emnapi/wasi-threads@npm:1.1.0" + dependencies: + tslib: ^2.4.0 + checksum: 6cffe35f3e407ae26236092991786db5968b4265e6e55f4664bf6f2ce0508e2a02a44ce6ebb16f2acd2f6589efb293f4f9d09cc9fbf80c00fc1a203accc94196 + languageName: node + linkType: hard + "@ensdomains/address-encoder@npm:^0.1.7": version: 0.1.9 resolution: "@ensdomains/address-encoder@npm:0.1.9" @@ -2598,6 +2633,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/aix-ppc64@npm:0.27.0" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/aix-ppc64@npm:0.27.3" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/android-arm64@npm:0.18.20" @@ -2619,6 +2668,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/android-arm64@npm:0.27.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-arm64@npm:0.27.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/android-arm@npm:0.18.20" @@ -2640,6 +2703,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/android-arm@npm:0.27.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-arm@npm:0.27.3" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/android-x64@npm:0.18.20" @@ -2661,6 +2738,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/android-x64@npm:0.27.0" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-x64@npm:0.27.3" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/darwin-arm64@npm:0.18.20" @@ -2682,6 +2773,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/darwin-arm64@npm:0.27.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/darwin-arm64@npm:0.27.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/darwin-x64@npm:0.18.20" @@ -2703,6 +2808,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/darwin-x64@npm:0.27.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/darwin-x64@npm:0.27.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/freebsd-arm64@npm:0.18.20" @@ -2724,6 +2843,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/freebsd-arm64@npm:0.27.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/freebsd-arm64@npm:0.27.3" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/freebsd-x64@npm:0.18.20" @@ -2745,6 +2878,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/freebsd-x64@npm:0.27.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/freebsd-x64@npm:0.27.3" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-arm64@npm:0.18.20" @@ -2766,6 +2913,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-arm64@npm:0.27.0" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-arm64@npm:0.27.3" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-arm@npm:0.18.20" @@ -2787,6 +2948,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-arm@npm:0.27.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-arm@npm:0.27.3" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-ia32@npm:0.18.20" @@ -2808,6 +2983,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-ia32@npm:0.27.0" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-ia32@npm:0.27.3" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-loong64@npm:0.18.20" @@ -2829,6 +3018,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-loong64@npm:0.27.0" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-loong64@npm:0.27.3" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-mips64el@npm:0.18.20" @@ -2850,6 +3053,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-mips64el@npm:0.27.0" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-mips64el@npm:0.27.3" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-ppc64@npm:0.18.20" @@ -2871,6 +3088,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-ppc64@npm:0.27.0" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-ppc64@npm:0.27.3" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-riscv64@npm:0.18.20" @@ -2892,6 +3123,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-riscv64@npm:0.27.0" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-riscv64@npm:0.27.3" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-s390x@npm:0.18.20" @@ -2913,6 +3158,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-s390x@npm:0.27.0" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-s390x@npm:0.27.3" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/linux-x64@npm:0.18.20" @@ -2934,6 +3193,34 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/linux-x64@npm:0.27.0" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-x64@npm:0.27.3" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/netbsd-arm64@npm:0.27.0" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/netbsd-arm64@npm:0.27.3" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/netbsd-x64@npm:0.18.20" @@ -2955,6 +3242,34 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/netbsd-x64@npm:0.27.0" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/netbsd-x64@npm:0.27.3" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/openbsd-arm64@npm:0.27.0" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openbsd-arm64@npm:0.27.3" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/openbsd-x64@npm:0.18.20" @@ -2976,6 +3291,34 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/openbsd-x64@npm:0.27.0" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openbsd-x64@npm:0.27.3" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/openharmony-arm64@npm:0.27.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openharmony-arm64@npm:0.27.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/sunos-x64@npm:0.18.20" @@ -2997,6 +3340,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/sunos-x64@npm:0.27.0" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/sunos-x64@npm:0.27.3" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/win32-arm64@npm:0.18.20" @@ -3018,6 +3375,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/win32-arm64@npm:0.27.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-arm64@npm:0.27.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/win32-ia32@npm:0.18.20" @@ -3039,6 +3410,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/win32-ia32@npm:0.27.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-ia32@npm:0.27.3" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.18.20": version: 0.18.20 resolution: "@esbuild/win32-x64@npm:0.18.20" @@ -3060,6 +3445,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.27.0": + version: 0.27.0 + resolution: "@esbuild/win32-x64@npm:0.27.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-x64@npm:0.27.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -4681,7 +5080,7 @@ __metadata: shx: ^0.3.4 syncpack: ^8.2.4 ts-node: ^10.9.1 - vercel: ^37.1.1 + vercel: ^50.15.1 languageName: unknown linkType: soft @@ -4887,6 +5286,13 @@ __metadata: languageName: node linkType: hard +"@iarna/toml@npm:^2.2.5": + version: 2.2.5 + resolution: "@iarna/toml@npm:2.2.5" + checksum: b63b2b2c4fd67969a6291543ada0303d45593801ee744b60f5390f183c03d9192bc67a217abb24be945158f1935f02840d9ffff40c0142aa171b5d3b6b6a3ea5 + languageName: node + linkType: hard + "@internationalized/date@npm:^3.5.0": version: 3.5.0 resolution: "@internationalized/date@npm:3.5.0" @@ -5030,6 +5436,22 @@ __metadata: languageName: node linkType: hard +"@isaacs/balanced-match@npm:^4.0.1": + version: 4.0.1 + resolution: "@isaacs/balanced-match@npm:4.0.1" + checksum: 102fbc6d2c0d5edf8f6dbf2b3feb21695a21bc850f11bc47c4f06aa83bd8884fde3fe9d6d797d619901d96865fdcb4569ac2a54c937992c48885c5e3d9967fe8 + languageName: node + linkType: hard + +"@isaacs/brace-expansion@npm:^5.0.0, @isaacs/brace-expansion@npm:^5.0.1": + version: 5.0.1 + resolution: "@isaacs/brace-expansion@npm:5.0.1" + dependencies: + "@isaacs/balanced-match": ^4.0.1 + checksum: 21f8192f022c320f7acf899730feb419b1a5f4ccc741481ef8f4b3111e97a41c06e5783871bb240da2e87de909c7fc5b0d07f73818db521fee06541c086ea351 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -5044,6 +5466,15 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: ^7.0.4 + checksum: 5d36d289960e886484362d9eb6a51d1ea28baed5f5d0140bbe62b99bac52eaf06cc01c2bc0d3575977962f84f6b2c4387b043ee632216643d4787b0999465bf2 + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -5587,22 +6018,20 @@ __metadata: languageName: node linkType: hard -"@mapbox/node-pre-gyp@npm:^1.0.5": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" +"@mapbox/node-pre-gyp@npm:^2.0.0": + version: 2.0.3 + resolution: "@mapbox/node-pre-gyp@npm:2.0.3" dependencies: + consola: ^3.2.3 detect-libc: ^2.0.0 - https-proxy-agent: ^5.0.0 - make-dir: ^3.1.0 + https-proxy-agent: ^7.0.5 node-fetch: ^2.6.7 - nopt: ^5.0.0 - npmlog: ^5.0.1 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.11 + nopt: ^8.0.0 + semver: ^7.5.3 + tar: ^7.4.0 bin: node-pre-gyp: bin/node-pre-gyp - checksum: b848f6abc531a11961d780db813cc510ca5a5b6bf3184d72134089c6875a91c44d571ba6c1879470020803f7803609e7b2e6e429651c026fe202facd11d444b8 + checksum: 8b1a9833d4b6cb5cda943fa3e5c2cc61395e2623570092c98d585c3ce3c44088d597d88cbe89cdd99c57ae741927bcbeb58880fbfb03e4161640bed250ab7916 languageName: node linkType: hard @@ -5987,6 +6416,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^1.1.1": + version: 1.1.1 + resolution: "@napi-rs/wasm-runtime@npm:1.1.1" + dependencies: + "@emnapi/core": ^1.7.1 + "@emnapi/runtime": ^1.7.1 + "@tybys/wasm-util": ^0.10.1 + checksum: 22db9ad68e1d34351e1c0165489200584ab1cb0db866d360eca1c4213cd63169b153d179fe5ea4cbda849a252d20c4b01e56106285e7da8e4a56a4df92318ee7 + languageName: node + linkType: hard + "@nerdwallet/apollo-cache-policies@npm:^3.2.0": version: 3.2.0 resolution: "@nerdwallet/apollo-cache-policies@npm:3.2.0" @@ -6744,6 +7184,155 @@ __metadata: languageName: node linkType: hard +"@oxc-project/types@npm:=0.110.0": + version: 0.110.0 + resolution: "@oxc-project/types@npm:0.110.0" + checksum: fae9c8cd7f1c72bfe4875b36d82d43006e66a3712d03cdb4569f5247fffd1a54ae3df13635bea0bf107d155434c22a4114b83fd46e653c702908ab1d939a270b + languageName: node + linkType: hard + +"@oxc-transform/binding-android-arm-eabi@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-android-arm-eabi@npm:0.111.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxc-transform/binding-android-arm64@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-android-arm64@npm:0.111.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-transform/binding-darwin-arm64@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-darwin-arm64@npm:0.111.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-transform/binding-darwin-x64@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-darwin-x64@npm:0.111.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxc-transform/binding-freebsd-x64@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-freebsd-x64@npm:0.111.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-arm-gnueabihf@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-arm-gnueabihf@npm:0.111.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-arm-musleabihf@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-arm-musleabihf@npm:0.111.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-arm64-gnu@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-arm64-gnu@npm:0.111.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-arm64-musl@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-arm64-musl@npm:0.111.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-ppc64-gnu@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-ppc64-gnu@npm:0.111.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-riscv64-gnu@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-riscv64-gnu@npm:0.111.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-riscv64-musl@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-riscv64-musl@npm:0.111.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-s390x-gnu@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-s390x-gnu@npm:0.111.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-x64-gnu@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-x64-gnu@npm:0.111.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxc-transform/binding-linux-x64-musl@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-linux-x64-musl@npm:0.111.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxc-transform/binding-openharmony-arm64@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-openharmony-arm64@npm:0.111.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-transform/binding-wasm32-wasi@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-wasm32-wasi@npm:0.111.0" + dependencies: + "@napi-rs/wasm-runtime": ^1.1.1 + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@oxc-transform/binding-win32-arm64-msvc@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-win32-arm64-msvc@npm:0.111.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxc-transform/binding-win32-ia32-msvc@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-win32-ia32-msvc@npm:0.111.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxc-transform/binding-win32-x64-msvc@npm:0.111.0": + version: 0.111.0 + resolution: "@oxc-transform/binding-win32-x64-msvc@npm:0.111.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@parcel/watcher-android-arm64@npm:2.4.1": version: 2.4.1 resolution: "@parcel/watcher-android-arm64@npm:2.4.1" @@ -8929,6 +9518,13 @@ __metadata: languageName: node linkType: hard +"@renovatebot/pep440@npm:4.2.1": + version: 4.2.1 + resolution: "@renovatebot/pep440@npm:4.2.1" + checksum: 679ffb98c4a6b8b29ff0f9b0f55735c9f982f580ecadd4f0961fa044b3d896dcfd6dcdb685e37d6cc48910a65ec83fbf2f4e10078a214d8a1be98faed5812a13 + languageName: node + linkType: hard + "@reown/appkit-adapter-wagmi@npm:^1.6.7": version: 1.6.9 resolution: "@reown/appkit-adapter-wagmi@npm:1.6.9" @@ -9258,6 +9854,106 @@ __metadata: languageName: node linkType: hard +"@rolldown/binding-android-arm64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.1" + dependencies: + "@napi-rs/wasm-runtime": ^1.1.1 + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/pluginutils@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/pluginutils@npm:1.0.0-rc.1" + checksum: a43e6985cb24d1f82421d7da2782e1ab18b67ed9a2858f7755ba8b7f47a067679ff750f654414da9d8065e074d73b4f41b4d492995add7e6a6c8722498a7a419 + languageName: node + linkType: hard + "@rollup/plugin-inject@npm:^5.0.5": version: 5.0.5 resolution: "@rollup/plugin-inject@npm:5.0.5" @@ -9274,16 +9970,6 @@ __metadata: languageName: node linkType: hard -"@rollup/pluginutils@npm:^4.0.0": - version: 4.2.1 - resolution: "@rollup/pluginutils@npm:4.2.1" - dependencies: - estree-walker: ^2.0.1 - picomatch: ^2.2.2 - checksum: 6bc41f22b1a0f1efec3043899e4d3b6b1497b3dea4d94292d8f83b4cf07a1073ecbaedd562a22d11913ff7659f459677b01b09e9598a98936e746780ecc93a12 - languageName: node - linkType: hard - "@rollup/pluginutils@npm:^5.0.1": version: 5.0.5 resolution: "@rollup/pluginutils@npm:5.0.5" @@ -9300,6 +9986,22 @@ __metadata: languageName: node linkType: hard +"@rollup/pluginutils@npm:^5.1.3": + version: 5.3.0 + resolution: "@rollup/pluginutils@npm:5.3.0" + dependencies: + "@types/estree": ^1.0.0 + estree-walker: ^2.0.2 + picomatch: ^4.0.2 + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 2df47496f1f380ce67426b6d31cada1354b40844bb333b365653720b0847ce45446f347ae50313ed17a56c1b4cbba27431c42733ad75ad08764df5b4312946d9 + languageName: node + linkType: hard + "@safe-global/safe-apps-provider@npm:0.18.5": version: 0.18.5 resolution: "@safe-global/safe-apps-provider@npm:0.18.5" @@ -11255,6 +11957,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.10.1": + version: 0.10.1 + resolution: "@tybys/wasm-util@npm:0.10.1" + dependencies: + tslib: ^2.4.0 + checksum: b8b281ffa9cd01cb6d45a4dddca2e28fd0cb6ad67cf091ba4a73ac87c0d6bd6ce188c332c489e87c20b0750b0b6fe3b99e30e1cd2227ec16da692f51c778944e + languageName: node + linkType: hard + "@typechain/ethers-v5@npm:^10.1.0": version: 10.2.1 resolution: "@typechain/ethers-v5@npm:10.2.1" @@ -11638,10 +12349,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:16.18.11": - version: 16.18.11 - resolution: "@types/node@npm:16.18.11" - checksum: 2a3b1da13063debe6e26f732defb5f03ef4ef732c3e08daba838d8850433bd00e537ce1a97ce9bcfc4b15db5218d701d1265fae94e0d6926906bec157e6b46e0 +"@types/node@npm:20.11.0": + version: 20.11.0 + resolution: "@types/node@npm:20.11.0" + dependencies: + undici-types: ~5.26.4 + checksum: 1bd6890db7e0404d11c33d28f46f19f73256f0ba35d19f0ef2a0faba09f366f188915fb9338eebebcc472075c1c4941e17c7002786aa69afa44980737846b200 languageName: node linkType: hard @@ -12339,45 +13052,135 @@ __metadata: languageName: node linkType: hard -"@vercel/build-utils@npm:8.3.7": - version: 8.3.7 - resolution: "@vercel/build-utils@npm:8.3.7" - checksum: 22f7c085e9d6a14122b23bef5dff4b610cf9917b233bb4d84b531af918ed3b9536c82abcf1d3e4bf635cd6f8d9da7bc63e0ea48537a38bbdb784f14cf7d88593 +"@vercel/backends@npm:0.0.32": + version: 0.0.32 + resolution: "@vercel/backends@npm:0.0.32" + dependencies: + "@vercel/build-utils": 13.3.5 + "@vercel/nft": 1.3.0 + execa: 3.2.0 + fs-extra: 11.1.0 + oxc-transform: 0.111.0 + path-to-regexp: 8.3.0 + resolve.exports: 2.0.3 + rolldown: 1.0.0-rc.1 + srvx: 0.8.9 + tsx: 4.21.0 + zod: 3.22.4 + peerDependencies: + typescript: ^4.0.0 || ^5.0.0 + checksum: 73166b75f7b76179bc9ff3482b3bb8f5f55f7b46fbe1bb3957c493cf3e61486b83f94f3db406d39f29a8012f988c6c1bab01a38f6fc2ded473e0cab97464115c languageName: node linkType: hard -"@vercel/error-utils@npm:2.0.2": - version: 2.0.2 - resolution: "@vercel/error-utils@npm:2.0.2" - checksum: 80e45ba15606cf3984cc8929657111d63e42af1e3405665af1cbfe073b8565c0dc4a2752f4c4a6f32b69220c67e4fdb8b35f31fcb47dca36f0bbc7c4f9006a3f +"@vercel/blob@npm:1.0.2": + version: 1.0.2 + resolution: "@vercel/blob@npm:1.0.2" + dependencies: + async-retry: ^1.3.3 + is-buffer: ^2.0.5 + is-node-process: ^1.2.0 + throttleit: ^2.1.0 + undici: ^5.28.4 + checksum: 0371907718cbd11230d40e68b50e2f4a947aa041a98a3aac02b2c187ff9604c052aed278560150186a7787d01a2605651600c6d5091d6be33fb9c7ab5c7456bf languageName: node linkType: hard -"@vercel/fun@npm:1.1.0": +"@vercel/build-utils@npm:13.3.5": + version: 13.3.5 + resolution: "@vercel/build-utils@npm:13.3.5" + dependencies: + "@vercel/python-analysis": 0.4.0 + checksum: 1b63b75ed9bb738e28294e53acda2d4796fc9222a39aaa534002eaa2ed990395b4e9a4c09caf35ff6aab9156cd02998c417fea57082551ec94e3deefc3e6f97b + languageName: node + linkType: hard + +"@vercel/cervel@npm:0.0.19": + version: 0.0.19 + resolution: "@vercel/cervel@npm:0.0.19" + dependencies: + "@vercel/backends": 0.0.32 + peerDependencies: + typescript: ^4.0.0 || ^5.0.0 + bin: + cervel: bin/cervel.mjs + checksum: 26141f5bdb2b9096735d53ef8a58f143a673c0f4191e4f7176c31f050c8a6cf4bec7c042c7bba7a49dae2d56cb60c57830ace7dc1902ed939cc3c0cb00b061ee + languageName: node + linkType: hard + +"@vercel/detect-agent@npm:1.1.0": version: 1.1.0 - resolution: "@vercel/fun@npm:1.1.0" + resolution: "@vercel/detect-agent@npm:1.1.0" + checksum: c6391db9afd92bfef0f8a6b829b64f09793d5ba87763e5dc19dec6b2f21be3d637dc7c9c7cc18cbe9b8269dcf3404fcdbb352bc7023f9b6a60ca222048fa0ae3 + languageName: node + linkType: hard + +"@vercel/elysia@npm:0.1.35": + version: 0.1.35 + resolution: "@vercel/elysia@npm:0.1.35" + dependencies: + "@vercel/node": 5.6.2 + "@vercel/static-config": 3.1.2 + checksum: 94edbb3e110c450bd4f6e6f81ed7b0fc3e41003125b4290277ab0bf4aaf0e088bacc8d4bbbe5f9ba0c60e566886b8d53c4d2e46af846174db90a0df59299c321 + languageName: node + linkType: hard + +"@vercel/error-utils@npm:2.0.3": + version: 2.0.3 + resolution: "@vercel/error-utils@npm:2.0.3" + checksum: cb631bb6cf9574b3f1ee64cca82e9c594fa0a0d44f1fa0e810d86a11a98935cc780b2b89ac303a18609aed3582907142b45a88641d55a15e628e7bea38669f22 + languageName: node + linkType: hard + +"@vercel/express@npm:0.1.44": + version: 0.1.44 + resolution: "@vercel/express@npm:0.1.44" + dependencies: + "@vercel/cervel": 0.0.19 + "@vercel/nft": 1.1.1 + "@vercel/node": 5.6.2 + "@vercel/static-config": 3.1.2 + fs-extra: 11.1.0 + path-to-regexp: 8.3.0 + ts-morph: 12.0.0 + zod: 3.22.4 + checksum: 66818cb7aa73d1a7e9dec6e3264cf396b26a9bc65fffd5b54731c406ae92ef62ef36e283fc033c200a21f9a69cbb01cac2fc6c58e13ed6a6208821afc7a3a36a + languageName: node + linkType: hard + +"@vercel/fastify@npm:0.1.38": + version: 0.1.38 + resolution: "@vercel/fastify@npm:0.1.38" + dependencies: + "@vercel/node": 5.6.2 + "@vercel/static-config": 3.1.2 + checksum: e35fb8a68de519bfca1259dd13215e4d83f6fbcb273cd4fb7dc9ae41103da24f1ed80c12597e272a87a65cdbb360195fcb23f9f3a3a430a19a2d0feb17037d56 + languageName: node + linkType: hard + +"@vercel/fun@npm:1.3.0": + version: 1.3.0 + resolution: "@vercel/fun@npm:1.3.0" dependencies: "@tootallnate/once": 2.0.0 async-listen: 1.2.0 - debug: 4.1.1 - execa: 3.2.0 - fs-extra: 8.1.0 + debug: 4.3.4 generic-pool: 3.4.2 micro: 9.3.5-canary.3 ms: 2.1.1 node-fetch: 2.6.7 - path-match: 1.2.4 + path-to-regexp: 8.2.0 promisepipe: 3.0.0 - semver: 7.3.5 + semver: 7.5.4 stat-mode: 0.3.0 stream-to-promise: 2.2.0 - tar: 4.4.18 + tar: 7.5.7 + tinyexec: 0.3.2 tree-kill: 1.2.2 uid-promise: 1.0.0 - uuid: 3.3.2 xdg-app-paths: 5.1.0 yauzl-promise: 2.1.3 - checksum: c67529db2c371b792f8bb0e8ddb6db11fe0a928ed600150f69a9273c4a132070b39bf6d414e465df4c36bf30bf8dc9515499e5e61fb5c061430e814418d06102 + checksum: 50fa9cd6e3380948d60590631b0737b403db9e5eb980b27a47c66be7a43eb4cd230ee4479fbe929c7b67b1af671db8aa498919824799950e1fbb9ec62fe64f3c languageName: node linkType: hard @@ -12390,168 +13193,252 @@ __metadata: languageName: node linkType: hard -"@vercel/gatsby-plugin-vercel-builder@npm:2.0.41": - version: 2.0.41 - resolution: "@vercel/gatsby-plugin-vercel-builder@npm:2.0.41" +"@vercel/gatsby-plugin-vercel-builder@npm:2.0.134": + version: 2.0.134 + resolution: "@vercel/gatsby-plugin-vercel-builder@npm:2.0.134" dependencies: "@sinclair/typebox": 0.25.24 - "@vercel/build-utils": 8.3.7 - "@vercel/routing-utils": 3.1.0 - esbuild: 0.14.47 + "@vercel/build-utils": 13.3.5 + esbuild: 0.27.0 etag: 1.8.1 fs-extra: 11.1.0 - checksum: c37c37e7381ca233d656d2bfbdae61fbabf22e94c92e75b93375262ff90baa9a0aca7015a8a24d99e63ce0f54184dc8ceb005eaea2ab0fea6813aafc559a1834 + checksum: c1d645879a135c4db414a63b0679219a02ebe9b7d8c5f6e2b822686d6b42d238183629ccfb59aef7fbdcba21445caadfcaa49d5186697a50251abbdbb6a98602 languageName: node linkType: hard -"@vercel/go@npm:3.1.1": - version: 3.1.1 - resolution: "@vercel/go@npm:3.1.1" - checksum: 8c574ec5dee98ef52d91970f12e0d6b3282b848718e64def3b31ffae7d2ac9b928ee475553187bd31cb07025fa39ca2bf22e26d84ef165de2a43bb36b5224a13 +"@vercel/go@npm:3.4.0": + version: 3.4.0 + resolution: "@vercel/go@npm:3.4.0" + checksum: b7d4a69292658bd3ed2ee1fa29d77294e7d2b7f713199d4526f4c1a289307f60aaffc30a6522de7b980e3ad67c5f4e14101615f733ab35cfd9ad4d95e80c1bf9 languageName: node linkType: hard -"@vercel/hydrogen@npm:1.0.4": - version: 1.0.4 - resolution: "@vercel/hydrogen@npm:1.0.4" +"@vercel/h3@npm:0.1.44": + version: 0.1.44 + resolution: "@vercel/h3@npm:0.1.44" + dependencies: + "@vercel/node": 5.6.2 + "@vercel/static-config": 3.1.2 + checksum: 515225302fcd265f3f53b3729a9c08a05c1f2cf0bea6418cf59a3ff8c74549c85f72a090bb30c86006ba8b7f0b37fc88d5b5f93fe44480644946f73ae3db5956 + languageName: node + linkType: hard + +"@vercel/hono@npm:0.2.38": + version: 0.2.38 + resolution: "@vercel/hono@npm:0.2.38" dependencies: - "@vercel/static-config": 3.0.0 + "@vercel/nft": 1.1.1 + "@vercel/node": 5.6.2 + "@vercel/static-config": 3.1.2 + fs-extra: 11.1.0 + path-to-regexp: 8.3.0 ts-morph: 12.0.0 - checksum: 58a12e664d46ded40bba5984d29a5c47e7184d79b3177f6d2d37375e3c787ae141075bab40fb49ee76765c066f6f3a9ea803e70818d9dd2919d79e51cab7ec28 + zod: 3.22.4 + checksum: 5d62f351149f479431534f68aa795e3ab286a79a0dfbc53d3efd83f5a50b57718a4b821b738e737cd5b768aa0eeaf942aa7699086662ece0bddcbcefb7a12d8e languageName: node linkType: hard -"@vercel/next@npm:4.3.7": - version: 4.3.7 - resolution: "@vercel/next@npm:4.3.7" +"@vercel/hydrogen@npm:1.3.5": + version: 1.3.5 + resolution: "@vercel/hydrogen@npm:1.3.5" dependencies: - "@vercel/nft": 0.27.3 - checksum: 6e657c0c3bccf1f638da6ebbd4cc6ada7d39c8b9efe4721322b63785781ccbf8d06b39ddcc72e165966d10649eff0f1fc1f75efd0c3a21105e3fc5654726abc2 + "@vercel/static-config": 3.1.2 + ts-morph: 12.0.0 + checksum: 742e544ac982cd05bce3ad35174f06d6417f1395c3feab2afa7dada2ec6b0ba4c994b98110c5825e45b46fe9080f9da4ade01d44616cd7b58cc54e838b701246 languageName: node linkType: hard -"@vercel/nft@npm:0.27.3": - version: 0.27.3 - resolution: "@vercel/nft@npm:0.27.3" +"@vercel/koa@npm:0.1.18": + version: 0.1.18 + resolution: "@vercel/koa@npm:0.1.18" + dependencies: + "@vercel/node": 5.6.2 + "@vercel/static-config": 3.1.2 + checksum: 4c0087062567d89a84b627db00a5800350da468371aff0fe7770ae96b5c95afc734819d563ff3b0f3dfc59139f547e37baf0df81caed8d706fa98e0dc58d1b54 + languageName: node + linkType: hard + +"@vercel/nestjs@npm:0.2.39": + version: 0.2.39 + resolution: "@vercel/nestjs@npm:0.2.39" dependencies: - "@mapbox/node-pre-gyp": ^1.0.5 - "@rollup/pluginutils": ^4.0.0 + "@vercel/node": 5.6.2 + "@vercel/static-config": 3.1.2 + checksum: b9d1f649268eb9f082cb2b0d6fbc3ca85661f835cf1abf0068f8d9051752fadd252e2eec0b1b94fb0c760c04352f36152da40d237a123671bc301f7b8e976e5c + languageName: node + linkType: hard + +"@vercel/next@npm:4.15.28": + version: 4.15.28 + resolution: "@vercel/next@npm:4.15.28" + dependencies: + "@vercel/nft": 1.1.1 + checksum: a26bf599c68e5ab6b20f12799acfc508ef35cde5ad968f50f12272aba0eddf75ecc65be122e0d26908a6cfc9f80152c6ba7e84a72327dfd72b76360689f8fbbd + languageName: node + linkType: hard + +"@vercel/nft@npm:1.1.1": + version: 1.1.1 + resolution: "@vercel/nft@npm:1.1.1" + dependencies: + "@mapbox/node-pre-gyp": ^2.0.0 + "@rollup/pluginutils": ^5.1.3 acorn: ^8.6.0 acorn-import-attributes: ^1.9.5 async-sema: ^3.1.1 bindings: ^1.4.0 estree-walker: 2.0.2 - glob: ^7.1.3 + glob: ^13.0.0 graceful-fs: ^4.2.9 - micromatch: ^4.0.2 node-gyp-build: ^4.2.2 + picomatch: ^4.0.2 resolve-from: ^5.0.0 bin: nft: out/cli.js - checksum: ae6757a34c8c644456aadb6e3e1c697c0520fc3fc90e7e5a9a59cbf8b4805a7f6486b07b9776653a4be480f00058f22e36eb949d9102f9af2359cd9397d7156d + checksum: ddce18da2e2fcb122bec43a0f95ebe2e4738e07745cb4cf0e0525d2ed136587cffea2cfd1516cb96469dadf6767e6ec2a95d4fd63ad61a4750f401d8f7daf99e languageName: node linkType: hard -"@vercel/node@npm:3.2.9": - version: 3.2.9 - resolution: "@vercel/node@npm:3.2.9" +"@vercel/nft@npm:1.3.0": + version: 1.3.0 + resolution: "@vercel/nft@npm:1.3.0" + dependencies: + "@mapbox/node-pre-gyp": ^2.0.0 + "@rollup/pluginutils": ^5.1.3 + acorn: ^8.6.0 + acorn-import-attributes: ^1.9.5 + async-sema: ^3.1.1 + bindings: ^1.4.0 + estree-walker: 2.0.2 + glob: ^13.0.0 + graceful-fs: ^4.2.9 + node-gyp-build: ^4.2.2 + picomatch: ^4.0.2 + resolve-from: ^5.0.0 + bin: + nft: out/cli.js + checksum: ea7892588d027a0df65d3e20584a7e81c5447858fb404d3cdf884eeda416e400a1e348b628f1cd509d89dca075bae7b150f331b470c769d1d26455861f10f375 + languageName: node + linkType: hard + +"@vercel/node@npm:5.6.2": + version: 5.6.2 + resolution: "@vercel/node@npm:5.6.2" dependencies: "@edge-runtime/node-utils": 2.3.0 "@edge-runtime/primitives": 4.1.0 "@edge-runtime/vm": 3.2.0 - "@types/node": 16.18.11 - "@vercel/build-utils": 8.3.7 - "@vercel/error-utils": 2.0.2 - "@vercel/nft": 0.27.3 - "@vercel/static-config": 3.0.0 + "@types/node": 20.11.0 + "@vercel/build-utils": 13.3.5 + "@vercel/error-utils": 2.0.3 + "@vercel/nft": 1.1.1 + "@vercel/static-config": 3.1.2 async-listen: 3.0.0 cjs-module-lexer: 1.2.3 edge-runtime: 2.5.9 es-module-lexer: 1.4.1 - esbuild: 0.14.47 + esbuild: 0.27.0 etag: 1.8.1 + mime-types: 2.1.35 node-fetch: 2.6.9 - path-to-regexp: 6.2.1 + path-to-regexp: 6.1.0 + path-to-regexp-updated: "npm:path-to-regexp@6.3.0" ts-morph: 12.0.0 - ts-node: 10.9.1 - typescript: 4.9.5 + tsx: 4.21.0 + typescript: "npm:typescript@5.9.3" undici: 5.28.4 - checksum: 8a666e2b321f680aa127c550ea7604081a37e6188e0ab644850184ee800d0810f7af6ec29731c0a89e9f3f08efdbe4b4aa74184db432789f4045d3eec175a027 + checksum: fffa480bc8678aa99b60b94e89149fca2e9c7dc14805f3cf038d9952dd8e3dde81b48fe4c8efa744881e3903934be870b306180e4c35adfb0cfa2088a535c2dc languageName: node linkType: hard -"@vercel/python@npm:4.3.1": - version: 4.3.1 - resolution: "@vercel/python@npm:4.3.1" - checksum: 270ba55dda004ce93581bdd343a2cc39a61acee68ed003030fa30c82a0e838c7de5fdc3f960f1319494999a82091dcc1d0c75973dfb68307c61a4311619bf60b +"@vercel/python-analysis@npm:0.4.0": + version: 0.4.0 + resolution: "@vercel/python-analysis@npm:0.4.0" + dependencies: + "@bytecodealliance/preview2-shim": 0.17.6 + "@renovatebot/pep440": 4.2.1 + fs-extra: 11.1.1 + js-yaml: 4.1.1 + minimatch: 10.1.1 + pip-requirements-js: 1.0.2 + smol-toml: 1.5.2 + zod: 3.22.4 + checksum: 4f8fa3dd98251bed3aff4954669519e46f5ff273545c41ded2293634b5ca094ef09210717c9507c6f6fa68f91cfdbd8e397f795caf93a70b1a8c8b6d94c0478b languageName: node linkType: hard -"@vercel/redwood@npm:2.1.3": - version: 2.1.3 - resolution: "@vercel/redwood@npm:2.1.3" +"@vercel/python@npm:6.11.1": + version: 6.11.1 + resolution: "@vercel/python@npm:6.11.1" dependencies: - "@vercel/nft": 0.27.3 - "@vercel/routing-utils": 3.1.0 - "@vercel/static-config": 3.0.0 - semver: 6.3.1 - ts-morph: 12.0.0 - checksum: e3b8c060e4c20bcd9f531dc203f3e0d755e8d005faa142f81a3829d97269916759af772af2369b0c11fb68aa16c8dfcc3f4a4922ee92a210f1aff785d871a019 + "@vercel/python-analysis": 0.4.0 + checksum: aaabff1c0e01065c325fdc77258e95e75cbf3e9ffdf5481cce012fc4503b4d241fcf84861c1e264c2c98f1ca00fdaa64a842ec45dba36277873b222df2b61846 languageName: node linkType: hard -"@vercel/remix-builder@npm:2.2.6": - version: 2.2.6 - resolution: "@vercel/remix-builder@npm:2.2.6" +"@vercel/redwood@npm:2.4.9": + version: 2.4.9 + resolution: "@vercel/redwood@npm:2.4.9" dependencies: - "@vercel/error-utils": 2.0.2 - "@vercel/nft": 0.27.3 - "@vercel/static-config": 3.0.0 + "@vercel/nft": 1.1.1 + "@vercel/static-config": 3.1.2 + semver: 6.3.1 ts-morph: 12.0.0 - checksum: c2e5880022eefcb2c4b49cf0bf89f4ea31b3e0b5985febb36cd5d81845c3f4413f7b595b23504517974647a72c20290afbc0ebd2d9bfcdc40acf8e33f9291e81 + checksum: 62a2892ad7516243dd43f9dc0efd11bb4195205eae7481250c7305b090ec815eb26773c4c98253da4969fa75ff9c574c69d19b868a8ea43115c696f837124ced languageName: node linkType: hard -"@vercel/routing-utils@npm:3.1.0": - version: 3.1.0 - resolution: "@vercel/routing-utils@npm:3.1.0" +"@vercel/remix-builder@npm:5.5.10": + version: 5.5.10 + resolution: "@vercel/remix-builder@npm:5.5.10" dependencies: - ajv: ^6.0.0 + "@vercel/error-utils": 2.0.3 + "@vercel/nft": 1.1.1 + "@vercel/static-config": 3.1.2 path-to-regexp: 6.1.0 - dependenciesMeta: - ajv: - optional: true - checksum: ef9c06154cab6fcfc15700208c596a36ec7d8b2df722e42c7737b725118c075ec020900d399c0989e6cf49b67595f8624d24e872d073ad426dcac03dcaf2ffa4 + path-to-regexp-updated: "npm:path-to-regexp@6.3.0" + ts-morph: 12.0.0 + checksum: da23236422202d97d6e88aa8b1a04b7160c6759273f41049cd5d5584a1ac3ef53e4a1556125658b04d3bbc954aa233ecd04747330fa85a47896722ada81403b9 languageName: node linkType: hard -"@vercel/ruby@npm:2.1.0": - version: 2.1.0 - resolution: "@vercel/ruby@npm:2.1.0" - checksum: 059d142ca2c43578ae36e3b9c5ecd92511ea9b5127beb583e94b60bc34d17f44269c8b42c7e98992e29ab27c4c9108a28119605cdb73c586dc3cc0b17a99789c +"@vercel/ruby@npm:2.3.0": + version: 2.3.0 + resolution: "@vercel/ruby@npm:2.3.0" + checksum: 150c556aa143d5046eda99c59c0a79f789e7968036163673d9f7df192ea332b4eddc254a010127c35313fe3474da67c6976c498124375f9dd8e8b282f9241947 + languageName: node + linkType: hard + +"@vercel/rust@npm:1.0.5": + version: 1.0.5 + resolution: "@vercel/rust@npm:1.0.5" + dependencies: + "@iarna/toml": ^2.2.5 + execa: 5 + checksum: 85e5d0e3a166428fc8da1c0b576cc1f7f8050110741ab2109006fecb0e08d79f3c9fb9a0096c2e22b17ac3ce8ea6ffa9b8c1dc92ecf743f7025df92ecd1ac3ba languageName: node linkType: hard -"@vercel/static-build@npm:2.5.19": - version: 2.5.19 - resolution: "@vercel/static-build@npm:2.5.19" +"@vercel/static-build@npm:2.8.36": + version: 2.8.36 + resolution: "@vercel/static-build@npm:2.8.36" dependencies: "@vercel/gatsby-plugin-vercel-analytics": 1.0.11 - "@vercel/gatsby-plugin-vercel-builder": 2.0.41 - "@vercel/static-config": 3.0.0 + "@vercel/gatsby-plugin-vercel-builder": 2.0.134 + "@vercel/static-config": 3.1.2 ts-morph: 12.0.0 - checksum: c6e0bba6939cf58824fa42953a0e9db769656446c76a8ff2bcdcaa5f7502b4820f9967de6956530166d9476aa07dfa1941fb12ab8e07f6f9502d81b5db824602 + checksum: dc7f33bb4e0f709da5317229d675f3f8191d4e8d1c060be213a37c452c7cff2983aa869d1d152f6951087f862b07b48172e6f5831f750870ac643a2037faa256 languageName: node linkType: hard -"@vercel/static-config@npm:3.0.0": - version: 3.0.0 - resolution: "@vercel/static-config@npm:3.0.0" +"@vercel/static-config@npm:3.1.2": + version: 3.1.2 + resolution: "@vercel/static-config@npm:3.1.2" dependencies: ajv: 8.6.3 json-schema-to-ts: 1.6.4 ts-morph: 12.0.0 - checksum: aa69e98b31e5b0db416e4906a70ff7b9fe168146a1d9e67007a2e4514999f7ce0d02153b6314f0ea6fb3a7a0c2ccf841511d09873695e8623a4d95546461bfc9 + checksum: c3f90809b96d665e01660d58b65a5e4558aa0115c33099d19d3f7b575cd0a4395e3887d48d2f255926f46eccde6aae0ced6f678003dae37616835769dee4d7c3 languageName: node linkType: hard @@ -14522,6 +15409,13 @@ __metadata: languageName: node linkType: hard +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: e70b209f5f408dd3a3bbd0eec4b10a2ffd64704a4a3821d0969d84928cc490a8eb60f85b78a95622c1841113edac10161c62e52f5e7d0027aa26786a8136e02e + languageName: node + linkType: hard + "abi-to-sol@npm:^0.7.0": version: 0.7.1 resolution: "abi-to-sol@npm:0.7.1" @@ -14796,6 +15690,13 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 86a7f542af277cfbd77dd61e7df8422f90bac512953709003a1c530171a9d019d072e2400eab2b59f84b49ab9dd237be44315ca663ac73e82b3922d10ea5eafa + languageName: node + linkType: hard + "agentkeepalive@npm:^4.3.0": version: 4.5.0 resolution: "agentkeepalive@npm:4.5.0" @@ -14841,7 +15742,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.0.0, ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -15070,7 +15971,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -15158,23 +16059,6 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c - languageName: node - linkType: hard - "arg@npm:4.1.0": version: 4.1.0 resolution: "arg@npm:4.1.0" @@ -18167,25 +19051,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:3.3.1": - version: 3.3.1 - resolution: "chokidar@npm:3.3.1" - dependencies: - anymatch: ~3.1.1 - braces: ~3.0.2 - fsevents: ~2.1.2 - glob-parent: ~5.1.0 - is-binary-path: ~2.1.0 - is-glob: ~4.0.1 - normalize-path: ~3.0.0 - readdirp: ~3.3.0 - dependenciesMeta: - fsevents: - optional: true - checksum: 84b01c2e750fbc72b9823da9fde83141c6f83a8aa1a3c2c683b4e55d40b93b5d168f6030dfb7aca27755329a464c69ac0d0f2fb39beafd2f6280fae74c3d1117 - languageName: node - linkType: hard - "chokidar@npm:3.5.3, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" @@ -18205,6 +19070,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:4.0.0": + version: 4.0.0 + resolution: "chokidar@npm:4.0.0" + dependencies: + readdirp: ^4.0.1 + checksum: f528f5cf22135fcdbe2ee44a89de3ebff4f94db7e101c55e5d92169bd4b52ce5b97d3ee0b74fe4fb57a065d2f2efce82f8bc687751e56b0a1870e9fe201b1c99 + languageName: node + linkType: hard + "chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -18247,6 +19121,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: fd73a4bab48b79e66903fe1cafbdc208956f41ea4f856df883d0c7277b7ab29fd33ee65f93b2ec9192fc0169238f2f8307b7735d27c155821d886b84aa97aa8d + languageName: node + linkType: hard + "ci-info@npm:^2.0.0": version: 2.0.0 resolution: "ci-info@npm:2.0.0" @@ -18690,15 +19571,6 @@ __metadata: languageName: node linkType: hard -"color-support@npm:^1.1.2": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - "colorette@npm:^1.0.7": version: 1.4.0 resolution: "colorette@npm:1.4.0" @@ -18979,13 +19851,6 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - "constant-case@npm:^2.0.0": version: 2.0.0 resolution: "constant-case@npm:2.0.0" @@ -19072,6 +19937,13 @@ __metadata: languageName: node linkType: hard +"cookie-es@npm:^2.0.0": + version: 2.0.0 + resolution: "cookie-es@npm:2.0.0" + checksum: 2ba42857d9cfc431379e7ce537b50523b4285a030772fc376f306cb8e53fdf1f8ecc55aa9283bc8e463ba1e70aea5124ca6037bdb874df54503bece4860eb28f + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -19641,15 +20513,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:4.1.1": - version: 4.1.1 - resolution: "debug@npm:4.1.1" - dependencies: - ms: ^2.1.1 - checksum: 1e681f5cce94ba10f8dde74b20b42e4d8cf0d2a6700f4c165bb3bb6885565ef5ca5885bf07e704974a835f2415ff095a63164f539988a1f07e8a69fe8b1d65ad - languageName: node - linkType: hard - "debug@npm:=3.1.0": version: 3.1.0 resolution: "debug@npm:3.1.0" @@ -19922,13 +20785,6 @@ __metadata: languageName: node linkType: hard -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - "delete-empty@npm:^3.0.0": version: 3.0.0 resolution: "delete-empty@npm:3.0.0" @@ -21077,214 +21933,92 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-android-64@npm:0.14.47" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"esbuild-android-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-android-arm64@npm:0.14.47" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-darwin-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-darwin-64@npm:0.14.47" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"esbuild-darwin-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-darwin-arm64@npm:0.14.47" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-freebsd-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-freebsd-64@npm:0.14.47" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-freebsd-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-freebsd-arm64@npm:0.14.47" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-32@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-32@npm:0.14.47" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-linux-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-64@npm:0.14.47" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"esbuild-linux-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-arm64@npm:0.14.47" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-arm@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-arm@npm:0.14.47" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"esbuild-linux-mips64le@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-mips64le@npm:0.14.47" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"esbuild-linux-ppc64le@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-ppc64le@npm:0.14.47" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"esbuild-linux-riscv64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-riscv64@npm:0.14.47" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"esbuild-linux-s390x@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-linux-s390x@npm:0.14.47" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"esbuild-netbsd-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-netbsd-64@npm:0.14.47" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-openbsd-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-openbsd-64@npm:0.14.47" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-sunos-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-sunos-64@npm:0.14.47" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-32@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-windows-32@npm:0.14.47" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-windows-64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-windows-64@npm:0.14.47" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-arm64@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild-windows-arm64@npm:0.14.47" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"esbuild@npm:0.14.47": - version: 0.14.47 - resolution: "esbuild@npm:0.14.47" - dependencies: - esbuild-android-64: 0.14.47 - esbuild-android-arm64: 0.14.47 - esbuild-darwin-64: 0.14.47 - esbuild-darwin-arm64: 0.14.47 - esbuild-freebsd-64: 0.14.47 - esbuild-freebsd-arm64: 0.14.47 - esbuild-linux-32: 0.14.47 - esbuild-linux-64: 0.14.47 - esbuild-linux-arm: 0.14.47 - esbuild-linux-arm64: 0.14.47 - esbuild-linux-mips64le: 0.14.47 - esbuild-linux-ppc64le: 0.14.47 - esbuild-linux-riscv64: 0.14.47 - esbuild-linux-s390x: 0.14.47 - esbuild-netbsd-64: 0.14.47 - esbuild-openbsd-64: 0.14.47 - esbuild-sunos-64: 0.14.47 - esbuild-windows-32: 0.14.47 - esbuild-windows-64: 0.14.47 - esbuild-windows-arm64: 0.14.47 +"esbuild@npm:0.27.0": + version: 0.27.0 + resolution: "esbuild@npm:0.27.0" + dependencies: + "@esbuild/aix-ppc64": 0.27.0 + "@esbuild/android-arm": 0.27.0 + "@esbuild/android-arm64": 0.27.0 + "@esbuild/android-x64": 0.27.0 + "@esbuild/darwin-arm64": 0.27.0 + "@esbuild/darwin-x64": 0.27.0 + "@esbuild/freebsd-arm64": 0.27.0 + "@esbuild/freebsd-x64": 0.27.0 + "@esbuild/linux-arm": 0.27.0 + "@esbuild/linux-arm64": 0.27.0 + "@esbuild/linux-ia32": 0.27.0 + "@esbuild/linux-loong64": 0.27.0 + "@esbuild/linux-mips64el": 0.27.0 + "@esbuild/linux-ppc64": 0.27.0 + "@esbuild/linux-riscv64": 0.27.0 + "@esbuild/linux-s390x": 0.27.0 + "@esbuild/linux-x64": 0.27.0 + "@esbuild/netbsd-arm64": 0.27.0 + "@esbuild/netbsd-x64": 0.27.0 + "@esbuild/openbsd-arm64": 0.27.0 + "@esbuild/openbsd-x64": 0.27.0 + "@esbuild/openharmony-arm64": 0.27.0 + "@esbuild/sunos-x64": 0.27.0 + "@esbuild/win32-arm64": 0.27.0 + "@esbuild/win32-ia32": 0.27.0 + "@esbuild/win32-x64": 0.27.0 dependenciesMeta: - esbuild-android-64: + "@esbuild/aix-ppc64": optional: true - esbuild-android-arm64: + "@esbuild/android-arm": optional: true - esbuild-darwin-64: + "@esbuild/android-arm64": optional: true - esbuild-darwin-arm64: + "@esbuild/android-x64": optional: true - esbuild-freebsd-64: + "@esbuild/darwin-arm64": optional: true - esbuild-freebsd-arm64: + "@esbuild/darwin-x64": optional: true - esbuild-linux-32: + "@esbuild/freebsd-arm64": optional: true - esbuild-linux-64: + "@esbuild/freebsd-x64": optional: true - esbuild-linux-arm: + "@esbuild/linux-arm": optional: true - esbuild-linux-arm64: + "@esbuild/linux-arm64": optional: true - esbuild-linux-mips64le: + "@esbuild/linux-ia32": optional: true - esbuild-linux-ppc64le: + "@esbuild/linux-loong64": optional: true - esbuild-linux-riscv64: + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": optional: true - esbuild-linux-s390x: + "@esbuild/linux-riscv64": optional: true - esbuild-netbsd-64: + "@esbuild/linux-s390x": optional: true - esbuild-openbsd-64: + "@esbuild/linux-x64": optional: true - esbuild-sunos-64: + "@esbuild/netbsd-arm64": optional: true - esbuild-windows-32: + "@esbuild/netbsd-x64": optional: true - esbuild-windows-64: + "@esbuild/openbsd-arm64": optional: true - esbuild-windows-arm64: + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": optional: true bin: esbuild: bin/esbuild - checksum: 77a8bff8c3fe52dc9d2823448843b0f53c9a9f3701e3637a54e396270c9ca04cc46a4b08ef86cbaa8d202854e02c790f61683bfa75ebff540b1e24414f536e91 + checksum: db33b01d8f9234843e411c87527587f646b5ac082e3759fe796a71878dcb1180da0d4f8b33525c492d918c0262befe0e724c2d5d8a2c4b611c2c75549a3dbf91 languageName: node linkType: hard @@ -21522,6 +22256,95 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:~0.27.0": + version: 0.27.3 + resolution: "esbuild@npm:0.27.3" + dependencies: + "@esbuild/aix-ppc64": 0.27.3 + "@esbuild/android-arm": 0.27.3 + "@esbuild/android-arm64": 0.27.3 + "@esbuild/android-x64": 0.27.3 + "@esbuild/darwin-arm64": 0.27.3 + "@esbuild/darwin-x64": 0.27.3 + "@esbuild/freebsd-arm64": 0.27.3 + "@esbuild/freebsd-x64": 0.27.3 + "@esbuild/linux-arm": 0.27.3 + "@esbuild/linux-arm64": 0.27.3 + "@esbuild/linux-ia32": 0.27.3 + "@esbuild/linux-loong64": 0.27.3 + "@esbuild/linux-mips64el": 0.27.3 + "@esbuild/linux-ppc64": 0.27.3 + "@esbuild/linux-riscv64": 0.27.3 + "@esbuild/linux-s390x": 0.27.3 + "@esbuild/linux-x64": 0.27.3 + "@esbuild/netbsd-arm64": 0.27.3 + "@esbuild/netbsd-x64": 0.27.3 + "@esbuild/openbsd-arm64": 0.27.3 + "@esbuild/openbsd-x64": 0.27.3 + "@esbuild/openharmony-arm64": 0.27.3 + "@esbuild/sunos-x64": 0.27.3 + "@esbuild/win32-arm64": 0.27.3 + "@esbuild/win32-ia32": 0.27.3 + "@esbuild/win32-x64": 0.27.3 + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 3a45334b00ca235ad96843738c4698970aacde92058aee28ab1fa57ad823c29667070af90b6071cc876e492bebdeed79f593a273c39b419097afd2a772296085 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -21858,7 +22681,7 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:2.0.2, estree-walker@npm:^2, estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": +"estree-walker@npm:2.0.2, estree-walker@npm:^2, estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc @@ -22765,7 +23588,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:5.1.1, execa@npm:^5.0.0": +"execa@npm:5, execa@npm:5.1.1, execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -23737,14 +24560,14 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:8.1.0, fs-extra@npm:^8.0.1, fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" +"fs-extra@npm:11.1.1": + version: 11.1.1 + resolution: "fs-extra@npm:11.1.1" dependencies: graceful-fs: ^4.2.0 - jsonfile: ^4.0.0 - universalify: ^0.1.0 - checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd languageName: node linkType: hard @@ -23817,6 +24640,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^8.0.1, fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + languageName: node + linkType: hard + "fs-jetpack@npm:4.3.1": version: 4.3.1 resolution: "fs-jetpack@npm:4.3.1" @@ -23878,16 +24712,6 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.1.2": - version: 2.1.3 - resolution: "fsevents@npm:2.1.3" - dependencies: - node-gyp: latest - checksum: b5ec0516b44d75b60af5c01ff80a80cd995d175e4640d2a92fbabd02991dd664d76b241b65feef0775c23d531c3c74742c0fbacd6205af812a9c3cef59f04292 - conditions: os=darwin - languageName: node - linkType: hard - "fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" @@ -23897,15 +24721,6 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@~2.1.2#~builtin": - version: 2.1.3 - resolution: "fsevents@patch:fsevents@npm%3A2.1.3#~builtin::version=2.1.3&hash=31d12a" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - "function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -23982,23 +24797,6 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.2 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.1 - object-assign: ^4.1.1 - signal-exit: ^3.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.2 - checksum: 81296c00c7410cdd48f997800155fbead4f32e4f82109be0719c63edc8560e6579946cc8abd04205297640691ec26d21b578837fd13a4e96288ab4b40b1dc3e9 - languageName: node - linkType: hard - "generic-pool@npm:3.4.2": version: 3.4.2 resolution: "generic-pool@npm:3.4.2" @@ -24198,7 +24996,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -24305,6 +25103,17 @@ __metadata: languageName: node linkType: hard +"glob@npm:^13.0.0": + version: 13.0.2 + resolution: "glob@npm:13.0.2" + dependencies: + minimatch: ^10.1.2 + minipass: ^7.1.2 + path-scurry: ^2.0.0 + checksum: 2e66a89f66af9813e7e0385f7b66228a6ec849f531467c3e92a634d8fbddf3595279301277938edaf5aa25b9e12999556d5934a6b9c83920a851007b9d837de1 + languageName: node + linkType: hard + "glob@npm:^5.0.15": version: 5.0.15 resolution: "glob@npm:5.0.15" @@ -24969,13 +25778,6 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - "has-value@npm:^0.3.1": version: 0.3.1 resolution: "has-value@npm:0.3.1" @@ -25258,16 +26060,6 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:~1.4.0": - version: 1.4.0 - resolution: "http-errors@npm:1.4.0" - dependencies: - inherits: 2.0.1 - statuses: ">= 1.2.1 < 2" - checksum: e25e56567f696f38009bdeeebf6ad0b5706113f21ae2241d4f1438ce303182b649187c5a3b68c4c3a07cd4df7192d58d22186a0b491c638bf3a7ea2626448681 - languageName: node - linkType: hard - "http-https@npm:^1.0.0": version: 1.0.0 resolution: "http-https@npm:1.0.0" @@ -25359,6 +26151,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.5": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: ^7.1.2 + debug: 4 + checksum: b882377a120aa0544846172e5db021fa8afbf83fea2a897d397bd2ddd8095ab268c24bc462f40a15f2a8c600bf4aa05ce52927f70038d4014e68aefecfa94e8d + languageName: node + linkType: hard + "human-signals@npm:^1.1.1": version: 1.1.1 resolution: "human-signals@npm:1.1.1" @@ -25581,13 +26383,6 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2.0.1": - version: 2.0.1 - resolution: "inherits@npm:2.0.1" - checksum: 6536b9377296d4ce8ee89c5c543cb75030934e61af42dba98a428e7d026938c5985ea4d1e3b87743a5b834f40ed1187f89c2d7479e9d59e41d2d1051aefba07b - languageName: node - linkType: hard - "inherits@npm:2.0.3": version: 2.0.3 resolution: "inherits@npm:2.0.3" @@ -25942,6 +26737,13 @@ __metadata: languageName: node linkType: hard +"is-buffer@npm:^2.0.5": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -26221,6 +27023,13 @@ __metadata: languageName: node linkType: hard +"is-node-process@npm:^1.2.0": + version: 1.2.0 + resolution: "is-node-process@npm:1.2.0" + checksum: 930765cdc6d81ab8f1bbecbea4a8d35c7c6d88a3ff61f3630e0fc7f22d624d7661c1df05c58547d0eb6a639dfa9304682c8e342c4113a6ed51472b704cee2928 + languageName: node + linkType: hard + "is-number-object@npm:^1.0.4": version: 1.0.7 resolution: "is-number-object@npm:1.0.7" @@ -27382,6 +28191,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:5.9.6": + version: 5.9.6 + resolution: "jose@npm:5.9.6" + checksum: 4b536da0201858ed4c4582e8bb479081f11e0c63dd0f5e473adde16fc539785e1f2f0409bc1fc7cbbb5b68026776c960b4952da3a06f6fdfff0b9764c9127ae0 + languageName: node + linkType: hard + "js-base64@npm:^3.7.2": version: 3.7.5 resolution: "js-base64@npm:3.7.5" @@ -27454,6 +28270,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:4.1.1": + version: 4.1.1 + resolution: "js-yaml@npm:4.1.1" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: ea2339c6930fe048ec31b007b3c90be2714ab3e7defcc2c27ebf30c74fd940358f29070b4345af0019ef151875bf3bc3f8644bea1bab0372652b5044813ac02d + languageName: node + linkType: hard + "jsbi@npm:^3.1.4": version: 3.2.5 resolution: "jsbi@npm:3.2.5" @@ -28927,6 +29754,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^11.0.0": + version: 11.2.6 + resolution: "lru-cache@npm:11.2.6" + checksum: 26fe602c92a0cb7a8da9a85db162ddd810d84507d9c4ef8d95a785a805648f9579e1148aaeac260f6b6315197bcf27c1b7e60a0a066621d6e95b3587699a0c70 + languageName: node + linkType: hard + "lru-cache@npm:^3.2.0": version: 3.2.0 resolution: "lru-cache@npm:3.2.0" @@ -28994,15 +29828,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -30192,7 +31017,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.16, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.16, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -30286,6 +31111,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:10.1.1": + version: 10.1.1 + resolution: "minimatch@npm:10.1.1" + dependencies: + "@isaacs/brace-expansion": ^5.0.0 + checksum: 8820c0be92994f57281f0a7a2cc4268dcc4b610f9a1ab666685716b4efe4b5898b43c835a8f22298875b31c7a278a5e3b7e253eee7c886546bb0b61fb94bca6b + languageName: node + linkType: hard + "minimatch@npm:2 || 3, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -30313,6 +31147,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.1.2": + version: 10.1.2 + resolution: "minimatch@npm:10.1.2" + dependencies: + "@isaacs/brace-expansion": ^5.0.1 + checksum: a6ad8bb522741fdf6aca0545054057a2a540d7c76c4f6ab0f34694e5de9616c5487dbab26b6ae564437636863d4d5cb3609fa0d8408b6e56312d7a3eb5e22e05 + languageName: node + linkType: hard + "minimatch@npm:^5.0.1": version: 5.1.6 resolution: "minimatch@npm:5.1.6" @@ -30438,6 +31281,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 + languageName: node + linkType: hard + "minizlib@npm:^1.3.3": version: 1.3.3 resolution: "minizlib@npm:1.3.3" @@ -30457,6 +31307,15 @@ __metadata: languageName: node linkType: hard +"minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: ^7.1.2 + checksum: a15e6f0128f514b7d41a1c68ce531155447f4669e32d279bba1c1c071ef6c2abd7e4d4579bb59ccc2ed1531346749665968fdd7be8d83eb6b6ae2fe1f3d370a7 + languageName: node + linkType: hard + "mipd@npm:0.0.7": version: 0.0.7 resolution: "mipd@npm:0.0.7" @@ -31438,25 +32297,25 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" dependencies: - abbrev: 1 + abbrev: ^2.0.0 bin: nopt: bin/nopt.js - checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f + checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 languageName: node linkType: hard -"nopt@npm:^7.0.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" dependencies: - abbrev: ^2.0.0 + abbrev: ^3.0.0 bin: nopt: bin/nopt.js - checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 + checksum: 49cfd3eb6f565e292bf61f2ff1373a457238804d5a5a63a8d786c923007498cba89f3648e3b952bc10203e3e7285752abf5b14eaf012edb821e84f24e881a92a languageName: node linkType: hard @@ -31527,18 +32386,6 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: ^2.0.0 - console-control-strings: ^1.1.0 - gauge: ^3.0.0 - set-blocking: ^2.0.0 - checksum: 516b2663028761f062d13e8beb3f00069c5664925871a9b57989642ebe09f23ab02145bf3ab88da7866c4e112cafff72401f61a672c7c8a20edc585a7016ef5f - languageName: node - linkType: hard - "nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -31819,6 +32666,13 @@ __metadata: languageName: node linkType: hard +"ohm-js@npm:^17.1.0": + version: 17.4.0 + resolution: "ohm-js@npm:17.4.0" + checksum: 8c235ff5684d0c9ea2cbe01cba960f8afb26cba725228bc83ea68eb59f4a856cf524f3e28ca4b2ad55b3af80126fa56eb1515f69391f75db83a9f18ed5696e34 + languageName: node + linkType: hard + "on-exit-leak-free@npm:^0.2.0": version: 0.2.0 resolution: "on-exit-leak-free@npm:0.2.0" @@ -32081,6 +32935,75 @@ __metadata: languageName: node linkType: hard +"oxc-transform@npm:0.111.0": + version: 0.111.0 + resolution: "oxc-transform@npm:0.111.0" + dependencies: + "@oxc-transform/binding-android-arm-eabi": 0.111.0 + "@oxc-transform/binding-android-arm64": 0.111.0 + "@oxc-transform/binding-darwin-arm64": 0.111.0 + "@oxc-transform/binding-darwin-x64": 0.111.0 + "@oxc-transform/binding-freebsd-x64": 0.111.0 + "@oxc-transform/binding-linux-arm-gnueabihf": 0.111.0 + "@oxc-transform/binding-linux-arm-musleabihf": 0.111.0 + "@oxc-transform/binding-linux-arm64-gnu": 0.111.0 + "@oxc-transform/binding-linux-arm64-musl": 0.111.0 + "@oxc-transform/binding-linux-ppc64-gnu": 0.111.0 + "@oxc-transform/binding-linux-riscv64-gnu": 0.111.0 + "@oxc-transform/binding-linux-riscv64-musl": 0.111.0 + "@oxc-transform/binding-linux-s390x-gnu": 0.111.0 + "@oxc-transform/binding-linux-x64-gnu": 0.111.0 + "@oxc-transform/binding-linux-x64-musl": 0.111.0 + "@oxc-transform/binding-openharmony-arm64": 0.111.0 + "@oxc-transform/binding-wasm32-wasi": 0.111.0 + "@oxc-transform/binding-win32-arm64-msvc": 0.111.0 + "@oxc-transform/binding-win32-ia32-msvc": 0.111.0 + "@oxc-transform/binding-win32-x64-msvc": 0.111.0 + dependenciesMeta: + "@oxc-transform/binding-android-arm-eabi": + optional: true + "@oxc-transform/binding-android-arm64": + optional: true + "@oxc-transform/binding-darwin-arm64": + optional: true + "@oxc-transform/binding-darwin-x64": + optional: true + "@oxc-transform/binding-freebsd-x64": + optional: true + "@oxc-transform/binding-linux-arm-gnueabihf": + optional: true + "@oxc-transform/binding-linux-arm-musleabihf": + optional: true + "@oxc-transform/binding-linux-arm64-gnu": + optional: true + "@oxc-transform/binding-linux-arm64-musl": + optional: true + "@oxc-transform/binding-linux-ppc64-gnu": + optional: true + "@oxc-transform/binding-linux-riscv64-gnu": + optional: true + "@oxc-transform/binding-linux-riscv64-musl": + optional: true + "@oxc-transform/binding-linux-s390x-gnu": + optional: true + "@oxc-transform/binding-linux-x64-gnu": + optional: true + "@oxc-transform/binding-linux-x64-musl": + optional: true + "@oxc-transform/binding-openharmony-arm64": + optional: true + "@oxc-transform/binding-wasm32-wasi": + optional: true + "@oxc-transform/binding-win32-arm64-msvc": + optional: true + "@oxc-transform/binding-win32-ia32-msvc": + optional: true + "@oxc-transform/binding-win32-x64-msvc": + optional: true + checksum: 157e67603e57f5b1099d6f4100290a76eebf1f02c82ba5316ad0fff928b939718948844f004986364cc736650d5e89b47434491d2caf8247c5d5fb99128060e0 + languageName: node + linkType: hard + "p-all@npm:3.0.0": version: 3.0.0 resolution: "p-all@npm:3.0.0" @@ -32572,16 +33495,6 @@ __metadata: languageName: node linkType: hard -"path-match@npm:1.2.4": - version: 1.2.4 - resolution: "path-match@npm:1.2.4" - dependencies: - http-errors: ~1.4.0 - path-to-regexp: ^1.0.0 - checksum: 60946ed9fdd922da2d9688abc0dc05cd537a2ff06d192518dcbe654302ad70499050a9297ea23a26c3e1af32d5a867d5f6e0eb892f38fa032afd70df85be05f0 - languageName: node - linkType: hard - "path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -32606,6 +33519,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^2.0.0": + version: 2.0.1 + resolution: "path-scurry@npm:2.0.1" + dependencies: + lru-cache: ^11.0.0 + minipass: ^7.1.2 + checksum: a022c6c38fed836079d03f96540eafd4cd989acf287b99613c82300107f366e889513ad8b671a2039a9d251122621f9c6fa649f0bd4d50acf95a6943a6692dbf + languageName: node + linkType: hard + "path-starts-with@npm:^2.0.0": version: 2.0.1 resolution: "path-starts-with@npm:2.0.1" @@ -32613,6 +33536,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp-updated@npm:path-to-regexp@6.3.0": + version: 6.3.0 + resolution: "path-to-regexp@npm:6.3.0" + checksum: eca78602e6434a1b6799d511d375ec044e8d7e28f5a48aa5c28d57d8152fb52f3fc62fb1cfc5dfa2198e1f041c2a82ed14043d75740a2fe60e91b5089a153250 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -32627,19 +33557,17 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:6.2.1": - version: 6.2.1 - resolution: "path-to-regexp@npm:6.2.1" - checksum: f0227af8284ea13300f4293ba111e3635142f976d4197f14d5ad1f124aebd9118783dd2e5f1fe16f7273743cc3dbeddfb7493f237bb27c10fdae07020cc9b698 +"path-to-regexp@npm:8.2.0": + version: 8.2.0 + resolution: "path-to-regexp@npm:8.2.0" + checksum: 56e13e45962e776e9e7cd72e87a441cfe41f33fd539d097237ceb16adc922281136ca12f5a742962e33d8dda9569f630ba594de56d8b7b6e49adf31803c5e771 languageName: node linkType: hard -"path-to-regexp@npm:^1.0.0": - version: 1.8.0 - resolution: "path-to-regexp@npm:1.8.0" - dependencies: - isarray: 0.0.1 - checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd +"path-to-regexp@npm:8.3.0": + version: 8.3.0 + resolution: "path-to-regexp@npm:8.3.0" + checksum: 73e0d3db449f9899692b10be8480bbcfa294fd575be2d09bce3e63f2f708d1fccd3aaa8591709f8b82062c528df116e118ff9df8f5c52ccc4c2443a90be73e10 languageName: node linkType: hard @@ -32739,7 +33667,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.0.7, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf @@ -32844,6 +33772,15 @@ __metadata: languageName: node linkType: hard +"pip-requirements-js@npm:1.0.2": + version: 1.0.2 + resolution: "pip-requirements-js@npm:1.0.2" + dependencies: + ohm-js: ^17.1.0 + checksum: 2747c6b089160ee406a00fd2e46306358fd8f7c3479a2e69e00a084799763d8fccc644e5a417854d584abefb49fef63b04763f3d9e02fec3fbdbdd6ef3cd1ff6 + languageName: node + linkType: hard + "pirates@npm:^4.0.4, pirates@npm:^4.0.5": version: 4.0.6 resolution: "pirates@npm:4.0.6" @@ -34561,15 +35498,6 @@ __metadata: languageName: node linkType: hard -"readdirp@npm:~3.3.0": - version: 3.3.0 - resolution: "readdirp@npm:3.3.0" - dependencies: - picomatch: ^2.0.7 - checksum: f8289b21d26a6c3f56b8a52588e708f25471f7fee46e5519a155581f5595440ec7e93f7086ba52d1c7f3d5324ef55f996ffa2195145ddcdee103bf5cb671e3fd - languageName: node - linkType: hard - "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -34993,6 +35921,13 @@ __metadata: languageName: node linkType: hard +"resolve.exports@npm:2.0.3": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: abfb9f98278dcd0c19b8a49bb486abfafa23df4636d49128ea270dc982053c3ef230a530aecda1fae1322873fdfa6c97674fc539651ddfdb375ac58e0b8ef6df + languageName: node + linkType: hard + "resolve.exports@npm:^2.0.0": version: 2.0.2 resolution: "resolve.exports@npm:2.0.2" @@ -35252,6 +36187,58 @@ __metadata: languageName: node linkType: hard +"rolldown@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "rolldown@npm:1.0.0-rc.1" + dependencies: + "@oxc-project/types": =0.110.0 + "@rolldown/binding-android-arm64": 1.0.0-rc.1 + "@rolldown/binding-darwin-arm64": 1.0.0-rc.1 + "@rolldown/binding-darwin-x64": 1.0.0-rc.1 + "@rolldown/binding-freebsd-x64": 1.0.0-rc.1 + "@rolldown/binding-linux-arm-gnueabihf": 1.0.0-rc.1 + "@rolldown/binding-linux-arm64-gnu": 1.0.0-rc.1 + "@rolldown/binding-linux-arm64-musl": 1.0.0-rc.1 + "@rolldown/binding-linux-x64-gnu": 1.0.0-rc.1 + "@rolldown/binding-linux-x64-musl": 1.0.0-rc.1 + "@rolldown/binding-openharmony-arm64": 1.0.0-rc.1 + "@rolldown/binding-wasm32-wasi": 1.0.0-rc.1 + "@rolldown/binding-win32-arm64-msvc": 1.0.0-rc.1 + "@rolldown/binding-win32-x64-msvc": 1.0.0-rc.1 + "@rolldown/pluginutils": 1.0.0-rc.1 + dependenciesMeta: + "@rolldown/binding-android-arm64": + optional: true + "@rolldown/binding-darwin-arm64": + optional: true + "@rolldown/binding-darwin-x64": + optional: true + "@rolldown/binding-freebsd-x64": + optional: true + "@rolldown/binding-linux-arm-gnueabihf": + optional: true + "@rolldown/binding-linux-arm64-gnu": + optional: true + "@rolldown/binding-linux-arm64-musl": + optional: true + "@rolldown/binding-linux-x64-gnu": + optional: true + "@rolldown/binding-linux-x64-musl": + optional: true + "@rolldown/binding-openharmony-arm64": + optional: true + "@rolldown/binding-wasm32-wasi": + optional: true + "@rolldown/binding-win32-arm64-msvc": + optional: true + "@rolldown/binding-win32-x64-msvc": + optional: true + bin: + rolldown: bin/cli.mjs + checksum: cce07a38fc7410fb540973402c2979a60c632e72d816f419bf9991909c23667699586f660dac35cbc48f2c0ca6827513319efb3723bde7ef37076a5357c4be24 + languageName: node + linkType: hard + "rollup@npm:^3.27.1": version: 3.29.4 resolution: "rollup@npm:3.29.4" @@ -35586,16 +36573,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" - bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 - languageName: node - linkType: hard - -"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:7.5.4, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -35606,6 +36584,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.1.0, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + languageName: node + linkType: hard + "semver@npm:^7.6.0": version: 7.6.2 resolution: "semver@npm:7.6.2" @@ -36074,6 +37061,13 @@ __metadata: languageName: node linkType: hard +"smol-toml@npm:1.5.2": + version: 1.5.2 + resolution: "smol-toml@npm:1.5.2" + checksum: 75b7e8482151cbe48be094de205631502d5694c2a7d968446799e8b988b4105bd6efd3b6a986baa40d9e9b47cbb2daada21a302901a618793aabd35a670f195e + languageName: node + linkType: hard + "snake-case@npm:^2.1.0": version: 2.1.0 resolution: "snake-case@npm:2.1.0" @@ -36503,6 +37497,17 @@ __metadata: languageName: node linkType: hard +"srvx@npm:0.8.9": + version: 0.8.9 + resolution: "srvx@npm:0.8.9" + dependencies: + cookie-es: ^2.0.0 + bin: + srvx: bin/srvx.mjs + checksum: e2976db34d16dc6658614cf04d9432b1c8142efe496cc286141d3d55df8bba1a7150fa22adcf6cd394fe6468621a675e7e1ec597dedc301ff8e27addaa0d9470 + languageName: node + linkType: hard + "sshpk@npm:^1.7.0": version: 1.18.0 resolution: "sshpk@npm:1.18.0" @@ -36612,7 +37617,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:>= 1.2.1 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": +"statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c @@ -36800,7 +37805,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -37391,18 +38396,16 @@ __metadata: languageName: node linkType: hard -"tar@npm:4.4.18": - version: 4.4.18 - resolution: "tar@npm:4.4.18" +"tar@npm:7.5.7, tar@npm:^7.4.0": + version: 7.5.7 + resolution: "tar@npm:7.5.7" dependencies: - chownr: ^1.1.4 - fs-minipass: ^1.2.7 - minipass: ^2.9.0 - minizlib: ^1.3.3 - mkdirp: ^0.5.5 - safe-buffer: ^5.2.1 - yallist: ^3.1.1 - checksum: a8ef7de6d9223ba51cfb47af881a82be69691ac5a59b1558b4d9ae3ed3513a16872149b060dab942fd2cb96e00fff8f747948c794baf917ed06c5be9de5fd148 + "@isaacs/fs-minipass": ^4.0.0 + chownr: ^3.0.0 + minipass: ^7.1.2 + minizlib: ^3.1.0 + yallist: ^5.0.0 + checksum: 82fa04804b6cae4c0b46b84e97a08c39e1c17bb959350baa32d139bcf5e1fc7ebc3ceb72465dd3e2e311992386ecc13599a257d5672158490ceb9464146d5573 languageName: node linkType: hard @@ -37545,6 +38548,13 @@ __metadata: languageName: node linkType: hard +"throttleit@npm:^2.1.0": + version: 2.1.0 + resolution: "throttleit@npm:2.1.0" + checksum: a2003947aafc721c4a17e6f07db72dc88a64fa9bba0f9c659f7997d30f9590b3af22dadd6a41851e0e8497d539c33b2935c2c7919cf4255922509af6913c619b + languageName: node + linkType: hard + "through2@npm:^2.0.0, through2@npm:^2.0.1, through2@npm:^2.0.3": version: 2.0.5 resolution: "through2@npm:2.0.5" @@ -37662,6 +38672,13 @@ __metadata: languageName: node linkType: hard +"tinyexec@npm:0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: bd491923020610bdeadb0d8cf5d70e7cbad5a3201620fd01048c9bf3b31ffaa75c33254e1540e13b993ce4e8187852b0b5a93057bb598e7a57afa2ca2048a35c + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.6": version: 0.2.14 resolution: "tinyglobby@npm:0.2.14" @@ -38038,7 +39055,7 @@ __metadata: languageName: node linkType: hard -"ts-node@npm:10.9.1, ts-node@npm:^10.9.1": +"ts-node@npm:^10.9.1": version: 10.9.1 resolution: "ts-node@npm:10.9.1" dependencies: @@ -38203,6 +39220,22 @@ __metadata: languageName: node linkType: hard +"tsx@npm:4.21.0": + version: 4.21.0 + resolution: "tsx@npm:4.21.0" + dependencies: + esbuild: ~0.27.0 + fsevents: ~2.3.3 + get-tsconfig: ^4.7.5 + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: 50c98e4b6e66d1c30f72925c8e5e7be1a02377574de7cd367d7e7a6d4af43ca8ff659f91c654e7628b25a5498015e32f090529b92c679b0342811e1cf682e8cf + languageName: node + linkType: hard + "tsx@npm:^4.16.2": version: 4.16.2 resolution: "tsx@npm:4.16.2" @@ -38470,16 +39503,6 @@ __metadata: languageName: node linkType: hard -"typescript@npm:4.9.5": - version: 4.9.5 - resolution: "typescript@npm:4.9.5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db - languageName: node - linkType: hard - "typescript@npm:5, typescript@npm:^5.1.3": version: 5.2.2 resolution: "typescript@npm:5.2.2" @@ -38500,13 +39523,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@4.9.5#~builtin": - version: 4.9.5 - resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587" +"typescript@npm:typescript@5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 1f8f3b6aaea19f0f67cba79057674ba580438a7db55057eb89cc06950483c5d632115c14077f6663ea76fd09fce3c190e6414bb98582ec80aa5a4eaf345d5b68 + checksum: 0d0ffb84f2cd072c3e164c79a2e5a1a1f4f168e84cb2882ff8967b92afe1def6c2a91f6838fb58b168428f9458c57a2ba06a6737711fdd87a256bbe83e9a217f languageName: node linkType: hard @@ -38530,6 +39553,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3Atypescript@5.9.3#~builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#~builtin::version=5.9.3&hash=14eedb" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 8bb8d86819ac86a498eada254cad7fb69c5f74778506c700c2a712daeaff21d3a6f51fd0d534fe16903cb010d1b74f89437a3d02d4d0ff5ca2ba9a4660de8497 + languageName: node + linkType: hard + "typewise-core@npm:^1.2, typewise-core@npm:^1.2.0": version: 1.2.0 resolution: "typewise-core@npm:1.2.0" @@ -38768,6 +39801,15 @@ __metadata: languageName: node linkType: hard +"undici@npm:^5.28.4": + version: 5.29.0 + resolution: "undici@npm:5.29.0" + dependencies: + "@fastify/busboy": ^2.0.0 + checksum: a25b5462c1b6ffb974f5ffc492ffd64146a9983aad0cbda6fde65e2b22f6f1acd43f09beacc66cc47624a113bd0c684ffc60366102b6a21b038fbfafb7d75195 + languageName: node + linkType: hard + "unenv@npm:^1.10.0": version: 1.10.0 resolution: "unenv@npm:1.10.0" @@ -39354,26 +40396,40 @@ __metadata: languageName: node linkType: hard -"vercel@npm:^37.1.1": - version: 37.1.1 - resolution: "vercel@npm:37.1.1" - dependencies: - "@vercel/build-utils": 8.3.7 - "@vercel/fun": 1.1.0 - "@vercel/go": 3.1.1 - "@vercel/hydrogen": 1.0.4 - "@vercel/next": 4.3.7 - "@vercel/node": 3.2.9 - "@vercel/python": 4.3.1 - "@vercel/redwood": 2.1.3 - "@vercel/remix-builder": 2.2.6 - "@vercel/ruby": 2.1.0 - "@vercel/static-build": 2.5.19 - chokidar: 3.3.1 +"vercel@npm:^50.15.1": + version: 50.15.1 + resolution: "vercel@npm:50.15.1" + dependencies: + "@vercel/backends": 0.0.32 + "@vercel/blob": 1.0.2 + "@vercel/build-utils": 13.3.5 + "@vercel/detect-agent": 1.1.0 + "@vercel/elysia": 0.1.35 + "@vercel/express": 0.1.44 + "@vercel/fastify": 0.1.38 + "@vercel/fun": 1.3.0 + "@vercel/go": 3.4.0 + "@vercel/h3": 0.1.44 + "@vercel/hono": 0.2.38 + "@vercel/hydrogen": 1.3.5 + "@vercel/koa": 0.1.18 + "@vercel/nestjs": 0.2.39 + "@vercel/next": 4.15.28 + "@vercel/node": 5.6.2 + "@vercel/python": 6.11.1 + "@vercel/redwood": 2.4.9 + "@vercel/remix-builder": 5.5.10 + "@vercel/ruby": 2.3.0 + "@vercel/rust": 1.0.5 + "@vercel/static-build": 2.8.36 + chokidar: 4.0.0 + esbuild: 0.27.0 + form-data: ^4.0.0 + jose: 5.9.6 bin: - vc: dist/index.js - vercel: dist/index.js - checksum: 8deb5ddc7babc4d32e065ed347de1562963b7a7a2e0f8c9788a4718e3eaa1e0ef13e5816e5beb49c979b4442840abb093066a135a2dbe802fe61df3dd7e4a49c + vc: dist/vc.js + vercel: dist/vc.js + checksum: 2f4a85325224e82d067acc3999d7593b8c101176abf12e04a2dd68214b5ac204010a3f69eeb220bf3fa8fdad4e9df179644789b97dc43483f1fb0b4462a5a7c3 languageName: node linkType: hard @@ -40879,15 +41935,6 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.2": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - "widest-line@npm:^3.1.0": version: 3.1.0 resolution: "widest-line@npm:3.1.0" @@ -41365,6 +42412,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: eba51182400b9f35b017daa7f419f434424410691bbc5de4f4240cc830fdef906b504424992700dc047f16b4d99100a6f8b8b11175c193f38008e9c96322b6a5 + languageName: node + linkType: hard + "yaml@npm:1.10.2, yaml@npm:^1.10.0, yaml@npm:^1.10.2": version: 1.10.2 resolution: "yaml@npm:1.10.2"