Merge branch 'master' of github.com:ethereum/geth-website into fix-last-edit-timestamp

This commit is contained in:
Nicolás Quiroz 2022-12-16 15:49:26 -03:00
commit 79893a58d3
44 changed files with 550 additions and 195 deletions

3
.gitignore vendored

@ -35,3 +35,6 @@ yarn-error.log*
# typescript # typescript
*.tsbuildinfo *.tsbuildinfo
next-env.d.ts next-env.d.ts
# Sitemaps
sitemap*.xml

@ -3,7 +3,7 @@ title: Geth for Mobile
description: Introduction to mobile development with Geth description: Introduction to mobile development with Geth
--- ---
Embedding clients into mobile devices is an important part of Ethereum's decentralization vision. This is because being able to verify data, follow the chain and submit transactions without relying on centralized intermediaries is critical for censorship resistant access to the network. Doing so on a mobile device is the most convenient route for many users. This relies on Geth running a [light client](/docs/interface/les) on the mobile Embedding clients into mobile devices is an important part of Ethereum's decentralization vision. This is because being able to verify data, follow the chain and submit transactions without relying on centralized intermediaries is critical for censorship resistant access to the network. Doing so on a mobile device is the most convenient route for many users. This relies on Geth running a [light client](/docs/fundamentals/les) on the mobile
device and exposing an API that developers can use to build mobile apps on top of Geth. This page outlines how to download Geth for mobile and how to get started with managing Ethereum accounts in mobile applications. Ethereum mobile development is relatively nascent, but there is an active developer community. For further information on Geth mobile development visit the #mobile channel in the [Geth discord](https://discord.gg/wQdpS5aA). device and exposing an API that developers can use to build mobile apps on top of Geth. This page outlines how to download Geth for mobile and how to get started with managing Ethereum accounts in mobile applications. Ethereum mobile development is relatively nascent, but there is an active developer community. For further information on Geth mobile development visit the #mobile channel in the [Geth discord](https://discord.gg/wQdpS5aA).
## Download and install {#download-and-install} ## Download and install {#download-and-install}

