chore: merge develop
This commit is contained in:
commit
5956cb7be9
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -1,179 +1,159 @@
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
pragma solidity ^0.8.7;
|
pragma solidity ^0.8.7;
|
||||||
|
|
||||||
import "@openzeppelin/contracts/utils/Counters.sol";
|
import "@openzeppelin/contracts/utils/Counters.sol";
|
||||||
|
|
||||||
abstract contract FleekAccessControl {
|
contract FleekAccessControl {
|
||||||
using Counters for Counters.Counter;
|
using Counters for Counters.Counter;
|
||||||
|
|
||||||
enum Roles {
|
enum Roles {
|
||||||
Owner,
|
Owner,
|
||||||
Controller
|
Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Role {
|
event TokenRoleGranted(uint256 indexed tokenId, Roles indexed role, address indexed toAddress, address byAddress);
|
||||||
mapping(address => uint256) indexes;
|
event TokenRoleRevoked(uint256 indexed tokenId, Roles indexed role, address indexed toAddress, address byAddress);
|
||||||
address[] members;
|
event CollectionRoleGranted(Roles indexed role, address indexed toAddress, address byAddress);
|
||||||
}
|
event CollectionRoleRevoked(Roles indexed role, address indexed toAddress, address byAddress);
|
||||||
|
|
||||||
Counters.Counter private _collectionRolesVersion;
|
struct Role {
|
||||||
// _collectionRoles[version][role]
|
mapping(address => uint256) indexes;
|
||||||
mapping(uint256 => mapping(Roles => Role)) private _collectionRoles;
|
address[] members;
|
||||||
|
}
|
||||||
mapping(uint256 => Counters.Counter) private _tokenRolesVersion;
|
|
||||||
// _tokenRoles[tokenId][version][role]
|
Counters.Counter private _collectionRolesVersion;
|
||||||
mapping(uint256 => mapping(uint256 => mapping(Roles => Role)))
|
// _collectionRoles[version][role]
|
||||||
private _tokenRoles;
|
mapping(uint256 => mapping(Roles => Role)) private _collectionRoles;
|
||||||
|
|
||||||
constructor() {
|
mapping(uint256 => Counters.Counter) private _tokenRolesVersion;
|
||||||
_grantCollectionRole(Roles.Owner, msg.sender);
|
// _tokenRoles[tokenId][version][role]
|
||||||
}
|
mapping(uint256 => mapping(uint256 => mapping(Roles => Role))) private _tokenRoles;
|
||||||
|
|
||||||
modifier requireCollectionRole(Roles role) {
|
constructor() {
|
||||||
require(
|
_grantCollectionRole(Roles.Owner, msg.sender);
|
||||||
hasCollectionRole(role, msg.sender) ||
|
}
|
||||||
hasCollectionRole(Roles.Owner, msg.sender),
|
|
||||||
"FleekAccessControl: must have collection role"
|
modifier requireCollectionRole(Roles role) {
|
||||||
);
|
require(
|
||||||
_;
|
hasCollectionRole(role, msg.sender) || hasCollectionRole(Roles.Owner, msg.sender),
|
||||||
}
|
"FleekAccessControl: must have collection role"
|
||||||
|
);
|
||||||
modifier requireTokenRole(uint256 tokenId, Roles role) {
|
_;
|
||||||
require(
|
}
|
||||||
hasTokenRole(tokenId, role, msg.sender) ||
|
|
||||||
hasTokenRole(tokenId, Roles.Owner, msg.sender),
|
modifier requireTokenRole(uint256 tokenId, Roles role) {
|
||||||
"FleekAccessControl: must have token role"
|
require(
|
||||||
);
|
hasTokenRole(tokenId, role, msg.sender) || hasTokenRole(tokenId, Roles.Owner, msg.sender),
|
||||||
_;
|
"FleekAccessControl: must have token role"
|
||||||
}
|
);
|
||||||
|
_;
|
||||||
function grantCollectionRole(
|
}
|
||||||
Roles role,
|
|
||||||
address account
|
function grantCollectionRole(Roles role, address account) public requireCollectionRole(Roles.Owner) {
|
||||||
) public requireCollectionRole(Roles.Owner) {
|
_grantCollectionRole(role, account);
|
||||||
_grantCollectionRole(role, account);
|
}
|
||||||
}
|
|
||||||
|
function grantTokenRole(
|
||||||
function grantTokenRole(
|
uint256 tokenId,
|
||||||
uint256 tokenId,
|
Roles role,
|
||||||
Roles role,
|
address account
|
||||||
address account
|
) public requireTokenRole(tokenId, Roles.Owner) {
|
||||||
) public requireTokenRole(tokenId, Roles.Owner) {
|
_grantTokenRole(tokenId, role, account);
|
||||||
_grantTokenRole(tokenId, role, account);
|
}
|
||||||
}
|
|
||||||
|
function revokeCollectionRole(Roles role, address account) public requireCollectionRole(Roles.Owner) {
|
||||||
function revokeCollectionRole(
|
_revokeCollectionRole(role, account);
|
||||||
Roles role,
|
}
|
||||||
address account
|
|
||||||
) public requireCollectionRole(Roles.Owner) {
|
function revokeTokenRole(
|
||||||
_revokeCollectionRole(role, account);
|
uint256 tokenId,
|
||||||
}
|
Roles role,
|
||||||
|
address account
|
||||||
function revokeTokenRole(
|
) public requireTokenRole(tokenId, Roles.Owner) {
|
||||||
uint256 tokenId,
|
_revokeTokenRole(tokenId, role, account);
|
||||||
Roles role,
|
}
|
||||||
address account
|
|
||||||
) public requireTokenRole(tokenId, Roles.Owner) {
|
function hasCollectionRole(Roles role, address account) public view returns (bool) {
|
||||||
_revokeTokenRole(tokenId, role, account);
|
uint256 currentVersion = _collectionRolesVersion.current();
|
||||||
}
|
|
||||||
|
return _collectionRoles[currentVersion][role].indexes[account] != 0;
|
||||||
function hasCollectionRole(
|
}
|
||||||
Roles role,
|
|
||||||
address account
|
function hasTokenRole(uint256 tokenId, Roles role, address account) public view returns (bool) {
|
||||||
) public view returns (bool) {
|
uint256 currentVersion = _tokenRolesVersion[tokenId].current();
|
||||||
uint256 currentVersion = _collectionRolesVersion.current();
|
return _tokenRoles[tokenId][currentVersion][role].indexes[account] != 0;
|
||||||
|
}
|
||||||
return _collectionRoles[currentVersion][role].indexes[account] != 0;
|
|
||||||
}
|
function getCollectionRoleMembers(Roles role) public view returns (address[] memory) {
|
||||||
|
uint256 currentVersion = _collectionRolesVersion.current();
|
||||||
function hasTokenRole(
|
return _collectionRoles[currentVersion][role].members;
|
||||||
uint256 tokenId,
|
}
|
||||||
Roles role,
|
|
||||||
address account
|
function getTokenRoleMembers(uint256 tokenId, Roles role) public view returns (address[] memory) {
|
||||||
) public view returns (bool) {
|
uint256 currentVersion = _tokenRolesVersion[tokenId].current();
|
||||||
uint256 currentVersion = _tokenRolesVersion[tokenId].current();
|
return _tokenRoles[tokenId][currentVersion][role].members;
|
||||||
return _tokenRoles[tokenId][currentVersion][role].indexes[account] != 0;
|
}
|
||||||
}
|
|
||||||
|
function _grantCollectionRole(Roles role, address account) internal {
|
||||||
function getCollectionRoleMembers(
|
uint256 currentVersion = _collectionRolesVersion.current();
|
||||||
Roles role
|
_grantRole(_collectionRoles[currentVersion][role], account);
|
||||||
) public view returns (address[] memory) {
|
emit CollectionRoleGranted(role, account, msg.sender);
|
||||||
uint256 currentVersion = _collectionRolesVersion.current();
|
}
|
||||||
return _collectionRoles[currentVersion][role].members;
|
|
||||||
}
|
function _revokeCollectionRole(Roles role, address account) internal {
|
||||||
|
uint256 currentVersion = _collectionRolesVersion.current();
|
||||||
function getTokenRoleMembers(
|
_revokeRole(_collectionRoles[currentVersion][role], account);
|
||||||
uint256 tokenId,
|
emit CollectionRoleRevoked(role, account, msg.sender);
|
||||||
Roles role
|
}
|
||||||
) public view returns (address[] memory) {
|
|
||||||
uint256 currentVersion = _tokenRolesVersion[tokenId].current();
|
function _grantTokenRole(uint256 tokenId, Roles role, address account) internal {
|
||||||
return _tokenRoles[tokenId][currentVersion][role].members;
|
uint256 currentVersion = _tokenRolesVersion[tokenId].current();
|
||||||
}
|
_grantRole(_tokenRoles[tokenId][currentVersion][role], account);
|
||||||
|
emit TokenRoleGranted(tokenId, role, account, msg.sender);
|
||||||
function _grantCollectionRole(Roles role, address account) internal {
|
}
|
||||||
uint256 currentVersion = _collectionRolesVersion.current();
|
|
||||||
_grantRole(_collectionRoles[currentVersion][role], account);
|
function _revokeTokenRole(uint256 tokenId, Roles role, address account) internal {
|
||||||
}
|
uint256 currentVersion = _tokenRolesVersion[tokenId].current();
|
||||||
|
_revokeRole(_tokenRoles[tokenId][currentVersion][role], account);
|
||||||
function _revokeCollectionRole(Roles role, address account) internal {
|
emit TokenRoleRevoked(tokenId, role, account, msg.sender);
|
||||||
uint256 currentVersion = _collectionRolesVersion.current();
|
}
|
||||||
_revokeRole(_collectionRoles[currentVersion][role], account);
|
|
||||||
}
|
function _grantRole(Role storage role, address account) internal {
|
||||||
|
if (role.indexes[account] == 0) {
|
||||||
function _grantTokenRole(
|
role.members.push(account);
|
||||||
uint256 tokenId,
|
role.indexes[account] = role.members.length;
|
||||||
Roles role,
|
}
|
||||||
address account
|
}
|
||||||
) internal {
|
|
||||||
uint256 currentVersion = _tokenRolesVersion[tokenId].current();
|
function _revokeRole(Role storage role, address account) internal {
|
||||||
_grantRole(_tokenRoles[tokenId][currentVersion][role], account);
|
if (role.indexes[account] != 0) {
|
||||||
}
|
uint256 index = role.indexes[account] - 1;
|
||||||
|
uint256 lastIndex = role.members.length - 1;
|
||||||
function _revokeTokenRole(
|
address lastAccount = role.members[lastIndex];
|
||||||
uint256 tokenId,
|
|
||||||
Roles role,
|
role.members[index] = lastAccount;
|
||||||
address account
|
role.indexes[lastAccount] = index + 1;
|
||||||
) internal {
|
|
||||||
uint256 currentVersion = _tokenRolesVersion[tokenId].current();
|
role.members.pop();
|
||||||
_revokeRole(_tokenRoles[tokenId][currentVersion][role], account);
|
delete role.indexes[account];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
function _grantRole(Role storage role, address account) internal {
|
|
||||||
if (role.indexes[account] == 0) {
|
/**
|
||||||
role.members.push(account);
|
* @dev Clears all token roles and not garants an owner role.
|
||||||
role.indexes[account] = role.members.length;
|
* Should be used when burns the token.
|
||||||
}
|
*/
|
||||||
}
|
function _clearAllTokenRoles(uint256 tokenId) internal {
|
||||||
|
_tokenRolesVersion[tokenId].increment();
|
||||||
function _revokeRole(Role storage role, address account) internal {
|
}
|
||||||
if (role.indexes[account] != 0) {
|
|
||||||
uint256 index = role.indexes[account] - 1;
|
/**
|
||||||
uint256 lastIndex = role.members.length - 1;
|
* @dev Clears all token roles and garants an owner role.
|
||||||
address lastAccount = role.members[lastIndex];
|
* Should be used when transfers the token.
|
||||||
|
*/
|
||||||
role.members[index] = lastAccount;
|
function _clearAllTokenRoles(uint256 tokenId, address newOwner) internal {
|
||||||
role.indexes[lastAccount] = index + 1;
|
_clearAllTokenRoles(tokenId);
|
||||||
|
_grantTokenRole(tokenId, Roles.Owner, newOwner);
|
||||||
role.members.pop();
|
}
|
||||||
delete role.indexes[account];
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dev Clears all token roles and not garants an owner role.
|
|
||||||
* Should be used when burns the token.
|
|
||||||
*/
|
|
||||||
function _clearAllTokenRoles(uint256 tokenId) internal {
|
|
||||||
_tokenRolesVersion[tokenId].increment();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dev Clears all token roles and garants an owner role.
|
|
||||||
* Should be used when transfers the token.
|
|
||||||
*/
|
|
||||||
function _clearAllTokenRoles(uint256 tokenId, address newOwner) internal {
|
|
||||||
_clearAllTokenRoles(tokenId);
|
|
||||||
_grantTokenRole(tokenId, Roles.Owner, newOwner);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -11,22 +11,16 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
||||||
using Strings for uint256;
|
using Strings for uint256;
|
||||||
using Counters for Counters.Counter;
|
using Counters for Counters.Counter;
|
||||||
|
|
||||||
event NewBuild(uint256 indexed token, string indexed commit_hash);
|
event NewBuild(uint256 indexed token, string indexed commitHash, address indexed triggeredBy);
|
||||||
event NewTokenName(uint256 indexed token, string indexed name);
|
event NewTokenName(uint256 indexed token, string indexed name, address indexed triggeredBy);
|
||||||
event NewTokenDescription(
|
event NewTokenDescription(uint256 indexed token, string indexed description, address indexed triggeredBy);
|
||||||
uint256 indexed token,
|
event NewTokenImage(uint256 indexed token, string indexed image, address indexed triggeredBy);
|
||||||
string indexed description
|
event NewTokenExternalURL(uint256 indexed token, string indexed externalURL, address indexed triggeredBy);
|
||||||
);
|
event NewTokenENS(uint256 indexed token, string indexed ENS, address indexed triggeredBy);
|
||||||
event NewTokenImage(uint256 indexed token, string indexed image);
|
|
||||||
event NewTokenExternalURL(
|
|
||||||
uint256 indexed token,
|
|
||||||
string indexed external_url
|
|
||||||
);
|
|
||||||
event NewTokenENS(uint256 indexed token, string indexed ENS);
|
|
||||||
|
|
||||||
struct Build {
|
struct Build {
|
||||||
string commit_hash;
|
string commitHash;
|
||||||
string git_repository;
|
string gitRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -38,37 +32,41 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
||||||
string name; // Name of the site
|
string name; // Name of the site
|
||||||
string description; // Description about the site
|
string description; // Description about the site
|
||||||
string image; // Preview Image IPFS Link
|
string image; // Preview Image IPFS Link
|
||||||
string external_url; // Site URL
|
string externalURL; // Site URL
|
||||||
string ENS; // ENS ID
|
string ENS; // ENS ID
|
||||||
uint256 current_build; // The current build number (Increments by one with each change, starts at zero)
|
uint256 currentBuild; // The current build number (Increments by one with each change, starts at zero)
|
||||||
mapping(uint256 => Build) builds; // Mapping to build details for each build number
|
mapping(uint256 => Build) builds; // Mapping to build details for each build number
|
||||||
}
|
}
|
||||||
|
|
||||||
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"
|
|
||||||
);
|
|
||||||
_;
|
_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Mints a token and returns a tokenId.
|
||||||
|
*
|
||||||
|
* If the `tokenId` has not been minted before, and the `to` address is not zero, emits a {Transfer} event.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the caller must have ``collectionOwner``'s admin role.
|
||||||
|
*
|
||||||
|
*/
|
||||||
function mint(
|
function mint(
|
||||||
address to,
|
address to,
|
||||||
string memory name,
|
string memory name,
|
||||||
string memory description,
|
string memory description,
|
||||||
string memory image,
|
string memory image,
|
||||||
string memory external_url,
|
string memory externalURL,
|
||||||
string memory ENS,
|
string memory ENS,
|
||||||
string memory commit_hash,
|
string memory commitHash,
|
||||||
string memory git_repository
|
string memory gitRepository
|
||||||
) public payable requireCollectionRole(Roles.Owner) returns (uint256) {
|
) public payable requireCollectionRole(Roles.Owner) returns (uint256) {
|
||||||
uint256 tokenId = _tokenIds.current();
|
uint256 tokenId = _tokenIds.current();
|
||||||
_mint(to, tokenId);
|
_mint(to, tokenId);
|
||||||
|
|
@ -78,19 +76,27 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
||||||
app.name = name;
|
app.name = name;
|
||||||
app.description = description;
|
app.description = description;
|
||||||
app.image = image;
|
app.image = image;
|
||||||
app.external_url = external_url;
|
app.externalURL = externalURL;
|
||||||
app.ENS = ENS;
|
app.ENS = ENS;
|
||||||
|
|
||||||
// The mint interaction is considered to be the first build of the site. Updates from now on all increment the current_build by one and update the mapping.
|
// The mint interaction is considered to be the first build of the site. Updates from now on all increment the currentBuild by one and update the mapping.
|
||||||
app.current_build = 0;
|
app.currentBuild = 0;
|
||||||
app.builds[0] = Build(commit_hash, git_repository);
|
app.builds[0] = Build(commitHash, gitRepository);
|
||||||
|
|
||||||
return tokenId;
|
return tokenId;
|
||||||
}
|
}
|
||||||
|
|
||||||
function tokenURI(
|
/**
|
||||||
uint256 tokenId
|
* @dev Returns the token metadata associated with the `tokenId`.
|
||||||
) public view virtual override returns (string memory) {
|
*
|
||||||
|
* Returns a based64 encoded string value of the URI.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the tokenId must be minted and valid.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function tokenURI(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];
|
||||||
|
|
@ -101,13 +107,13 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
||||||
'"name":"', app.name, '",',
|
'"name":"', app.name, '",',
|
||||||
'"description":"', app.description, '",',
|
'"description":"', app.description, '",',
|
||||||
'"owner":"', Strings.toHexString(uint160(owner), 20), '",',
|
'"owner":"', Strings.toHexString(uint160(owner), 20), '",',
|
||||||
'"external_url":"', app.external_url, '",',
|
'"external_url":"', app.externalURL, '",',
|
||||||
'"image":"', app.image, '",',
|
'"image":"', app.image, '",',
|
||||||
'"attributes": [',
|
'"attributes": [',
|
||||||
'{"trait_type": "ENS", "value":"', app.ENS,'"},',
|
'{"trait_type": "ENS", "value":"', app.ENS,'"},',
|
||||||
'{"trait_type": "Commit Hash", "value":"', app.builds[app.current_build].commit_hash,'"},',
|
'{"trait_type": "Commit Hash", "value":"', app.builds[app.currentBuild].commitHash,'"},',
|
||||||
'{"trait_type": "Repository", "value":"', app.builds[app.current_build].git_repository,'"},',
|
'{"trait_type": "Repository", "value":"', app.builds[app.currentBuild].gitRepository,'"},',
|
||||||
'{"trait_type": "Version", "value":"', Strings.toString(app.current_build),'"}',
|
'{"trait_type": "Version", "value":"', Strings.toString(app.currentBuild),'"}',
|
||||||
']',
|
']',
|
||||||
'}'
|
'}'
|
||||||
);
|
);
|
||||||
|
|
@ -115,9 +121,10 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
||||||
return string(abi.encodePacked(_baseURI(), Base64.encode((dataURI))));
|
return string(abi.encodePacked(_baseURI(), Base64.encode((dataURI))));
|
||||||
}
|
}
|
||||||
|
|
||||||
function supportsInterface(
|
/**
|
||||||
bytes4 interfaceId
|
* @dev See {IERC165-supportsInterface}.
|
||||||
) public view virtual override(ERC721) returns (bool) {
|
*/
|
||||||
|
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) {
|
||||||
return super.supportsInterface(interfaceId);
|
return super.supportsInterface(interfaceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -145,74 +152,149 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
||||||
super._beforeTokenTransfer(from, to, tokenId, batchSize);
|
super._beforeTokenTransfer(from, to, tokenId, batchSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev A baseURI internal function implementation to be called in the `tokenURI` function.
|
||||||
|
*/
|
||||||
function _baseURI() internal view virtual override returns (string memory) {
|
function _baseURI() internal view virtual override returns (string memory) {
|
||||||
return "data:application/json;base64,";
|
return "data:application/json;base64,";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Updates the `externalURL` metadata field of a minted `tokenId`.
|
||||||
|
*
|
||||||
|
* May emit a {NewTokenExternalURL} event.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the tokenId must be minted and valid.
|
||||||
|
* - the sender must have the `tokenController` role.
|
||||||
|
*
|
||||||
|
*/
|
||||||
function setTokenExternalURL(
|
function setTokenExternalURL(
|
||||||
uint256 tokenId,
|
uint256 tokenId,
|
||||||
string memory _tokenExternalURL
|
string memory _tokenExternalURL
|
||||||
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
||||||
_requireMinted(tokenId);
|
_requireMinted(tokenId);
|
||||||
_apps[tokenId].external_url = _tokenExternalURL;
|
_apps[tokenId].externalURL = _tokenExternalURL;
|
||||||
emit NewTokenExternalURL(tokenId, _tokenExternalURL);
|
emit NewTokenExternalURL(tokenId, _tokenExternalURL, msg.sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Updates the `ENS` metadata field of a minted `tokenId`.
|
||||||
|
*
|
||||||
|
* May emit a {NewTokenENS} event.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the tokenId must be minted and valid.
|
||||||
|
* - the sender must have the `tokenController` role.
|
||||||
|
*
|
||||||
|
*/
|
||||||
function setTokenENS(
|
function setTokenENS(
|
||||||
uint256 tokenId,
|
uint256 tokenId,
|
||||||
string memory _tokenENS
|
string memory _tokenENS
|
||||||
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
||||||
_requireMinted(tokenId);
|
_requireMinted(tokenId);
|
||||||
_apps[tokenId].ENS = _tokenENS;
|
_apps[tokenId].ENS = _tokenENS;
|
||||||
emit NewTokenENS(tokenId, _tokenENS);
|
emit NewTokenENS(tokenId, _tokenENS, msg.sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Updates the `name` metadata field of a minted `tokenId`.
|
||||||
|
*
|
||||||
|
* May emit a {NewTokenName} event.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the tokenId must be minted and valid.
|
||||||
|
* - the sender must have the `tokenController` role.
|
||||||
|
*
|
||||||
|
*/
|
||||||
function setTokenName(
|
function setTokenName(
|
||||||
uint256 tokenId,
|
uint256 tokenId,
|
||||||
string memory _tokenName
|
string memory _tokenName
|
||||||
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
||||||
_requireMinted(tokenId);
|
_requireMinted(tokenId);
|
||||||
_apps[tokenId].name = _tokenName;
|
_apps[tokenId].name = _tokenName;
|
||||||
emit NewTokenName(tokenId, _tokenName);
|
emit NewTokenName(tokenId, _tokenName, msg.sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Updates the `description` metadata field of a minted `tokenId`.
|
||||||
|
*
|
||||||
|
* May emit a {NewTokenDescription} event.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the tokenId must be minted and valid.
|
||||||
|
* - the sender must have the `tokenController` role.
|
||||||
|
*
|
||||||
|
*/
|
||||||
function setTokenDescription(
|
function setTokenDescription(
|
||||||
uint256 tokenId,
|
uint256 tokenId,
|
||||||
string memory _tokenDescription
|
string memory _tokenDescription
|
||||||
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
||||||
_requireMinted(tokenId);
|
_requireMinted(tokenId);
|
||||||
_apps[tokenId].description = _tokenDescription;
|
_apps[tokenId].description = _tokenDescription;
|
||||||
emit NewTokenDescription(tokenId, _tokenDescription);
|
emit NewTokenDescription(tokenId, _tokenDescription, msg.sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Updates the `image` metadata field of a minted `tokenId`.
|
||||||
|
*
|
||||||
|
* May emit a {NewTokenImage} event.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the tokenId must be minted and valid.
|
||||||
|
* - the sender must have the `tokenController` role.
|
||||||
|
*
|
||||||
|
*/
|
||||||
function setTokenImage(
|
function setTokenImage(
|
||||||
uint256 tokenId,
|
uint256 tokenId,
|
||||||
string memory _tokenImage
|
string memory _tokenImage
|
||||||
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
||||||
_requireMinted(tokenId);
|
_requireMinted(tokenId);
|
||||||
_apps[tokenId].image = _tokenImage;
|
_apps[tokenId].image = _tokenImage;
|
||||||
emit NewTokenImage(tokenId, _tokenImage);
|
emit NewTokenImage(tokenId, _tokenImage, msg.sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Adds a new build to a minted `tokenId`'s builds mapping.
|
||||||
|
*
|
||||||
|
* May emit a {NewBuild} event.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the tokenId must be minted and valid.
|
||||||
|
* - the sender must have the `tokenController` role.
|
||||||
|
*
|
||||||
|
*/
|
||||||
function setTokenBuild(
|
function setTokenBuild(
|
||||||
uint256 tokenId,
|
uint256 tokenId,
|
||||||
string memory _commit_hash,
|
string memory _commitHash,
|
||||||
string memory _git_repository
|
string memory _gitRepository
|
||||||
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
) public virtual requireTokenRole(tokenId, Roles.Controller) {
|
||||||
_requireMinted(tokenId);
|
_requireMinted(tokenId);
|
||||||
_apps[tokenId].builds[++_apps[tokenId].current_build] = Build(
|
_apps[tokenId].builds[++_apps[tokenId].currentBuild] = Build(_commitHash, _gitRepository);
|
||||||
_commit_hash,
|
emit NewBuild(tokenId, _commitHash, msg.sender);
|
||||||
_git_repository
|
|
||||||
);
|
|
||||||
emit NewBuild(tokenId, _commit_hash);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function burn(
|
/**
|
||||||
uint256 tokenId
|
* @dev Burns a previously minted `tokenId`.
|
||||||
) public virtual requireTokenRole(tokenId, Roles.Owner) {
|
*
|
||||||
|
* May emit a {Transfer} event.
|
||||||
|
*
|
||||||
|
* Requirements:
|
||||||
|
*
|
||||||
|
* - the tokenId must be minted and valid.
|
||||||
|
* - the sender must have the `tokenOwner` role.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function burn(uint256 tokenId) public virtual requireTokenRole(tokenId, Roles.Owner) {
|
||||||
super._burn(tokenId);
|
super._burn(tokenId);
|
||||||
|
|
||||||
if (bytes(_apps[tokenId].external_url).length != 0) {
|
if (bytes(_apps[tokenId].externalURL).length != 0) {
|
||||||
delete _apps[tokenId];
|
delete _apps[tokenId];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -68,13 +68,11 @@
|
||||||
"storageLayout",
|
"storageLayout",
|
||||||
"evm.gasEstimates"
|
"evm.gasEstimates"
|
||||||
],
|
],
|
||||||
"": [
|
"": ["ast"]
|
||||||
"ast"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"useLiteralContent": true
|
"useLiteralContent": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
"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,json}\"",
|
"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",
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
// npx hardhat run scripts/mint.js --network mumbai
|
// npx hardhat run scripts/mint.js --network mumbai
|
||||||
const { getContract } = require('./util');
|
const { getContract } = require('./util');
|
||||||
|
|
||||||
// TODO: make this arguments
|
// TODO: make this arguments
|
||||||
const params = [
|
const params = [
|
||||||
'0x7ED735b7095C05d78dF169F991f2b7f1A1F1A049', // to
|
'0x7ED735b7095C05d78dF169F991f2b7f1A1F1A049', // to
|
||||||
'Fleek App', // name
|
'Fleek App', // name
|
||||||
'Description', // description
|
'Description', // description
|
||||||
'https://fleek.network/fleek-network-logo-minimal.png', // image
|
'https://fleek.network/fleek-network-logo-minimal.png', // image
|
||||||
'https://fleek.co/', // external url
|
'https://fleek.co/', // external url
|
||||||
'fleek.eth', // ens
|
'fleek.eth', // ens
|
||||||
'6ea6ad16c46ae85faced7e50555ff7368422f57', // commit hash
|
'6ea6ad16c46ae85faced7e50555ff7368422f57', // commit hash
|
||||||
'https://github.com/org/repo', // repo
|
'https://github.com/org/repo', // repo
|
||||||
'fleek', // author
|
'fleek', // author
|
||||||
];
|
];
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const contract = getContract('FleekERC721');
|
const contract = getContract('FleekERC721');
|
||||||
|
|
||||||
const transaction = await contract.mint(...params);
|
const transaction = await contract.mint(...params);
|
||||||
|
|
||||||
console.log('Response: ', transaction);
|
console.log('Response: ', transaction);
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
// npx hardhat run scripts/tokenURI.js --network mumbai
|
// npx hardhat run scripts/tokenURI.js --network mumbai
|
||||||
const { getContract } = require('./util');
|
const { getContract } = require('./util');
|
||||||
|
|
||||||
// TODO: make this arguments
|
// TODO: make this arguments
|
||||||
const tokenId = 1;
|
const tokenId = 1;
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const contract = await getContract('FleekERC721');
|
const contract = await getContract('FleekERC721');
|
||||||
|
|
||||||
const transaction = await contract.tokenURI(tokenId);
|
const transaction = await contract.tokenURI(tokenId);
|
||||||
|
|
||||||
const parsed = JSON.parse(
|
const parsed = JSON.parse(
|
||||||
Buffer.from(transaction.slice(29), 'base64').toString('utf-8')
|
Buffer.from(transaction.slice(29), 'base64').toString('utf-8')
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log('Response: ', parsed);
|
console.log('Response: ', parsed);
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
// npx hardhat run scripts/upgrade.js --network mumbai
|
// npx hardhat run scripts/upgrade.js --network mumbai
|
||||||
const { getContract } = require('./util');
|
const { getContract } = require('./util');
|
||||||
|
|
||||||
// TODO: make this arguments
|
// TODO: make this arguments
|
||||||
const params = [
|
const params = [
|
||||||
1, // tokenId
|
1, // tokenId
|
||||||
'97e7908f70f0862d753c66689ff09e70caa43df2', // commit hash
|
'97e7908f70f0862d753c66689ff09e70caa43df2', // commit hash
|
||||||
'https://github.com/org/new-repo', // repo
|
'https://github.com/org/new-repo', // repo
|
||||||
'new-author', // author
|
'new-author', // author
|
||||||
];
|
];
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const contract = await getContract('FleekERC721');
|
const contract = await getContract('FleekERC721');
|
||||||
|
|
||||||
const transaction = await contract.setTokenBuild(...params);
|
const transaction = await contract.setTokenBuild(...params);
|
||||||
|
|
||||||
console.log('Response: ', transaction);
|
console.log('Response: ', transaction);
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
module.exports.getContract = async function (contractName) {
|
module.exports.getContract = async function (contractName) {
|
||||||
const {
|
const {
|
||||||
address,
|
address,
|
||||||
} = require(`../deployments/${hre.network.name}/${contractName}.json`);
|
} = require(`../deployments/${hre.network.name}/${contractName}.json`);
|
||||||
|
|
||||||
return hre.ethers.getContractAt(contractName, address);
|
return hre.ethers.getContractAt(contractName, address);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,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({
|
||||||
|
|
@ -207,7 +206,6 @@ describe('FleekERC721', () => {
|
||||||
it('should match the token owner', async () => {
|
it('should match the token owner', async () => {
|
||||||
const { contract, owner } = fixture;
|
const { contract, owner } = fixture;
|
||||||
const tokenOwner = await contract.ownerOf(tokenId);
|
const tokenOwner = await contract.ownerOf(tokenId);
|
||||||
|
|
||||||
expect(tokenOwner).to.equal(owner.address);
|
expect(tokenOwner).to.equal(owner.address);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -377,6 +375,43 @@ describe('FleekERC721', () => {
|
||||||
.grantTokenRole(tokenId, ROLES.CONTROLLER, otherAccount.address)
|
.grantTokenRole(tokenId, ROLES.CONTROLLER, otherAccount.address)
|
||||||
).to.not.be.reverted;
|
).to.not.be.reverted;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should emit event when token role is granted', async () => {
|
||||||
|
const { contract, owner, otherAccount } = fixture;
|
||||||
|
await expect(
|
||||||
|
contract.grantTokenRole(tokenId, ROLES.CONTROLLER, otherAccount.address)
|
||||||
|
)
|
||||||
|
.to.emit(contract, 'TokenRoleGranted')
|
||||||
|
.withArgs(
|
||||||
|
tokenId,
|
||||||
|
ROLES.CONTROLLER,
|
||||||
|
otherAccount.address,
|
||||||
|
owner.address
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit event when token role is revoked', async () => {
|
||||||
|
const { contract, owner, otherAccount } = fixture;
|
||||||
|
await contract.grantTokenRole(
|
||||||
|
tokenId,
|
||||||
|
ROLES.CONTROLLER,
|
||||||
|
otherAccount.address
|
||||||
|
);
|
||||||
|
await expect(
|
||||||
|
contract.revokeTokenRole(
|
||||||
|
tokenId,
|
||||||
|
ROLES.CONTROLLER,
|
||||||
|
otherAccount.address
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.to.emit(contract, 'TokenRoleRevoked')
|
||||||
|
.withArgs(
|
||||||
|
tokenId,
|
||||||
|
ROLES.CONTROLLER,
|
||||||
|
otherAccount.address,
|
||||||
|
owner.address
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Collection Roles', () => {
|
describe('Collection Roles', () => {
|
||||||
|
|
@ -520,5 +555,30 @@ describe('FleekERC721', () => {
|
||||||
.revokeCollectionRole(ROLES.OWNER, owner.address)
|
.revokeCollectionRole(ROLES.OWNER, owner.address)
|
||||||
).to.be.revertedWith('FleekAccessControl: must have collection role');
|
).to.be.revertedWith('FleekAccessControl: must have collection role');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should emit event when role is granted', async () => {
|
||||||
|
const { owner, contract, otherAccount } = fixture;
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
contract.grantCollectionRole(ROLES.CONTROLLER, otherAccount.address)
|
||||||
|
)
|
||||||
|
.to.emit(contract, 'CollectionRoleGranted')
|
||||||
|
.withArgs(ROLES.CONTROLLER, otherAccount.address, owner.address);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit event when role is revoked', async () => {
|
||||||
|
const { owner, contract, otherAccount } = fixture;
|
||||||
|
|
||||||
|
await contract.grantCollectionRole(
|
||||||
|
ROLES.CONTROLLER,
|
||||||
|
otherAccount.address
|
||||||
|
);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
contract.revokeCollectionRole(ROLES.CONTROLLER, otherAccount.address)
|
||||||
|
)
|
||||||
|
.to.emit(contract, 'CollectionRoleRevoked')
|
||||||
|
.withArgs(ROLES.CONTROLLER, otherAccount.address, owner.address);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,46 +1,46 @@
|
||||||
{
|
{
|
||||||
"name": "sites-as-nfts",
|
"name": "sites-as-nfts",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"description": "Minimal UI for sites as NFTs",
|
"description": "Minimal UI for sites as NFTs",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"author": "Fleek",
|
"author": "Fleek",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chakra-ui/icons": "^2.0.13",
|
"@chakra-ui/icons": "^2.0.13",
|
||||||
"@chakra-ui/react": "^2.4.2",
|
"@chakra-ui/react": "^2.4.2",
|
||||||
"@emotion/react": "^11.10.5",
|
"@emotion/react": "^11.10.5",
|
||||||
"@emotion/styled": "^11.10.5",
|
"@emotion/styled": "^11.10.5",
|
||||||
"formik": "^2.2.9",
|
"formik": "^2.2.9",
|
||||||
"framer-motion": "^7.6.17",
|
"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"
|
"react-router-dom": "^6.4.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.2.3",
|
"@types/jest": "^29.2.3",
|
||||||
"@types/node": "^18.11.9",
|
"@types/node": "^18.11.9",
|
||||||
"@types/react": "^18.0.25",
|
"@types/react": "^18.0.25",
|
||||||
"@types/react-dom": "^18.0.9",
|
"@types/react-dom": "^18.0.9",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||||
"@typescript-eslint/parser": "^5.45.0",
|
"@typescript-eslint/parser": "^5.45.0",
|
||||||
"@vitejs/plugin-react": "^2.2.0",
|
"@vitejs/plugin-react": "^2.2.0",
|
||||||
"eslint": "^8.28.0",
|
"eslint": "^8.28.0",
|
||||||
"eslint-config-prettier": "^8.5.0",
|
"eslint-config-prettier": "^8.5.0",
|
||||||
"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",
|
"ethers": "^5.7.2",
|
||||||
"prettier": "^2.8.0",
|
"prettier": "^2.8.0",
|
||||||
"react-query": "^3.39.2",
|
"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",
|
||||||
"vite-tsconfig-paths": "^3.6.0"
|
"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';
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ export const CardAttributes = ({ heading, info }: CardAttributesProps) => (
|
||||||
width="200px"
|
width="200px"
|
||||||
>
|
>
|
||||||
<CardBody width="200px">
|
<CardBody width="200px">
|
||||||
<TileInfo size="sm" heading={heading} info={info} width={160} />
|
<TileInfo size="sm" heading={heading} info={info} widthText={160} />
|
||||||
</CardBody>
|
</CardBody>
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
export * from './card-attributes';
|
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 './loading';
|
||||||
export * from './home-button';
|
export * from './home-button';
|
||||||
export * from './image-preview';
|
export * from './image-preview';
|
||||||
export * from './tile-info';
|
export * from './tile-info';
|
||||||
export * from './card';
|
export * from './card';
|
||||||
export * from './accordion-item';
|
export * from './accordion-item';
|
||||||
export * from './input-field-form';
|
export * from './input-field-form';
|
||||||
export * from './attributes-detail';
|
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';
|
||||||
|
|
|
||||||
|
|
@ -8,22 +8,36 @@ import {
|
||||||
|
|
||||||
type TileInfoProps = HeadingProps & {
|
type TileInfoProps = HeadingProps & {
|
||||||
heading: string;
|
heading: string;
|
||||||
info: string;
|
info: React.ReactNode;
|
||||||
width?: number;
|
widthText?: number;
|
||||||
|
textAlignText?: 'center' | 'left';
|
||||||
|
direction?: 'column' | 'row';
|
||||||
|
alignItems?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TileInfo = forwardRef<TileInfoProps, 'h2'>(
|
export const TileInfo = forwardRef<TileInfoProps, 'h2'>(
|
||||||
({ heading, info, width = 250, ...headingProps }, ref) => (
|
(
|
||||||
<Flex direction="column" alignItems="center">
|
{
|
||||||
|
heading,
|
||||||
|
info,
|
||||||
|
widthText = 250,
|
||||||
|
textAlignText = 'center',
|
||||||
|
direction = 'column',
|
||||||
|
alignItems = 'center',
|
||||||
|
...headingProps
|
||||||
|
},
|
||||||
|
ref
|
||||||
|
) => (
|
||||||
|
<Flex direction={direction} alignItems={alignItems}>
|
||||||
<Heading ref={ref} {...headingProps}>
|
<Heading ref={ref} {...headingProps}>
|
||||||
{heading}
|
{heading}
|
||||||
</Heading>
|
</Heading>
|
||||||
<Text
|
<Text
|
||||||
width={width}
|
width={widthText}
|
||||||
whiteSpace="nowrap"
|
whiteSpace="nowrap"
|
||||||
overflow="hidden"
|
overflow="hidden"
|
||||||
textOverflow="ellipsis"
|
textOverflow="ellipsis"
|
||||||
textAlign="center"
|
textAlign={textAlignText}
|
||||||
>
|
>
|
||||||
{info}
|
{info}
|
||||||
</Text>
|
</Text>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
export * from './use-toast';
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
import { useToast as useToastChakra } from '@chakra-ui/react';
|
||||||
|
|
||||||
|
export const useToast = () => {
|
||||||
|
return useToastChakra({
|
||||||
|
duration: 3000,
|
||||||
|
isClosable: true,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
@ -1,53 +1,52 @@
|
||||||
const MINT_PARAMS = {
|
const MINT_PARAMS = {
|
||||||
name: 'Fleek Test App',
|
name: 'Fleek Test App',
|
||||||
description: 'Fleek Test App Description',
|
description: 'Fleek Test App Description',
|
||||||
image: 'https://storageapi.fleek.co/fleek-team-bucket/site/fleek-logo.png',
|
image: 'https://storageapi.fleek.co/fleek-team-bucket/site/fleek-logo.png',
|
||||||
ens: 'fleek.eth',
|
ens: 'fleek.eth',
|
||||||
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',
|
author: 'author',
|
||||||
};
|
};
|
||||||
|
|
||||||
const mockDetail = {
|
const mockDetail = {
|
||||||
owner: '0x8f7b9e1b5f1f2c3c1f8b0b1b2e1b2f1f2c3c1f8b',
|
owner: '0x8f7b9e1b5f1f2c3c1f8b0b1b2e1b2f1f2c3c1f8b',
|
||||||
name: MINT_PARAMS.name,
|
name: MINT_PARAMS.name,
|
||||||
description: MINT_PARAMS.description,
|
description: MINT_PARAMS.description,
|
||||||
image: MINT_PARAMS.image,
|
image: MINT_PARAMS.image,
|
||||||
external_url: MINT_PARAMS.externalUrl,
|
external_url: MINT_PARAMS.externalUrl,
|
||||||
attributes: [
|
attributes: [
|
||||||
{
|
{
|
||||||
trait_type: 'ENS',
|
trait_type: 'ENS',
|
||||||
value: MINT_PARAMS.ens,
|
value: MINT_PARAMS.ens,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
trait_type: 'Commit Hash',
|
trait_type: 'Commit Hash',
|
||||||
value: MINT_PARAMS.commitHash,
|
value: MINT_PARAMS.commitHash,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
trait_type: 'Repository',
|
trait_type: 'Repository',
|
||||||
value: MINT_PARAMS.gitRepository,
|
value: MINT_PARAMS.gitRepository,
|
||||||
},
|
},
|
||||||
//As we're not showing this on the UI, we can remove it
|
//As we're not showing this on the UI, we can remove it
|
||||||
// {
|
// {
|
||||||
// trait_type: 'Author',
|
// trait_type: 'Author',
|
||||||
// value: MINT_PARAMS.author,
|
// value: MINT_PARAMS.author,
|
||||||
// },
|
// },
|
||||||
// {
|
// {
|
||||||
// trait_type: 'Version',
|
// trait_type: 'Version',
|
||||||
// value: '0',
|
// value: '0',
|
||||||
// },
|
// },
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
export const fetchSiteDetail = async (tokenId: string) => {
|
export const fetchSiteDetail = async (tokenId: string) => {
|
||||||
//TODO get site detail from api
|
//TODO get site detail from api
|
||||||
return new Promise((resolved, reject) => {
|
return new Promise((resolved, reject) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
resolved({
|
resolved({
|
||||||
data: { ...mockDetail, externalUrl: mockDetail.external_url },
|
data: { ...mockDetail, externalUrl: mockDetail.external_url },
|
||||||
});
|
});
|
||||||
}, 2500);
|
}, 2500);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
export * from './mint-site';
|
export * from './mint-site';
|
||||||
export * from './detail';
|
export * from './detail';
|
||||||
|
export * from './list';
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
@ -1,25 +1,24 @@
|
||||||
import { SiteNFT } from '@/types';
|
import { SiteNFT } from '@/types';
|
||||||
|
|
||||||
export const mintSiteNFT = async (props: SiteNFT) => {
|
export const mintSiteNFT = async (props: SiteNFT) => {
|
||||||
const { name, description, owner, externalUrl, ens, commitHash, repo } =
|
const { name, description, owner, externalUrl, ens, commitHash, repo } =
|
||||||
props;
|
props;
|
||||||
return new Promise((resolved, rejected) => {
|
return new Promise((resolved, rejected) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
// returning data of the site for now
|
// returning data of the site for now
|
||||||
// just leave rejected for testing purposes
|
// just leave rejected for testing purposes
|
||||||
resolved({
|
resolved({
|
||||||
status: 'success',
|
status: 'success',
|
||||||
data: {
|
data: {
|
||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
owner,
|
owner,
|
||||||
externalUrl,
|
externalUrl,
|
||||||
ens,
|
ens,
|
||||||
commitHash,
|
commitHash,
|
||||||
repo,
|
repo,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}, 1000);
|
}, 1000);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,22 @@
|
||||||
import { extendTheme } from '@chakra-ui/react';
|
import { extendTheme } from '@chakra-ui/react';
|
||||||
|
|
||||||
const appTheme = {
|
const appTheme = {
|
||||||
styles: {
|
styles: {
|
||||||
global: {
|
global: {
|
||||||
body: {
|
body: {
|
||||||
color: 'rgba(255, 255, 255)',
|
color: 'rgba(255, 255, 255)',
|
||||||
bg: '#161616',
|
bg: '#161616',
|
||||||
margin: '50px',
|
margin: '50px',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
fonts: {
|
fonts: {
|
||||||
heading: 'Nunito Sans,Helvetica,Arial,Lucida,sans-serif',
|
heading: 'Nunito Sans,Helvetica,Arial,Lucida,sans-serif',
|
||||||
body: 'Nunito Sans,Helvetica,Arial,Lucida,sans-serif',
|
body: 'Nunito Sans,Helvetica,Arial,Lucida,sans-serif',
|
||||||
},
|
},
|
||||||
sizes: {
|
sizes: {
|
||||||
modalHeight: '345px',
|
modalHeight: '345px',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const theme = extendTheme(appTheme);
|
export const theme = extendTheme(appTheme);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
export * from './mint-site';
|
export * from './mint-site';
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,19 @@
|
||||||
export type SiteNFT = {
|
export type SiteNFT = {
|
||||||
name: string;
|
name: string;
|
||||||
description: string;
|
description: string;
|
||||||
owner: string;
|
owner: string;
|
||||||
externalUrl: string;
|
externalUrl: string;
|
||||||
image: string;
|
image: string;
|
||||||
ens?: string;
|
ens?: string;
|
||||||
commitHash: string;
|
commitHash: string;
|
||||||
repo: string;
|
repo: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SiteNFTDetail = Omit<SiteNFT, 'ens' | 'commitHash' | 'repo'> & {
|
export type SiteNFTDetail = Omit<SiteNFT, 'ens' | 'commitHash' | 'repo'> & {
|
||||||
attributes: [
|
attributes: [
|
||||||
{
|
{
|
||||||
trait_type: string;
|
trait_type: string;
|
||||||
value: string;
|
value: string;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
export const getRepoAndCommit = (url: string) => {
|
export const getRepoAndCommit = (url: string) => {
|
||||||
//TODO validate is a github url
|
//TODO validate is a github url
|
||||||
url = url.replace('/commit', '');
|
url = url.replace('/commit', '');
|
||||||
const lastIndexSlash = url.lastIndexOf('/');
|
const lastIndexSlash = url.lastIndexOf('/');
|
||||||
const repo = url.substring(0, lastIndexSlash + 1).slice(0, lastIndexSlash);
|
const repo = url.substring(0, lastIndexSlash + 1).slice(0, lastIndexSlash);
|
||||||
const commit_hash = url.substring(lastIndexSlash + 1, url.length);
|
const commit_hash = url.substring(lastIndexSlash + 1, url.length);
|
||||||
return { repo, commit_hash };
|
return { repo, commit_hash };
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
export * from './format';
|
export * from './format';
|
||||||
export * from './validation';
|
export * from './validation';
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
export const isValidUrl = (url: string) => {
|
export const isValidUrl = (url: string) => {
|
||||||
const regex =
|
const regex =
|
||||||
/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
|
/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
|
||||||
return regex.test(url);
|
return regex.test(url);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const isValidImageUrl = (url: string) => {
|
export const isValidImageUrl = (url: string) => {
|
||||||
const regex = /^https?:\/\/.+\.(jpg|jpeg|png|gif|svg)$/;
|
const regex = /^https?:\/\/.+\.(jpg|jpeg|png|gif|svg)$/;
|
||||||
return regex.test(url);
|
return regex.test(url);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
export * from './detail';
|
export * from './detail';
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
export * from './error-screen';
|
export * from './error-screen';
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,16 @@ import React from 'react';
|
||||||
import { Heading, Button } from '@chakra-ui/react';
|
import { Heading, Button } from '@chakra-ui/react';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { Flex } from '@chakra-ui/react';
|
import { Flex } from '@chakra-ui/react';
|
||||||
|
import { ListSites } from './list';
|
||||||
|
|
||||||
export const Home = () => {
|
export const Home = () => {
|
||||||
return (
|
return (
|
||||||
<Flex flexDirection="column" alignItems="center">
|
<Flex flexDirection="column" alignItems="center">
|
||||||
<Heading>Welcome to Sites as NFTs by Fleek</Heading>
|
<Heading marginTop="80px">Welcome to Sites as NFTs by Fleek</Heading>
|
||||||
{/* TODO add list sites */}
|
<Button as={Link} to="/mint-site" mt="20px" mb="50px">
|
||||||
<Button as={Link} to="/mint-site" mt={10}>
|
|
||||||
Mint your site
|
Mint your site
|
||||||
</Button>
|
</Button>
|
||||||
|
<ListSites />
|
||||||
</Flex>
|
</Flex>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
export * from './home';
|
export * from './home';
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
export * from './home';
|
export * from './home';
|
||||||
export * from './mint-site';
|
export * from './mint-site';
|
||||||
export * from './detail';
|
export * from './detail';
|
||||||
export * from './error-screen';
|
export * from './error-screen';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,2 @@
|
||||||
export * from './mint-site';
|
export * from './mint-site';
|
||||||
export * from './mint-site.utils';
|
export * from './mint-site.utils';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,6 @@ import {
|
||||||
Button,
|
Button,
|
||||||
FormErrorMessage,
|
FormErrorMessage,
|
||||||
IconButton,
|
IconButton,
|
||||||
useToast,
|
|
||||||
UseToastOptions,
|
|
||||||
Textarea,
|
Textarea,
|
||||||
Grid,
|
Grid,
|
||||||
GridItem,
|
GridItem,
|
||||||
|
|
@ -21,6 +19,7 @@ import { mintSiteNFT } from '@/mocks';
|
||||||
import { getRepoAndCommit } from '@/utils';
|
import { getRepoAndCommit } from '@/utils';
|
||||||
import { validateFields } from './mint-site.utils';
|
import { validateFields } from './mint-site.utils';
|
||||||
import { InputFieldForm } from '@/components';
|
import { InputFieldForm } from '@/components';
|
||||||
|
import { useToast } from '@/hooks';
|
||||||
|
|
||||||
interface FormValues {
|
interface FormValues {
|
||||||
name: string;
|
name: string;
|
||||||
|
|
@ -43,22 +42,7 @@ const initialValues = {
|
||||||
} as FormValues;
|
} as FormValues;
|
||||||
|
|
||||||
export const MintSite = () => {
|
export const MintSite = () => {
|
||||||
const toast = useToast();
|
const setToastInfo = useToast();
|
||||||
|
|
||||||
//TODO add hook to show the toast
|
|
||||||
const showToast = (
|
|
||||||
title: string,
|
|
||||||
description: string,
|
|
||||||
status: UseToastOptions['status']
|
|
||||||
) => {
|
|
||||||
toast({
|
|
||||||
title,
|
|
||||||
description,
|
|
||||||
status,
|
|
||||||
duration: 3000,
|
|
||||||
isClosable: true,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSubmitForm = useCallback(async (values: FormValues) => {
|
const handleSubmitForm = useCallback(async (values: FormValues) => {
|
||||||
const {
|
const {
|
||||||
|
|
@ -85,13 +69,18 @@ export const MintSite = () => {
|
||||||
repo,
|
repo,
|
||||||
});
|
});
|
||||||
//TODO connect with the integration
|
//TODO connect with the integration
|
||||||
showToast('Success!', 'Your site has been minted.', 'success');
|
setToastInfo({
|
||||||
|
title: 'Success!',
|
||||||
|
description: 'Your site has been minted.',
|
||||||
|
status: 'success',
|
||||||
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
showToast(
|
setToastInfo({
|
||||||
'Error!',
|
title: 'Error!',
|
||||||
'We had an error while minting your site. Please try again later',
|
description:
|
||||||
'error'
|
'We had an error while minting your site. Please try again later',
|
||||||
);
|
status: 'error',
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,35 @@
|
||||||
import { isValidImageUrl, isValidUrl } from '@/utils';
|
import { isValidImageUrl, isValidUrl } from '@/utils';
|
||||||
import { ethers } from 'ethers';
|
import { ethers } from 'ethers';
|
||||||
import { FormikValues } from 'formik';
|
import { FormikValues } from 'formik';
|
||||||
|
|
||||||
export const validateFields = (values: FormikValues) => {
|
export const validateFields = (values: FormikValues) => {
|
||||||
const errors: FormikValues = {};
|
const errors: FormikValues = {};
|
||||||
if (!values.name) {
|
if (!values.name) {
|
||||||
errors.name = 'Name cannot be empty';
|
errors.name = 'Name cannot be empty';
|
||||||
}
|
}
|
||||||
if (!values.description) {
|
if (!values.description) {
|
||||||
errors.description = 'Description cannot be empty';
|
errors.description = 'Description cannot be empty';
|
||||||
}
|
}
|
||||||
if (!values.githubCommit) {
|
if (!values.githubCommit) {
|
||||||
errors.githubCommit = 'Github commit cannot be empty';
|
errors.githubCommit = 'Github commit cannot be empty';
|
||||||
} else if (!isValidUrl(values.githubCommit)) {
|
} else if (!isValidUrl(values.githubCommit)) {
|
||||||
errors.githubCommit = 'Github commit is not a valid url';
|
errors.githubCommit = 'Github commit is not a valid url';
|
||||||
}
|
}
|
||||||
if (!values.ownerAddress) {
|
if (!values.ownerAddress) {
|
||||||
errors.ownerAddress = 'Owner address cannot be empty';
|
errors.ownerAddress = 'Owner address cannot be empty';
|
||||||
} else if (!ethers.utils.isAddress(values.ownerAddress)) {
|
} else if (!ethers.utils.isAddress(values.ownerAddress)) {
|
||||||
errors.ownerAddress = 'Owner address is not a valid address';
|
errors.ownerAddress = 'Owner address is not a valid address';
|
||||||
}
|
}
|
||||||
if (!values.externalUrl) {
|
if (!values.externalUrl) {
|
||||||
errors.externalUrl = 'External url cannot be empty';
|
errors.externalUrl = 'External url cannot be empty';
|
||||||
} else if (!isValidUrl(values.externalUrl)) {
|
} else if (!isValidUrl(values.externalUrl)) {
|
||||||
errors.externalUrl = 'External url is not a valid url';
|
errors.externalUrl = 'External url is not a valid url';
|
||||||
}
|
}
|
||||||
if (!values.image) {
|
if (!values.image) {
|
||||||
errors.image = 'Image cannot be empty';
|
errors.image = 'Image cannot be empty';
|
||||||
} else if (!isValidImageUrl(values.image)) {
|
} else if (!isValidImageUrl(values.image)) {
|
||||||
errors.image = 'Image url is not a valid url';
|
errors.image = 'Image url is not a valid url';
|
||||||
}
|
}
|
||||||
//TODO check if ENS is a valid ens name
|
//TODO check if ENS is a valid ens name
|
||||||
return errors;
|
return errors;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,25 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"module": "ES2020",
|
"module": "ES2020",
|
||||||
"target": "ESNext",
|
"target": "ESNext",
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"rootDirs": ["src"],
|
"rootDirs": ["src"],
|
||||||
"baseUrl": "src",
|
"baseUrl": "src",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["*"]
|
"@/*": ["*"]
|
||||||
},
|
},
|
||||||
"forceConsistentCasingInFileNames": true,
|
"forceConsistentCasingInFileNames": true,
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"jsx": "react-jsx",
|
"jsx": "react-jsx",
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"noUnusedLocals": true,
|
"noUnusedLocals": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"types": ["vite/client"]
|
"types": ["vite/client"]
|
||||||
},
|
},
|
||||||
"include": ["./src", "./*.ts"]
|
"include": ["./src", "./*.ts"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import react from '@vitejs/plugin-react';
|
import react from '@vitejs/plugin-react';
|
||||||
import tsconfigPaths from 'vite-tsconfig-paths';
|
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react(), tsconfigPaths()],
|
plugins: [react(), tsconfigPaths()],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
428
yarn.lock
428
yarn.lock
|
|
@ -415,9 +415,9 @@
|
||||||
integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==
|
integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==
|
||||||
|
|
||||||
"@noble/hashes@~1.1.1":
|
"@noble/hashes@~1.1.1":
|
||||||
version "1.1.4"
|
version "1.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.4.tgz#2611ebf5764c1bf754da7c7794de4fb30512336d"
|
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.5.tgz#1a0377f3b9020efe2fae03290bd2a12140c95c11"
|
||||||
integrity sha512-+PYsVPrTSqtVjatKt2A/Proukn2Yrz61OBThOCKErc5w2/r1Fh37vbDv0Eah7pyNltrmacjwTvdw3JoR+WE4TA==
|
integrity sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==
|
||||||
|
|
||||||
"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0":
|
"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0":
|
||||||
version "1.6.3"
|
version "1.6.3"
|
||||||
|
|
@ -934,9 +934,9 @@
|
||||||
integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==
|
integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "18.11.11"
|
version "18.11.17"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.17.tgz#5c009e1d9c38f4a2a9d45c0b0c493fe6cdb4bcb5"
|
||||||
integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==
|
integrity sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==
|
||||||
|
|
||||||
"@types/node@^10.0.3":
|
"@types/node@^10.0.3":
|
||||||
version "10.17.60"
|
version "10.17.60"
|
||||||
|
|
@ -1033,9 +1033,9 @@ acorn@^8.4.1:
|
||||||
integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
|
integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
|
||||||
|
|
||||||
address@^1.0.1:
|
address@^1.0.1:
|
||||||
version "1.2.1"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/address/-/address-1.2.1.tgz#25bb61095b7522d65b357baa11bc05492d4c8acd"
|
resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
|
||||||
integrity sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==
|
integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
|
||||||
|
|
||||||
adm-zip@^0.4.16:
|
adm-zip@^0.4.16:
|
||||||
version "0.4.16"
|
version "0.4.16"
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -3356,9 +3444,9 @@ ieee754@^1.1.13, ieee754@^1.2.1:
|
||||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||||
|
|
||||||
ignore@^5.1.1:
|
ignore@^5.1.1:
|
||||||
version "5.2.1"
|
version "5.2.4"
|
||||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c"
|
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
|
||||||
integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==
|
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
|
||||||
|
|
||||||
immutable@^4.0.0-rc.12:
|
immutable@^4.0.0-rc.12:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
|
|
@ -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,55 +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==
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
pinkie-promise@^2.0.0:
|
|
||||||
version "2.0.1"
|
|
||||||
resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz"
|
|
||||||
integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
|
|
||||||
dependencies:
|
|
||||||
pinkie "^2.0.0"
|
|
||||||
|
|
||||||
pinkie@^2.0.0:
|
|
||||||
version "2.0.4"
|
|
||||||
resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"
|
|
||||||
integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
|
|
||||||
|
|
||||||
pinst@^3.0.0:
|
pinst@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/pinst/-/pinst-3.0.0.tgz#80dec0a85f1f993c6084172020f3dbf512897eec"
|
resolved "https://registry.yarnpkg.com/pinst/-/pinst-3.0.0.tgz#80dec0a85f1f993c6084172020f3dbf512897eec"
|
||||||
integrity sha512-cengSmBxtCyaJqtRSvJorIIZXMXg+lJ3sIljGmtBGUVonMnMsVJbnzl6jGN1HkOWwxNuJynCJ2hXxxqCQrFDdw==
|
integrity sha512-cengSmBxtCyaJqtRSvJorIIZXMXg+lJ3sIljGmtBGUVonMnMsVJbnzl6jGN1HkOWwxNuJynCJ2hXxxqCQrFDdw==
|
||||||
|
|
||||||
posix-character-classes@^0.1.0:
|
|
||||||
version "0.1.1"
|
|
||||||
resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz"
|
|
||||||
integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
|
|
||||||
|
|
||||||
postinstall-postinstall@^2.1.0:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz"
|
|
||||||
integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==
|
|
||||||
|
|
||||||
precond@0.2:
|
|
||||||
version "0.2.3"
|
|
||||||
resolved "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz"
|
|
||||||
integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==
|
|
||||||
|
|
||||||
>>>>>>> 4ca5c3c (chore: add postinstall script)
|
|
||||||
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"
|
||||||
|
|
@ -4903,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"
|
||||||
|
|
@ -4949,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.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4"
|
||||||
|
integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==
|
||||||
|
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"
|
||||||
|
|
@ -5112,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"
|
||||||
|
|
@ -5130,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"
|
||||||
|
|
@ -5149,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"
|
||||||
|
|
@ -5158,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"
|
||||||
|
|
@ -5271,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"
|
||||||
|
|
@ -5297,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==
|
||||||
|
|
@ -5306,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==
|
||||||
|
|
@ -5350,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"
|
||||||
|
|
@ -5481,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"
|
||||||
|
|
@ -5542,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"
|
||||||
|
|
@ -5622,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"
|
||||||
|
|
@ -5647,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"
|
||||||
|
|
||||||
|
|
@ -6047,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"
|
||||||
|
|
@ -6078,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"
|
||||||
|
|
@ -6176,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"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue