chore: precommit hooks (#18)
* chore: add husky and lint-staged * chore: add postinstall script * chore: add prepush test hook * chore: add skip tests flag * chore: remove skip tests flag * chore: fix format command to verify json files
This commit is contained in:
parent
d96175fa3f
commit
4836dd0436
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"*.{js,json,sol,ts}": "prettier --write"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env sh
|
||||
. "$(dirname -- "$0")/_/husky.sh"
|
||||
|
||||
npx lint-staged --config .husky/lint-staged.config.json
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env sh
|
||||
. "$(dirname -- "$0")/_/husky.sh"
|
||||
|
||||
yarn test
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
{
|
||||
"files": "*.sol",
|
||||
"options": {
|
||||
"printWidth": 80,
|
||||
"printWidth": 120,
|
||||
"tabWidth": 4,
|
||||
"singleQuote": false,
|
||||
"bracketSpacing": false
|
||||
|
|
|
|||
|
|
@ -1,60 +1,45 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
pragma solidity ^0.8.7;
|
||||
|
||||
import "@openzeppelin/contracts/access/AccessControl.sol";
|
||||
|
||||
abstract contract FleekAccessControl is AccessControl {
|
||||
bytes32 public constant COLLECTION_OWNER_ROLE =
|
||||
keccak256("COLLECTION_OWNER_ROLE");
|
||||
bytes32 public constant COLLECTION_CONTROLLER_ROLE =
|
||||
keccak256("COLLECTION_CONTROLLER_ROLE");
|
||||
|
||||
constructor() {
|
||||
_setRoleAdmin(COLLECTION_OWNER_ROLE, DEFAULT_ADMIN_ROLE);
|
||||
_grantRole(COLLECTION_OWNER_ROLE, msg.sender);
|
||||
}
|
||||
|
||||
modifier requireCollectionOwner() {
|
||||
require(
|
||||
hasRole(COLLECTION_OWNER_ROLE, msg.sender),
|
||||
"FleekAccessControl: must have collection owner role"
|
||||
);
|
||||
_;
|
||||
}
|
||||
|
||||
modifier requireCollectionController() {
|
||||
require(
|
||||
hasRole(COLLECTION_OWNER_ROLE, msg.sender) ||
|
||||
hasRole(COLLECTION_CONTROLLER_ROLE, msg.sender),
|
||||
"FleekAccessControl: must have collection controller role"
|
||||
);
|
||||
_;
|
||||
}
|
||||
|
||||
modifier requireTokenController(uint256 tokenId) {
|
||||
require(
|
||||
hasRole(_tokenRole(tokenId, "CONTROLLER"), msg.sender),
|
||||
"FleekAccessControl: must have token role"
|
||||
);
|
||||
_;
|
||||
}
|
||||
|
||||
function isTokenController(
|
||||
uint256 tokenId,
|
||||
address account
|
||||
) public view returns (bool) {
|
||||
return hasRole(_tokenRole(tokenId, "CONTROLLER"), account);
|
||||
}
|
||||
|
||||
function _tokenRole(
|
||||
uint256 tokenId,
|
||||
string memory role
|
||||
) internal pure returns (bytes32) {
|
||||
return keccak256(abi.encodePacked("TOKEN_", role, tokenId));
|
||||
}
|
||||
|
||||
function _clearTokenControllers(uint256 tokenId) internal {
|
||||
// TODO: Remove token controllers from AccessControl
|
||||
}
|
||||
}
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
pragma solidity ^0.8.7;
|
||||
|
||||
import "@openzeppelin/contracts/access/AccessControl.sol";
|
||||
|
||||
abstract contract FleekAccessControl is AccessControl {
|
||||
bytes32 public constant COLLECTION_OWNER_ROLE = keccak256("COLLECTION_OWNER_ROLE");
|
||||
bytes32 public constant COLLECTION_CONTROLLER_ROLE = keccak256("COLLECTION_CONTROLLER_ROLE");
|
||||
|
||||
constructor() {
|
||||
_setRoleAdmin(COLLECTION_OWNER_ROLE, DEFAULT_ADMIN_ROLE);
|
||||
_grantRole(COLLECTION_OWNER_ROLE, msg.sender);
|
||||
}
|
||||
|
||||
modifier requireCollectionOwner() {
|
||||
require(hasRole(COLLECTION_OWNER_ROLE, msg.sender), "FleekAccessControl: must have collection owner role");
|
||||
_;
|
||||
}
|
||||
|
||||
modifier requireCollectionController() {
|
||||
require(
|
||||
hasRole(COLLECTION_OWNER_ROLE, msg.sender) || hasRole(COLLECTION_CONTROLLER_ROLE, msg.sender),
|
||||
"FleekAccessControl: must have collection controller role"
|
||||
);
|
||||
_;
|
||||
}
|
||||
|
||||
modifier requireTokenController(uint256 tokenId) {
|
||||
require(hasRole(_tokenRole(tokenId, "CONTROLLER"), msg.sender), "FleekAccessControl: must have token role");
|
||||
_;
|
||||
}
|
||||
|
||||
function isTokenController(uint256 tokenId, address account) public view returns (bool) {
|
||||
return hasRole(_tokenRole(tokenId, "CONTROLLER"), account);
|
||||
}
|
||||
|
||||
function _tokenRole(uint256 tokenId, string memory role) internal pure returns (bytes32) {
|
||||
return keccak256(abi.encodePacked("TOKEN_", role, tokenId));
|
||||
}
|
||||
|
||||
function _clearTokenControllers(uint256 tokenId) internal {
|
||||
// TODO: Remove token controllers from AccessControl
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,16 +42,10 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
Counters.Counter private _tokenIds;
|
||||
mapping(uint256 => App) private _apps;
|
||||
|
||||
constructor(
|
||||
string memory _name,
|
||||
string memory _symbol
|
||||
) ERC721(_name, _symbol) {}
|
||||
constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {}
|
||||
|
||||
modifier requireTokenOwner(uint256 tokenId) {
|
||||
require(
|
||||
msg.sender == ownerOf(tokenId),
|
||||
"FleekERC721: must be token owner"
|
||||
);
|
||||
require(msg.sender == ownerOf(tokenId), "FleekERC721: must be token owner");
|
||||
_;
|
||||
}
|
||||
|
||||
|
|
@ -84,13 +78,12 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
return tokenId;
|
||||
}
|
||||
|
||||
function tokenURI(
|
||||
uint256 tokenId
|
||||
) public view virtual override returns (string memory) {
|
||||
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
|
||||
_requireMinted(tokenId);
|
||||
address owner = ownerOf(tokenId);
|
||||
App storage app = _apps[tokenId];
|
||||
|
||||
// prettier-ignore
|
||||
bytes memory dataURI = abi.encodePacked(
|
||||
'{',
|
||||
'"name":"', app.name, '",',
|
||||
|
|
@ -111,25 +104,17 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
return string(abi.encodePacked(_baseURI(), Base64.encode((dataURI))));
|
||||
}
|
||||
|
||||
function addTokenController(
|
||||
uint256 tokenId,
|
||||
address controller
|
||||
) public requireTokenOwner(tokenId) {
|
||||
function addTokenController(uint256 tokenId, address controller) public requireTokenOwner(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_grantRole(_tokenRole(tokenId, "CONTROLLER"), controller);
|
||||
}
|
||||
|
||||
function removeTokenController(
|
||||
uint256 tokenId,
|
||||
address controller
|
||||
) public requireTokenOwner(tokenId) {
|
||||
function removeTokenController(uint256 tokenId, address controller) public requireTokenOwner(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_revokeRole(_tokenRole(tokenId, "CONTROLLER"), controller);
|
||||
}
|
||||
|
||||
function supportsInterface(
|
||||
bytes4 interfaceId
|
||||
) public view virtual override(ERC721, AccessControl) returns (bool) {
|
||||
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, AccessControl) returns (bool) {
|
||||
return super.supportsInterface(interfaceId);
|
||||
}
|
||||
|
||||
|
|
@ -171,19 +156,13 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
emit NewTokenExternalURL(tokenId, _tokenExternalURL);
|
||||
}
|
||||
|
||||
function setTokenENS(
|
||||
uint256 tokenId,
|
||||
string memory _tokenENS
|
||||
) public virtual requireTokenController(tokenId) {
|
||||
function setTokenENS(uint256 tokenId, string memory _tokenENS) public virtual requireTokenController(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_apps[tokenId].ENS = _tokenENS;
|
||||
emit NewTokenENS(tokenId, _tokenENS);
|
||||
}
|
||||
|
||||
function setTokenName(
|
||||
uint256 tokenId,
|
||||
string memory _tokenName
|
||||
) public virtual requireTokenController(tokenId) {
|
||||
function setTokenName(uint256 tokenId, string memory _tokenName) public virtual requireTokenController(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_apps[tokenId].name = _tokenName;
|
||||
emit NewTokenName(tokenId, _tokenName);
|
||||
|
|
@ -198,10 +177,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
emit NewTokenDescription(tokenId, _tokenDescription);
|
||||
}
|
||||
|
||||
function setTokenImage(
|
||||
uint256 tokenId,
|
||||
string memory _tokenImage
|
||||
) public virtual requireTokenController(tokenId) {
|
||||
function setTokenImage(uint256 tokenId, string memory _tokenImage) public virtual requireTokenController(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_apps[tokenId].image = _tokenImage;
|
||||
emit NewTokenImage(tokenId, _tokenImage);
|
||||
|
|
@ -214,17 +190,11 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
string memory _author
|
||||
) public virtual requireTokenController(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_apps[tokenId].builds[++_apps[tokenId].current_build] = Build(
|
||||
_commit_hash,
|
||||
_git_repository,
|
||||
_author
|
||||
);
|
||||
_apps[tokenId].builds[++_apps[tokenId].current_build] = Build(_commit_hash, _git_repository, _author);
|
||||
emit NewBuild(tokenId, _commit_hash);
|
||||
}
|
||||
|
||||
function burn(
|
||||
uint256 tokenId
|
||||
) public virtual requireTokenOwner(tokenId) {
|
||||
function burn(uint256 tokenId) public virtual requireTokenOwner(tokenId) {
|
||||
super._burn(tokenId);
|
||||
|
||||
if (bytes(_apps[tokenId].external_url).length != 0) {
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -68,13 +68,11 @@
|
|||
"storageLayout",
|
||||
"evm.gasEstimates"
|
||||
],
|
||||
"": [
|
||||
"ast"
|
||||
]
|
||||
"": ["ast"]
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"useLiteralContent": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
12
package.json
12
package.json
|
|
@ -3,15 +3,19 @@
|
|||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"private": "false",
|
||||
"scripts": {
|
||||
"test": "hardhat test && forge test --via-ir",
|
||||
"test:foundry": "forge test --via-ir",
|
||||
"test:hardhat": "hardhat test",
|
||||
"format": "prettier --write \"./**/*.{js,ts,sol}\"",
|
||||
"format": "prettier --write \"./**/*.{js,json,sol,ts}\"",
|
||||
"node:hardhat": "hardhat node --tags local",
|
||||
"deploy:local": "hardhat deploy --tags local",
|
||||
"deploy:mumbai": "hardhat deploy --tags mumbai --network mumbai",
|
||||
"compile": "hardhat compile"
|
||||
"compile": "hardhat compile",
|
||||
"postinstall": "husky install",
|
||||
"prepack": "pinst --disable",
|
||||
"postpack": "pinst --enable"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
@ -39,7 +43,9 @@
|
|||
"hardhat-contract-sizer": "^2.6.1",
|
||||
"hardhat-deploy": "^0.11.15",
|
||||
"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-plugin-solidity": "^1.0.0",
|
||||
"solidity-coverage": "^0.8.2",
|
||||
|
|
|
|||
|
|
@ -1,23 +1,23 @@
|
|||
// npx hardhat run scripts/mint.js --network mumbai
|
||||
const { getContract } = require('./util');
|
||||
|
||||
// TODO: make this arguments
|
||||
const params = [
|
||||
'0x7ED735b7095C05d78dF169F991f2b7f1A1F1A049', // to
|
||||
'Fleek App', // name
|
||||
'Description', // description
|
||||
'https://fleek.network/fleek-network-logo-minimal.png', // image
|
||||
'https://fleek.co/', // external url
|
||||
'fleek.eth', // ens
|
||||
'6ea6ad16c46ae85faced7e50555ff7368422f57', // commit hash
|
||||
'https://github.com/org/repo', // repo
|
||||
'fleek', // author
|
||||
];
|
||||
|
||||
(async () => {
|
||||
const contract = getContract('FleekERC721');
|
||||
|
||||
const transaction = await contract.mint(...params);
|
||||
|
||||
console.log('Response: ', transaction);
|
||||
})();
|
||||
// npx hardhat run scripts/mint.js --network mumbai
|
||||
const { getContract } = require('./util');
|
||||
|
||||
// TODO: make this arguments
|
||||
const params = [
|
||||
'0x7ED735b7095C05d78dF169F991f2b7f1A1F1A049', // to
|
||||
'Fleek App', // name
|
||||
'Description', // description
|
||||
'https://fleek.network/fleek-network-logo-minimal.png', // image
|
||||
'https://fleek.co/', // external url
|
||||
'fleek.eth', // ens
|
||||
'6ea6ad16c46ae85faced7e50555ff7368422f57', // commit hash
|
||||
'https://github.com/org/repo', // repo
|
||||
'fleek', // author
|
||||
];
|
||||
|
||||
(async () => {
|
||||
const contract = getContract('FleekERC721');
|
||||
|
||||
const transaction = await contract.mint(...params);
|
||||
|
||||
console.log('Response: ', transaction);
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
// npx hardhat run scripts/tokenURI.js --network mumbai
|
||||
const { getContract } = require('./util');
|
||||
|
||||
// TODO: make this arguments
|
||||
const tokenId = 1;
|
||||
|
||||
(async () => {
|
||||
const contract = await getContract('FleekERC721');
|
||||
|
||||
const transaction = await contract.tokenURI(tokenId);
|
||||
|
||||
const parsed = JSON.parse(
|
||||
Buffer.from(transaction.slice(29), 'base64').toString('utf-8')
|
||||
);
|
||||
|
||||
console.log('Response: ', parsed);
|
||||
})();
|
||||
// npx hardhat run scripts/tokenURI.js --network mumbai
|
||||
const { getContract } = require('./util');
|
||||
|
||||
// TODO: make this arguments
|
||||
const tokenId = 1;
|
||||
|
||||
(async () => {
|
||||
const contract = await getContract('FleekERC721');
|
||||
|
||||
const transaction = await contract.tokenURI(tokenId);
|
||||
|
||||
const parsed = JSON.parse(
|
||||
Buffer.from(transaction.slice(29), 'base64').toString('utf-8')
|
||||
);
|
||||
|
||||
console.log('Response: ', parsed);
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
// npx hardhat run scripts/upgrade.js --network mumbai
|
||||
const { getContract } = require('./util');
|
||||
|
||||
// TODO: make this arguments
|
||||
const params = [
|
||||
1, // tokenId
|
||||
'97e7908f70f0862d753c66689ff09e70caa43df2', // commit hash
|
||||
'https://github.com/org/new-repo', // repo
|
||||
'new-author', // author
|
||||
];
|
||||
|
||||
(async () => {
|
||||
const contract = await getContract('FleekERC721');
|
||||
|
||||
const transaction = await contract.setTokenBuild(...params);
|
||||
|
||||
console.log('Response: ', transaction);
|
||||
})();
|
||||
// npx hardhat run scripts/upgrade.js --network mumbai
|
||||
const { getContract } = require('./util');
|
||||
|
||||
// TODO: make this arguments
|
||||
const params = [
|
||||
1, // tokenId
|
||||
'97e7908f70f0862d753c66689ff09e70caa43df2', // commit hash
|
||||
'https://github.com/org/new-repo', // repo
|
||||
'new-author', // author
|
||||
];
|
||||
|
||||
(async () => {
|
||||
const contract = await getContract('FleekERC721');
|
||||
|
||||
const transaction = await contract.setTokenBuild(...params);
|
||||
|
||||
console.log('Response: ', transaction);
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
module.exports.getContract = async function (contractName) {
|
||||
const {
|
||||
address,
|
||||
} = require(`../deployments/${hre.network.name}/${contractName}.json`);
|
||||
|
||||
return hre.ethers.getContractAt(contractName, address);
|
||||
};
|
||||
module.exports.getContract = async function (contractName) {
|
||||
const {
|
||||
address,
|
||||
} = require(`../deployments/${hre.network.name}/${contractName}.json`);
|
||||
|
||||
return hre.ethers.getContractAt(contractName, address);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,175 +1,175 @@
|
|||
import { loadFixture } from '@nomicfoundation/hardhat-network-helpers';
|
||||
import { expect } from 'chai';
|
||||
import { ethers } from 'hardhat';
|
||||
import web3 from 'web3';
|
||||
|
||||
describe('FleekERC721', () => {
|
||||
const COLLECTION_OWNER_ROLE = web3.utils.keccak256('COLLECTION_OWNER_ROLE');
|
||||
|
||||
const MINT_PARAMS = Object.freeze({
|
||||
name: 'Fleek Test App',
|
||||
description: 'Fleek Test App Description',
|
||||
image: 'https://fleek.co/image.png',
|
||||
ens: 'fleek.eth',
|
||||
externalUrl: 'https://fleek.co',
|
||||
commitHash: 'b72e47171746b6a9e29b801af9cb655ecf4d665c',
|
||||
gitRepository: 'https://github.com/fleekxyz/contracts',
|
||||
author: 'author',
|
||||
});
|
||||
|
||||
const COLLECTION_PARAMS = Object.freeze({
|
||||
name: 'FleekERC721',
|
||||
symbol: 'FLEEK',
|
||||
});
|
||||
|
||||
const defaultFixture = async () => {
|
||||
// Contracts are deployed using the first signer/account by default
|
||||
const [owner, otherAccount] = await ethers.getSigners();
|
||||
|
||||
const Contract = await ethers.getContractFactory('FleekERC721');
|
||||
const contract = await Contract.deploy(
|
||||
COLLECTION_PARAMS.name,
|
||||
COLLECTION_PARAMS.symbol
|
||||
);
|
||||
|
||||
return { owner, otherAccount, contract };
|
||||
};
|
||||
|
||||
describe('Deployment', () => {
|
||||
it('should assign the name and the symbol of the ERC721 contract', async () => {
|
||||
const { contract } = await loadFixture(defaultFixture);
|
||||
|
||||
expect(await contract.name()).to.equal(COLLECTION_PARAMS.name);
|
||||
expect(await contract.symbol()).to.equal(COLLECTION_PARAMS.symbol);
|
||||
});
|
||||
|
||||
it('should assign the owner of the contract', async () => {
|
||||
const { owner, contract } = await loadFixture(defaultFixture);
|
||||
|
||||
expect(
|
||||
await contract.hasRole(COLLECTION_OWNER_ROLE, owner.address)
|
||||
).to.equal(true);
|
||||
});
|
||||
|
||||
it('should support ERC721 interface', async () => {
|
||||
const { contract } = await loadFixture(defaultFixture);
|
||||
|
||||
expect(await contract.supportsInterface('0x80ac58cd')).to.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Minting', () => {
|
||||
it('should be able to mint a new token', async () => {
|
||||
const { owner, contract } = await loadFixture(defaultFixture);
|
||||
|
||||
const response = await contract.mint(
|
||||
owner.address,
|
||||
MINT_PARAMS.name,
|
||||
MINT_PARAMS.description,
|
||||
MINT_PARAMS.image,
|
||||
MINT_PARAMS.externalUrl,
|
||||
MINT_PARAMS.ens,
|
||||
MINT_PARAMS.commitHash,
|
||||
MINT_PARAMS.gitRepository,
|
||||
MINT_PARAMS.author
|
||||
);
|
||||
|
||||
expect(response.value).to.be.instanceOf(ethers.BigNumber);
|
||||
expect(response.value.toNumber()).to.equal(0);
|
||||
});
|
||||
|
||||
it('should not be able to mint a new token if not the owner', async () => {
|
||||
const { otherAccount, contract } = await loadFixture(defaultFixture);
|
||||
|
||||
await expect(
|
||||
contract
|
||||
.connect(otherAccount)
|
||||
.mint(
|
||||
otherAccount.address,
|
||||
MINT_PARAMS.name,
|
||||
MINT_PARAMS.description,
|
||||
MINT_PARAMS.image,
|
||||
MINT_PARAMS.externalUrl,
|
||||
MINT_PARAMS.ens,
|
||||
MINT_PARAMS.commitHash,
|
||||
MINT_PARAMS.gitRepository,
|
||||
MINT_PARAMS.author
|
||||
)
|
||||
).to.be.revertedWith(
|
||||
'FleekAccessControl: must have collection owner role'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Token', () => {
|
||||
let tokenId: number;
|
||||
let fixture: Awaited<ReturnType<typeof defaultFixture>>;
|
||||
|
||||
before(async () => {
|
||||
fixture = await loadFixture(defaultFixture);
|
||||
const { contract } = fixture;
|
||||
|
||||
const response = await contract.mint(
|
||||
fixture.owner.address,
|
||||
MINT_PARAMS.name,
|
||||
MINT_PARAMS.description,
|
||||
MINT_PARAMS.image,
|
||||
MINT_PARAMS.externalUrl,
|
||||
MINT_PARAMS.ens,
|
||||
MINT_PARAMS.commitHash,
|
||||
MINT_PARAMS.gitRepository,
|
||||
MINT_PARAMS.author
|
||||
);
|
||||
|
||||
tokenId = response.value.toNumber();
|
||||
});
|
||||
|
||||
it('should return the token URI', async () => {
|
||||
const { contract } = fixture;
|
||||
const tokenURI = await contract.tokenURI(tokenId);
|
||||
|
||||
const tokenURIDecoded = Buffer.from(
|
||||
tokenURI.replace('data:application/json;base64,', ''),
|
||||
'base64'
|
||||
).toString('ascii');
|
||||
|
||||
const parsedURI = JSON.parse(tokenURIDecoded);
|
||||
|
||||
expect(parsedURI).to.eql({
|
||||
owner: fixture.owner.address.toLowerCase(),
|
||||
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,
|
||||
},
|
||||
{
|
||||
trait_type: 'Author',
|
||||
value: MINT_PARAMS.author,
|
||||
},
|
||||
{
|
||||
trait_type: 'Version',
|
||||
value: '0',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('should match the token owner', async () => {
|
||||
const { contract, owner } = fixture;
|
||||
const tokenOwner = await contract.ownerOf(tokenId);
|
||||
expect(tokenOwner).to.equal(owner.address);
|
||||
});
|
||||
});
|
||||
});
|
||||
import { loadFixture } from '@nomicfoundation/hardhat-network-helpers';
|
||||
import { expect } from 'chai';
|
||||
import { ethers } from 'hardhat';
|
||||
import web3 from 'web3';
|
||||
|
||||
describe('FleekERC721', () => {
|
||||
const COLLECTION_OWNER_ROLE = web3.utils.keccak256('COLLECTION_OWNER_ROLE');
|
||||
|
||||
const MINT_PARAMS = Object.freeze({
|
||||
name: 'Fleek Test App',
|
||||
description: 'Fleek Test App Description',
|
||||
image: 'https://fleek.co/image.png',
|
||||
ens: 'fleek.eth',
|
||||
externalUrl: 'https://fleek.co',
|
||||
commitHash: 'b72e47171746b6a9e29b801af9cb655ecf4d665c',
|
||||
gitRepository: 'https://github.com/fleekxyz/contracts',
|
||||
author: 'author',
|
||||
});
|
||||
|
||||
const COLLECTION_PARAMS = Object.freeze({
|
||||
name: 'FleekERC721',
|
||||
symbol: 'FLEEK',
|
||||
});
|
||||
|
||||
const defaultFixture = async () => {
|
||||
// Contracts are deployed using the first signer/account by default
|
||||
const [owner, otherAccount] = await ethers.getSigners();
|
||||
|
||||
const Contract = await ethers.getContractFactory('FleekERC721');
|
||||
const contract = await Contract.deploy(
|
||||
COLLECTION_PARAMS.name,
|
||||
COLLECTION_PARAMS.symbol
|
||||
);
|
||||
|
||||
return { owner, otherAccount, contract };
|
||||
};
|
||||
|
||||
describe('Deployment', () => {
|
||||
it('should assign the name and the symbol of the ERC721 contract', async () => {
|
||||
const { contract } = await loadFixture(defaultFixture);
|
||||
|
||||
expect(await contract.name()).to.equal(COLLECTION_PARAMS.name);
|
||||
expect(await contract.symbol()).to.equal(COLLECTION_PARAMS.symbol);
|
||||
});
|
||||
|
||||
it('should assign the owner of the contract', async () => {
|
||||
const { owner, contract } = await loadFixture(defaultFixture);
|
||||
|
||||
expect(
|
||||
await contract.hasRole(COLLECTION_OWNER_ROLE, owner.address)
|
||||
).to.equal(true);
|
||||
});
|
||||
|
||||
it('should support ERC721 interface', async () => {
|
||||
const { contract } = await loadFixture(defaultFixture);
|
||||
|
||||
expect(await contract.supportsInterface('0x80ac58cd')).to.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Minting', () => {
|
||||
it('should be able to mint a new token', async () => {
|
||||
const { owner, contract } = await loadFixture(defaultFixture);
|
||||
|
||||
const response = await contract.mint(
|
||||
owner.address,
|
||||
MINT_PARAMS.name,
|
||||
MINT_PARAMS.description,
|
||||
MINT_PARAMS.image,
|
||||
MINT_PARAMS.externalUrl,
|
||||
MINT_PARAMS.ens,
|
||||
MINT_PARAMS.commitHash,
|
||||
MINT_PARAMS.gitRepository,
|
||||
MINT_PARAMS.author
|
||||
);
|
||||
|
||||
expect(response.value).to.be.instanceOf(ethers.BigNumber);
|
||||
expect(response.value.toNumber()).to.equal(0);
|
||||
});
|
||||
|
||||
it('should not be able to mint a new token if not the owner', async () => {
|
||||
const { otherAccount, contract } = await loadFixture(defaultFixture);
|
||||
|
||||
await expect(
|
||||
contract
|
||||
.connect(otherAccount)
|
||||
.mint(
|
||||
otherAccount.address,
|
||||
MINT_PARAMS.name,
|
||||
MINT_PARAMS.description,
|
||||
MINT_PARAMS.image,
|
||||
MINT_PARAMS.externalUrl,
|
||||
MINT_PARAMS.ens,
|
||||
MINT_PARAMS.commitHash,
|
||||
MINT_PARAMS.gitRepository,
|
||||
MINT_PARAMS.author
|
||||
)
|
||||
).to.be.revertedWith(
|
||||
'FleekAccessControl: must have collection owner role'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Token', () => {
|
||||
let tokenId: number;
|
||||
let fixture: Awaited<ReturnType<typeof defaultFixture>>;
|
||||
|
||||
before(async () => {
|
||||
fixture = await loadFixture(defaultFixture);
|
||||
const { contract } = fixture;
|
||||
|
||||
const response = await contract.mint(
|
||||
fixture.owner.address,
|
||||
MINT_PARAMS.name,
|
||||
MINT_PARAMS.description,
|
||||
MINT_PARAMS.image,
|
||||
MINT_PARAMS.externalUrl,
|
||||
MINT_PARAMS.ens,
|
||||
MINT_PARAMS.commitHash,
|
||||
MINT_PARAMS.gitRepository,
|
||||
MINT_PARAMS.author
|
||||
);
|
||||
|
||||
tokenId = response.value.toNumber();
|
||||
});
|
||||
|
||||
it('should return the token URI', async () => {
|
||||
const { contract } = fixture;
|
||||
const tokenURI = await contract.tokenURI(tokenId);
|
||||
|
||||
const tokenURIDecoded = Buffer.from(
|
||||
tokenURI.replace('data:application/json;base64,', ''),
|
||||
'base64'
|
||||
).toString('ascii');
|
||||
|
||||
const parsedURI = JSON.parse(tokenURIDecoded);
|
||||
|
||||
expect(parsedURI).to.eql({
|
||||
owner: fixture.owner.address.toLowerCase(),
|
||||
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,
|
||||
},
|
||||
{
|
||||
trait_type: 'Author',
|
||||
value: MINT_PARAMS.author,
|
||||
},
|
||||
{
|
||||
trait_type: 'Version',
|
||||
value: '0',
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it('should match the token owner', async () => {
|
||||
const { contract, owner } = fixture;
|
||||
const tokenOwner = await contract.ownerOf(tokenId);
|
||||
expect(tokenOwner).to.equal(owner.address);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,58 +1,45 @@
|
|||
pragma solidity ^0.8.7;
|
||||
|
||||
import "forge-std/Test.sol";
|
||||
import "../../contracts/FleekERC721.sol";
|
||||
import "../../contracts/FleekERC721.sol";
|
||||
|
||||
contract ContractBTest is Test {
|
||||
FleekERC721 fleekContract;
|
||||
uint256 testNumber;
|
||||
|
||||
function setUp() public {
|
||||
fleekContract = new FleekERC721('Test Contract', 'FLKAPS');
|
||||
fleekContract = new FleekERC721("Test Contract", "FLKAPS");
|
||||
}
|
||||
|
||||
function testName() public {
|
||||
assertEq(fleekContract.name(), 'Test Contract'));
|
||||
assertEq(fleekContract.name(), "Test Contract");
|
||||
}
|
||||
|
||||
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 testRemoveTokenController() public {
|
||||
}
|
||||
function testAddTokenController() public {}
|
||||
|
||||
function testRemoveTokenController() public {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,46 +1,46 @@
|
|||
{
|
||||
"name": "sites-as-nfts",
|
||||
"version": "0.0.1",
|
||||
"description": "Minimal UI for sites as NFTs",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"author": "Fleek",
|
||||
"license": "ISC",
|
||||
"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",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-router-dom": "^6.4.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^29.2.3",
|
||||
"@types/node": "^18.11.9",
|
||||
"@types/react": "^18.0.25",
|
||||
"@types/react-dom": "^18.0.9",
|
||||
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||
"@typescript-eslint/parser": "^5.45.0",
|
||||
"@vitejs/plugin-react": "^2.2.0",
|
||||
"eslint": "^8.28.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-jest": "^27.1.6",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-react": "^7.31.11",
|
||||
"ethers": "^5.7.2",
|
||||
"prettier": "^2.8.0",
|
||||
"react-query": "^3.39.2",
|
||||
"ts-loader": "^9.4.1",
|
||||
"typescript": "^4.9.3",
|
||||
"vite": "^3.2.4",
|
||||
"vite-tsconfig-paths": "^3.6.0"
|
||||
}
|
||||
}
|
||||
{
|
||||
"name": "sites-as-nfts",
|
||||
"version": "0.0.1",
|
||||
"description": "Minimal UI for sites as NFTs",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"author": "Fleek",
|
||||
"license": "ISC",
|
||||
"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",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-router-dom": "^6.4.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^29.2.3",
|
||||
"@types/node": "^18.11.9",
|
||||
"@types/react": "^18.0.25",
|
||||
"@types/react-dom": "^18.0.9",
|
||||
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||
"@typescript-eslint/parser": "^5.45.0",
|
||||
"@vitejs/plugin-react": "^2.2.0",
|
||||
"eslint": "^8.28.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-jest": "^27.1.6",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-react": "^7.31.11",
|
||||
"ethers": "^5.7.2",
|
||||
"prettier": "^2.8.0",
|
||||
"react-query": "^3.39.2",
|
||||
"ts-loader": "^9.4.1",
|
||||
"typescript": "^4.9.3",
|
||||
"vite": "^3.2.4",
|
||||
"vite-tsconfig-paths": "^3.6.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1 @@
|
|||
export * from './accordion-item';
|
||||
|
||||
export * from './accordion-item';
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './attributes-detail';
|
||||
export * from './attributes-detail';
|
||||
|
|
|
|||
|
|
@ -1,3 +1,2 @@
|
|||
export * from './card-attributes';
|
||||
export * from './card-site';
|
||||
|
||||
export * from './card-attributes';
|
||||
export * from './card-site';
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './home-button';
|
||||
export * from './home-button';
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './image-preview';
|
||||
export * from './image-preview';
|
||||
|
|
|
|||
|
|
@ -1,9 +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';
|
||||
|
||||
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';
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './input-field-form';
|
||||
export * from './input-field-form';
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './loading';
|
||||
export * from './loading';
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './tile-info';
|
||||
export * from './tile-info';
|
||||
|
|
|
|||
|
|
@ -1,53 +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);
|
||||
});
|
||||
};
|
||||
|
||||
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);
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
export * from './mint-site';
|
||||
export * from './detail';
|
||||
export * from './list';
|
||||
export * from './mint-site';
|
||||
export * from './detail';
|
||||
export * from './list';
|
||||
|
|
|
|||
|
|
@ -1,25 +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);
|
||||
});
|
||||
};
|
||||
|
||||
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);
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,23 +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);
|
||||
|
||||
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 +1 @@
|
|||
export * from './mint-site';
|
||||
export * from './mint-site';
|
||||
|
|
|
|||
|
|
@ -1,20 +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;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
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;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,8 +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 };
|
||||
};
|
||||
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 };
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
export * from './format';
|
||||
export * from './validation';
|
||||
export * from './format';
|
||||
export * from './validation';
|
||||
|
|
|
|||
|
|
@ -1,11 +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);
|
||||
};
|
||||
|
||||
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);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './detail';
|
||||
export * from './detail';
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './error-screen';
|
||||
export * from './error-screen';
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export * from './home';
|
||||
export * from './home';
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
export * from './home';
|
||||
export * from './mint-site';
|
||||
export * from './detail';
|
||||
export * from './error-screen';
|
||||
|
||||
export * from './home';
|
||||
export * from './mint-site';
|
||||
export * from './detail';
|
||||
export * from './error-screen';
|
||||
|
|
|
|||
|
|
@ -1,3 +1,2 @@
|
|||
export * from './mint-site';
|
||||
export * from './mint-site.utils';
|
||||
|
||||
export * from './mint-site';
|
||||
export * from './mint-site.utils';
|
||||
|
|
|
|||
|
|
@ -1,36 +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;
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,26 +1,25 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"module": "ES2020",
|
||||
"target": "ESNext",
|
||||
"esModuleInterop": true,
|
||||
"sourceMap": true,
|
||||
"rootDirs": ["src"],
|
||||
"baseUrl": "src",
|
||||
"paths": {
|
||||
"@/*": ["*"]
|
||||
},
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"moduleResolution": "node",
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"jsx": "react-jsx",
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"skipLibCheck": true,
|
||||
"isolatedModules": true,
|
||||
"types": ["vite/client"]
|
||||
},
|
||||
"include": ["./src", "./*.ts"]
|
||||
}
|
||||
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "ES2020",
|
||||
"target": "ESNext",
|
||||
"esModuleInterop": true,
|
||||
"sourceMap": true,
|
||||
"rootDirs": ["src"],
|
||||
"baseUrl": "src",
|
||||
"paths": {
|
||||
"@/*": ["*"]
|
||||
},
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"moduleResolution": "node",
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"jsx": "react-jsx",
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"skipLibCheck": true,
|
||||
"isolatedModules": true,
|
||||
"types": ["vite/client"]
|
||||
},
|
||||
"include": ["./src", "./*.ts"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
import { defineConfig } from 'vite';
|
||||
import react from '@vitejs/plugin-react';
|
||||
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [react(), tsconfigPaths()],
|
||||
});
|
||||
|
||||
import { defineConfig } from 'vite';
|
||||
import react from '@vitejs/plugin-react';
|
||||
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [react(), tsconfigPaths()],
|
||||
});
|
||||
|
|
|
|||
385
yarn.lock
385
yarn.lock
|
|
@ -934,9 +934,9 @@
|
|||
integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==
|
||||
|
||||
"@types/node@*":
|
||||
version "18.11.11"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc"
|
||||
integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==
|
||||
version "18.11.15"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.15.tgz#de0e1fbd2b22b962d45971431e2ae696643d3f5d"
|
||||
integrity sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw==
|
||||
|
||||
"@types/node@^10.0.3":
|
||||
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"
|
||||
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:
|
||||
version "3.2.1"
|
||||
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:
|
||||
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:
|
||||
version "0.5.0-alpha.4"
|
||||
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"
|
||||
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:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
|
||||
|
|
@ -1742,6 +1759,22 @@ cli-table3@^0.6.0:
|
|||
optionalDependencies:
|
||||
"@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:
|
||||
version "5.0.0"
|
||||
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"
|
||||
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:
|
||||
version "1.4.0"
|
||||
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"
|
||||
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:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
|
|
@ -1930,6 +1973,15 @@ cross-fetch@^3.1.4:
|
|||
dependencies:
|
||||
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":
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
|
||||
|
|
@ -1986,7 +2038,7 @@ debug@3.2.6:
|
|||
dependencies:
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
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"
|
||||
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:
|
||||
version "0.1.2"
|
||||
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"
|
||||
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:
|
||||
version "1.0.3"
|
||||
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==
|
||||
|
||||
es-abstract@^1.19.0, es-abstract@^1.20.4:
|
||||
version "1.20.4"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861"
|
||||
integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==
|
||||
version "1.20.5"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2"
|
||||
integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
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"
|
||||
get-intrinsic "^1.1.3"
|
||||
get-symbol-description "^1.0.0"
|
||||
gopd "^1.0.1"
|
||||
has "^1.0.3"
|
||||
has-property-descriptors "^1.0.0"
|
||||
has-symbols "^1.0.3"
|
||||
|
|
@ -2222,8 +2285,8 @@ es-abstract@^1.19.0, es-abstract@^1.20.4:
|
|||
object.assign "^4.1.4"
|
||||
regexp.prototype.flags "^1.4.3"
|
||||
safe-regex-test "^1.0.0"
|
||||
string.prototype.trimend "^1.0.5"
|
||||
string.prototype.trimstart "^1.0.5"
|
||||
string.prototype.trimend "^1.0.6"
|
||||
string.prototype.trimstart "^1.0.6"
|
||||
unbox-primitive "^1.0.2"
|
||||
|
||||
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"
|
||||
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:
|
||||
version "4.18.2"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
|
||||
integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
|
||||
|
|
@ -3032,9 +3110,9 @@ got@12.1.0:
|
|||
responselike "^2.0.0"
|
||||
|
||||
got@^11.8.5:
|
||||
version "11.8.5"
|
||||
resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046"
|
||||
integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==
|
||||
version "11.8.6"
|
||||
resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
|
||||
integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
|
||||
dependencies:
|
||||
"@sindresorhus/is" "^4.0.0"
|
||||
"@szmarczak/http-timer" "^4.0.5"
|
||||
|
|
@ -3120,9 +3198,9 @@ hardhat-gas-reporter@^1.0.9:
|
|||
sha1 "^1.1.1"
|
||||
|
||||
hardhat@^2.11.2:
|
||||
version "2.12.3"
|
||||
resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.3.tgz#1824c5d5e2bcc61601bee429053ccecb4dbc0adb"
|
||||
integrity sha512-qxOvRNgQnLqRFssn5f8VP5KN3caytShU0HNeKxmPVK1Ix/0xDVhIC7JOLxG69DjOihUfmxmjqspsHbZvFj6EhQ==
|
||||
version "2.12.4"
|
||||
resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.4.tgz#e539ba58bee9ba1a1ced823bfdcec0b3c5a3e70f"
|
||||
integrity sha512-rc9S2U/4M+77LxW1Kg7oqMMmjl81tzn5rNFARhbXKUA1am/nhfMJEujOjuKvt+ZGMiZ11PYSe8gyIpB/aRNDgw==
|
||||
dependencies:
|
||||
"@ethersproject/abi" "^5.1.2"
|
||||
"@metamask/eth-sig-util" "^4.0.0"
|
||||
|
|
@ -3336,6 +3414,16 @@ https-proxy-agent@^5.0.0:
|
|||
agent-base "6"
|
||||
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:
|
||||
version "0.4.24"
|
||||
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==
|
||||
|
||||
internal-slot@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
|
||||
integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3"
|
||||
integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==
|
||||
dependencies:
|
||||
get-intrinsic "^1.1.0"
|
||||
get-intrinsic "^1.1.3"
|
||||
has "^1.0.3"
|
||||
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"
|
||||
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:
|
||||
version "1.0.2"
|
||||
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:
|
||||
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:
|
||||
version "1.0.7"
|
||||
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"
|
||||
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:
|
||||
version "2.0.0"
|
||||
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"
|
||||
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:
|
||||
version "2.3.6"
|
||||
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"
|
||||
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:
|
||||
version "1.4.1"
|
||||
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"
|
||||
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
|
||||
|
||||
micromatch@^4.0.4:
|
||||
micromatch@^4.0.4, micromatch@^4.0.5:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
|
||||
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"
|
||||
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:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
|
||||
|
|
@ -3992,7 +4153,7 @@ minimatch@5.0.1:
|
|||
dependencies:
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
|
||||
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
|
||||
|
|
@ -4076,9 +4237,9 @@ mocha@7.1.2:
|
|||
yargs-unparser "1.6.0"
|
||||
|
||||
mocha@^10.0.0:
|
||||
version "10.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a"
|
||||
integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==
|
||||
version "10.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8"
|
||||
integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
|
||||
dependencies:
|
||||
ansi-colors "4.1.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"
|
||||
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:
|
||||
version "1.7.0"
|
||||
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:
|
||||
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:
|
||||
version "0.8.3"
|
||||
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"
|
||||
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:
|
||||
version "1.0.7"
|
||||
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"
|
||||
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:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
||||
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:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||
integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
|
||||
|
||||
prettier-plugin-solidity@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0.tgz#5b23f48cc9c28a1246c6dd89af117234b813f48b"
|
||||
integrity sha512-gRJCeZ7imbWtNYN2SudjJoPmka5r6jcd2cSTV6FC3pVCtY6LFZbeQQjpKufUEp88hXBAAnkOTOh7TA5xwj9M3A==
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.0.tgz#a417d104b48a43af3adbfb96b65dbce34fd21429"
|
||||
integrity sha512-5gq0T49ifvXH/6x1STuKyWjTUgi6ICoV65yNtKlg/vZEvocFtSpByJOJICBfqPwNsnv4vhhWIqkLGSUJmWum2w==
|
||||
dependencies:
|
||||
"@solidity-parser/parser" "^0.14.5"
|
||||
emoji-regex "^10.2.1"
|
||||
|
|
@ -4868,11 +5070,24 @@ responselike@^2.0.0:
|
|||
dependencies:
|
||||
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:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
|
||||
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:
|
||||
version "2.7.1"
|
||||
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"
|
||||
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:
|
||||
version "5.2.1"
|
||||
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"
|
||||
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:
|
||||
version "0.8.5"
|
||||
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"
|
||||
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:
|
||||
version "1.0.1"
|
||||
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"
|
||||
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:
|
||||
version "4.0.0"
|
||||
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"
|
||||
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:
|
||||
version "0.7.3"
|
||||
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"
|
||||
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:
|
||||
version "2.1.1"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
|
||||
integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
|
||||
|
|
@ -5271,7 +5541,7 @@ string.prototype.trimend@^1.0.5:
|
|||
define-properties "^1.1.4"
|
||||
es-abstract "^1.20.4"
|
||||
|
||||
string.prototype.trimstart@^1.0.5:
|
||||
string.prototype.trimstart@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
|
||||
integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
|
||||
|
|
@ -5315,6 +5585,18 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
|||
dependencies:
|
||||
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:
|
||||
version "1.0.0"
|
||||
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"
|
||||
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:
|
||||
version "4.0.1"
|
||||
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"
|
||||
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:
|
||||
version "0.0.1"
|
||||
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==
|
||||
|
||||
typescript@^4.9.3:
|
||||
version "4.9.3"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db"
|
||||
integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==
|
||||
version "4.9.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78"
|
||||
integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==
|
||||
|
||||
uglify-js@^3.1.4:
|
||||
version "3.17.4"
|
||||
|
|
@ -5612,9 +5904,9 @@ unbox-primitive@^1.0.2:
|
|||
which-boxed-primitive "^1.0.2"
|
||||
|
||||
undici@^5.4.0:
|
||||
version "5.13.0"
|
||||
resolved "https://registry.yarnpkg.com/undici/-/undici-5.13.0.tgz#56772fba89d8b25e39bddc8c26a438bd73ea69bb"
|
||||
integrity sha512-UDZKtwb2k7KRsK4SdXWG7ErXiL7yTGgLWvk2AXO1JMjgjh404nFo6tWSCM2xMpJwMPx3J8i/vfqEh1zOqvj82Q==
|
||||
version "5.14.0"
|
||||
resolved "https://registry.yarnpkg.com/undici/-/undici-5.14.0.tgz#1169d0cdee06a4ffdd30810f6228d57998884d00"
|
||||
integrity sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==
|
||||
dependencies:
|
||||
busboy "^1.6.0"
|
||||
|
||||
|
|
@ -6012,6 +6304,13 @@ which@1.3.1, which@^1.1.1, which@^1.3.1:
|
|||
dependencies:
|
||||
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:
|
||||
version "1.1.3"
|
||||
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"
|
||||
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:
|
||||
version "7.0.0"
|
||||
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"
|
||||
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:
|
||||
version "13.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
|
||||
|
|
|
|||
Loading…
Reference in New Issue