chore: merge develop

This commit is contained in:
zoruka 2022-12-17 09:03:08 -03:00
commit 4dd1442e9d
66 changed files with 3663 additions and 544 deletions

67
.github/workflows/test.yml vendored Normal file
View File

@ -0,0 +1,67 @@
name: Tests
on:
pull_request:
branches:
- main
- develop
jobs:
test-contracts:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
submodules: recursive
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
- name: Install Dependencies
run: yarn --ignore-scripts
- name: Audit
run: yarn audit --groups dependencies
- name: Compile
run: yarn compile
- name: Run Test
run: yarn test
test-ui:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ui
strategy:
matrix:
node-version: [18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install Dependencies
run: yarn --ignore-scripts
- name: Audit
run: yarn audit --groups dependencies
- name: Build
run: yarn build

View File

@ -0,0 +1,3 @@
{
"*.{js,json,sol,ts}": "prettier --write"
}

4
.husky/pre-commit Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx lint-staged --config .husky/lint-staged.config.json

4
.husky/pre-push Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
yarn test

View File

@ -8,7 +8,7 @@
{ {
"files": "*.sol", "files": "*.sol",
"options": { "options": {
"printWidth": 80, "printWidth": 120,
"tabWidth": 4, "tabWidth": 4,
"singleQuote": false, "singleQuote": false,
"bracketSpacing": false "bracketSpacing": false

View File

@ -5,10 +5,8 @@ pragma solidity ^0.8.7;
import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/access/AccessControl.sol";
abstract contract FleekAccessControl is AccessControl { abstract contract FleekAccessControl is AccessControl {
bytes32 public constant COLLECTION_OWNER_ROLE = bytes32 public constant COLLECTION_OWNER_ROLE = keccak256("COLLECTION_OWNER_ROLE");
keccak256("COLLECTION_OWNER_ROLE"); bytes32 public constant COLLECTION_CONTROLLER_ROLE = keccak256("COLLECTION_CONTROLLER_ROLE");
bytes32 public constant COLLECTION_CONTROLLER_ROLE =
keccak256("COLLECTION_CONTROLLER_ROLE");
constructor() { constructor() {
_setRoleAdmin(COLLECTION_OWNER_ROLE, DEFAULT_ADMIN_ROLE); _setRoleAdmin(COLLECTION_OWNER_ROLE, DEFAULT_ADMIN_ROLE);
@ -16,41 +14,28 @@ abstract contract FleekAccessControl is AccessControl {
} }
modifier requireCollectionOwner() { modifier requireCollectionOwner() {
require( require(hasRole(COLLECTION_OWNER_ROLE, msg.sender), "FleekAccessControl: must have collection owner role");
hasRole(COLLECTION_OWNER_ROLE, msg.sender),
"FleekAccessControl: must have collection owner role"
);
_; _;
} }
modifier requireCollectionController() { modifier requireCollectionController() {
require( require(
hasRole(COLLECTION_OWNER_ROLE, msg.sender) || hasRole(COLLECTION_OWNER_ROLE, msg.sender) || hasRole(COLLECTION_CONTROLLER_ROLE, msg.sender),
hasRole(COLLECTION_CONTROLLER_ROLE, msg.sender),
"FleekAccessControl: must have collection controller role" "FleekAccessControl: must have collection controller role"
); );
_; _;
} }
modifier requireTokenController(uint256 tokenId) { modifier requireTokenController(uint256 tokenId) {
require( require(hasRole(_tokenRole(tokenId, "CONTROLLER"), msg.sender), "FleekAccessControl: must have token role");
hasRole(_tokenRole(tokenId, "CONTROLLER"), msg.sender),
"FleekAccessControl: must have token role"
);
_; _;
} }
function isTokenController( function isTokenController(uint256 tokenId, address account) public view returns (bool) {
uint256 tokenId,
address account
) public view returns (bool) {
return hasRole(_tokenRole(tokenId, "CONTROLLER"), account); return hasRole(_tokenRole(tokenId, "CONTROLLER"), account);
} }
function _tokenRole( function _tokenRole(uint256 tokenId, string memory role) internal pure returns (bytes32) {
uint256 tokenId,
string memory role
) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("TOKEN_", role, tokenId)); return keccak256(abi.encodePacked("TOKEN_", role, tokenId));
} }

View File

@ -41,16 +41,10 @@ contract FleekERC721 is ERC721, FleekAccessControl {
Counters.Counter private _tokenIds; Counters.Counter private _tokenIds;
mapping(uint256 => App) private _apps; mapping(uint256 => App) private _apps;
constructor( constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {}
string memory _name,
string memory _symbol
) ERC721(_name, _symbol) {}
modifier requireTokenOwner(uint256 tokenId) { modifier requireTokenOwner(uint256 tokenId) {
require( require(msg.sender == ownerOf(tokenId), "FleekERC721: must be token owner");
msg.sender == ownerOf(tokenId),
"FleekERC721: must be token owner"
);
_; _;
} }
@ -92,7 +86,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
return tokenId; return tokenId;
} }
/** /**
* @dev Returns the token metadata associated with the `tokenId`. * @dev Returns the token metadata associated with the `tokenId`.
* *
* Returns a based64 encoded string value of the URI. * Returns a based64 encoded string value of the URI.
@ -102,13 +96,12 @@ contract FleekERC721 is ERC721, FleekAccessControl {
* - the tokenId must be minted and valid. * - the tokenId must be minted and valid.
* *
*/ */
function tokenURI( function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
uint256 tokenId
) public view virtual override returns (string memory) {
_requireMinted(tokenId); _requireMinted(tokenId);
address owner = ownerOf(tokenId); address owner = ownerOf(tokenId);
App storage app = _apps[tokenId]; App storage app = _apps[tokenId];
// prettier-ignore
bytes memory dataURI = abi.encodePacked( bytes memory dataURI = abi.encodePacked(
'{', '{',
'"name":"', app.name, '",', '"name":"', app.name, '",',
@ -128,7 +121,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
return string(abi.encodePacked(_baseURI(), Base64.encode((dataURI)))); return string(abi.encodePacked(_baseURI(), Base64.encode((dataURI))));
} }
/** /**
* @dev Adds a new address with the`tokenController` privileges to a previously minted `tokenId`. * @dev Adds a new address with the`tokenController` privileges to a previously minted `tokenId`.
* *
* May emit a {RoleGranted} event. * May emit a {RoleGranted} event.
@ -139,15 +132,12 @@ contract FleekERC721 is ERC721, FleekAccessControl {
* - the sender must have the `tokenOwner` role. * - the sender must have the `tokenOwner` role.
* *
*/ */
function addTokenController( function addTokenController(uint256 tokenId, address controller) public requireTokenOwner(tokenId) {
uint256 tokenId,
address controller
) public requireTokenOwner(tokenId) {
_requireMinted(tokenId); _requireMinted(tokenId);
_grantRole(_tokenRole(tokenId, "CONTROLLER"), controller); _grantRole(_tokenRole(tokenId, "CONTROLLER"), controller);
} }
/** /**
* @dev Strips an address from their `tokenController` privileges on a previously minted `tokenId`. * @dev Strips an address from their `tokenController` privileges on a previously minted `tokenId`.
* *
* May emit a {RoleRevoked} event. * May emit a {RoleRevoked} event.
@ -158,10 +148,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
* - the sender must have the `tokenOwner` role. * - the sender must have the `tokenOwner` role.
* *
*/ */
function removeTokenController( function removeTokenController(uint256 tokenId, address controller) public requireTokenOwner(tokenId) {
uint256 tokenId,
address controller
) public requireTokenOwner(tokenId) {
_requireMinted(tokenId); _requireMinted(tokenId);
_revokeRole(_tokenRole(tokenId, "CONTROLLER"), controller); _revokeRole(_tokenRole(tokenId, "CONTROLLER"), controller);
} }
@ -169,9 +156,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
/** /**
* @dev See {IERC165-supportsInterface}. * @dev See {IERC165-supportsInterface}.
*/ */
function supportsInterface( function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, AccessControl) returns (bool) {
bytes4 interfaceId
) public view virtual override(ERC721, AccessControl) returns (bool) {
return super.supportsInterface(interfaceId); return super.supportsInterface(interfaceId);
} }
@ -207,7 +192,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
return "data:application/json;base64,"; return "data:application/json;base64,";
} }
/** /**
* @dev Updates the `externalURL` metadata field of a minted `tokenId`. * @dev Updates the `externalURL` metadata field of a minted `tokenId`.
* *
* May emit a {NewTokenExternalURL} event. * May emit a {NewTokenExternalURL} event.
@ -227,7 +212,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
emit NewTokenExternalURL(tokenId, _tokenExternalURL, msg.sender); emit NewTokenExternalURL(tokenId, _tokenExternalURL, msg.sender);
} }
/** /**
* @dev Updates the `ENS` metadata field of a minted `tokenId`. * @dev Updates the `ENS` metadata field of a minted `tokenId`.
* *
* May emit a {NewTokenENS} event. * May emit a {NewTokenENS} event.
@ -238,16 +223,13 @@ contract FleekERC721 is ERC721, FleekAccessControl {
* - the sender must have the `tokenController` role. * - the sender must have the `tokenController` role.
* *
*/ */
function setTokenENS( function setTokenENS(uint256 tokenId, string memory _tokenENS) public virtual requireTokenController(tokenId) {
uint256 tokenId,
string memory _tokenENS
) public virtual requireTokenController(tokenId) {
_requireMinted(tokenId); _requireMinted(tokenId);
_apps[tokenId].ENS = _tokenENS; _apps[tokenId].ENS = _tokenENS;
emit NewTokenENS(tokenId, _tokenENS, msg.sender); emit NewTokenENS(tokenId, _tokenENS, msg.sender);
} }
/** /**
* @dev Updates the `name` metadata field of a minted `tokenId`. * @dev Updates the `name` metadata field of a minted `tokenId`.
* *
* May emit a {NewTokenName} event. * May emit a {NewTokenName} event.
@ -258,16 +240,13 @@ contract FleekERC721 is ERC721, FleekAccessControl {
* - the sender must have the `tokenController` role. * - the sender must have the `tokenController` role.
* *
*/ */
function setTokenName( function setTokenName(uint256 tokenId, string memory _tokenName) public virtual requireTokenController(tokenId) {
uint256 tokenId,
string memory _tokenName
) public virtual requireTokenController(tokenId) {
_requireMinted(tokenId); _requireMinted(tokenId);
_apps[tokenId].name = _tokenName; _apps[tokenId].name = _tokenName;
emit NewTokenName(tokenId, _tokenName, msg.sender); emit NewTokenName(tokenId, _tokenName, msg.sender);
} }
/** /**
* @dev Updates the `description` metadata field of a minted `tokenId`. * @dev Updates the `description` metadata field of a minted `tokenId`.
* *
* May emit a {NewTokenDescription} event. * May emit a {NewTokenDescription} event.
@ -287,7 +266,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
emit NewTokenDescription(tokenId, _tokenDescription, msg.sender); emit NewTokenDescription(tokenId, _tokenDescription, msg.sender);
} }
/** /**
* @dev Updates the `image` metadata field of a minted `tokenId`. * @dev Updates the `image` metadata field of a minted `tokenId`.
* *
* May emit a {NewTokenImage} event. * May emit a {NewTokenImage} event.
@ -298,16 +277,13 @@ contract FleekERC721 is ERC721, FleekAccessControl {
* - the sender must have the `tokenController` role. * - the sender must have the `tokenController` role.
* *
*/ */
function setTokenImage( function setTokenImage(uint256 tokenId, string memory _tokenImage) public virtual requireTokenController(tokenId) {
uint256 tokenId,
string memory _tokenImage
) public virtual requireTokenController(tokenId) {
_requireMinted(tokenId); _requireMinted(tokenId);
_apps[tokenId].image = _tokenImage; _apps[tokenId].image = _tokenImage;
emit NewTokenImage(tokenId, _tokenImage, msg.sender); emit NewTokenImage(tokenId, _tokenImage, msg.sender);
} }
/** /**
* @dev Adds a new build to a minted `tokenId`'s builds mapping. * @dev Adds a new build to a minted `tokenId`'s builds mapping.
* *
* May emit a {NewBuild} event. * May emit a {NewBuild} event.
@ -324,14 +300,11 @@ contract FleekERC721 is ERC721, FleekAccessControl {
string memory _gitRepository string memory _gitRepository
) public virtual requireTokenController(tokenId) { ) public virtual requireTokenController(tokenId) {
_requireMinted(tokenId); _requireMinted(tokenId);
_apps[tokenId].builds[++_apps[tokenId].currentBuild] = Build( _apps[tokenId].builds[++_apps[tokenId].currentBuild] = Build(_commitHash, _gitRepository);
_commitHash,
_gitRepository
);
emit NewBuild(tokenId, _commitHash, msg.sender); emit NewBuild(tokenId, _commitHash, msg.sender);
} }
/** /**
* @dev Burns a previously minted `tokenId`. * @dev Burns a previously minted `tokenId`.
* *
* May emit a {Transfer} event. * May emit a {Transfer} event.
@ -342,9 +315,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
* - the sender must have the `tokenOwner` role. * - the sender must have the `tokenOwner` role.
* *
*/ */
function burn( function burn(uint256 tokenId) public virtual requireTokenOwner(tokenId) {
uint256 tokenId
) public virtual requireTokenOwner(tokenId) {
super._burn(tokenId); super._burn(tokenId);
if (bytes(_apps[tokenId].externalURL).length != 0) { if (bytes(_apps[tokenId].externalURL).length != 0) {

File diff suppressed because one or more lines are too long

View File

@ -68,9 +68,7 @@
"storageLayout", "storageLayout",
"evm.gasEstimates" "evm.gasEstimates"
], ],
"": [ "": ["ast"]
"ast"
]
} }
}, },
"metadata": { "metadata": {

View File

@ -3,15 +3,19 @@
"version": "0.0.1", "version": "0.0.1",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"private": "false",
"scripts": { "scripts": {
"test": "hardhat test && forge test --via-ir", "test": "hardhat test && forge test --via-ir",
"test:foundry": "forge test --via-ir", "test:foundry": "forge test --via-ir",
"test:hardhat": "hardhat test", "test:hardhat": "hardhat test",
"format": "prettier --write \"./**/*.{js,ts,sol}\"", "format": "prettier --write \"./**/*.{js,json,sol,ts}\"",
"node:hardhat": "hardhat node --tags local", "node:hardhat": "hardhat node --tags local",
"deploy:local": "hardhat deploy --tags local", "deploy:local": "hardhat deploy --tags local",
"deploy:mumbai": "hardhat deploy --tags mumbai --network mumbai", "deploy:mumbai": "hardhat deploy --tags mumbai --network mumbai",
"compile": "hardhat compile" "compile": "hardhat compile",
"postinstall": "husky install",
"prepack": "pinst --disable",
"postpack": "pinst --enable"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -39,7 +43,9 @@
"hardhat-contract-sizer": "^2.6.1", "hardhat-contract-sizer": "^2.6.1",
"hardhat-deploy": "^0.11.15", "hardhat-deploy": "^0.11.15",
"hardhat-gas-reporter": "^1.0.9", "hardhat-gas-reporter": "^1.0.9",
"minimist": "^1.2.7", "husky": "^8.0.2",
"lint-staged": "^13.0.4",
"pinst": "^3.0.0",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"prettier-plugin-solidity": "^1.0.0", "prettier-plugin-solidity": "^1.0.0",
"solidity-coverage": "^0.8.2", "solidity-coverage": "^0.8.2",

View File

@ -14,7 +14,6 @@ describe('FleekERC721', () => {
externalUrl: 'https://fleek.co', externalUrl: 'https://fleek.co',
commitHash: 'b72e47171746b6a9e29b801af9cb655ecf4d665c', commitHash: 'b72e47171746b6a9e29b801af9cb655ecf4d665c',
gitRepository: 'https://github.com/fleekxyz/contracts', gitRepository: 'https://github.com/fleekxyz/contracts',
author: 'author',
}); });
const COLLECTION_PARAMS = Object.freeze({ const COLLECTION_PARAMS = Object.freeze({
@ -70,8 +69,7 @@ describe('FleekERC721', () => {
MINT_PARAMS.externalUrl, MINT_PARAMS.externalUrl,
MINT_PARAMS.ens, MINT_PARAMS.ens,
MINT_PARAMS.commitHash, MINT_PARAMS.commitHash,
MINT_PARAMS.gitRepository, MINT_PARAMS.gitRepository
MINT_PARAMS.author
); );
expect(response.value).to.be.instanceOf(ethers.BigNumber); expect(response.value).to.be.instanceOf(ethers.BigNumber);
@ -92,8 +90,7 @@ describe('FleekERC721', () => {
MINT_PARAMS.externalUrl, MINT_PARAMS.externalUrl,
MINT_PARAMS.ens, MINT_PARAMS.ens,
MINT_PARAMS.commitHash, MINT_PARAMS.commitHash,
MINT_PARAMS.gitRepository, MINT_PARAMS.gitRepository
MINT_PARAMS.author
) )
).to.be.revertedWith( ).to.be.revertedWith(
'FleekAccessControl: must have collection owner role' 'FleekAccessControl: must have collection owner role'
@ -117,8 +114,7 @@ describe('FleekERC721', () => {
MINT_PARAMS.externalUrl, MINT_PARAMS.externalUrl,
MINT_PARAMS.ens, MINT_PARAMS.ens,
MINT_PARAMS.commitHash, MINT_PARAMS.commitHash,
MINT_PARAMS.gitRepository, MINT_PARAMS.gitRepository
MINT_PARAMS.author
); );
tokenId = response.value.toNumber(); tokenId = response.value.toNumber();
@ -154,10 +150,6 @@ describe('FleekERC721', () => {
trait_type: 'Repository', trait_type: 'Repository',
value: MINT_PARAMS.gitRepository, value: MINT_PARAMS.gitRepository,
}, },
{
trait_type: 'Author',
value: MINT_PARAMS.author,
},
{ {
trait_type: 'Version', trait_type: 'Version',
value: '0', value: '0',

View File

@ -8,51 +8,38 @@ contract ContractBTest is Test {
uint256 testNumber; uint256 testNumber;
function setUp() public { function setUp() public {
fleekContract = new FleekERC721('Test Contract', 'FLKAPS'); fleekContract = new FleekERC721("Test Contract", "FLKAPS");
} }
function testName() public { function testName() public {
assertEq(fleekContract.name(), 'Test Contract')); assertEq(fleekContract.name(), "Test Contract");
} }
function testSymbol() public { function testSymbol() public {
assertEq(fleekContract.symbol(), 'FLKAPS')); assertEq(fleekContract.symbol(), "FLKAPS");
} }
function testMint() public { function testMint() public {}
}
function testTokenURI() public { function testTokenURI() public {}
}
function testBurn() public { function testBurn() public {}
}
function testSetTokenName() public { function testSetTokenName() public {}
}
function testSetTokenDescription() public { function testSetTokenDescription() public {}
}
function testSetTokenImage() public { function testSetTokenImage() public {}
}
function testSetTokenExternalURL() public { function testSetTokenExternalURL() public {}
}
function testSetTokenBuild() public { function testSetTokenBuild() public {}
}
function testUpgradeTokenBuild() public { function testUpgradeTokenBuild() public {}
}
function testSetTokenENS() public { function testSetTokenENS() public {}
}
function testAddTokenController() public { function testAddTokenController() public {}
}
function testRemoveTokenController() public {
}
function testRemoveTokenController() public {}
} }

View File

@ -11,9 +11,16 @@
"author": "Fleek", "author": "Fleek",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@chakra-ui/icons": "^2.0.13",
"@chakra-ui/react": "^2.4.2",
"@emotion/react": "^11.10.5",
"@emotion/styled": "^11.10.5",
"formik": "^2.2.9",
"framer-motion": "^7.6.17",
"path": "^0.12.7", "path": "^0.12.7",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0" "react-dom": "^18.2.0",
"react-router-dom": "^6.4.4"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^29.2.3", "@types/jest": "^29.2.3",
@ -28,7 +35,9 @@
"eslint-plugin-jest": "^27.1.6", "eslint-plugin-jest": "^27.1.6",
"eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.31.11", "eslint-plugin-react": "^7.31.11",
"ethers": "^5.7.2",
"prettier": "^2.8.0", "prettier": "^2.8.0",
"react-query": "^3.39.2",
"ts-loader": "^9.4.1", "ts-loader": "^9.4.1",
"typescript": "^4.9.3", "typescript": "^4.9.3",
"vite": "^3.2.4", "vite": "^3.2.4",

View File

@ -1,3 +0,0 @@
.main {
text-align: center;
}

View File

@ -1,10 +1,17 @@
import React from 'react'; import React from 'react';
import './App.css'; import { BrowserRouter, Route, Routes, Navigate } from 'react-router-dom';
import { Home, MintSite, MintedSiteDetail } from './views';
export const App = () => { export const App = () => {
return ( return (
<div className="main"> <BrowserRouter>
<h1>Welcome to Sites as NFTs by Fleek</h1> <Routes>
</div> <Route path="/mint-site" element={<MintSite />} />
<Route path="/home" element={<Home />} />
<Route path="/detail" element={<MintedSiteDetail />} />
<Route path="*" element={<Navigate to="/home" />} />
</Routes>
</BrowserRouter>
); );
}; };

View File

@ -0,0 +1,34 @@
import {
AccordionItem as AccordionItemChakra,
AccordionButton,
Box,
Heading,
AccordionIcon,
AccordionPanel,
AccordionPanelProps,
forwardRef,
} from '@chakra-ui/react';
import React from 'react';
type AccordionProps = AccordionPanelProps & {
children: React.ReactNode;
heading: string;
};
export const AccordionItem = forwardRef<AccordionProps, 'div'>(
({ children, heading, ...panelProps }, ref) => {
return (
<AccordionItemChakra>
<AccordionButton borderBottomWidth="1px">
<Box flex="1" textAlign="left">
<Heading size="md"> {heading}</Heading>
</Box>
<AccordionIcon />
</AccordionButton>
<AccordionPanel ref={ref} {...panelProps} pb={4} overflowY="scroll">
{children}
</AccordionPanel>
</AccordionItemChakra>
);
}
);

View File

@ -0,0 +1 @@
export * from './accordion-item';

View File

@ -0,0 +1,30 @@
import { SiteNFTDetail } from '@/types';
import { HStack } from '@chakra-ui/react';
import { CardAttributes } from '../card';
type AttributesDetailProps = {
owner: string;
attributes: SiteNFTDetail['attributes'];
tokendId: string;
};
export const AttributesDetail = ({
owner,
attributes,
tokendId,
}: AttributesDetailProps) => {
return (
<HStack shouldWrapChildren display="inline" spacing="0px">
<CardAttributes heading="Owner" info={owner} />
{attributes.map((attribute) => (
<CardAttributes
key={attribute.trait_type}
heading={attribute.trait_type}
info={attribute.value}
/>
))}
<CardAttributes heading="Token ID" info={tokendId} />
</HStack>
);
};

View File

@ -0,0 +1 @@
export * from './attributes-detail';

View File

@ -0,0 +1,23 @@
import { Card, CardBody } from '@chakra-ui/react';
import { TileInfo } from '../tile-info';
type CardAttributesProps = {
heading: string;
info: string;
};
export const CardAttributes = ({ heading, info }: CardAttributesProps) => (
<Card
mr="10px"
mb="5px"
direction={{ base: 'column', sm: 'row' }}
overflow="hidden"
variant="outline"
width="200px"
>
<CardBody width="200px">
<TileInfo size="sm" heading={heading} info={info} widthText={160} />
</CardBody>
</Card>
);

View File

@ -0,0 +1,101 @@
import { ImagePreview, TileInfo } from '@/components';
import { SiteNFTDetail } from '@/types';
import { useNavigate } from 'react-router-dom';
import {
Box,
Card,
CardBody,
Heading,
LayoutProps,
Link,
Stack,
} from '@chakra-ui/react';
import React from 'react';
interface CardSiteProps {
site: SiteNFTDetail;
tokenId?: string; // TODO add param and remove optional
}
type InfoContainerProps = {
heading: string;
info: React.ReactNode;
width: LayoutProps['width'];
};
const InfoContainer = ({ heading, info, width }: InfoContainerProps) => (
<TileInfo
size="xs"
direction="row"
mr="5px"
width={width}
heading={heading}
textAlignText="left"
info={info}
/>
);
export const SiteCard: React.FC<CardSiteProps> = ({ site, tokenId }) => {
const { name, owner, image, externalUrl } = site;
const navigate = useNavigate();
return (
<Card
borderColor="#f3f3f36b !important"
boxShadow="1px 10px 24px -2px #85848480"
backgroundColor="#c5c5c50a"
border="1px"
borderRadius="10px"
width="350px"
height="350px"
// TODO add token id param
onClick={() => {
navigate(`/detail?tokenId=${1}`);
}}
>
<CardBody width="350px" height="350px" paddingTop="10px">
<Heading size="md" textAlign="center" marginBottom="10px">
{name}
</Heading>
<Link
href={externalUrl}
isExternal
onClick={(e) => e.stopPropagation()}
>
<Box height="180px">
<ImagePreview
backgroundColor="#161616"
display="block"
marginLeft="auto"
marginRight="auto"
image={image}
objectFit="contain"
width="100%"
height="100%"
borderRadius="20px"
boxShadow="0px 12px 24px -5px #5a575761"
/>
</Box>
</Link>
<Stack mt="10px" spacing="3" overflowY="scroll">
<InfoContainer heading="Owner" info={owner} width="auto" />
{/* TODO add param */}
<InfoContainer heading="Token ID" info="1" width="100px" />
<InfoContainer
heading="External url"
width="100px"
info={
<Link
href={externalUrl}
isExternal
onClick={(e) => e.stopPropagation()}
>
<u>{externalUrl}</u>
</Link>
}
/>
</Stack>
</CardBody>
</Card>
);
};

View File

@ -0,0 +1,2 @@
export * from './card-attributes';
export * from './card-site';

View File

@ -0,0 +1,18 @@
import { ArrowBackIcon } from '@chakra-ui/icons';
import { IconButton } from '@chakra-ui/react';
import { Link } from 'react-router-dom';
export const HomeButton = () => {
return (
<IconButton
as={Link}
to="/home"
aria-label="back home"
icon={<ArrowBackIcon />}
variant="link"
size={'xl'}
textDecoration={'none'}
/>
);
};

View File

@ -0,0 +1 @@
export * from './home-button';

View File

@ -0,0 +1,22 @@
import { forwardRef, Image, ImageProps } from '@chakra-ui/react';
type ImagePreviewProps = ImageProps & {
image: string;
};
export const ImagePreview = forwardRef<ImagePreviewProps, 'img'>(
({ image, ...imageProps }, ref) => {
return (
<>
{/* TODO add fallback Image */}
<Image
ref={ref}
src={image}
{...imageProps}
fallbackSrc="https://via.placeholder.com/150"
/>
</>
);
}
);

View File

@ -0,0 +1 @@
export * from './image-preview';

View File

@ -0,0 +1,8 @@
export * from './loading';
export * from './home-button';
export * from './image-preview';
export * from './tile-info';
export * from './card';
export * from './accordion-item';
export * from './input-field-form';
export * from './attributes-detail';

View File

@ -0,0 +1 @@
export * from './input-field-form';

View File

@ -0,0 +1,25 @@
import {
FormControl,
FormControlProps,
FormErrorMessage,
FormLabel,
forwardRef,
Input,
} from '@chakra-ui/react';
import { Field } from 'formik';
type InputFieldFormProps = FormControlProps & {
label: string;
fieldName: string;
error?: string;
};
export const InputFieldForm = forwardRef<InputFieldFormProps, 'div'>(
({ label, fieldName, error, ...formControlProps }, ref) => (
<FormControl ref={ref} {...formControlProps}>
<FormLabel htmlFor={fieldName}>{label}</FormLabel>
<Field as={Input} name={fieldName} id={fieldName} type="text" />
{error && <FormErrorMessage>{error}</FormErrorMessage>}
</FormControl>
)
);

View File

@ -0,0 +1 @@
export * from './loading';

View File

@ -0,0 +1,16 @@
import { Flex, Spinner } from '@chakra-ui/react';
export const Loading = () => {
return (
<Flex justifyContent="center" height="80vh" alignItems="center">
<Spinner
thickness="3px"
speed="0.65s"
emptyColor="gray.200"
color="blue.500"
size="xl"
/>
</Flex>
);
};

View File

@ -0,0 +1 @@
export * from './tile-info';

View File

@ -0,0 +1,47 @@
import {
Flex,
forwardRef,
Heading,
HeadingProps,
Text,
} from '@chakra-ui/react';
type TileInfoProps = HeadingProps & {
heading: string;
info: React.ReactNode;
widthText?: number;
textAlignText?: 'center' | 'left';
direction?: 'column' | 'row';
alignItems?: string;
};
export const TileInfo = forwardRef<TileInfoProps, 'h2'>(
(
{
heading,
info,
widthText = 250,
textAlignText = 'center',
direction = 'column',
alignItems = 'center',
...headingProps
},
ref
) => (
<Flex direction={direction} alignItems={alignItems}>
<Heading ref={ref} {...headingProps}>
{heading}
</Heading>
<Text
width={widthText}
whiteSpace="nowrap"
overflow="hidden"
textOverflow="ellipsis"
textAlign={textAlignText}
>
{info}
</Text>
</Flex>
)
);

1
ui/src/hooks/index.ts Normal file
View File

@ -0,0 +1 @@
export * from './use-toast';

View File

@ -0,0 +1,8 @@
import { useToast as useToastChakra } from '@chakra-ui/react';
export const useToast = () => {
return useToastChakra({
duration: 3000,
isClosable: true,
});
};

View File

@ -1,21 +0,0 @@
:root {
font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 24px;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
}
body {
margin: 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}

View File

@ -1,7 +1,11 @@
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom/client'; import ReactDOM from 'react-dom/client';
import './index.css'; import { App } from './app';
import { App } from './App'; import { ChakraProvider } from '@chakra-ui/react';
import { theme } from './theme';
import { QueryClient, QueryClientProvider } from 'react-query';
const queryClient = new QueryClient();
const root = ReactDOM.createRoot( const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement document.getElementById('root') as HTMLElement
@ -9,7 +13,11 @@ const root = ReactDOM.createRoot(
root.render( root.render(
<React.StrictMode> <React.StrictMode>
<App /> <ChakraProvider theme={theme} resetCSS>
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
</ChakraProvider>
</React.StrictMode> </React.StrictMode>
); );

52
ui/src/mocks/detail.ts Normal file
View File

@ -0,0 +1,52 @@
const MINT_PARAMS = {
name: 'Fleek Test App',
description: 'Fleek Test App Description',
image: 'https://storageapi.fleek.co/fleek-team-bucket/site/fleek-logo.png',
ens: 'fleek.eth',
externalUrl: 'https://fleek.co',
commitHash: 'b72e47171746b6a9e29b801af9cb655ecf4d665c',
gitRepository: 'https://github.com/fleekxyz/contracts',
author: 'author',
};
const mockDetail = {
owner: '0x8f7b9e1b5f1f2c3c1f8b0b1b2e1b2f1f2c3c1f8b',
name: MINT_PARAMS.name,
description: MINT_PARAMS.description,
image: MINT_PARAMS.image,
external_url: MINT_PARAMS.externalUrl,
attributes: [
{
trait_type: 'ENS',
value: MINT_PARAMS.ens,
},
{
trait_type: 'Commit Hash',
value: MINT_PARAMS.commitHash,
},
{
trait_type: 'Repository',
value: MINT_PARAMS.gitRepository,
},
//As we're not showing this on the UI, we can remove it
// {
// trait_type: 'Author',
// value: MINT_PARAMS.author,
// },
// {
// trait_type: 'Version',
// value: '0',
// },
],
};
export const fetchSiteDetail = async (tokenId: string) => {
//TODO get site detail from api
return new Promise((resolved, reject) => {
setTimeout(() => {
resolved({
data: { ...mockDetail, externalUrl: mockDetail.external_url },
});
}, 2500);
});
};

3
ui/src/mocks/index.ts Normal file
View File

@ -0,0 +1,3 @@
export * from './mint-site';
export * from './detail';
export * from './list';

38
ui/src/mocks/list.ts Normal file
View File

@ -0,0 +1,38 @@
const listSites = [
{
tokenId: 1,
name: 'Fleek Test App',
owner: '0x1b5b3e8a7c245d0f2d2b2e29ba11c03ef086c06e',
description:
'Roronoa Zoro, also known as `Pirate Hunter` Zoro, is the combatant of the Straw Hat Pirates, one of their two swordsmen and one of the Senior Officers of the Straw Hat Grand Fleet. Formerly a bounty hunter, he is the second member of Luffy`s crew and the first to join it, doing so in the Romance Dawn Arc.',
image:
'https://i.seadn.io/gae/Z0t4BsFONk8ebFnTtog3ricAhEpW_ZPhyhxcjHpofCmslJUc5jQ0OjxUuJbU5-3XE0rJZFf6JVdPFZYqtqyg2ri4gAGRpfwkFcidpw4?auto=format&w=1000',
externalUrl: 'https://onepiece.fandom.com/wiki/Roronoa_Zoro',
ens: 'zoro.eth',
commitHash: '6ea6ad16c46ae85faced7e50555ff7368422f57',
githubRepo: 'https://github.com/fleekxyz/contracts',
},
{
tokenId: 2,
name: 'Fleek Test App',
owner: '0x1b5b3e8a7c245d0f2d2b2e29ba11c03ef086c06e',
description:
' Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
image: 'https://storageapi.fleek.co/fleek-team-bucket/site/fleek-logo.png',
externalUrl: 'https://fleek.co',
ens: 'fleek.eth',
commitHash: '6ea6ad16c46ae85faced7e50555ff7368422f57',
githubRepo: 'https://github.com/fleekxyz/contracts',
},
];
export const fetchMintedSites = async () => {
//TODO get minted sites from api
return new Promise((resolved) => {
setTimeout(() => {
resolved({
listSites,
});
}, 2500);
});
};

24
ui/src/mocks/mint-site.ts Normal file
View File

@ -0,0 +1,24 @@
import { SiteNFT } from '@/types';
export const mintSiteNFT = async (props: SiteNFT) => {
const { name, description, owner, externalUrl, ens, commitHash, repo } =
props;
return new Promise((resolved, rejected) => {
setTimeout(() => {
// returning data of the site for now
// just leave rejected for testing purposes
resolved({
status: 'success',
data: {
name,
description,
owner,
externalUrl,
ens,
commitHash,
repo,
},
});
}, 1000);
});
};

22
ui/src/theme/index.ts Normal file
View File

@ -0,0 +1,22 @@
import { extendTheme } from '@chakra-ui/react';
const appTheme = {
styles: {
global: {
body: {
color: 'rgba(255, 255, 255)',
bg: '#161616',
margin: '50px',
},
},
},
fonts: {
heading: 'Nunito Sans,Helvetica,Arial,Lucida,sans-serif',
body: 'Nunito Sans,Helvetica,Arial,Lucida,sans-serif',
},
sizes: {
modalHeight: '345px',
},
};
export const theme = extendTheme(appTheme);

1
ui/src/types/index.ts Normal file
View File

@ -0,0 +1 @@
export * from './mint-site';

19
ui/src/types/mint-site.ts Normal file
View File

@ -0,0 +1,19 @@
export type SiteNFT = {
name: string;
description: string;
owner: string;
externalUrl: string;
image: string;
ens?: string;
commitHash: string;
repo: string;
};
export type SiteNFTDetail = Omit<SiteNFT, 'ens' | 'commitHash' | 'repo'> & {
attributes: [
{
trait_type: string;
value: string;
}
];
};

8
ui/src/utils/format.ts Normal file
View File

@ -0,0 +1,8 @@
export const getRepoAndCommit = (url: string) => {
//TODO validate is a github url
url = url.replace('/commit', '');
const lastIndexSlash = url.lastIndexOf('/');
const repo = url.substring(0, lastIndexSlash + 1).slice(0, lastIndexSlash);
const commit_hash = url.substring(lastIndexSlash + 1, url.length);
return { repo, commit_hash };
};

2
ui/src/utils/index.ts Normal file
View File

@ -0,0 +1,2 @@
export * from './format';
export * from './validation';

View File

@ -0,0 +1,10 @@
export const isValidUrl = (url: string) => {
const regex =
/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
return regex.test(url);
};
export const isValidImageUrl = (url: string) => {
const regex = /^https?:\/\/.+\.(jpg|jpeg|png|gif|svg)$/;
return regex.test(url);
};

View File

@ -0,0 +1,125 @@
import { useSearchParams } from 'react-router-dom';
import { useQuery } from 'react-query';
import {
Accordion,
Box,
Card,
CardBody,
Flex,
Heading,
Link,
VStack,
} from '@chakra-ui/react';
import {
HomeButton,
ImagePreview,
AccordionItem,
Loading,
AttributesDetail,
} from '@/components';
import { ExternalLinkIcon } from '@chakra-ui/icons';
import { fetchSiteDetail } from '@/mocks';
import { ErrorScreen } from '@/views';
import { SiteNFTDetail } from '@/types';
export const MintedSiteDetail = () => {
const [searchParams] = useSearchParams();
const tokenIdParam = searchParams.get('tokenId');
//TODO handle response type
const { data, status } = useQuery('fetchDetail', () =>
fetchSiteDetail(tokenIdParam as string)
);
if (status === 'loading') {
return <Loading />;
}
if (status === 'error') {
return <ErrorScreen />;
}
const { owner, name, description, image, externalUrl, attributes } =
data.data as SiteNFTDetail;
return (
<>
<Flex width="full" align="center" justifyContent="center">
<Box width={{ base: '100%' }}>
<HomeButton />
<Box
flexDirection="row"
display="flex"
justifyContent="space-evenly"
mt={10}
>
<Box mr={5}>
<Box
display="flex"
flexDirection="row"
alignItems="flex-end"
mb={5}
>
<Heading mr={5}>{name}</Heading>
</Box>
<Card backgroundColor="transparent" border="1px">
<CardBody padding="1px 8px 10px 8px">
<Accordion defaultIndex={[0, 1]} allowMultiple width="45vw">
<AccordionItem
heading="Description"
minH={120}
maxH="auto"
children={<p>{description}</p>}
/>
<AccordionItem
heading="Attributes"
children={
<AttributesDetail
owner={owner}
attributes={attributes}
tokendId={tokenIdParam as string}
/>
}
padding="16px"
/>
</Accordion>
<Box ml={5} mt={2}>
<Link href={externalUrl} isExternal>
Visit site <ExternalLinkIcon mx="2px" />
</Link>
</Box>
</CardBody>
</Card>
</Box>
<VStack alignItems="flex-start">
<Box
border="1px"
width="-webkit-fill-available"
padding="5px 10px"
borderTopRadius={10}
>
<Heading size="md">Preview</Heading>
</Box>
<Box
mt="0px !important"
boxSize="md"
border="1px"
padding={10}
borderRadius={20}
borderTopRadius={0}
boxShadow="12px 10px 14px 6px #868686d1"
>
<ImagePreview
image={image}
width="auto"
height="auto"
maxW="100%"
maxH="100%"
/>
</Box>
</VStack>
</Box>
</Box>
</Flex>
</>
);
};

View File

@ -0,0 +1 @@
export * from './detail';

View File

@ -0,0 +1,9 @@
import { Flex, Heading } from '@chakra-ui/react';
export const ErrorScreen = () => {
return (
<Flex justifyContent="center" height="80vh" alignItems="center">
<Heading size="md">Something went wrong</Heading>
</Flex>
);
};

View File

@ -0,0 +1 @@
export * from './error-screen';

View File

@ -0,0 +1,18 @@
import React from 'react';
import { Heading, Button } from '@chakra-ui/react';
import { Link } from 'react-router-dom';
import { Flex } from '@chakra-ui/react';
import { ListSites } from './list';
export const Home = () => {
return (
<Flex flexDirection="column" alignItems="center">
<Heading marginTop="80px">Welcome to Sites as NFTs by Fleek</Heading>
<Button as={Link} to="/mint-site" mt="20px" mb="50px">
Mint your site
</Button>
<ListSites />
</Flex>
);
};

View File

@ -0,0 +1 @@
export * from './home';

View File

@ -0,0 +1,31 @@
import React from 'react';
import { Loading } from '@/components';
import { fetchMintedSites } from '@/mocks';
import { SiteNFTDetails } from '@/types';
import { Grid, GridItem } from '@chakra-ui/react';
import { useQuery } from 'react-query';
import { SiteCard } from '@/components';
export const ListSites = () => {
const { data, isLoading } = useQuery<Array<SiteNFTDetails>, Error>(
'fetchSites',
fetchMintedSites
);
if (isLoading) return <Loading />;
return (
<Grid
templateColumns={{ base: 'repeat(4, 1fr)', md: 'repeat(5, 1fr)' }}
gap={10}
mt="40px"
>
{data &&
data.listSites.map((site: SiteNFTDetails) => (
<GridItem key={site.tokenId}>
<SiteCard site={site} />
</GridItem>
))}
</Grid>
);
};

4
ui/src/views/index.ts Normal file
View File

@ -0,0 +1,4 @@
export * from './home';
export * from './mint-site';
export * from './detail';
export * from './error-screen';

View File

@ -0,0 +1,2 @@
export * from './mint-site';
export * from './mint-site.utils';

View File

@ -0,0 +1,215 @@
import { useCallback } from 'react';
import {
Heading,
Flex,
Box,
FormControl,
FormLabel,
Button,
FormErrorMessage,
IconButton,
Textarea,
Grid,
GridItem,
} from '@chakra-ui/react';
import { Formik, Field } from 'formik';
import { ArrowBackIcon } from '@chakra-ui/icons';
import { Link } from 'react-router-dom';
import { mintSiteNFT } from '@/mocks';
import { getRepoAndCommit } from '@/utils';
import { validateFields } from './mint-site.utils';
import { InputFieldForm } from '@/components';
import { useToast } from '@/hooks';
interface FormValues {
name: string;
description: string;
githubCommit: string;
ownerAddress: string;
externalUrl: string;
image: string;
ens?: string;
}
const initialValues = {
name: '',
description: '',
githubCommit: '',
ownerAddress: '',
externalUrl: '',
image: '',
ens: '',
} as FormValues;
export const MintSite = () => {
const setToastInfo = useToast();
const handleSubmitForm = useCallback(async (values: FormValues) => {
const {
name,
description,
githubCommit,
ownerAddress,
externalUrl,
image,
ens,
} = values;
const { repo, commit_hash } = getRepoAndCommit(githubCommit);
try {
await mintSiteNFT({
name,
description,
owner: ownerAddress,
externalUrl,
image,
ens,
commitHash: commit_hash,
repo,
});
//TODO connect with the integration
setToastInfo({
title: 'Success!',
description: 'Your site has been minted.',
status: 'success',
});
} catch (err) {
setToastInfo({
title: 'Error!',
description:
'We had an error while minting your site. Please try again later',
status: 'error',
});
}
}, []);
return (
<>
<Flex width="full" align="center" justifyContent="center" mt="50px">
<Box width={{ base: '100%', md: '80%' }}>
<IconButton
as={Link}
to="/home"
aria-label="back home"
icon={<ArrowBackIcon />}
variant="link"
size={'xl'}
textDecoration={'none'}
/>
<Box textAlign="center" mt={2}>
<Heading>Mint your Site</Heading>
</Box>
<Box my={4} textAlign="left">
<Formik
validate={validateFields}
initialValues={initialValues}
onSubmit={handleSubmitForm}
>
{({ values, touched, handleSubmit, isSubmitting, errors }) => (
<form onSubmit={handleSubmit}>
<Box
display="flex"
flexDirection={{ base: 'column', md: 'row' }}
>
<InputFieldForm
label="Name"
fieldName="name"
mr={5}
error={errors.name}
isInvalid={!!errors.name && touched.name}
isRequired
/>
<InputFieldForm
label="Owner address"
fieldName="ownerAddress"
error={errors.ownerAddress}
isInvalid={!!errors.ownerAddress && touched.ownerAddress}
isRequired
/>
</Box>
<FormControl
mt={6}
isRequired
isInvalid={!!errors.description && touched.description}
>
<FormLabel htmlFor="description">Description</FormLabel>
<Field as={Textarea} name="description" id="description" />
{errors.description && (
<FormErrorMessage>{errors.description}</FormErrorMessage>
)}
</FormControl>
<Box
display="flex"
flexDirection={{ base: 'column', md: 'row' }}
mt={6}
>
<InputFieldForm
label="Image (IPFS Link)"
fieldName="image"
mr={5}
error={errors.image}
isInvalid={!!errors.image && touched.image}
isRequired
/>
<InputFieldForm
label="External url"
fieldName="externalUrl"
error={errors.externalUrl}
isInvalid={!!errors.externalUrl && touched.externalUrl}
isRequired
/>
</Box>
<Grid
templateColumns={{
md: 'repeat(3, 1fr)',
}}
gap={4}
mt={6}
>
<GridItem colSpan={2}>
<InputFieldForm
label="Github commit url"
fieldName="githubCommit"
mr={5}
error={errors.githubCommit}
isInvalid={
!!errors.githubCommit && touched.githubCommit
}
isRequired
/>
</GridItem>
<GridItem colSpan={{ base: 2, md: 1 }}>
<InputFieldForm label="ENS" fieldName="ens" />
</GridItem>
</Grid>
<Button
colorScheme="blue"
backgroundColor="#1d4ed8"
width="full"
mt={4}
type="submit"
isLoading={isSubmitting}
loadingText="Minting..."
disabled={
isSubmitting ||
!values.name ||
!values.description ||
!values.githubCommit ||
!values.ownerAddress ||
!values.image ||
!values.externalUrl
}
>
Mint
</Button>
</form>
)}
</Formik>
</Box>
</Box>
</Flex>
</>
);
};

View File

@ -0,0 +1,35 @@
import { isValidImageUrl, isValidUrl } from '@/utils';
import { ethers } from 'ethers';
import { FormikValues } from 'formik';
export const validateFields = (values: FormikValues) => {
const errors: FormikValues = {};
if (!values.name) {
errors.name = 'Name cannot be empty';
}
if (!values.description) {
errors.description = 'Description cannot be empty';
}
if (!values.githubCommit) {
errors.githubCommit = 'Github commit cannot be empty';
} else if (!isValidUrl(values.githubCommit)) {
errors.githubCommit = 'Github commit is not a valid url';
}
if (!values.ownerAddress) {
errors.ownerAddress = 'Owner address cannot be empty';
} else if (!ethers.utils.isAddress(values.ownerAddress)) {
errors.ownerAddress = 'Owner address is not a valid address';
}
if (!values.externalUrl) {
errors.externalUrl = 'External url cannot be empty';
} else if (!isValidUrl(values.externalUrl)) {
errors.externalUrl = 'External url is not a valid url';
}
if (!values.image) {
errors.image = 'Image cannot be empty';
} else if (!isValidImageUrl(values.image)) {
errors.image = 'Image url is not a valid url';
}
//TODO check if ENS is a valid ens name
return errors;
};

View File

@ -23,4 +23,3 @@
}, },
"include": ["./src", "./*.ts"] "include": ["./src", "./*.ts"]
} }

View File

@ -6,4 +6,3 @@ import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({ export default defineConfig({
plugins: [react(), tsconfigPaths()], plugins: [react(), tsconfigPaths()],
}); });

File diff suppressed because it is too large Load Diff

385
yarn.lock
View File

@ -934,9 +934,9 @@
integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==
"@types/node@*": "@types/node@*":
version "18.11.11" version "18.11.15"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.15.tgz#de0e1fbd2b22b962d45971431e2ae696643d3f5d"
integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== integrity sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw==
"@types/node@^10.0.3": "@types/node@^10.0.3":
version "10.17.60" version "10.17.60"
@ -1124,6 +1124,11 @@ ansi-regex@^5.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
ansi-regex@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
ansi-styles@^3.2.0, ansi-styles@^3.2.1: ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1" version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@ -1138,6 +1143,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
dependencies: dependencies:
color-convert "^2.0.1" color-convert "^2.0.1"
ansi-styles@^6.0.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
antlr4ts@^0.5.0-alpha.4: antlr4ts@^0.5.0-alpha.4:
version "0.5.0-alpha.4" version "0.5.0-alpha.4"
resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a"
@ -1723,6 +1733,13 @@ clean-stack@^2.0.0:
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
cli-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
dependencies:
restore-cursor "^3.1.0"
cli-table3@^0.5.0: cli-table3@^0.5.0:
version "0.5.1" version "0.5.1"
resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
@ -1742,6 +1759,22 @@ cli-table3@^0.6.0:
optionalDependencies: optionalDependencies:
"@colors/colors" "1.5.0" "@colors/colors" "1.5.0"
cli-truncate@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
dependencies:
slice-ansi "^3.0.0"
string-width "^4.2.0"
cli-truncate@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389"
integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==
dependencies:
slice-ansi "^5.0.0"
string-width "^5.0.0"
cliui@^5.0.0: cliui@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
@ -1791,6 +1824,11 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
colorette@^2.0.19:
version "2.0.19"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
colors@1.4.0, colors@^1.1.2: colors@1.4.0, colors@^1.1.2:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
@ -1813,6 +1851,11 @@ commander@3.0.2:
resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e"
integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==
commander@^9.4.1:
version "9.4.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd"
integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==
concat-map@0.0.1: concat-map@0.0.1:
version "0.0.1" version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@ -1930,6 +1973,15 @@ cross-fetch@^3.1.4:
dependencies: dependencies:
node-fetch "2.6.7" node-fetch "2.6.7"
cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
which "^2.0.1"
"crypt@>= 0.0.1": "crypt@>= 0.0.1":
version "0.0.2" version "0.0.2"
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
@ -1986,7 +2038,7 @@ debug@3.2.6:
dependencies: dependencies:
ms "^2.1.1" ms "^2.1.1"
debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
version "4.3.4" version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@ -2126,6 +2178,11 @@ dotenv@^16.0.2:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
eastasianwidth@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
ecc-jsbn@~0.1.1: ecc-jsbn@~0.1.1:
version "0.1.2" version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@ -2167,6 +2224,11 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
emoji-regex@^9.2.2:
version "9.2.2"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
encode-utf8@^1.0.2: encode-utf8@^1.0.2:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda"
@ -2197,9 +2259,9 @@ env-paths@^2.2.0:
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
es-abstract@^1.19.0, es-abstract@^1.20.4: es-abstract@^1.19.0, es-abstract@^1.20.4:
version "1.20.4" version "1.20.5"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2"
integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==
dependencies: dependencies:
call-bind "^1.0.2" call-bind "^1.0.2"
es-to-primitive "^1.2.1" es-to-primitive "^1.2.1"
@ -2207,6 +2269,7 @@ es-abstract@^1.19.0, es-abstract@^1.20.4:
function.prototype.name "^1.1.5" function.prototype.name "^1.1.5"
get-intrinsic "^1.1.3" get-intrinsic "^1.1.3"
get-symbol-description "^1.0.0" get-symbol-description "^1.0.0"
gopd "^1.0.1"
has "^1.0.3" has "^1.0.3"
has-property-descriptors "^1.0.0" has-property-descriptors "^1.0.0"
has-symbols "^1.0.3" has-symbols "^1.0.3"
@ -2222,8 +2285,8 @@ es-abstract@^1.19.0, es-abstract@^1.20.4:
object.assign "^4.1.4" object.assign "^4.1.4"
regexp.prototype.flags "^1.4.3" regexp.prototype.flags "^1.4.3"
safe-regex-test "^1.0.0" safe-regex-test "^1.0.0"
string.prototype.trimend "^1.0.5" string.prototype.trimend "^1.0.6"
string.prototype.trimstart "^1.0.5" string.prototype.trimstart "^1.0.6"
unbox-primitive "^1.0.2" unbox-primitive "^1.0.2"
es-array-method-boxes-properly@^1.0.0: es-array-method-boxes-properly@^1.0.0:
@ -2533,6 +2596,21 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
md5.js "^1.3.4" md5.js "^1.3.4"
safe-buffer "^5.1.1" safe-buffer "^5.1.1"
execa@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20"
integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==
dependencies:
cross-spawn "^7.0.3"
get-stream "^6.0.1"
human-signals "^3.0.1"
is-stream "^3.0.0"
merge-stream "^2.0.0"
npm-run-path "^5.1.0"
onetime "^6.0.0"
signal-exit "^3.0.7"
strip-final-newline "^3.0.0"
express@^4.14.0: express@^4.14.0:
version "4.18.2" version "4.18.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
@ -2864,7 +2942,7 @@ get-func-name@^2.0.0:
resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==
get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
@ -3032,9 +3110,9 @@ got@12.1.0:
responselike "^2.0.0" responselike "^2.0.0"
got@^11.8.5: got@^11.8.5:
version "11.8.5" version "11.8.6"
resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
dependencies: dependencies:
"@sindresorhus/is" "^4.0.0" "@sindresorhus/is" "^4.0.0"
"@szmarczak/http-timer" "^4.0.5" "@szmarczak/http-timer" "^4.0.5"
@ -3120,9 +3198,9 @@ hardhat-gas-reporter@^1.0.9:
sha1 "^1.1.1" sha1 "^1.1.1"
hardhat@^2.11.2: hardhat@^2.11.2:
version "2.12.3" version "2.12.4"
resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.3.tgz#1824c5d5e2bcc61601bee429053ccecb4dbc0adb" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.4.tgz#e539ba58bee9ba1a1ced823bfdcec0b3c5a3e70f"
integrity sha512-qxOvRNgQnLqRFssn5f8VP5KN3caytShU0HNeKxmPVK1Ix/0xDVhIC7JOLxG69DjOihUfmxmjqspsHbZvFj6EhQ== integrity sha512-rc9S2U/4M+77LxW1Kg7oqMMmjl81tzn5rNFARhbXKUA1am/nhfMJEujOjuKvt+ZGMiZ11PYSe8gyIpB/aRNDgw==
dependencies: dependencies:
"@ethersproject/abi" "^5.1.2" "@ethersproject/abi" "^5.1.2"
"@metamask/eth-sig-util" "^4.0.0" "@metamask/eth-sig-util" "^4.0.0"
@ -3336,6 +3414,16 @@ https-proxy-agent@^5.0.0:
agent-base "6" agent-base "6"
debug "4" debug "4"
human-signals@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5"
integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==
husky@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.2.tgz#5816a60db02650f1f22c8b69b928fd6bcd77a236"
integrity sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==
iconv-lite@0.4.24: iconv-lite@0.4.24:
version "0.4.24" version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -3394,11 +3482,11 @@ ini@^1.3.5:
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
internal-slot@^1.0.3: internal-slot@^1.0.3:
version "1.0.3" version "1.0.4"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3"
integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==
dependencies: dependencies:
get-intrinsic "^1.1.0" get-intrinsic "^1.1.3"
has "^1.0.3" has "^1.0.3"
side-channel "^1.0.4" side-channel "^1.0.4"
@ -3488,6 +3576,11 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
is-fullwidth-code-point@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
is-function@^1.0.1: is-function@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
@ -3549,6 +3642,11 @@ is-shared-array-buffer@^1.0.2:
dependencies: dependencies:
call-bind "^1.0.2" call-bind "^1.0.2"
is-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
is-string@^1.0.5, is-string@^1.0.7: is-string@^1.0.5, is-string@^1.0.7:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
@ -3764,6 +3862,44 @@ levn@~0.3.0:
prelude-ls "~1.1.2" prelude-ls "~1.1.2"
type-check "~0.3.2" type-check "~0.3.2"
lilconfig@2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4"
integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==
lint-staged@^13.0.4:
version "13.1.0"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.1.0.tgz#d4c61aec939e789e489fa51987ec5207b50fd37e"
integrity sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==
dependencies:
cli-truncate "^3.1.0"
colorette "^2.0.19"
commander "^9.4.1"
debug "^4.3.4"
execa "^6.1.0"
lilconfig "2.0.6"
listr2 "^5.0.5"
micromatch "^4.0.5"
normalize-path "^3.0.0"
object-inspect "^1.12.2"
pidtree "^0.6.0"
string-argv "^0.3.1"
yaml "^2.1.3"
listr2@^5.0.5:
version "5.0.6"
resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.6.tgz#3c61153383869ffaad08a8908d63edfde481dff8"
integrity sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==
dependencies:
cli-truncate "^2.1.0"
colorette "^2.0.19"
log-update "^4.0.0"
p-map "^4.0.0"
rfdc "^1.3.0"
rxjs "^7.5.7"
through "^2.3.8"
wrap-ansi "^7.0.0"
locate-path@^2.0.0: locate-path@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@ -3812,6 +3948,16 @@ log-symbols@4.1.0:
chalk "^4.1.0" chalk "^4.1.0"
is-unicode-supported "^0.1.0" is-unicode-supported "^0.1.0"
log-update@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
dependencies:
ansi-escapes "^4.3.0"
cli-cursor "^3.1.0"
slice-ansi "^4.0.0"
wrap-ansi "^6.2.0"
loupe@^2.3.1: loupe@^2.3.1:
version "2.3.6" version "2.3.6"
resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53"
@ -3901,6 +4047,11 @@ merge-descriptors@1.0.1:
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
merge2@^1.2.3, merge2@^1.3.0: merge2@^1.2.3, merge2@^1.3.0:
version "1.4.1" version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
@ -3911,7 +4062,7 @@ methods@~1.1.2:
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
micromatch@^4.0.4: micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.5" version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
@ -3944,6 +4095,16 @@ mime@1.6.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
mimic-fn@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
mimic-response@^1.0.0: mimic-response@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
@ -3992,7 +4153,7 @@ minimatch@5.0.1:
dependencies: dependencies:
brace-expansion "^2.0.1" brace-expansion "^2.0.1"
minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: minimist@^1.2.5, minimist@^1.2.6:
version "1.2.7" version "1.2.7"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
@ -4076,9 +4237,9 @@ mocha@7.1.2:
yargs-unparser "1.6.0" yargs-unparser "1.6.0"
mocha@^10.0.0: mocha@^10.0.0:
version "10.1.0" version "10.2.0"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8"
integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
dependencies: dependencies:
ansi-colors "4.1.1" ansi-colors "4.1.1"
browser-stdout "1.3.1" browser-stdout "1.3.1"
@ -4295,6 +4456,13 @@ normalize-url@^6.0.1:
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
npm-run-path@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
dependencies:
path-key "^4.0.0"
number-to-bn@1.7.0: number-to-bn@1.7.0:
version "1.7.0" version "1.7.0"
resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0"
@ -4379,6 +4547,20 @@ once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies: dependencies:
wrappy "1" wrappy "1"
onetime@^5.1.0:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
dependencies:
mimic-fn "^2.1.0"
onetime@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
dependencies:
mimic-fn "^4.0.0"
optionator@^0.8.1: optionator@^0.8.1:
version "0.8.3" version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@ -4511,6 +4693,16 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
path-key@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
path-parse@^1.0.6, path-parse@^1.0.7: path-parse@^1.0.6, path-parse@^1.0.7:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
@ -4552,20 +4744,30 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pidtree@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
pify@^4.0.1: pify@^4.0.1:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
pinst@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pinst/-/pinst-3.0.0.tgz#80dec0a85f1f993c6084172020f3dbf512897eec"
integrity sha512-cengSmBxtCyaJqtRSvJorIIZXMXg+lJ3sIljGmtBGUVonMnMsVJbnzl6jGN1HkOWwxNuJynCJ2hXxxqCQrFDdw==
prelude-ls@~1.1.2: prelude-ls@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
prettier-plugin-solidity@^1.0.0: prettier-plugin-solidity@^1.0.0:
version "1.0.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0.tgz#5b23f48cc9c28a1246c6dd89af117234b813f48b" resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.0.tgz#a417d104b48a43af3adbfb96b65dbce34fd21429"
integrity sha512-gRJCeZ7imbWtNYN2SudjJoPmka5r6jcd2cSTV6FC3pVCtY6LFZbeQQjpKufUEp88hXBAAnkOTOh7TA5xwj9M3A== integrity sha512-5gq0T49ifvXH/6x1STuKyWjTUgi6ICoV65yNtKlg/vZEvocFtSpByJOJICBfqPwNsnv4vhhWIqkLGSUJmWum2w==
dependencies: dependencies:
"@solidity-parser/parser" "^0.14.5" "@solidity-parser/parser" "^0.14.5"
emoji-regex "^10.2.1" emoji-regex "^10.2.1"
@ -4868,11 +5070,24 @@ responselike@^2.0.0:
dependencies: dependencies:
lowercase-keys "^2.0.0" lowercase-keys "^2.0.0"
restore-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
dependencies:
onetime "^5.1.0"
signal-exit "^3.0.2"
reusify@^1.0.4: reusify@^1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rfdc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
rimraf@^2.2.8: rimraf@^2.2.8:
version "2.7.1" version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
@ -4914,6 +5129,13 @@ rustbn.js@~0.2.0:
resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca"
integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==
rxjs@^7.5.7:
version "7.6.0"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.6.0.tgz#361da5362b6ddaa691a2de0b4f2d32028f1eb5a2"
integrity sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==
dependencies:
tslib "^2.1.0"
safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
version "5.2.1" version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@ -5077,6 +5299,18 @@ sha1@^1.1.1:
charenc ">= 0.0.1" charenc ">= 0.0.1"
crypt ">= 0.0.1" crypt ">= 0.0.1"
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
dependencies:
shebang-regex "^3.0.0"
shebang-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
shelljs@^0.8.3: shelljs@^0.8.3:
version "0.8.5" version "0.8.5"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
@ -5095,6 +5329,11 @@ side-channel@^1.0.4:
get-intrinsic "^1.0.2" get-intrinsic "^1.0.2"
object-inspect "^1.9.0" object-inspect "^1.9.0"
signal-exit@^3.0.2, signal-exit@^3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
simple-concat@^1.0.0: simple-concat@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
@ -5114,6 +5353,15 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
slice-ansi@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
dependencies:
ansi-styles "^4.0.0"
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
slice-ansi@^4.0.0: slice-ansi@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
@ -5123,6 +5371,14 @@ slice-ansi@^4.0.0:
astral-regex "^2.0.0" astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0" is-fullwidth-code-point "^3.0.0"
slice-ansi@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
dependencies:
ansi-styles "^6.0.0"
is-fullwidth-code-point "^4.0.0"
solc@0.7.3: solc@0.7.3:
version "0.7.3" version "0.7.3"
resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a"
@ -5236,6 +5492,11 @@ strict-uri-encode@^1.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==
string-argv@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
"string-width@^1.0.2 || 2", string-width@^2.1.1: "string-width@^1.0.2 || 2", string-width@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
@ -5262,7 +5523,16 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
is-fullwidth-code-point "^3.0.0" is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1" strip-ansi "^6.0.1"
string.prototype.trimend@^1.0.5: string-width@^5.0.0:
version "5.1.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
dependencies:
eastasianwidth "^0.2.0"
emoji-regex "^9.2.2"
strip-ansi "^7.0.1"
string.prototype.trimend@^1.0.6:
version "1.0.6" version "1.0.6"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
@ -5271,7 +5541,7 @@ string.prototype.trimend@^1.0.5:
define-properties "^1.1.4" define-properties "^1.1.4"
es-abstract "^1.20.4" es-abstract "^1.20.4"
string.prototype.trimstart@^1.0.5: string.prototype.trimstart@^1.0.6:
version "1.0.6" version "1.0.6"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
@ -5315,6 +5585,18 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies: dependencies:
ansi-regex "^5.0.1" ansi-regex "^5.0.1"
strip-ansi@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2"
integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
dependencies:
ansi-regex "^6.0.1"
strip-final-newline@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
strip-hex-prefix@1.0.0: strip-hex-prefix@1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f"
@ -5446,6 +5728,11 @@ then-request@^6.0.0:
promise "^8.0.0" promise "^8.0.0"
qs "^6.4.0" qs "^6.4.0"
through@^2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
timed-out@^4.0.1: timed-out@^4.0.1:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
@ -5507,6 +5794,11 @@ tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.1.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
tsort@0.0.1: tsort@0.0.1:
version "0.0.1" version "0.0.1"
resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786"
@ -5587,9 +5879,9 @@ typedarray@^0.0.6:
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
typescript@^4.9.3: typescript@^4.9.3:
version "4.9.3" version "4.9.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78"
integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==
uglify-js@^3.1.4: uglify-js@^3.1.4:
version "3.17.4" version "3.17.4"
@ -5612,9 +5904,9 @@ unbox-primitive@^1.0.2:
which-boxed-primitive "^1.0.2" which-boxed-primitive "^1.0.2"
undici@^5.4.0: undici@^5.4.0:
version "5.13.0" version "5.14.0"
resolved "https://registry.yarnpkg.com/undici/-/undici-5.13.0.tgz#56772fba89d8b25e39bddc8c26a438bd73ea69bb" resolved "https://registry.yarnpkg.com/undici/-/undici-5.14.0.tgz#1169d0cdee06a4ffdd30810f6228d57998884d00"
integrity sha512-UDZKtwb2k7KRsK4SdXWG7ErXiL7yTGgLWvk2AXO1JMjgjh404nFo6tWSCM2xMpJwMPx3J8i/vfqEh1zOqvj82Q== integrity sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==
dependencies: dependencies:
busboy "^1.6.0" busboy "^1.6.0"
@ -6012,6 +6304,13 @@ which@1.3.1, which@^1.1.1, which@^1.3.1:
dependencies: dependencies:
isexe "^2.0.0" isexe "^2.0.0"
which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
isexe "^2.0.0"
wide-align@1.1.3: wide-align@1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
@ -6043,6 +6342,15 @@ wrap-ansi@^5.1.0:
string-width "^3.0.0" string-width "^3.0.0"
strip-ansi "^5.0.0" strip-ansi "^5.0.0"
wrap-ansi@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"
wrap-ansi@^7.0.0: wrap-ansi@^7.0.0:
version "7.0.0" version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@ -6141,6 +6449,11 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.3.tgz#9b3a4c8aff9821b696275c79a8bee8399d945207"
integrity sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==
yargs-parser@13.1.2, yargs-parser@^13.1.2: yargs-parser@13.1.2, yargs-parser@^13.1.2:
version "13.1.2" version "13.1.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"