@ -61,7 +61,7 @@ The following code snippet shows how an ABI can be generated for `Storage.sol` u
solc --abi Storage.sol -o build solc --abi Storage.sol -o build
``` ```
The ABI can also be generated in other ways such as using the `compile` commands in development frameworks such as [Truffle](https://trufflesuite.com/docs/truffle/), [Hardhat](https://hardhat.org/) and [Brownie](https://eth-brownie.readthedocs.io/en/stable/) or in the online IDE [Remix](https://remix.ethereum.org/). ABIs for existing verified contracts can be downloaded from [Etherscan](etherscan.io). The ABI can also be generated in other ways such as using the `compile` commands in development frameworks such as [Truffle](https://trufflesuite.com/docs/truffle/), [Hardhat](https://hardhat.org/) and [Brownie](https://eth-brownie.readthedocs.io/en/stable/) or in the online IDE [Remix](https://remix.ethereum.org/). ABIs for existing verified contracts can be downloaded from [Etherscan](https://etherscan.io/).
The ABI for `Storage.sol` (`Storage.abi`) looks as follows: The ABI for `Storage.sol` (`Storage.abi`) looks as follows:
@ -262,7 +262,7 @@ Note that `DeployStorage` returns four variables:
- `address`: the deployment address of the contract - `address`: the deployment address of the contract
- `tx`: the transaction hash that can be queried using Geth or a service like [Etherscan](etherscan.io) - `tx`: the transaction hash that can be queried using Geth or a service like [Etherscan](https://etherscan.io/)
- `instance`: an instance of the deployed contract whose functions can be called in the Go application - `instance`: an instance of the deployed contract whose functions can be called in the Go application

@ -55,7 +55,7 @@ Read more about Geth's basic traces on the [basic traces page](/docs/developers/
The tracing API accepts an optional `tracer` parameter that defines how the data returned to the API call should be processed. If this parameter is ommitted the default tracer is used. The default is the struct (or 'opcode') logger. These raw opcode traces are sometimes useful, but the returned data is very low level and can be too extensive and awkward to read for many use-cases. A full opcode trace can easily go into the hundreds of megabytes, making them very resource intensive to get out of the node and process externally. For these reasons, there are a set of non-default built-in tracers that can be named in the API call to return different data from the method. Under the hood, these tracers are Go or Javascript The tracing API accepts an optional `tracer` parameter that defines how the data returned to the API call should be processed. If this parameter is ommitted the default tracer is used. The default is the struct (or 'opcode') logger. These raw opcode traces are sometimes useful, but the returned data is very low level and can be too extensive and awkward to read for many use-cases. A full opcode trace can easily go into the hundreds of megabytes, making them very resource intensive to get out of the node and process externally. For these reasons, there are a set of non-default built-in tracers that can be named in the API call to return different data from the method. Under the hood, these tracers are Go or Javascript
functions that do some specific preprocessing on the trace data before it is returned. functions that do some specific preprocessing on the trace data before it is returned.
More information about Geth's built-in tracers is available on the [built-in tracers](/docs/developers/evm-tracing/builtin-tracers) page. More information about Geth's built-in tracers is available on the [built-in tracers](/docs/developers/evm-tracing/built-in-tracers) page.
### Custom tracers {#custom-tracers} ### Custom tracers {#custom-tracers}

@ -1,62 +0,0 @@
---
title: Issue Handling Workflow
description: Instructions for managing GitHub issues
---
## Draft proposal {#draft-proposal}
- Keep the number of open issues under 820
- Keep the ratio of open issues per all issues under 13%
- Have 50 issues labelled [help wanted](https://github.com/ethereum/go-ethereum/labels/help%20wanted) and 50 [good first issue](https://github.com/ethereum/go-ethereum/labels/good%20first%20issue).
- Use structured labels of the form `<category>:<label>` or if need be `<category>:<main>/<sub>`, for example `area: plugins/foobuzzer`.
- Use the following labels. Areas and statuses depend on the application and workflow.
* area
- `area: android`
- `area: clef`
- `area: network`
- `area: swarm`
- `area: whisper`
* type
- `type: bug`
- `type: feature`
- `type: documentation`
- `type: discussion`
* status
- `status: PR review`
- `status: community working on it`
* need
- `need: more info`
- `need: steps to reproduce`
- `need: investigation`
- `need: decision`
Use these milestones
- [Future](https://github.com/ethereum/go-ethereum/milestone/80) - Maybe implement one day
- [Coming soon](https://github.com/ethereum/go-ethereum/milestone/81) - Not assigned to a specific release, but to be delivered in one of the upcoming releases
- \<next version\> - Next release with a version number
- \<next-next version\> - The version after the next release with a version number
- \<next major release\> - Optional.
It's ok to not set a due date for a milestone, but once you release it, close it. If you have a few issues dangling, consider moving them to the next milestone, and close this one.
Optionally, use a project board to collect issues of a larger effort that has an end state and overarches multiple releases.
## Workflow {#workflow}
The Geth core team hold a weekly or bi-weekly triage meeting. Issues are preselected by [labelling them "status:triage" and sorted the oldest ones first](https://github.com/ethereum/go-ethereum/issues?q=is%3Aopen+is%3Aissue+label%3Astatus%3Atriage+sort%3Acreated-asc). This is when the team goes through the new issues and do one of the following
1. Close it.
2. Assign it to "Coming soon" milestone which doesn't have an end date.
3. Move it to the "Future" milestone.
4. Change its status to "Need:\<what-is-needed\>".
Optional further activities:
- Label the issue with the appropriate area/component.
- Add a section to the FAQ or add a wiki page. Link to it from the issue.

@ -11,7 +11,7 @@ The Geth team have also recently started to run AMA's on Reddit:
- [Aug 2022 AMA](https://www.reddit.com/r/ethereum/comments/wpqmo1/ama_we_are_the_go_ethereum_geth_team_18_august/) - [Aug 2022 AMA](https://www.reddit.com/r/ethereum/comments/wpqmo1/ama_we_are_the_go_ethereum_geth_team_18_august/)
It is also recommended to search for 'Geth' and 'go-ethereum' on [ethereum.stackexchange](ethereum.stackexchange.com). It is also recommended to search for 'Geth' and 'go-ethereum' on [ethereum.stackexchange.com](https://ethereum.stackexchange.com/).
## What are RPC and IPC? {#what-are-rpc-and-ipc} ## What are RPC and IPC? {#what-are-rpc-and-ipc}

@ -15,7 +15,7 @@ All data relating to a specific Geth instance gets written inside a data directo
Accounts are stored in the `keystore` subdirectory. The contents of this directories should be transportable between nodes, platforms, and client implementations. Accounts are stored in the `keystore` subdirectory. The contents of this directories should be transportable between nodes, platforms, and client implementations.
To configure the location of the data directory, the `--datadir` parameter can be specified. See [CLI Options](../interface/command-line-options) for more details. There may exist multiple data directories for multiple networks (e.g. a separate directory for Ethereum Mainnet and the Goerli testnet). Each would have subdirectories for their blockchain data and keystore. To configure the location of the data directory, the `--datadir` parameter can be specified. See [CLI Options](/docs/fundamentals/command-line-options) for more details. There may exist multiple data directories for multiple networks (e.g. a separate directory for Ethereum Mainnet and the Goerli testnet). Each would have subdirectories for their blockchain data and keystore.
It is important to backup the files in the keystore securely. These files are encrypted using an account password. This needs to be securely backed up too. There is no way to decrypt the keys without the password! It is important to backup the files in the keystore securely. These files are encrypted using an account password. This needs to be securely backed up too. There is no way to decrypt the keys without the password!

@ -55,7 +55,7 @@ Please see the pages on [syncing](/docs/fundamentals/sync-modes) for more detail
## Using Geth {#using-geth} ## Using Geth {#using-geth}
Geth is the portal for users to send transactions to Ethereum. The Geth Javascript console is available for this purpose, and the majority of the [JSON-RPC API](/docs/rpc/server) will remain available via web3js or HTTP requests with commands as json payloads. These options are explained in more detail on the [Javascript Console page](/docs/interacting-with-geth/javascript-console). The Javascript console can be started Geth is the portal for users to send transactions to Ethereum. The Geth Javascript console is available for this purpose, and the majority of the [JSON-RPC API](/docs/rpc) will remain available via web3js or HTTP requests with commands as json payloads. These options are explained in more detail on the [Javascript Console page](/docs/interacting-with-geth/javascript-console). The Javascript console can be started
using the following command in a separate terminal (assuming Geth's IPC file is saved in `datadir`): using the following command in a separate terminal (assuming Geth's IPC file is saved in `datadir`):
```sh ```sh

@ -3,7 +3,7 @@ title: Getting started with Geth
description: Guide to getting up and running with Geth using Clef. description: Guide to getting up and running with Geth using Clef.
--- ---
This page explains how to set up Geth and execute some basic tasks using the command line tools. In order to use Geth, the software must first be installed. There are several ways Geth can be installed depending on the operating system and the user's choice of installation method, for example using a package manager, container or building from source. Instructions for installing Geth can be found on the ["Install and Build"](/docs/getting_started/Installing-Geth) pages. This page explains how to set up Geth and execute some basic tasks using the command line tools. In order to use Geth, the software must first be installed. There are several ways Geth can be installed depending on the operating system and the user's choice of installation method, for example using a package manager, container or building from source. Instructions for installing Geth can be found on the ["Install and Build"](/docs/getting-started/installing-geth) pages.
Geth also needs to be connected to a [consensus client](docs/getting-started/consensus-clients) in order to function as an Ethereum node. The tutorial on this page assumes Geth and a consensus client have been installed successfully and that a firewall has been configured to block external traffic to the JSON-RPC port `8545` see [Security](/docs/fundamentals/security). Geth also needs to be connected to a [consensus client](docs/getting-started/consensus-clients) in order to function as an Ethereum node. The tutorial on this page assumes Geth and a consensus client have been installed successfully and that a firewall has been configured to block external traffic to the JSON-RPC port `8545` see [Security](/docs/fundamentals/security).
@ -19,7 +19,7 @@ In order to get the most value from the tutorials on this page, the following sk
- Basic knowledge of node architecture and consensus clients - Basic knowledge of node architecture and consensus clients
Users that need to revisit these fundamentals can find helpful resources relating to the command line [here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line), Ethereum and its testnets [here](https://ethereum.org/en/developers/tutorials/), http [here](https://developer.mozilla.org/en-US/docs/Web/HTTP) and Javascript [here](https://www.javascript.com/learn). Information on node architecture can be found [here](/docs/fundamentals/node-architecture) and our guide for configuring Geth to connect to a Users that need to revisit these fundamentals can find helpful resources relating to the command line [here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line), Ethereum and its testnets [here](https://ethereum.org/en/developers/tutorials/), http [here](https://developer.mozilla.org/en-US/docs/Web/HTTP) and Javascript [here](https://www.javascript.com/learn). Information on node architecture can be found [here](/docs/fundamentals/node-architecture) and our guide for configuring Geth to connect to a
consensus client is [here](/docs/getting_started/consensus-clients). consensus client is [here](/docs/getting-started/consensus-clients).
<Note>If Geth was installed from source on Linux, `make` saves the binaries for Geth and the associated tools in `/build/bin`. To run these programs it is convenient to move them to the top level project directory (e.g. running `mv ./build/bin/* ./`) from `/go-ethereum`. Then `./` must be prepended to the commands in the code snippets in order to execute a particular program, e.g. `./geth` instead of simply `geth`. If the executables are not moved then either navigate to the `bin` directory to run them (e.g. `cd ./build/bin` and `./geth`) or provide their path (e.g. `./build/bin/geth`). These instructions can be ignored for other installations.</Note> <Note>If Geth was installed from source on Linux, `make` saves the binaries for Geth and the associated tools in `/build/bin`. To run these programs it is convenient to move them to the top level project directory (e.g. running `mv ./build/bin/* ./`) from `/go-ethereum`. Then `./` must be prepended to the commands in the code snippets in order to execute a particular program, e.g. `./geth` instead of simply `geth`. If the executables are not moved then either navigate to the `bin` directory to run them (e.g. `cd ./build/bin` and `./geth`) or provide their path (e.g. `./build/bin/geth`). These instructions can be ignored for other installations.</Note>

@ -3,7 +3,7 @@ title: JavaScript Console
description: How to interact with Geth using Javascript description: How to interact with Geth using Javascript
--- ---
Geth responds to instructions encoded as JSON objects as defined in the [JSON-RPC-API](/docs/interacting-with-geth/rpc/server). A Geth user can send these instructions directly, for example over HTTP using tools like [Curl](https://github.com/curl/curl). The code snippet below shows a request for an account balance sent to a local Geth node with the HTTP port `8545` exposed. Geth responds to instructions encoded as JSON objects as defined in the [JSON-RPC-API](/docs/interacting-with-geth/rpc). A Geth user can send these instructions directly, for example over HTTP using tools like [Curl](https://github.com/curl/curl). The code snippet below shows a request for an account balance sent to a local Geth node with the HTTP port `8545` exposed.
```sh ```sh
curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545
@ -18,7 +18,7 @@ This returns a result which is also a JSON object, with values expressed as hexa
This is a low level and rather error-prone way to interact with Geth. Most developers prefer to use convenience libraries that abstract away some of the more tedious and awkward tasks such as converting values from hexadecimal strings into numbers, or converting between denominations of ether (Wei, Gwei, etc). One such library is [Web3.js](https://web3js.readthedocs.io/en/v1.7.3/). This is a low level and rather error-prone way to interact with Geth. Most developers prefer to use convenience libraries that abstract away some of the more tedious and awkward tasks such as converting values from hexadecimal strings into numbers, or converting between denominations of ether (Wei, Gwei, etc). One such library is [Web3.js](https://web3js.readthedocs.io/en/v1.7.3/).
The purpose of Geth's Javascript console is to provide a built-in environment to use a subset of the Web3.js libraries to interact with a Geth node. The purpose of Geth's Javascript console is to provide a built-in environment to use a subset of the Web3.js libraries to interact with a Geth node.
<Note>The web3.js version that comes bundled with Geth is not up to date with the official Web3.js documentation. There are several Web3.js libraries that are not available in the Geth Javascript Console. There are also administrative APIs included in the Geth console that are not documented in the Web3.js documentation. The full list of libraries available in the Geth console is available on the [JSON-RPC API page](/docs/interacting-with-geth/rpc/server).</Note> <Note>The web3.js version that comes bundled with Geth is not up to date with the official Web3.js documentation. There are several Web3.js libraries that are not available in the Geth Javascript Console. There are also administrative APIs included in the Geth console that are not documented in the Web3.js documentation. The full list of libraries available in the Geth console is available on the [JSON-RPC API page](/docs/interacting-with-geth/rpc).</Note>
## Starting the console {#starting-the-console} ## Starting the console {#starting-the-console}
@ -77,7 +77,7 @@ To exit, press ctrl-d or type exit
## Interactive use {#interactive-use} ## Interactive use {#interactive-use}
Once the console has been started, it can be used to interact with Geth. The console supports Javascript and the full Geth [JSON-RPC API](/docs/interacting-with-geth/rpc/server). For example, to check the balance of the first account already existing in the keystore: Once the console has been started, it can be used to interact with Geth. The console supports Javascript and the full Geth [JSON-RPC API](/docs/interacting-with-geth/rpc). For example, to check the balance of the first account already existing in the keystore:
```js ```js
eth.getBalance(eth.accounts[0]); eth.getBalance(eth.accounts[0]);

@ -3,7 +3,7 @@ title: GraphQL Server
description: Documentation for Geth's GraphQL API description: Documentation for Geth's GraphQL API
--- ---
In addition to the [JSON-RPC APIs](/docs/interacting_with_geth/RPC/server), Geth supports the GraphQL API as specified by [EIP-1767](https://eips.ethereum.org/EIPS/eip-1767). GraphQL lets you specify which fields of an objects you need as part of the query, eliminating the extra load on the client for filling in fields which are not needed. It also allows for combining several traditional JSON-RPC requests into one query which translates into less overhead and more performance. In addition to the [JSON-RPC APIs](/docs/interacting-with-geth/rpc/), Geth supports the GraphQL API as specified by [EIP-1767](https://eips.ethereum.org/EIPS/eip-1767). GraphQL lets you specify which fields of an objects you need as part of the query, eliminating the extra load on the client for filling in fields which are not needed. It also allows for combining several traditional JSON-RPC requests into one query which translates into less overhead and more performance.
The GraphQL endpoint piggybacks on the HTTP transport used by JSON-RPC. Hence the relevant `--http` flags and the `--graphql` flag should be passed to Geth: The GraphQL endpoint piggybacks on the HTTP transport used by JSON-RPC. Hence the relevant `--http` flags and the `--graphql` flag should be passed to Geth:

@ -179,7 +179,7 @@ Removes a remote node from the trusted peer set, but it does not disconnect it a
## admin_startHTTP {#admin-starthttp} ## admin_startHTTP {#admin-starthttp}
The `startHTTP` administrative method starts an HTTP based JSON-RPC [API](/docs/interacting-with-geth/rpc/server) webserver to handle client requests. All the parameters are optional: The `startHTTP` administrative method starts an HTTP based JSON-RPC [API](/docs/interacting-with-geth/rpc) webserver to handle client requests. All the parameters are optional:
- `host`: network interface to open the listener socket on (defaults to `"localhost"`) - `host`: network interface to open the listener socket on (defaults to `"localhost"`)
- `port`: network port to open the listener socket on (defaults to `8545`) - `port`: network port to open the listener socket on (defaults to `8545`)

@ -5,7 +5,7 @@ description: Documentation for the JSON-RPC API "personal" namespace
<Note>The personal namespace will be deprecated in the very near future.</Note> <Note>The personal namespace will be deprecated in the very near future.</Note>
The personal API managed private keys in the key store. It is deprecated in favour of using [Clef](/docs/tools/clef/Introduction) for interacting with accounts Please refer to the [ns_personal deprecation page](/docs/interacting-with-geth/rpc/ns_personal_deprecation) to see the equivalent methods. The following documentation should be treated as archive information and users should migrate tousing Clef for account interactions. The personal API managed private keys in the key store. It is deprecated in favour of using [Clef](/docs/tools/clef/Introduction) for interacting with accounts Please refer to the [ns_personal deprecation page](/docs/interacting-with-geth/rpc/ns-personal-deprecation) to see the equivalent methods. The following documentation should be treated as archive information and users should migrate tousing Clef for account interactions.
## personal_deriveAccount {#personal-deriveaccount} ## personal_deriveAccount {#personal-deriveaccount}

@ -47,7 +47,7 @@ This contract can be pasted into a text file and saved as `Storage.sol`. The fol
solc --abi Storage.sol -o build solc --abi Storage.sol -o build
``` ```
The ABI can also be generated in other ways such as using the `compile` commands in development frameworks such as [Truffle](https://trufflesuite.com/), [Hardhat](https://hardhat.org/) and [Brownie](https://eth-brownie.readthedocs.io/en/stable/) or in the online IDE [Remix](https://remix.ethereum.org/). ABIs for existing verified contracts can be downloaded from [Etherscan](etherscan.io). The ABI can also be generated in other ways such as using the `compile` commands in development frameworks such as [Truffle](https://trufflesuite.com/), [Hardhat](https://hardhat.org/) and [Brownie](https://eth-brownie.readthedocs.io/en/stable/) or in the online IDE [Remix](https://remix.ethereum.org/). ABIs for existing verified contracts can be downloaded from [Etherscan](https://etherscan.io/).
The ABI for `Storage.sol` (`Storage.abi`) looks as follows: The ABI for `Storage.sol` (`Storage.abi`) looks as follows:

6
next-sitemap.config.js Normal file

@ -0,0 +1,6 @@
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: 'https://geth.ethereum.org',
generateRobotsTxt: true
};

@ -7,6 +7,7 @@
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "npm run lint && next build && npm run format:fix", "build": "npm run lint && next build && npm run format:fix",
"postbuild": "next-sitemap",
"start": "next start", "start": "next start",
"lint": "next lint", "lint": "next lint",
"format:fix": "prettier . --write --config .prettierrc --ignore-path .prettierignore --loglevel warn" "format:fix": "prettier . --write --config .prettierrc --ignore-path .prettierignore --loglevel warn"
@ -14,8 +15,10 @@
"dependencies": { "dependencies": {
"@chakra-ui/icons": "^2.0.11", "@chakra-ui/icons": "^2.0.11",
"@chakra-ui/react": "^2.3.2", "@chakra-ui/react": "^2.3.2",
"@docsearch/react": "3",
"@emotion/react": "^11.10.4", "@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.4", "@emotion/styled": "^11.10.4",
"algoliasearch": "^4.14.2",
"chakra-ui-markdown-renderer": "^4.1.0", "chakra-ui-markdown-renderer": "^4.1.0",
"fast-xml-parser": "^4.0.12", "fast-xml-parser": "^4.0.12",
"focus-visible": "^5.2.0", "focus-visible": "^5.2.0",
@ -23,6 +26,7 @@
"gray-matter": "^4.0.3", "gray-matter": "^4.0.3",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"next": "^13.0.2", "next": "^13.0.2",
"next-sitemap": "^3.1.32",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"react-markdown": "^8.0.3", "react-markdown": "^8.0.3",

9
public/robots.txt Normal file

@ -0,0 +1,9 @@
# *
User-agent: *
Allow: /
# Host
Host: https://geth.ethereum.org
# Sitemaps
Sitemap: https://geth.ethereum.org/sitemap.xml

@ -2,9 +2,9 @@ import { FC } from 'react';
import { Box, Flex, Link, Stack, Text, useColorMode } from '@chakra-ui/react'; import { Box, Flex, Link, Stack, Text, useColorMode } from '@chakra-ui/react';
import NextLink from 'next/link'; import NextLink from 'next/link';
import { HeaderButtons, Search } from './';
import { MoonIcon, SunIcon } from '../UI/icons'; import { MoonIcon, SunIcon } from '../UI/icons';
import { Search } from './search';
import { HeaderButtons } from './';
import { MobileMenu } from '../layouts'; import { MobileMenu } from '../layouts';
export const Header: FC = () => { export const Header: FC = () => {
@ -13,7 +13,7 @@ export const Header: FC = () => {
return ( return (
<Flex <Flex
mb={4} mb={{ base: 4, lg: 8 }}
border='2px' border='2px'
borderColor='primary' borderColor='primary'
justifyContent='space-between' justifyContent='space-between'
@ -61,7 +61,7 @@ export const Header: FC = () => {
</Stack> </Stack>
{/* SEARCH */} {/* SEARCH */}
<Stack display={{ base: 'none', md: 'block' }}> <Stack display={{ base: 'none', md: 'block' }} borderRight='2px' borderColor='primary'>
<Search /> <Search />
</Stack> </Stack>

@ -0,0 +1,22 @@
import { DocSearch } from '@docsearch/react';
import '@docsearch/css';
export const Search: React.FC = () => {
const appId = process.env.NEXT_PUBLIC_ALGOLIA_APP_ID || '';
const apiKey = process.env.NEXT_PUBLIC_ALGOLIA_SEARCH_API_KEY || '';
const indexName = process.env.NEXT_PUBLIC_ALGOLIA_BASE_SEARCH_INDEX_NAME || '';
return (
<DocSearch
appId={appId}
apiKey={apiKey}
indexName={indexName}
transformItems={items =>
items.map(item => ({
...item,
url: item.url.replace(/^https?:\/\/[^\/]+(?=\/)/, '')
}))
}
/>
);
};

@ -21,7 +21,7 @@ const MDComponents = {
// paragraphs // paragraphs
p: ({ children }: any) => { p: ({ children }: any) => {
return ( return (
<Text mb='7 !important' lineHeight={1.5}> <Text mb='7 !important' lineHeight={1.6}>
{children} {children}
</Text> </Text>
); );

@ -83,13 +83,15 @@ export const DownloadsHero: FC<DownloadsHero> = ({
return ( return (
<NextLink key={key} href={buildURL} passHref legacyBehavior> <NextLink key={key} href={buildURL} passHref legacyBehavior>
<Button as='a' variant='downloadsHeader' width={{ base: '100%' }} h={16} data-group> <Button as='a' variant='primary' width={{ base: '100%' }} h={16} data-group>
<HStack spacing={4}> <HStack spacing={4}>
<Stack alignItems='center'> <Stack alignItems='center'>
<Svg <Svg
aria-label={ariaLabel} aria-label={ariaLabel}
maxH='44px' maxH='44px'
_groupHover={{ color: 'yellow.50' }} _groupHover={{ color: 'yellow.50' }}
_groupFocus={{ color: 'yellow.50' }}
_groupActive={{ color: 'yellow.50' }}
/> />
</Stack> </Stack>
<Box> <Box>

@ -1,5 +1,5 @@
import { Stack, Tabs, TabList, Tab, Text, TabPanel, TabPanels } from '@chakra-ui/react'; import { Stack, Tabs, TabList, Tab, Text, TabPanel, TabPanels } from '@chakra-ui/react';
import { FC } from 'react'; import { FC, useMemo } from 'react';
import { DataTable } from '../../UI'; import { DataTable } from '../../UI';
@ -37,6 +37,16 @@ export const DownloadsTable: FC<Props> = ({
const LAST_2_LINUX_RELEASES = amountOfReleasesToShow + 12; const LAST_2_LINUX_RELEASES = amountOfReleasesToShow + 12;
const getDefaultIndex = useMemo<number>(() => {
const OS: string = typeof window !== 'undefined' ? window.navigator.platform : '';
const userAgent = typeof window !== 'undefined' ? window.navigator.userAgent : '';
if (/Mac/i.test(OS)) return 1;
if (/Win/i.test(OS)) return 2;
if (/iPhone/i.test(OS)) return 3;
if (/Android/i.test(userAgent)) return 4;
return 0;
}, [])
return ( return (
<Stack <Stack
sx={{ mt: '0 !important' }} sx={{ mt: '0 !important' }}
@ -46,7 +56,7 @@ export const DownloadsTable: FC<Props> = ({
: 'none' : 'none'
} }
> >
<Tabs variant='unstyled' onChange={idx => setTotalReleases(totalReleases[idx])}> <Tabs variant='unstyled' onChange={idx => setTotalReleases(totalReleases[idx])} defaultIndex={getDefaultIndex}>
<TabList color='primary' bg='button-bg'> <TabList color='primary' bg='button-bg'>
{DOWNLOADS_TABLE_TABS.map((tab, idx) => { {DOWNLOADS_TABLE_TABS.map((tab, idx) => {
return ( return (

@ -8,7 +8,11 @@ interface Props {
export const SpecificVersionsSection: FC<Props> = ({ children }) => { export const SpecificVersionsSection: FC<Props> = ({ children }) => {
return ( return (
<Grid id='specificversions' templateColumns={{ base: '1fr', md: '300px 1fr' }} gap={4}> <Grid
id='specificversions'
templateColumns={{ base: '1fr', md: '300px 1fr' }}
gap={{ base: 4, lg: 8 }}
>
<GridItem w='auto'> <GridItem w='auto'>
<Box h='100%'> <Box h='100%'>
{/* TODO: replace with animated/video version */} {/* TODO: replace with animated/video version */}

@ -3,3 +3,4 @@ export * from './DataTable';
export * from './Header'; export * from './Header';
export * from './HeaderButtons'; export * from './HeaderButtons';
export * from './PageMetadata'; export * from './PageMetadata';
export * from './Search';

@ -1,60 +0,0 @@
import { FC, useState } from 'react';
import { Button, Input, InputGroup, Stack } from '@chakra-ui/react';
import { BORDER_WIDTH } from '../../../constants';
import { LensIcon } from '../icons';
export const Search: FC = () => {
const [query, setQuery] = useState<string>('');
// Handlers
const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {
setQuery(e.target.value);
};
return (
<Stack
borderBottom={{ base: BORDER_WIDTH, md: 'none' }}
borderRight={{ base: 'none', md: BORDER_WIDTH }}
borderColor={{ base: 'bg', md: 'primary' }}
_hover={{ base: { bg: 'primary' }, md: { bg: 'none' } }}
>
<form method='get' action='https://duckduckgo.com/' role='search' target='blank'>
<InputGroup alignItems='center'>
<Input type='hidden' name='sites' value='geth.ethereum.org' />
<Input
type='text'
name='q'
py={{ base: 8, md: 4 }}
px={4}
variant='unstyled'
placeholder='search'
size='md'
_placeholder={{ color: { base: 'bg', md: 'primary' }, fontStyle: 'italic' }}
value={query}
onChange={handleChange}
outlineOffset={4}
/>
<Button
type='submit'
px={4}
me={2}
borderRadius='0'
bg='none'
_focusVisible={{
outline: '2px solid var(--chakra-colors-primary)',
outlineOffset: -2
}}
_hover={{
bg: 'primary',
svg: { color: 'bg' }
}}
aria-label='Search'
>
<LensIcon color={{ base: 'bg', md: 'primary' }} fontSize={{ base: '3xl', md: 'xl' }} />
</Button>
</InputGroup>
</form>
</Stack>
);
};

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

@ -20,7 +20,7 @@ const hoverStyles = {
export const Footer: FC = () => { export const Footer: FC = () => {
return ( return (
<Flex mt={4} direction={{ base: 'column', lg: 'row' }}> <Flex mt={{ base: 4, lg: 8 }} direction={{ base: 'column', lg: 'row' }}>
<Flex <Flex
direction={{ base: 'column', md: 'row' }} direction={{ base: 'column', md: 'row' }}
justifyContent={{ md: 'space-between' }} justifyContent={{ md: 'space-between' }}

@ -1,9 +1,16 @@
import { Box, Flex, Modal, ModalContent, ModalOverlay, useDisclosure } from '@chakra-ui/react'; import {
Box,
Flex,
Modal,
ModalContent,
ModalOverlay,
Stack,
useDisclosure
} from '@chakra-ui/react';
import { CloseIcon } from '@chakra-ui/icons'; import { CloseIcon } from '@chakra-ui/icons';
import { HeaderButtons, Search } from '../UI';
import { HamburgerIcon } from '../UI/icons'; import { HamburgerIcon } from '../UI/icons';
import { Search } from '../UI/search';
import { HeaderButtons } from '../UI';
import { BORDER_WIDTH } from '../../constants'; import { BORDER_WIDTH } from '../../constants';
@ -42,6 +49,7 @@ export const MobileMenu: React.FC = () => {
border={BORDER_WIDTH} border={BORDER_WIDTH}
overflow='hidden' overflow='hidden'
direction='column' direction='column'
display={{ md: 'none' }}
> >
<Flex borderBottom={BORDER_WIDTH} justify='flex-end'> <Flex borderBottom={BORDER_WIDTH} justify='flex-end'>
{/* CLOSE ICON */} {/* CLOSE ICON */}
@ -63,7 +71,9 @@ export const MobileMenu: React.FC = () => {
<HeaderButtons close={onClose} /> <HeaderButtons close={onClose} />
{/* SEARCH */} {/* SEARCH */}
<Stack borderBlockEnd='2px' borderColor='bg'>
<Search /> <Search />
</Stack>
</Flex> </Flex>
</ModalContent> </ModalContent>
</Modal> </Modal>

@ -163,7 +163,9 @@ export const METADATA = {
HOME_DESCRIPTION: HOME_DESCRIPTION:
'Go-ethereum website, home for the official Golang execution layer implementation of the Ethereum protocol', 'Go-ethereum website, home for the official Golang execution layer implementation of the Ethereum protocol',
DOWNLOADS_TITLE: 'Downloads', DOWNLOADS_TITLE: 'Downloads',
DOWNLOADS_DESCRIPTION: 'All Geth releases and builds, available for download' DOWNLOADS_DESCRIPTION: 'All Geth releases and builds, available for download',
PAGE_404_TITLE: '404 - Page not found',
PAGE_404_DESCRIPTION: 'The page you are looking for does not exist'
}; };
// GitHub urls // GitHub urls

@ -30,6 +30,8 @@
to: /docs/fundamentals/peer-to-peer to: /docs/fundamentals/peer-to-peer
- id: Pruning - id: Pruning
to: /docs/fundamentals/pruning to: /docs/fundamentals/pruning
- id: Private networks
to: /docs/fundamentals/private-network
- id: Light client - id: Light client
to: /docs/fundamentals/les to: /docs/fundamentals/les
- id: Mining - id: Mining
@ -78,6 +80,8 @@
to: /docs/developers to: /docs/developers
- id: Dapp developers - id: Dapp developers
items: items:
- id: Dev mode
to: /docs/developers/dapp-developer/dev-mode
- id: Go API - id: Go API
to: /docs/developers/dapp-developer/native to: /docs/developers/dapp-developer/native
- id: Go Account Management - id: Go Account Management
@ -102,18 +106,12 @@
items: items:
- id: Developer guide - id: Developer guide
to: /docs/developers/geth-developer/dev-guide to: /docs/developers/geth-developer/dev-guide
- id: Developer mode
to: /docs/developers/geth-developer/dev-mode
- id: Disclosures - id: Disclosures
to: /docs/developers/geth-developer/disclosures to: /docs/developers/geth-developer/disclosures
- id: Issue handling workflow
to: /docs/developers/geth-developer/issue-handling-workflow
- id: DNS discovery setup guide - id: DNS discovery setup guide
to: /docs/developers/geth-developer/dns-discovery-setup to: /docs/developers/geth-developer/dns-discovery-setup
- id: Code review guidelines - id: Code review guidelines
to: /docs/developers/geth-developer/code-review-guidelines to: /docs/developers/geth-developer/code-review-guidelines
- id: Private networks
to: /docs/developers/geth-developer/private-network
- id: Contributing - id: Contributing
to: /docs/developers/contributing to: /docs/developers/contributing
- id: Monitoring - id: Monitoring

49
src/pages/404.tsx Normal file

@ -0,0 +1,49 @@
import { Button, Flex, Text } from '@chakra-ui/react';
import type { NextPage } from 'next';
import NextLink from 'next/link';
import { GopherHomeFront } from '../components/UI/svgs';
import { PageMetadata } from '../components/UI';
import { METADATA} from '../constants';
const Page404NotFound: NextPage = ({}) => {
return (
<>
<PageMetadata title={METADATA.PAGE_404_TITLE} description={METADATA.PAGE_404_DESCRIPTION} />
<main id='main-content'>
<Flex direction='column' alignItems='center' py={{ base: 16, md: 24 }} border="2px" borderColor="primary">
<GopherHomeFront />
<Text
fontSize={{ base: "8xl", md: "9xl" }}
lineHeight='120%'
fontFamily='heading'
textAlign='center'
letterSpacing='0.05em'
fontWeight='500'
>
404
</Text>
<Text
fontSize={{ base: 'xl', md: '2xl'}}
fontFamily='heading'
fontWeight='700'
textAlign='center'
mb={{ base: 8, md: 12 }}
letterSpacing='0.05em'
>
page not found
</Text>
<NextLink href='/' passHref legacyBehavior>
<Button variant='primary' as='a' data-group>
<Text textStyle='homepage-primary-label'>Go to homepage</Text>
</Button>
</NextLink>
</Flex>
</main>
</>
);
};
export default Page404NotFound;

@ -6,6 +6,9 @@ import { Layout } from '../components/layouts';
import 'focus-visible/dist/focus-visible'; import 'focus-visible/dist/focus-visible';
import theme from '../theme'; import theme from '../theme';
// Algolia search css styling
import '../theme/search.css';
export default function App({ Component, pageProps }: AppProps) { export default function App({ Component, pageProps }: AppProps) {
return ( return (
<ChakraProvider theme={theme}> <ChakraProvider theme={theme}>

@ -299,7 +299,7 @@ const DownloadsPage: NextPage<Props> = ({ data }) => {
<PageMetadata title={METADATA.DOWNLOADS_TITLE} description={METADATA.DOWNLOADS_DESCRIPTION} /> <PageMetadata title={METADATA.DOWNLOADS_TITLE} description={METADATA.DOWNLOADS_DESCRIPTION} />
<main id='main-content'> <main id='main-content'>
<Stack spacing={4}> <Stack spacing={{ base: 4, lg: 8 }}>
<DownloadsHero <DownloadsHero
currentBuild={LATEST_RELEASES_DATA.releaseName} currentBuild={LATEST_RELEASES_DATA.releaseName}
currentBuildVersion={LATEST_RELEASES_DATA.versionNumber} currentBuildVersion={LATEST_RELEASES_DATA.versionNumber}

@ -1,8 +1,6 @@
import { Box, Grid, GridItem, Link, Stack, Text } from '@chakra-ui/react'; import { Box, Grid, GridItem, Link, Stack, Text } from '@chakra-ui/react';
import type { NextPage } from 'next'; import type { NextPage } from 'next';
import { GopherHomeFront } from '../components/UI/svgs';
import { import {
HomeHero, HomeHero,
HomeSection, HomeSection,
@ -11,7 +9,7 @@ import {
WhyRunANode WhyRunANode
} from '../components/UI/homepage'; } from '../components/UI/homepage';
import { PageMetadata } from '../components/UI'; import { PageMetadata } from '../components/UI';
import { GopherHomeLinks } from '../components/UI/svgs'; import { GopherHomeFront, GopherHomeLinks } from '../components/UI/svgs';
import { import {
CONTRIBUTING_PAGE, CONTRIBUTING_PAGE,
@ -29,10 +27,13 @@ const HomePage: NextPage = ({}) => {
<PageMetadata title={METADATA.HOME_TITLE} description={METADATA.HOME_DESCRIPTION} /> <PageMetadata title={METADATA.HOME_TITLE} description={METADATA.HOME_DESCRIPTION} />
<main id='main-content'> <main id='main-content'>
<Stack spacing={4}> <Stack spacing={{ base: 4, lg: 8 }}>
<HomeHero /> <HomeHero />
<Grid templateColumns={{ base: 'repeat(1, 1fr)', lg: 'repeat(2, 1fr)' }} gap={4}> <Grid
templateColumns={{ base: 'repeat(1, 1fr)', lg: 'repeat(2, 1fr)' }}
gap={{ base: 4, lg: 8 }}
>
<GridItem rowSpan={2}> <GridItem rowSpan={2}>
{/* SECTION: What is Geth */} {/* SECTION: What is Geth */}
<HomeSection <HomeSection
@ -106,7 +107,10 @@ const HomePage: NextPage = ({}) => {
</GridItem> </GridItem>
</Grid> </Grid>
<Grid templateColumns={{ base: 'repeat(1, 1fr)', md: 'repeat(2, 1fr)' }} gap={4}> <Grid
templateColumns={{ base: 'repeat(1, 1fr)', md: 'repeat(2, 1fr)' }}
gap={{ base: 4, lg: 8 }}
>
<GridItem> <GridItem>
{/* SECTION: Contribute to Geth */} {/* SECTION: Contribute to Geth */}
<HomeSection <HomeSection
@ -142,7 +146,7 @@ const HomePage: NextPage = ({}) => {
</GridItem> </GridItem>
</Grid> </Grid>
<Grid templateColumns={{ base: '1fr', md: '300px 1fr' }} gap={4}> <Grid templateColumns={{ base: '1fr', md: '300px 1fr' }} gap={{ base: 4, lg: 8 }}>
<GridItem w='auto'> <GridItem w='auto'>
<Box h='100%'> <Box h='100%'>
{/* TODO: replace with animated/video version */} {/* TODO: replace with animated/video version */}

@ -13,23 +13,10 @@ export const Button = {
}, },
_active: { _active: {
bg: 'secondary', bg: 'secondary',
borderTop: '4px', borderTop: '4px solid',
borderColor: 'primary', borderColor: 'primary',
pt: '4px' pt: '4px'
} }
},
downloadsHeader: {
py: '8px',
px: '32px',
borderRadius: 0,
width: { base: '188px', md: 'auto' },
bg: 'primary',
_hover: { bg: 'secondary' },
_focus: {
bg: 'primary',
boxShadow: 'inset 0 0 0 2px var(--chakra-colors-green-200) !important'
},
_active: { borderTop: '4px solid', borderColor: 'green.200' }
} }
} }
}; };

@ -63,7 +63,9 @@ export const textStyles = {
color: 'bg', color: 'bg',
fontWeight: 700, fontWeight: 700,
textTransform: 'uppercase', textTransform: 'uppercase',
_groupHover: { color: 'yellow.50' } _groupHover: { color: 'yellow.50' },
_groupFocus: { color: 'yellow.50' },
_groupActive: { color: 'yellow.50' }
}, },
'home-section-link-label': { 'home-section-link-label': {
fontFamily: 'heading', fontFamily: 'heading',
@ -111,14 +113,18 @@ export const textStyles = {
color: 'bg', color: 'bg',
fontSize: { base: 'md', lg: 'xl' }, fontSize: { base: 'md', lg: 'xl' },
textTransform: 'uppercase', textTransform: 'uppercase',
_groupHover: { color: 'yellow.50' } _groupHover: { color: 'yellow.50' },
_groupFocus: { color: 'yellow.50' },
_groupActive: { color: 'yellow.50' }
}, },
'downloads-button-sublabel': { 'downloads-button-sublabel': {
fontFamily: 'heading', fontFamily: 'heading',
color: 'bg', color: 'bg',
fontSize: { base: 'xs', lg: 'sm' }, fontSize: { base: 'xs', lg: 'sm' },
textTransform: 'uppercase', textTransform: 'uppercase',
_groupHover: { color: 'yellow.50' } _groupHover: { color: 'yellow.50' },
_groupFocus: { color: 'yellow.50' },
_groupActive: { color: 'yellow.50' }
}, },
'download-tab-label': { 'download-tab-label': {
fontFamily: 'heading', fontFamily: 'heading',

182
src/theme/search.css Normal file

@ -0,0 +1,182 @@
/* Search field on desktop nav bar */
.DocSearch-Button {
border-radius: 0;
height: 100%;
background: none;
margin: 0;
padding: 1rem;
width: 200px;
gap: 1rem;
--docsearch-searchbox-shadow: transparent;
--docsearch-searchbox-focus-background: transparent;
}
.DocSearch-Button:hover {
background: var(--chakra-colors-primary);
}
.DocSearch-Button:hover svg path,
.DocSearch-Button:hover kbd,
.DocSearch-Button:hover span {
color: var(--chakra-colors-bg);
border-color: var(--chakra-colors-bg);
}
.DocSearch-Button-Container {
flex: 1;
flex-direction: row-reverse;
justify-content: space-between;
}
.DocSearch-Button-Keys kbd {
background: none;
border: 1px solid var(--chakra-colors-primary);
color: var(--chakra-colors-primary);
box-shadow: none;
padding: 0.125rem;
}
.DocSearch-Button-Placeholder {
text-align: start;
text-transform: lowercase;
font-style: italic;
color: var(--chakra-colors-primary);
font-weight: 400;
width: 100%;
flex: 1;
}
.DocSearch-Search-Icon * {
color: var(--chakra-colors-primary);
}
/* Algolia search modal styling */
.DocSearch-Container {
z-index: 1400;
}
.DocSearch-Modal {
border-radius: 0;
background: var(--chakra-colors-bg);
}
.DocSearch-Logo {
text-transform: uppercase;
}
.DocSearch-Commands kbd {
background: var(--chakra-colors-button-bg);
border: 1px solid var(--chakra-colors-primary);
border-radius: 0;
color: var(--chakra-colors-primary);
box-shadow: none;
}
.DocSearch-Footer {
background: var(--chakra-colors-bg);
}
svg[aria-label='Algolia'] * {
fill: var(--chakra-colors-body);
}
.DocSearch-Form {
box-shadow: inset 0 0 0 2px var(--chakra-colors-primary);
background: var(--chakra-colors-secondary);
border-radius: 0;
}
.DocSearch-Hit[aria-selected='true'] a {
background: var(--chakra-colors-secondary);
color: var(--chakra-colors-button-bg);
}
.DocSearch-Hit[aria-selected='false'] a {
background: var(--chakra-colors-button-bg);
}
.DocSearch-Hit[aria-selected='false'] > a > div > div.DocSearch-Hit-icon > svg > path {
color: var(--chakra-colors-body);
}
.DocSearch-Hit-source,
.DocSearch-Label {
color: var(--chakra-colors-body);
font-family: var(--chakra-fonts-heading);
letter-spacing: 0.02em;
font-weight: 400;
}
.DocSearch-Hit-source {
background: var(--chakra-colors-bg);
padding-block: var(--chakra-space-2);
}
.DocSearch-Hit {
padding-bottom: var(--chakra-space-2);
}
.DocSearch-Hit a {
border-radius: 0;
}
.DocSearch-Hit[aria-selected='true'] > a > div > div.DocSearch-Hit-content-wrapper svg,
.DocSearch-Hit[aria-selected='true'] > a > div > div.DocSearch-Hit-content-wrapper span,
.DocSearch-Hit-title mark,
.DocSearch-Hit-path mark,
.DocSearch-Prefill {
color: var(--chakra-colors-primary);
}
.DocSearch-Input,
.DocSearch-Input::placeholder,
.DocSearch-Form > label > svg > path,
.DocSearch-Reset {
color: var(--chakra-colors-bg);
}
.DocSearch-Input::placeholder {
font-style: italic;
font-size: var(--chakra-fontSizes-md);
}
.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,
.DocSearch-Container--Stalled .DocSearch-LoadingIndicator {
color: var(--chakra-colors-bg);
}
@media (max-width: 768px) {
/* Search field in mobile menu */
.DocSearch-Button {
padding: 2rem 1rem;
width: 100%;
position: relative;
}
.DocSearch-Button::before {
position: absolute;
content: 'search';
font-size: var(--chakra-fontSizes-md);
color: var(--chakra-colors-bg);
inset: 0;
text-align: start;
padding: 2rem 1rem;
}
.DocSearch-Search-Icon * {
color: var(--chakra-colors-bg);
}
/* Mobile modal styling */
.DocSearch-Container,
.DocSearch-Modal {
position: fixed;
inset: 1rem;
max-width: calc(100vw - 2rem);
max-height: calc(100vh - 2rem);
}
.DocSearch-Cancel {
color: var(--chakra-colors-primary);
}
}

@ -1,13 +1,18 @@
import { ReleaseData } from '../types'; import { ReleaseData } from '../types';
export const compareReleasesFn = (a: ReleaseData, b: ReleaseData) => { export const compareReleasesFn = (a: ReleaseData, b: ReleaseData) => {
if (new Date(a.published) > new Date(b.published)) { const aPublished = new Date(a.published);
return -1; const bPublished = new Date(b.published);
const sameDate = aPublished.toDateString() === bPublished.toDateString();
const sameCommit = a.commit.label === b.commit.label;
if (sameDate && !sameCommit) {
return aPublished > bPublished ? -1 : 1;
} }
if (new Date(a.published) < new Date(b.published)) { if (sameDate) {
return 1; return a.release.label.length - b.release.label.length;
} }
return 0; return aPublished > bPublished ? -1 : 1;
}; };

@ -20,7 +20,7 @@ export const getReleaseArch = (filename: string) => {
return 'MIPS32(le)'; return 'MIPS32(le)';
case 'mips64': case 'mips64':
return 'MIPS64'; return 'MIPS64';
case 'MIPS64(le)': case 'mips64le':
return 'MIPS64(le)'; return 'MIPS64(le)';
default: default:
return 'all'; return 'all';

@ -3,7 +3,7 @@ https://geth.ethereum.org/,https://geth.ethereum.org,,will be react page
https://geth.ethereum.org/downloads/,https://geth.ethereum.org/downloads,,will be react page https://geth.ethereum.org/downloads/,https://geth.ethereum.org/downloads,,will be react page
https://geth.ethereum.org/docs/,https://geth.ethereum.org/docs,,n/a https://geth.ethereum.org/docs/,https://geth.ethereum.org/docs,,n/a
https://geth.ethereum.org/docs/getting-started,https://geth.ethereum.org/docs/getting-started/backup-restore,,n/a https://geth.ethereum.org/docs/getting-started,https://geth.ethereum.org/docs/getting-started/backup-restore,,n/a
https://geth.ethereum.org/docs/getting-started/dev-mode,https://geth.ethereum.org/docs/developers/geth-developer/dev-mode,,n/a https://geth.ethereum.org/docs/getting-started/dev-mode,https://geth.ethereum.org/docs/developers/dapp-developer/dev-mode,,n/a
https://geth.ethereum.org/docs/install-and-build/installing-geth,https://geth.ethereum.org/docs/getting-started/install-geth,,n/a https://geth.ethereum.org/docs/install-and-build/installing-geth,https://geth.ethereum.org/docs/getting-started/install-geth,,n/a
https://geth.ethereum.org/docs/install-and-build/backup-restore,https://geth.ethereum.org/docs/getting-started/backup-restore,,n/a https://geth.ethereum.org/docs/install-and-build/backup-restore,https://geth.ethereum.org/docs/getting-started/backup-restore,,n/a
https://geth.ethereum.org/docs/interface/command-line-options,https://geth.ethereum.org/docs/fundamentals/command-line-options,,n/a https://geth.ethereum.org/docs/interface/command-line-options,https://geth.ethereum.org/docs/fundamentals/command-line-options,,n/a
@ -14,7 +14,7 @@ https://geth.ethereum.org/docs/interface/les,https://geth.ethereum.org/docs/fund
https://geth.ethereum.org/docs/interface/managing-your-accounts,https://geth.ethereum.org/docs/fundamentals/account-management,,n/a https://geth.ethereum.org/docs/interface/managing-your-accounts,https://geth.ethereum.org/docs/fundamentals/account-management,,n/a
https://geth.ethereum.org/docs/faq,https://geth.ethereum.org/docs/faq,,n/a https://geth.ethereum.org/docs/faq,https://geth.ethereum.org/docs/faq,,n/a
https://geth.ethereum.org/docs/interface/javascript-console,https://geth.ethereum.org/docs/interacting-with-geth/javascript-console,,n/a https://geth.ethereum.org/docs/interface/javascript-console,https://geth.ethereum.org/docs/interacting-with-geth/javascript-console,,n/a
https://geth.ethereum.org/docs/interface/private-network,https://geth.ethereum.org/docs/developers/geth-developer/private-network,,n/a https://geth.ethereum.org/docs/interface/private-network,https://geth.ethereum.org/docs/fundamentals/private-network,,n/a
https://geth.ethereum.org/docs/interface/mining,https://geth.ethereum.org/docs/fundamentals/mining,,n/a https://geth.ethereum.org/docs/interface/mining,https://geth.ethereum.org/docs/fundamentals/mining,,n/a
https://geth.ethereum.org/docs/interface/metrics,https://geth.ethereum.org/docs/monitoring/metrics,,n/a https://geth.ethereum.org/docs/interface/metrics,https://geth.ethereum.org/docs/monitoring/metrics,,n/a
https://geth.ethereum.org/docs/dapp/native,https://geth.ethereum.org/docs/developers/dapp-developer/native,,n/a https://geth.ethereum.org/docs/dapp/native,https://geth.ethereum.org/docs/developers/dapp-developer/native,,n/a
@ -41,7 +41,7 @@ https://geth.ethereum.org/docs/rpc/ns-txpool,https://geth.ethereum.org/docs/inte
https://geth.ethereum.org/docs/rpc/objects,https://geth.ethereum.org/docs/interacting-with-geth/rpc/objects,,n/a https://geth.ethereum.org/docs/rpc/objects,https://geth.ethereum.org/docs/interacting-with-geth/rpc/objects,,n/a
https://geth.ethereum.org/docs/developers/dev-guide,https://geth.ethereum.org/docs/developers/geth-developer/dev-guide,,n/a https://geth.ethereum.org/docs/developers/dev-guide,https://geth.ethereum.org/docs/developers/geth-developer/dev-guide,,n/a
https://geth.ethereum.org/docs/developers/code-review-guidelines,https://geth.ethereum.org/docs/developers/geth-developer/code-review-guidelines,,n/a https://geth.ethereum.org/docs/developers/code-review-guidelines,https://geth.ethereum.org/docs/developers/geth-developer/code-review-guidelines,,n/a
https://geth.ethereum.org/docs/developers/issue-handling-workflow,https://geth.ethereum.org/docs/developers/geth-developer/issue-handling-workflow,,n/a https://geth.ethereum.org/docs/developers/issue-handling-workflow,https://geth.ethereum.org/,page deleted,n/a
https://geth.ethereum.org/docs/developers/dns-discovery-setup,https://geth.ethereum.org/doce/developers/geth-developer/dns-discovery-setup,,n/a https://geth.ethereum.org/docs/developers/dns-discovery-setup,https://geth.ethereum.org/doce/developers/geth-developer/dns-discovery-setup,,n/a
https://geth.ethereum.org/docs/clef/introduction,https://geth.ethereum.org/docs/tools/clef/introduction,,n/a https://geth.ethereum.org/docs/clef/introduction,https://geth.ethereum.org/docs/tools/clef/introduction,,n/a
https://geth.ethereum.org/docs/clef/tutorial,https://geth.ethereum.org/docs/tools/clef/tutorial,,n/a https://geth.ethereum.org/docs/clef/tutorial,https://geth.ethereum.org/docs/tools/clef/tutorial,,n/a

1 OLD Geth website URLS Equivalent NEW website URLs Notes
3 https://geth.ethereum.org/downloads/ https://geth.ethereum.org/downloads will be react page
4 https://geth.ethereum.org/docs/ https://geth.ethereum.org/docs n/a
5 https://geth.ethereum.org/docs/getting-started https://geth.ethereum.org/docs/getting-started/backup-restore n/a
6 https://geth.ethereum.org/docs/getting-started/dev-mode https://geth.ethereum.org/docs/developers/geth-developer/dev-mode https://geth.ethereum.org/docs/developers/dapp-developer/dev-mode n/a
7 https://geth.ethereum.org/docs/install-and-build/installing-geth https://geth.ethereum.org/docs/getting-started/install-geth n/a
8 https://geth.ethereum.org/docs/install-and-build/backup-restore https://geth.ethereum.org/docs/getting-started/backup-restore n/a
9 https://geth.ethereum.org/docs/interface/command-line-options https://geth.ethereum.org/docs/fundamentals/command-line-options n/a
14 https://geth.ethereum.org/docs/interface/managing-your-accounts https://geth.ethereum.org/docs/fundamentals/account-management n/a
15 https://geth.ethereum.org/docs/faq https://geth.ethereum.org/docs/faq n/a
16 https://geth.ethereum.org/docs/interface/javascript-console https://geth.ethereum.org/docs/interacting-with-geth/javascript-console n/a
17 https://geth.ethereum.org/docs/interface/private-network https://geth.ethereum.org/docs/developers/geth-developer/private-network https://geth.ethereum.org/docs/fundamentals/private-network n/a
18 https://geth.ethereum.org/docs/interface/mining https://geth.ethereum.org/docs/fundamentals/mining n/a
19 https://geth.ethereum.org/docs/interface/metrics https://geth.ethereum.org/docs/monitoring/metrics n/a
20 https://geth.ethereum.org/docs/dapp/native https://geth.ethereum.org/docs/developers/dapp-developer/native n/a
41 https://geth.ethereum.org/docs/rpc/objects https://geth.ethereum.org/docs/interacting-with-geth/rpc/objects n/a
42 https://geth.ethereum.org/docs/developers/dev-guide https://geth.ethereum.org/docs/developers/geth-developer/dev-guide n/a
43 https://geth.ethereum.org/docs/developers/code-review-guidelines https://geth.ethereum.org/docs/developers/geth-developer/code-review-guidelines n/a
44 https://geth.ethereum.org/docs/developers/issue-handling-workflow https://geth.ethereum.org/docs/developers/geth-developer/issue-handling-workflow https://geth.ethereum.org/ page deleted n/a
45 https://geth.ethereum.org/docs/developers/dns-discovery-setup https://geth.ethereum.org/doce/developers/geth-developer/dns-discovery-setup n/a
46 https://geth.ethereum.org/docs/clef/introduction https://geth.ethereum.org/docs/tools/clef/introduction n/a
47 https://geth.ethereum.org/docs/clef/tutorial https://geth.ethereum.org/docs/tools/clef/tutorial n/a

171
yarn.lock

@ -2,6 +2,129 @@
# yarn lockfile v1 # yarn lockfile v1
"@algolia/autocomplete-core@1.7.2":
version "1.7.2"
resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz#8abbed88082f611997538760dffcb43b33b1fd1d"
integrity sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==
dependencies:
"@algolia/autocomplete-shared" "1.7.2"
"@algolia/autocomplete-preset-algolia@1.7.2":
version "1.7.2"
resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz#9cd4f64b3d64399657ee2dc2b7e0a939e0713a26"
integrity sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==
dependencies:
"@algolia/autocomplete-shared" "1.7.2"
"@algolia/autocomplete-shared@1.7.2":
version "1.7.2"
resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz#daa23280e78d3b42ae9564d12470ae034db51a89"
integrity sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==
"@algolia/cache-browser-local-storage@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936"
integrity sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==
dependencies:
"@algolia/cache-common" "4.14.2"
"@algolia/cache-common@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.2.tgz#b946b6103c922f0c06006fb6929163ed2c67d598"
integrity sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==
"@algolia/cache-in-memory@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz#88e4a21474f9ac05331c2fa3ceb929684a395a24"
integrity sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==
dependencies:
"@algolia/cache-common" "4.14.2"
"@algolia/client-account@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.2.tgz#b76ac1ba9ea71e8c3f77a1805b48350dc0728a16"
integrity sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==
dependencies:
"@algolia/client-common" "4.14.2"
"@algolia/client-search" "4.14.2"
"@algolia/transporter" "4.14.2"
"@algolia/client-analytics@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.2.tgz#ca04dcaf9a78ee5c92c5cb5e9c74cf031eb2f1fb"
integrity sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==
dependencies:
"@algolia/client-common" "4.14.2"
"@algolia/client-search" "4.14.2"
"@algolia/requester-common" "4.14.2"
"@algolia/transporter" "4.14.2"
"@algolia/client-common@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.2.tgz#e1324e167ffa8af60f3e8bcd122110fd0bfd1300"
integrity sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==
dependencies:
"@algolia/requester-common" "4.14.2"
"@algolia/transporter" "4.14.2"
"@algolia/client-personalization@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.2.tgz#656bbb6157a3dd1a4be7de65e457fda136c404ec"
integrity sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==
dependencies:
"@algolia/client-common" "4.14.2"
"@algolia/requester-common" "4.14.2"
"@algolia/transporter" "4.14.2"
"@algolia/client-search@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.2.tgz#357bdb7e640163f0e33bad231dfcc21f67dc2e92"
integrity sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==
dependencies:
"@algolia/client-common" "4.14.2"
"@algolia/requester-common" "4.14.2"
"@algolia/transporter" "4.14.2"
"@algolia/logger-common@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.2.tgz#b74b3a92431f92665519d95942c246793ec390ee"
integrity sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==
"@algolia/logger-console@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.2.tgz#ec49cb47408f5811d4792598683923a800abce7b"
integrity sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==
dependencies:
"@algolia/logger-common" "4.14.2"
"@algolia/requester-browser-xhr@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz#a2cd4d9d8d90d53109cc7f3682dc6ebf20f798f2"
integrity sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==
dependencies:
"@algolia/requester-common" "4.14.2"
"@algolia/requester-common@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.2.tgz#bc4e9e5ee16c953c0ecacbfb334a33c30c28b1a1"
integrity sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==
"@algolia/requester-node-http@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz#7c1223a1785decaab1def64c83dade6bea45e115"
integrity sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==
dependencies:
"@algolia/requester-common" "4.14.2"
"@algolia/transporter@4.14.2":
version "4.14.2"
resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.2.tgz#77c069047fb1a4359ee6a51f51829508e44a1e3d"
integrity sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==
dependencies:
"@algolia/cache-common" "4.14.2"
"@algolia/logger-common" "4.14.2"
"@algolia/requester-common" "4.14.2"
"@babel/code-frame@^7.0.0": "@babel/code-frame@^7.0.0":
version "7.18.6" version "7.18.6"
resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz"
@ -806,11 +929,31 @@
resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.0.9.tgz#b43a3dd0bc1108954ad0eeb50d0261887ab5e31c" resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.0.9.tgz#b43a3dd0bc1108954ad0eeb50d0261887ab5e31c"
integrity sha512-PkNxrRGp9H3bdqEaoo8XGt/AL9UuGRTom0/9XJa+G/Dj8Cy1sDuamOWk3pN/ZQs46RokfK9Uh5LqPY5dwSDweg== integrity sha512-PkNxrRGp9H3bdqEaoo8XGt/AL9UuGRTom0/9XJa+G/Dj8Cy1sDuamOWk3pN/ZQs46RokfK9Uh5LqPY5dwSDweg==
"@corex/deepmerge@^4.0.29":
version "4.0.29"
resolved "https://registry.yarnpkg.com/@corex/deepmerge/-/deepmerge-4.0.29.tgz#af9debf07d7f6b0d2a9d04a266abf2c1418ed2f6"
integrity sha512-q/yVUnqckA8Do+EvAfpy7RLdumnBy9ZsducMUtZTvpdbJC7azEf1hGtnYYxm0QfphYxjwggv6XtH64prvS1W+A==
"@ctrl/tinycolor@^3.4.0": "@ctrl/tinycolor@^3.4.0":
version "3.4.1" version "3.4.1"
resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz" resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz"
integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
"@docsearch/css@3.3.0":
version "3.3.0"
resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.0.tgz#d698e48302d12240d7c2f7452ccb2d2239a8cd80"
integrity sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==
"@docsearch/react@3":
version "3.3.0"
resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.3.0.tgz#b8ac8e7f49b9bf2f96d34c24bc1cfd097ec0eead"
integrity sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==
dependencies:
"@algolia/autocomplete-core" "1.7.2"
"@algolia/autocomplete-preset-algolia" "1.7.2"
"@docsearch/css" "3.3.0"
algoliasearch "^4.0.0"
"@emotion/babel-plugin@^11.10.0": "@emotion/babel-plugin@^11.10.0":
version "11.10.5" version "11.10.5"
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c" resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c"
@ -1318,6 +1461,26 @@ ajv@^6.10.0, ajv@^6.12.4:
json-schema-traverse "^0.4.1" json-schema-traverse "^0.4.1"
uri-js "^4.2.2" uri-js "^4.2.2"
algoliasearch@^4.0.0, algoliasearch@^4.14.2:
version "4.14.2"
resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.2.tgz#63f142583bfc3a9bd3cd4a1b098bf6fe58e56f6c"
integrity sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==
dependencies:
"@algolia/cache-browser-local-storage" "4.14.2"
"@algolia/cache-common" "4.14.2"
"@algolia/cache-in-memory" "4.14.2"
"@algolia/client-account" "4.14.2"
"@algolia/client-analytics" "4.14.2"
"@algolia/client-common" "4.14.2"
"@algolia/client-personalization" "4.14.2"
"@algolia/client-search" "4.14.2"
"@algolia/logger-common" "4.14.2"
"@algolia/logger-console" "4.14.2"
"@algolia/requester-browser-xhr" "4.14.2"
"@algolia/requester-common" "4.14.2"
"@algolia/requester-node-http" "4.14.2"
"@algolia/transporter" "4.14.2"
ansi-regex@^5.0.1: ansi-regex@^5.0.1:
version "5.0.1" version "5.0.1"
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
@ -3215,6 +3378,14 @@ natural-compare@^1.4.0:
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
next-sitemap@^3.1.32:
version "3.1.32"
resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-3.1.32.tgz#e4a7227cab23b5e5c68bc54d335b86d3ff1e05f8"
integrity sha512-jkIKpwLXpWWTPfmDO46+6nu4+qpar4CjvUwCR9rYZHWtzE/wFfaCVFKpGtFMl6MFjpu8GjiE6kWFEa7uF3bzzg==
dependencies:
"@corex/deepmerge" "^4.0.29"
minimist "^1.2.6"
next@^13.0.2: next@^13.0.2:
version "13.0.2" version "13.0.2"
resolved "https://registry.npmjs.org/next/-/next-13.0.2.tgz" resolved "https://registry.npmjs.org/next/-/next-13.0.2.tgz"