Merge branch 'master' of github.com:ethereum/geth-website into add-favicon
This commit is contained in:
commit
8adf771339
@ -153,7 +153,7 @@ type Storage struct {
|
||||
an Ethereum testnet and interact with it using the Go bindings.
|
||||
|
||||
### Deploying contracts to Ethereum {#deploying-contracts}
|
||||
|
||||
|
||||
In the previous section, the contract ABI was sufficient for generating the contract bindings from its ABI. However, deploying the contract requires some additional information in the form of the compiled bytecode.
|
||||
|
||||
The bytecode is obtained by running the compiler again but this passing the `--bin` flag, e.g.
|
||||
|
@ -3,16 +3,16 @@ title: Basic traces
|
||||
description: Introduction to basic EVM traces
|
||||
---
|
||||
|
||||
The simplest type of transaction trace that Geth can generate are raw EVM opcode traces. For every VM instruction the transaction executes, a structured log entry is emitted, containing all contextual metadata deemed useful. This includes the *program counter*, *opcode name*, *opcode cost*, *remaining gas*, *execution depth* and any *occurred error*. The structured logs can optionally also contain the content of the *execution stack*, *execution memory* and *contract storage*.
|
||||
The simplest type of transaction trace that Geth can generate are raw EVM opcode traces. For every VM instruction the transaction executes, a structured log entry is emitted, containing all contextual metadata deemed useful. This includes the _program counter_, _opcode name_, _opcode cost_, _remaining gas_, _execution depth_ and any _occurred error_. The structured logs can optionally also contain the content of the _execution stack_, _execution memory_ and _contract storage_.
|
||||
|
||||
The entire output of a raw EVM opcode trace is a JSON object having a few metadata fields: *consumed gas*, *failure status*, *return value*; and a list of *opcode entries*:
|
||||
The entire output of a raw EVM opcode trace is a JSON object having a few metadata fields: _consumed gas_, _failure status_, _return value_; and a list of _opcode entries_:
|
||||
|
||||
```json
|
||||
{
|
||||
"gas": 25523,
|
||||
"failed": false,
|
||||
"gas": 25523,
|
||||
"failed": false,
|
||||
"returnValue": "",
|
||||
"structLogs": []
|
||||
"structLogs": []
|
||||
}
|
||||
```
|
||||
|
||||
@ -20,12 +20,12 @@ An example log for a single opcode entry has the following format:
|
||||
|
||||
```json
|
||||
{
|
||||
"pc": 48,
|
||||
"op": "DIV",
|
||||
"pc": 48,
|
||||
"op": "DIV",
|
||||
"gasCost": 5,
|
||||
"gas": 64532,
|
||||
"depth": 1,
|
||||
"error": null,
|
||||
"gas": 64532,
|
||||
"depth": 1,
|
||||
"error": null,
|
||||
"stack": [
|
||||
"00000000000000000000000000000000000000000000000000000000ffffffff",
|
||||
"0000000100000000000000000000000000000000000000000000000000000000",
|
||||
@ -36,8 +36,7 @@ An example log for a single opcode entry has the following format:
|
||||
"0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"0000000000000000000000000000000000000000000000000000000000000060"
|
||||
],
|
||||
"storage": {
|
||||
}
|
||||
"storage": {}
|
||||
}
|
||||
```
|
||||
|
||||
@ -45,11 +44,11 @@ An example log for a single opcode entry has the following format:
|
||||
|
||||
To generate a raw EVM opcode trace, Geth provides a few [RPC API endpoints](/docs/rpc/ns-debug). The most commonly used is [`debug_traceTransaction`](/docs/rpc/ns-debug#debug_tracetransaction).
|
||||
|
||||
In its simplest form, `traceTransaction` accepts a transaction hash as its only argument. It then traces the transaction, aggregates all the generated
|
||||
In its simplest form, `traceTransaction` accepts a transaction hash as its only argument. It then traces the transaction, aggregates all the generated
|
||||
data and returns it as a **large** JSON object. A sample invocation from the Geth console would be:
|
||||
|
||||
```js
|
||||
debug.traceTransaction("0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa71226b7aa92c6f")
|
||||
debug.traceTransaction('0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa71226b7aa92c6f');
|
||||
```
|
||||
|
||||
The same call can also be invoked from outside the node too via HTTP RPC (e.g. using Curl). In this case, the HTTP endpoint must be enabled in Geth using the `--http` command and the `debug` API namespace must be exposed using `--http.api=debug`.
|
||||
@ -60,7 +59,7 @@ $ curl -H "Content-Type: application/json" -d '{"id": 1, "method": "debug_traceT
|
||||
|
||||
To follow along with this tutorial, transaction hashes can be found from a local Geth node (e.g. by attaching a [Javascript console](/docs/interface/javascript-console) and running `eth.getBlock('latest')` then passing a transaction hash from the returned block to `debug.traceTransaction()`) or from a block explorer (for [Mainnet](https://etherscan.io/) or a [testnet](https://goerli.etherscan.io/)).
|
||||
|
||||
It is also possible to configure the trace by passing Boolean (true/false) values for four parameters that tweak the verbosity of the trace. By default, the *EVM memory* and *Return data* are not reported but the *EVM stack* and *EVM storage* are. To report the maximum amount of data:
|
||||
It is also possible to configure the trace by passing Boolean (true/false) values for four parameters that tweak the verbosity of the trace. By default, the _EVM memory_ and _Return data_ are not reported but the _EVM stack_ and _EVM storage_ are. To report the maximum amount of data:
|
||||
|
||||
```shell
|
||||
enableMemory: true
|
||||
@ -72,12 +71,17 @@ enableReturnData: true
|
||||
An example call, made in the Geth Javascript console, configured to report the maximum amount of data looks as follows:
|
||||
|
||||
```js
|
||||
debug.traceTransaction("0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa71226b7aa92c6f",{enableMemory: true, disableStack: false, disableStorage: false, enableReturnData: true})
|
||||
debug.traceTransaction('0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa71226b7aa92c6f', {
|
||||
enableMemory: true,
|
||||
disableStack: false,
|
||||
disableStorage: false,
|
||||
enableReturnData: true
|
||||
});
|
||||
```
|
||||
|
||||
The above operation was run on the (now-deprecated) Rinkeby network (with a node retaining enough history), resulting in this [trace dump](https://gist.github.com/karalabe/c91f95ac57f5e57f8b950ec65ecc697f).
|
||||
|
||||
Alternatively, disabling *EVM Stack*, *EVM Memory*, *Storage* and *Return data* (as demonstrated in the Curl request below) results in the following, much shorter, [trace dump](https://gist.github.com/karalabe/d74a7cb33a70f2af75e7824fc772c5b4).
|
||||
Alternatively, disabling _EVM Stack_, _EVM Memory_, _Storage_ and _Return data_ (as demonstrated in the Curl request below) results in the following, much shorter, [trace dump](https://gist.github.com/karalabe/d74a7cb33a70f2af75e7824fc772c5b4).
|
||||
|
||||
```
|
||||
$ curl -H "Content-Type: application/json" -d '{"id": 1, "method": "debug_traceTransaction", "params": ["0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa71226b7aa92c6f", {"disableStack": true, "disableStorage": true}]}' localhost:8545
|
||||
@ -85,14 +89,13 @@ $ curl -H "Content-Type: application/json" -d '{"id": 1, "method": "debug_traceT
|
||||
|
||||
### Limits of basic traces {#list-of-basic-traces}
|
||||
|
||||
Although the raw opcode traces generated above are useful, having an individual log entry for every single opcode is too low level for most use cases,
|
||||
Although the raw opcode traces generated above are useful, having an individual log entry for every single opcode is too low level for most use cases,
|
||||
and will require developers to create additional tools to post-process the traces. Additionally, 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.
|
||||
|
||||
To avoid those issues, Geth supports running custom JavaScript tracers *within* the Ethereum node, which have full access to the EVM stack, memory and contract storage. This means developers only have to gather the data they actually need, and do any processing at the source.
|
||||
|
||||
To avoid those issues, Geth supports running custom JavaScript tracers _within_ the Ethereum node, which have full access to the EVM stack, memory and contract storage. This means developers only have to gather the data they actually need, and do any processing at the source.
|
||||
|
||||
## Summary {#summary}
|
||||
|
||||
This page described how to do basic traces in Geth. Basic traces are very low level and can generate lots of data that might not all be useful. Therefore, it is also possible to use a set of built-in tracers or write custom ones in Javascript or Go.
|
||||
|
||||
Read more about [built-in](/docs/evm-tracing/builtin-tracers) and [custom](/docs/evm-tracing/custom-tracer) traces.
|
||||
Read more about [built-in](/docs/evm-tracing/builtin-tracers) and [custom](/docs/evm-tracing/custom-tracer) traces.
|
||||
|
@ -3,8 +3,7 @@ title: Built-in tracers
|
||||
description: Explanation of the tracers that come bundled in Geth as part of the tracing API.
|
||||
---
|
||||
|
||||
Geth comes bundled with a choice of tracers that can be invoked via the [tracing API](/docs/rpc/ns-debug). Some of these built-in tracers are implemented natively in Go, and others in Javascript. The default tracer is the opcode logger (otherwise known as struct logger) which is the default tracer for all the methods. Other tracers have to be specified by passing their name to the `tracer` parameter in the API call.
|
||||
|
||||
Geth comes bundled with a choice of tracers that can be invoked via the [tracing API](/docs/rpc/ns-debug). Some of these built-in tracers are implemented natively in Go, and others in Javascript. The default tracer is the opcode logger (otherwise known as struct logger) which is the default tracer for all the methods. Other tracers have to be specified by passing their name to the `tracer` parameter in the API call.
|
||||
|
||||
## Struct/opcode logger {#struct-opcode-logger}
|
||||
|
||||
@ -86,7 +85,7 @@ Return:
|
||||
}
|
||||
},
|
||||
|
||||
...
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
@ -94,10 +93,9 @@ Return:
|
||||
|
||||
The following tracers are implement in Go. This means they are much more performant than other tracers that are written in Javascript. The tracers are selected by passing their name to the `tracer` parameter when invoking a tracing API method, e.g. `debug.traceTransaction(<txhash>, { tracer: 'callTracer' })`.
|
||||
|
||||
|
||||
### 4byteTracer {#4byte-tracer}
|
||||
|
||||
Solidity contract functions are
|
||||
Solidity contract functions are
|
||||
[addressed](https://docs.soliditylang.org/en/develop/abi-spec.html#function-selector) using the first four four byte of the Keccak-256 hash of their signature. Therefore when calling the function of a contract, the caller must send this function selector as well as the ABI-encoded arguments as call data.
|
||||
|
||||
The `4byteTracer` collects the function selectors of every function executed in the lifetime of a transaction, along with the size of the supplied call data. The result is a `map[string]int` where the keys are `SELECTOR-CALLDATASIZE` and the values are number of occurances of this key. For example:
|
||||
@ -138,7 +136,6 @@ The `callTracer` tracks all the call frames executed during a transaction, inclu
|
||||
| revertReason | string | Solidity revert reason, if any |
|
||||
| calls | []callframe | list of sub-calls |
|
||||
|
||||
|
||||
Example Call:
|
||||
|
||||
```sh
|
||||
@ -211,7 +208,15 @@ To run this tracer in `diff` mode, pass `tracerConfig: {diffMode: true}` in the
|
||||
Example:
|
||||
|
||||
```js
|
||||
debug.traceCall({from: "0x35a9f94af726f07b5162df7e828cc9dc8439e7d0", to: "0xc8ba32cab1757528daf49033e3673fae77dcf05d", data: "0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000"}, 'latest', {tracer: 'prestateTracer'})
|
||||
debug.traceCall(
|
||||
{
|
||||
from: '0x35a9f94af726f07b5162df7e828cc9dc8439e7d0',
|
||||
to: '0xc8ba32cab1757528daf49033e3673fae77dcf05d',
|
||||
data: '0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000'
|
||||
},
|
||||
'latest',
|
||||
{ tracer: 'prestateTracer' }
|
||||
);
|
||||
```
|
||||
|
||||
Return:
|
||||
@ -264,7 +269,6 @@ Return (same call with `{diffMode: True}`):
|
||||
|
||||
This tracer is noop. It returns an empty object and is only meant for testing the setup.
|
||||
|
||||
|
||||
## Javascript tracers {#js-tracers}
|
||||
|
||||
There are also a set of tracers written in Javascript. These are less performant than the Go native tracers because of overheads associated with interpreting the Javascript in Geth's Go environment.
|
||||
@ -276,7 +280,15 @@ There are also a set of tracers written in Javascript. These are less performant
|
||||
Example:
|
||||
|
||||
```js
|
||||
debug.traceCall({from: "0x35a9f94af726f07b5162df7e828cc9dc8439e7d0", to: "0xc8ba32cab1757528daf49033e3673fae77dcf05d", data: "0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000"}, 'latest', {tracer: 'bigramTracer'})
|
||||
debug.traceCall(
|
||||
{
|
||||
from: '0x35a9f94af726f07b5162df7e828cc9dc8439e7d0',
|
||||
to: '0xc8ba32cab1757528daf49033e3673fae77dcf05d',
|
||||
data: '0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000'
|
||||
},
|
||||
'latest',
|
||||
{ tracer: 'bigramTracer' }
|
||||
);
|
||||
```
|
||||
|
||||
Returns:
|
||||
@ -370,7 +382,15 @@ Returns:
|
||||
Example:
|
||||
|
||||
```js
|
||||
debug.traceCall({from: "0x35a9f94af726f07b5162df7e828cc9dc8439e7d0", to: "0xc8ba32cab1757528daf49033e3673fae77dcf05d", data: "0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000"}, 'latest', {tracer: 'opcountTracer'})
|
||||
debug.traceCall(
|
||||
{
|
||||
from: '0x35a9f94af726f07b5162df7e828cc9dc8439e7d0',
|
||||
to: '0xc8ba32cab1757528daf49033e3673fae77dcf05d',
|
||||
data: '0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000'
|
||||
},
|
||||
'latest',
|
||||
{ tracer: 'opcountTracer' }
|
||||
);
|
||||
```
|
||||
|
||||
Returns:
|
||||
@ -386,10 +406,19 @@ Returns:
|
||||
Example:
|
||||
|
||||
```js
|
||||
debug.traceCall({from: "0x35a9f94af726f07b5162df7e828cc9dc8439e7d0", to: "0xc8ba32cab1757528daf49033e3673fae77dcf05d", data: "0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000"}, 'latest', {tracer: 'trigramTracer'})
|
||||
debug.traceCall(
|
||||
{
|
||||
from: '0x35a9f94af726f07b5162df7e828cc9dc8439e7d0',
|
||||
to: '0xc8ba32cab1757528daf49033e3673fae77dcf05d',
|
||||
data: '0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000'
|
||||
},
|
||||
'latest',
|
||||
{ tracer: 'trigramTracer' }
|
||||
);
|
||||
```
|
||||
|
||||
Returns:
|
||||
|
||||
```terminal
|
||||
{
|
||||
--PUSH1: 1,
|
||||
@ -414,17 +443,18 @@ Returns:
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### unigram {#unigram}
|
||||
|
||||
`unigramTracer` counts the frequency of occurrance of each opcode.
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
> debug.traceCall({from: "0x35a9f94af726f07b5162df7e828cc9dc8439e7d0", to: "0xc8ba32cab1757528daf49033e3673fae77dcf05d", data: "0xd1a2eab2000000000000000000000000000000000000000000000000000000000024aea100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000204895cd480cc8412691a880028a25aec86786f1ed2aa5562bc400000000000000c6403c14f35be1da6f433eadbb6e9178a47fbc7c6c1d568d2f2b876e929089c8d8db646304fd001a187dc8a600000000000000000000000000000000"}, 'latest', {tracer: 'unigramTracer'})
|
||||
```
|
||||
|
||||
Returns:
|
||||
|
||||
```terminal
|
||||
{
|
||||
ADD: 36,
|
||||
@ -447,9 +477,9 @@ Returns:
|
||||
|
||||
## State overrides {#state-overrides}
|
||||
|
||||
It is possible to give temporary state modifications to Geth in order to simulate the effects of `eth_call`. For example, some new byetcode could be deployed to some address *temporarily just for the duration of the execution* and then a transaction interacting with that address canm be traced. This can be used for scenario testing or determining the outcome of some hypothetical transaction before executing for real.
|
||||
It is possible to give temporary state modifications to Geth in order to simulate the effects of `eth_call`. For example, some new byetcode could be deployed to some address _temporarily just for the duration of the execution_ and then a transaction interacting with that address canm be traced. This can be used for scenario testing or determining the outcome of some hypothetical transaction before executing for real.
|
||||
|
||||
To do this, the tracer is written as normal, but the parameter `stateOverrides` is passed an address and some bytecode.
|
||||
To do this, the tracer is written as normal, but the parameter `stateOverrides` is passed an address and some bytecode.
|
||||
|
||||
```js
|
||||
var code = //contract bytecode
|
||||
@ -459,4 +489,4 @@ debug.traceCall({from: , to: , input: }, 'latest', {stateOverrides: {'0x...': {c
|
||||
|
||||
## Summary {#summary}
|
||||
|
||||
This page showed how to use the tracers that come bundled with Geth. There are a set written in Go and a set written in Javascript. They are invoked by passing their names when calling an API method. State overrides can be used in combination with tracers to examine precisely what the EVM will do in some hypothetical scenarios.
|
||||
This page showed how to use the tracers that come bundled with Geth. There are a set written in Go and a set written in Javascript. They are invoked by passing their names when calling an API method. State overrides can be used in combination with tracers to examine precisely what the EVM will do in some hypothetical scenarios.
|
||||
|
@ -249,7 +249,7 @@ And these fields are only available for tracing mined transactions (i.e. not ava
|
||||
|
||||
- `getGasUsed()` - returns amount of gas used throughout the frame as a Number
|
||||
- `getOutput()` - returns the output as a buffer
|
||||
` -getError()` - returns an error if one occured during execution and `undefined` otherwise
|
||||
` -getError()` - returns an error if one occured during execution and `undefined` otherwise
|
||||
|
||||
### Usage
|
||||
|
||||
@ -258,18 +258,20 @@ Note that several values are Golang big.Int objects, not JavaScript numbers or J
|
||||
Usage example, returns the top element of the stack at each CALL opcode only:
|
||||
|
||||
```js
|
||||
debug.traceTransaction(txhash, {tracer: '{data: [], fault: function(log) {}, step: function(log) { if(log.op.toString() == "CALL") this.data.push(log.stack.peek(0)); }, result: function() { return this.data; }}'});
|
||||
debug.traceTransaction(txhash, {
|
||||
tracer:
|
||||
'{data: [], fault: function(log) {}, step: function(log) { if(log.op.toString() == "CALL") this.data.push(log.stack.peek(0)); }, result: function() { return this.data; }}'
|
||||
});
|
||||
```
|
||||
|
||||
## Other traces
|
||||
|
||||
This tutorial has focused on `debug_traceTransaction()` which reports information
|
||||
about individual transactions. There are also RPC endpoints that provide different
|
||||
information, including tracing the EVM execution within a block, between two blocks,
|
||||
for specific `eth_call`s or rejected blocks. The full list of trace functions can
|
||||
This tutorial has focused on `debug_traceTransaction()` which reports information
|
||||
about individual transactions. There are also RPC endpoints that provide different
|
||||
information, including tracing the EVM execution within a block, between two blocks,
|
||||
for specific `eth_call`s or rejected blocks. The full list of trace functions can
|
||||
be explored in the [reference documentation](/content/docs/interacting_with_geth/RPC/ns-debug.md).
|
||||
|
||||
|
||||
## Summary
|
||||
|
||||
This page described how to write custom tracers for Geth. Custom tracers can be written in Javascript or Go.
|
||||
This page described how to write custom tracers for Geth. Custom tracers can be written in Javascript or Go.
|
||||
|
@ -11,13 +11,11 @@ Also see this [Devcon 2022 talk](https://www.youtube.com/watch?v=b8RdmGsilfU) on
|
||||
|
||||
In its simplest form, tracing a transaction entails requesting the Ethereum node to reexecute the desired transaction with varying degrees of data collection and have it return an aggregated summary. In order for a Geth node to reexecute a transaction, all historical state accessed by the transaction must be available. This includes:
|
||||
|
||||
- Balance, nonce, bytecode and storage of both the recipient as well as all
|
||||
- Balance, nonce, bytecode and storage of both the recipient as well as all
|
||||
internally invoked contracts.
|
||||
|
||||
- Block metadata referenced during execution of both the outer as well as all
|
||||
- Block metadata referenced during execution of both the outer as well as all
|
||||
internally created transactions.
|
||||
|
||||
- Intermediate state generated by all preceding transactions contained in the
|
||||
- Intermediate state generated by all preceding transactions contained in the
|
||||
same block as the one being traced.
|
||||
|
||||
This means there are limits on the transactions that can be traced imposed by the synchronization and pruning configuration of a node:
|
||||
@ -31,12 +29,12 @@ This means there are limits on the transactions that can be traced imposed by th
|
||||
- A **light synced** node retrieving data **on demand** can in theory trace transactions for which all required historical state is readily available in the network. This is because the data required to generate the trace is requested from an les-serving full node. In practice, data availability **cannot** be reasonably assumed.
|
||||
|
||||
![state pruning options](/public/images/docs/state-pruning.png)
|
||||
|
||||
*This image shows the state stored by each sync-mode - red indicates stored state. The full width of each line represents origin to present head*
|
||||
|
||||
_This image shows the state stored by each sync-mode - red indicates stored state. The full width of each line represents origin to present head_
|
||||
|
||||
More detailed information about syncing is available on the [sync modes page](/docs/interface/sync-modes).
|
||||
|
||||
When a trace of a specific transaction is executed, the state is prepared by fetching the state of the parent block from the database. If it is not available, Geth will crawl backwards in time to find the next available state but only up to a limit defined in the `reexec` parameter which defaults to 128 blocks. If no state is available within the `reexec` window then the trace fails with `Error: required historical state unavailable` and the `reexec` parameter must be increased. If a valid state *is* found in the `reexec` window, then Geth sequentially re-executes the transcations in each block between the last available state and the target block. The greater the value of `reexec` the longer the tracing will take because more blocks have to be re-executed to regenerate the target state.
|
||||
When a trace of a specific transaction is executed, the state is prepared by fetching the state of the parent block from the database. If it is not available, Geth will crawl backwards in time to find the next available state but only up to a limit defined in the `reexec` parameter which defaults to 128 blocks. If no state is available within the `reexec` window then the trace fails with `Error: required historical state unavailable` and the `reexec` parameter must be increased. If a valid state _is_ found in the `reexec` window, then Geth sequentially re-executes the transcations in each block between the last available state and the target block. The greater the value of `reexec` the longer the tracing will take because more blocks have to be re-executed to regenerate the target state.
|
||||
|
||||
The `debug_getAccessibleStates` endpoint is a useful tool for estimating a suitable value for `reexec`. Passing the number of the block that contains the target transaction and a search distance to this endpoint will return the number of blocks behind the current head where the most recent available state exists. This value can be passed to the tracer as `re-exec`.
|
||||
|
||||
@ -48,26 +46,23 @@ _There are exceptions to the above rules when running batch traces of entire blo
|
||||
|
||||
### Basic traces {#basic-traces}
|
||||
|
||||
The simplest type of transaction trace that Geth can generate are raw EVM opcode traces. For every EVM instruction the transaction executes, a structured log entry is emitted, containing all contextual metadata deemed useful. This includes the *program counter*, *opcode name*, *opcode cost*, *remaining gas*, *execution depth* and any *occurred error*. The structured logs can optionally also contain the content of the *execution stack*, *execution memory* and *contract storage*.
|
||||
The simplest type of transaction trace that Geth can generate are raw EVM opcode traces. For every EVM instruction the transaction executes, a structured log entry is emitted, containing all contextual metadata deemed useful. This includes the _program counter_, _opcode name_, _opcode cost_, _remaining gas_, _execution depth_ and any _occurred error_. The structured logs can optionally also contain the content of the _execution stack_, _execution memory_ and _contract storage_.
|
||||
|
||||
Read more about Geth's basic traces on the [basic traces page](/docs/evm-tracing/basic-traces).
|
||||
|
||||
|
||||
### Built-in tracers {#built-in-tracers}
|
||||
|
||||
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.
|
||||
|
||||
More information about Geth's built-in tracers is available on the [built-in tracers](/docs/evm-tracing/builtin-tracers) page.
|
||||
|
||||
|
||||
### Custom tracers {#custom-tracers}
|
||||
|
||||
In addition to built-in tracers, it is possible to provide custom code that hooks to events in the EVM to process and return data in a consumable format. Custom tracers can be written either in Javascript or Go. JS tracers are good for quick prototyping and experimentation as well as for less intensive applications. Go tracers are performant but require the tracer to be compiled together with the Geth source code. This means developers only have to gather the data they actually need, and do any processing at the source.
|
||||
|
||||
More information about custom tracers is available on the [custom tracers](/docs/evm-tracing/custom-tracer) page.
|
||||
|
||||
|
||||
## Summary {#summary}
|
||||
|
||||
This page gave an introduction to the concept of tracing and explained issues around state availability. More detailed information on Geth's built-in and custom tracers can be found on their dedicated pages.
|
||||
This page gave an introduction to the concept of tracing and explained issues around state availability. More detailed information on Geth's built-in and custom tracers can be found on their dedicated pages.
|
||||
|
@ -13,15 +13,15 @@ Filters are Javascript functions that select information from the trace to persi
|
||||
|
||||
```js
|
||||
tracer = function (tx) {
|
||||
return debug.traceTransaction(tx, {
|
||||
return debug.traceTransaction(tx, {
|
||||
tracer:
|
||||
'{' +
|
||||
'retVal: [],' +
|
||||
'step: function(log,db) {this.retVal.push(log.getPC() + ":" + log.op.toString())},' +
|
||||
'fault: function(log,db) {this.retVal.push("FAULT: " + JSON.stringify(log))},' +
|
||||
'result: function(ctx,db) {return this.retVal}' +
|
||||
'}'
|
||||
}); // return debug.traceTransaction ...
|
||||
'{' +
|
||||
'retVal: [],' +
|
||||
'step: function(log,db) {this.retVal.push(log.getPC() + ":" + log.op.toString())},' +
|
||||
'fault: function(log,db) {this.retVal.push("FAULT: " + JSON.stringify(log))},' +
|
||||
'result: function(ctx,db) {return this.retVal}' +
|
||||
'}'
|
||||
}); // return debug.traceTransaction ...
|
||||
}; // tracer = function ...
|
||||
```
|
||||
|
||||
@ -71,7 +71,7 @@ This object has three member functions:
|
||||
|
||||
- `step`, called for each opcode.
|
||||
- `fault`, called if there is a problem in the execution.
|
||||
- `result`, called to produce the results that are returned by `debug.traceTransaction`
|
||||
- `result`, called to produce the results that are returned by `debug.traceTransaction`
|
||||
- after the execution is done.
|
||||
|
||||
In this case, `retVal` is used to store the list of strings to return in `result`.
|
||||
@ -297,4 +297,4 @@ The output is similar to:
|
||||
" Result: b38558064d8dd9c883d2a8c80c604667ddb90a324bc70b1bac4e70d90b148ed4",
|
||||
"11041: SSTORE 22ff293e14f1ec3a09b137e9e06084afd63addf9:6 <- 0"
|
||||
]
|
||||
```
|
||||
```
|
||||
|
@ -151,7 +151,7 @@ admin.addTrustedPeer(
|
||||
'enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0@33.4.2.1:30303'
|
||||
);
|
||||
```
|
||||
|
||||
|
||||
## Summary {#summary}
|
||||
|
||||
Geth connects to Ethereum Mainnet by default. However, this behaviour can be changed using combinations of command line flags and files. This page has described the various options available for connecting a Geth node to Ethereum, public testnets and private networks. Remember that to connect to a proof-of-stake network (e.g. Ethereum Mainnet, Goerli, Sepolia) a consensus client is also required.
|
||||
|
@ -11,12 +11,12 @@ There are two types of full node that use different mechanisms to sync up to the
|
||||
|
||||
### Snap (default) {#snap-sync}
|
||||
|
||||
Snap sync starts froma relatively recent block and syncs from there to the head of the chain, keeping only the most recent 128 block states in memory. The block header to sync up to is provided by the consensus client. Between the initial sync block and the 128 most recent blocks, the node stores occasional snapshots that can be used to rebuild any intermediate state "on-the-fly". The difference between the snap-synced node and a full block-by-block synced node is that a snap synced node started from an initial checkpoint that was more recent than the genesis block. Snap sync is much faster than a full block-by-block sync from genesis. To start a node with snap sync pass `--syncmode snap` at startup.
|
||||
Snap sync starts froma relatively recent block and syncs from there to the head of the chain, keeping only the most recent 128 block states in memory. The block header to sync up to is provided by the consensus client. Between the initial sync block and the 128 most recent blocks, the node stores occasional snapshots that can be used to rebuild any intermediate state "on-the-fly". The difference between the snap-synced node and a full block-by-block synced node is that a snap synced node started from an initial checkpoint that was more recent than the genesis block. Snap sync is much faster than a full block-by-block sync from genesis. To start a node with snap sync pass `--syncmode snap` at startup.
|
||||
|
||||
![state pruning options](/public/images/docs/state-pruning.png)
|
||||
_This image shows the state stored by each sync-mode - red indicates stored state. The full width of each line represents origin to present head_
|
||||
|
||||
Snap sync works by first downloading the headers for a chunk of blocks. Once the headers have been verified, the block bodies and receipts for those blocks are downloaded. In parallel, Geth also sync begins state-sync. In state-sync, Geth first downloads the leaves of the state trie for each block without the intermediate nodes along with a range proof. The state trie is then regenerated locally.
|
||||
Snap sync works by first downloading the headers for a chunk of blocks. Once the headers have been verified, the block bodies and receipts for those blocks are downloaded. In parallel, Geth also sync begins state-sync. In state-sync, Geth first downloads the leaves of the state trie for each block without the intermediate nodes along with a range proof. The state trie is then regenerated locally.
|
||||
|
||||
The state download is the part of the snap-sync that takes the most time to complete and the progress can be monitored using the ETA values in the log messages. However, the blockchain is also progressing at the same time and invalidating some of the regenerated state data. This means it is also necessary to have a 'healing' phase where errors in the state are fixed. It is not possible to monitor the progress of the state heal because the extent of the errors cannot be known until the current state has already been regenerated. Geth regularly reports `Syncing, state heal in progress` during state healing - this informs the user that state heal has not finished. It is also possible to confirm this using `eth.syncing` - if this command returns `false` then the node is in sync. If it returns anything other than `false` then syncing is still in progress.
|
||||
|
||||
|
@ -3,7 +3,7 @@ title: Getting started with Geth
|
||||
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.md) 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).
|
||||
|
||||
@ -156,6 +156,7 @@ This message will be displayed periodically until state healing has finished:
|
||||
```
|
||||
INFO [10-20|20:20:09.510] State heal in progress accounts=313,309@17.95MiB slots=363,525@28.77MiB codes=7222@50.73MiB nodes=49,616,912@12.67GiB pending=29805
|
||||
```
|
||||
|
||||
When state healing is finished, the node is in sync and ready to use.
|
||||
|
||||
Sending an empty Curl request to the http server provides a quick way to confirm that this too has been started without any issues. In a third terminal, the following command can be run:
|
||||
@ -166,7 +167,6 @@ curl http://localhost:8545
|
||||
|
||||
If there is no error message reported to the terminal, everything is OK. Geth must be running and synced in order for a user to interact with the Ethereum network. If the terminal running Geth is closed down then Geth must be restarted again in a new terminal. Geth can be started and stopped easily, but it must be running for any interaction with Ethereum to take place. To shut down Geth, simply press `CTRL+C` in the Geth terminal. To start it again, run the previous command `geth --datadir <other commands>`.
|
||||
|
||||
|
||||
## Step 4: Get Testnet Ether {#get-test-eth}
|
||||
|
||||
In order to make some transactions, the user must fund their account with ether. On Ethereum mainnet, ether can only be obtained in three ways: 1) by receiving it as a reward for mining/validating; 2) receiving it in a transfer from another Ethereum user or contract; 3) receiving it from an exchange, 3) having paid for it with fiat money. On Ethereum testnets, the ether has no real world value so it 4) can be made freely available via faucets. Faucets allow users to request a transfer of testnet ether to their account.
|
||||
|
@ -178,7 +178,7 @@ Removes a remote node from the trusted peer set, but it does not disconnect it a
|
||||
| RPC | `{"method": "admin_removeTrustedPeer", "params": [string]}` |
|
||||
|
||||
## admin_startHTTP {#admin-starthttp}
|
||||
|
||||
|
||||
The `startHTTP` administrative method starts an HTTP based JSON-RPC [API](/docs/rpc/server) webserver to handle client requests. All the parameters are optional:
|
||||
|
||||
- `host`: network interface to open the listener socket on (defaults to `"localhost"`)
|
||||
|
@ -29,7 +29,7 @@ The location is specified as `<filename>:<line>`.
|
||||
|
||||
Example:
|
||||
|
||||
``` javascript
|
||||
```javascript
|
||||
> debug.backtraceAt("server.go:443")
|
||||
```
|
||||
|
||||
@ -42,7 +42,6 @@ Turns on block profiling for the given duration and writes profile data to disk.
|
||||
| Console | `debug.blockProfile(file, seconds)` |
|
||||
| RPC | `{"method": "debug_blockProfile", "params": [string, number]}` |
|
||||
|
||||
|
||||
### debug_chaindbCompact
|
||||
|
||||
Flattens the entire key-value database into a single level, removing all unused slots and merging all keys.
|
||||
@ -52,7 +51,6 @@ Flattens the entire key-value database into a single level, removing all unused
|
||||
| Console | `debug.chaindbCompact()` |
|
||||
| RPC | `{"method": "debug_chaindbCompact", "params": []}` |
|
||||
|
||||
|
||||
### debug_chaindbProperty
|
||||
|
||||
Returns leveldb properties of the key-value database.
|
||||
@ -62,7 +60,6 @@ Returns leveldb properties of the key-value database.
|
||||
| Console | `debug.chaindbProperty(property string)` |
|
||||
| RPC | `{"method": "debug_chaindbProperty", "params": [property]}` |
|
||||
|
||||
|
||||
### debug_cpuProfile
|
||||
|
||||
Turns on CPU profiling for the given duration and writes profile data to disk.
|
||||
@ -72,7 +69,6 @@ Turns on CPU profiling for the given duration and writes profile data to disk.
|
||||
| Console | `debug.cpuProfile(file, seconds)` |
|
||||
| RPC | `{"method": "debug_cpuProfile", "params": [string, number]}` |
|
||||
|
||||
|
||||
### debug_dbAncient
|
||||
|
||||
Retrieves an ancient binary blob from the freezer. The freezer is a collection of append-only immutable files. The first argument `kind` specifies which table to look up data from. The list of all table kinds are as follows:
|
||||
@ -106,8 +102,6 @@ Returns the raw value of a key stored in the database.
|
||||
| Console | `debug.dbGet(key string)` |
|
||||
| RPC | `{"method": "debug_dbGet", "params": [key]}` |
|
||||
|
||||
|
||||
|
||||
### debug_dumpBlock
|
||||
|
||||
Retrieves the state that corresponds to the block number and returns a list of accounts (including storage and code).
|
||||
@ -154,8 +148,6 @@ Forces garbage collection
|
||||
| Console | `debug.freeOSMemory()` |
|
||||
| RPC | `{"method": "debug_freeOSMemory", "params": []}` |
|
||||
|
||||
|
||||
|
||||
### debug_freezeClient
|
||||
|
||||
Forces a temporary client freeze, normally when the server is overloaded. Available as part of LES light server.
|
||||
@ -165,8 +157,6 @@ Forces a temporary client freeze, normally when the server is overloaded. Availa
|
||||
| Console | `debug.freezeClient(node string)` |
|
||||
| RPC | `{"method": "debug_freezeClient", "params": [node]}` |
|
||||
|
||||
|
||||
|
||||
### debug_gcStats
|
||||
|
||||
Returns garbage collection statistics.
|
||||
@ -178,10 +168,9 @@ See https://golang.org/pkg/runtime/debug/#GCStats for information about the fiel
|
||||
| Console | `debug.gcStats()` |
|
||||
| RPC | `{"method": "debug_gcStats", "params": []}` |
|
||||
|
||||
|
||||
### debug_getAccessibleState
|
||||
|
||||
Returns the first number where the node has accessible state on disk. This is the post-state of that block and the pre-state of the next
|
||||
Returns the first number where the node has accessible state on disk. This is the post-state of that block and the pre-state of the next
|
||||
block. The (from, to) parameters are the sequence of blocks to search, which can go either forwards or backwards.
|
||||
|
||||
Note: to get the last state pass in the range of blocks in reverse, i.e. (last, first).
|
||||
@ -191,7 +180,6 @@ Note: to get the last state pass in the range of blocks in reverse, i.e. (last,
|
||||
| Console | `debug.getAccessibleState(from, to rpc.BlockNumber)` |
|
||||
| RPC | `{"method": "debug_getAccessibleState", "params": [from, to]}` |
|
||||
|
||||
|
||||
### debug_getBadBlocks
|
||||
|
||||
Returns a list of the last 'bad blocks' that the client has seen on the network and returns them as a JSON list of block-hashes.
|
||||
@ -201,7 +189,6 @@ Returns a list of the last 'bad blocks' that the client has seen on the network
|
||||
| Console | `debug.getBadBlocks()` |
|
||||
| RPC | `{"method": "debug_getBadBlocks", "params": []}` |
|
||||
|
||||
|
||||
### debug_getBlockRlp
|
||||
|
||||
Retrieves and returns the RLP encoded block by number.
|
||||
@ -234,7 +221,7 @@ Returns all accounts that have changed between the two blocks specified. A chang
|
||||
|
||||
### debug_getModifiedAccountsByNumber
|
||||
|
||||
Returns all accounts that have changed between the two blocks specified. A change is defined as a difference in nonce, balance, code hash or
|
||||
Returns all accounts that have changed between the two blocks specified. A change is defined as a difference in nonce, balance, code hash or
|
||||
storage hash.
|
||||
|
||||
| Client | Method invocation |
|
||||
@ -298,7 +285,6 @@ Returns the preimage for a sha3 hash, if known.
|
||||
| Console | `debug.preimage(hash)` |
|
||||
| RPC | `{"method": "debug_preimage", "params": [hash]}` |
|
||||
|
||||
|
||||
### debug_printBlock
|
||||
|
||||
Retrieves a block and returns its pretty printed form.
|
||||
@ -308,7 +294,6 @@ Retrieves a block and returns its pretty printed form.
|
||||
| Console | `debug.printBlock(number uint64)` |
|
||||
| RPC | `{"method": "debug_printBlock", "params": [number]}` |
|
||||
|
||||
|
||||
### debug_seedHash
|
||||
|
||||
Fetches and retrieves the seed hash of the block by number
|
||||
@ -338,10 +323,9 @@ Sets the garbage collection target percentage. A negative value disables garbage
|
||||
| Console | `debug.setGCPercent(v)` |
|
||||
| RPC | `{"method": "debug_setGCPercent", "params": [v]}` |
|
||||
|
||||
|
||||
### debug_setHead
|
||||
|
||||
Sets the current head of the local chain by block number. **Note**, this is a destructive action and may severely damage your chain. Use with *extreme* caution.
|
||||
Sets the current head of the local chain by block number. **Note**, this is a destructive action and may severely damage your chain. Use with _extreme_ caution.
|
||||
|
||||
| Client | Method invocation |
|
||||
| :------ | ------------------------------------------------- |
|
||||
@ -370,7 +354,6 @@ Returns a printed representation of the stacks of all goroutines. Note that the
|
||||
| Console | `debug.stacks()` |
|
||||
| RPC | `{"method": "debug_stacks", "params": []}` |
|
||||
|
||||
|
||||
### debug_standardTraceBlockToFile
|
||||
|
||||
When JS-based tracing (see below) was first implemented, the intended usecase was to enable long-running tracers that could stream results back via a subscription channel. This method works a bit differently. (For full details, see [PR](https://github.com/ethereum/go-ethereum/pull/17914))
|
||||
@ -378,23 +361,27 @@ When JS-based tracing (see below) was first implemented, the intended usecase wa
|
||||
- It streams output to disk during the execution, to not blow up the memory usage on the node
|
||||
- It uses `jsonl` as output format (to allow streaming)
|
||||
- Uses a cross-client standardized output, so called 'standard json'
|
||||
* Uses `op` for string-representation of opcode, instead of `op`/`opName` for numeric/string, and other simlar small differences.
|
||||
* has `refund`
|
||||
* Represents memory as a contiguous chunk of data, as opposed to a list of `32`-byte segments like `debug_traceTransaction`
|
||||
- Uses `op` for string-representation of opcode, instead of `op`/`opName` for numeric/string, and other simlar small differences.
|
||||
- has `refund`
|
||||
- Represents memory as a contiguous chunk of data, as opposed to a list of `32`-byte segments like `debug_traceTransaction`
|
||||
|
||||
This means that this method is only 'useful' for callers who control the node -- at least sufficiently to be able to read the artefacts from the filesystem after the fact.
|
||||
|
||||
The method can be used to dump a certain transaction out of a given block:
|
||||
|
||||
```
|
||||
> debug.standardTraceBlockToFile("0x0bbe9f1484668a2bf159c63f0cf556ed8c8282f99e3ffdb03ad2175a863bca63", {txHash:"0x4049f61ffbb0747bb88dc1c85dd6686ebf225a3c10c282c45a8e0c644739f7e9", disableMemory:true})
|
||||
["/tmp/block_0x0bbe9f14-14-0x4049f61f-099048234"]
|
||||
```
|
||||
|
||||
Or all txs from a block:
|
||||
|
||||
```
|
||||
> debug.standardTraceBlockToFile("0x0bbe9f1484668a2bf159c63f0cf556ed8c8282f99e3ffdb03ad2175a863bca63", {disableMemory:true})
|
||||
["/tmp/block_0x0bbe9f14-0-0xb4502ea7-409046657", "/tmp/block_0x0bbe9f14-1-0xe839be8f-954614764", "/tmp/block_0x0bbe9f14-2-0xc6e2052f-542255195", "/tmp/block_0x0bbe9f14-3-0x01b7f3fe-209673214", "/tmp/block_0x0bbe9f14-4-0x0f290422-320999749", "/tmp/block_0x0bbe9f14-5-0x2dc0fb80-844117472", "/tmp/block_0x0bbe9f14-6-0x35542da1-256306111", "/tmp/block_0x0bbe9f14-7-0x3e199a08-086370834", "/tmp/block_0x0bbe9f14-8-0x87778b88-194603593", "/tmp/block_0x0bbe9f14-9-0xbcb081ba-629580052", "/tmp/block_0x0bbe9f14-10-0xc254381a-578605923", "/tmp/block_0x0bbe9f14-11-0xcc434d58-405931366", "/tmp/block_0x0bbe9f14-12-0xce61967d-874423181", "/tmp/block_0x0bbe9f14-13-0x05a20b35-267153288", "/tmp/block_0x0bbe9f14-14-0x4049f61f-606653767", "/tmp/block_0x0bbe9f14-15-0x46d473d2-614457338", "/tmp/block_0x0bbe9f14-16-0x35cf5500-411906321", "/tmp/block_0x0bbe9f14-17-0x79222961-278569788", "/tmp/block_0x0bbe9f14-18-0xad84e7b1-095032683", "/tmp/block_0x0bbe9f14-19-0x4bd48260-019097038", "/tmp/block_0x0bbe9f14-20-0x1517411d-292624085", "/tmp/block_0x0bbe9f14-21-0x6857e350-971385904", "/tmp/block_0x0bbe9f14-22-0xbe3ae2ca-236639695"]
|
||||
|
||||
```
|
||||
|
||||
Files are created in a temp-location, with the naming standard `block_<blockhash:4>-<txindex>-<txhash:4>-<random suffix>`. Each opcode immediately streams to file, with no in-geth buffering aside from whatever buffering the os normally does.
|
||||
|
||||
On the server side, it also adds some more info when regenerating historical state, namely, the reexec-number if `required historical state is not avaiable` is encountered, so a user can experiment with increasing that setting. It also prints out the remaining block until it reaches target:
|
||||
@ -409,6 +396,7 @@ INFO [10-15|13:48:34.421] Wrote trace file=/tmp/block_0x14490c57-2-0x3f4263fe-05
|
||||
```
|
||||
|
||||
The `options` is as follows:
|
||||
|
||||
```
|
||||
type StdTraceConfig struct {
|
||||
*vm.LogConfig
|
||||
@ -421,7 +409,6 @@ type StdTraceConfig struct {
|
||||
|
||||
This method is similar to `debug_standardTraceBlockToFile`, but can be used to obtain info about a block which has been _rejected_ as invalid (for some reason).
|
||||
|
||||
|
||||
### debug_startCPUProfile
|
||||
|
||||
Turns on CPU profiling indefinitely, writing to the given file.
|
||||
@ -552,7 +539,6 @@ Similar to [debug_traceBlock](#debug_traceblock), `traceBlockByHash` accepts a b
|
||||
References:
|
||||
[RLP](https://github.com/ethereum/wiki/wiki/RLP)
|
||||
|
||||
|
||||
### debug_traceBlockFromFile
|
||||
|
||||
Similar to [debug_traceBlock](#debug_traceblock), `traceBlockFromFile` accepts a file containing the RLP of the block. For the second parameter see [TraceConfig](#traceconfig) reference.
|
||||
@ -589,6 +575,7 @@ No specific call options:
|
||||
structLogs: []
|
||||
}
|
||||
```
|
||||
|
||||
Tracing a call with a destination and specific sender, disabling the storage and memory output (less data returned over RPC)
|
||||
|
||||
```sh
|
||||
@ -601,16 +588,16 @@ debug.traceCall({
|
||||
"latest", {"disableStorage": true, "disableMemory": true})
|
||||
```
|
||||
|
||||
It is possible to supply 'overrides' for both state-data (accounts/storage) and block data (number, timestamp etc). In the example below, a call which executes `NUMBER` is performed, and the overridden number is placed on the stack:
|
||||
It is possible to supply 'overrides' for both state-data (accounts/storage) and block data (number, timestamp etc). In the example below, a call which executes `NUMBER` is performed, and the overridden number is placed on the stack:
|
||||
|
||||
```sh
|
||||
> debug.traceCall({
|
||||
from: eth.accounts[0],
|
||||
from: eth.accounts[0],
|
||||
value:"0x1",
|
||||
gasPrice: "0xffffffff",
|
||||
gas: "0xffff",
|
||||
gasPrice: "0xffffffff",
|
||||
gas: "0xffff",
|
||||
input: "0x43"},
|
||||
"latest",
|
||||
"latest",
|
||||
{"blockoverrides":
|
||||
{"number": "0x50"}
|
||||
})
|
||||
@ -636,7 +623,7 @@ It is possible to supply 'overrides' for both state-data (accounts/storage) and
|
||||
}
|
||||
```
|
||||
|
||||
Curl example:
|
||||
Curl example:
|
||||
|
||||
```sh
|
||||
> curl -H "Content-Type: application/json" -X POST localhost:8545 --data '{"jsonrpc":"2.0","method":"debug_traceCall","params":[null, "pending"],"id":1}'
|
||||
@ -653,7 +640,6 @@ const res = provider.send('debug_subscribe', ['traceChain', '0x3f3a2a', '0x3f3a2
|
||||
|
||||
please refer to the [subscription page](https://geth.ethereum.org/docs/rpc/pubsub) for more details.
|
||||
|
||||
|
||||
### debug_traceTransaction
|
||||
|
||||
**OBS** In most scenarios, `debug.standardTraceBlockToFile` is better suited for tracing!
|
||||
@ -667,22 +653,21 @@ hash.
|
||||
| Console | `debug.traceTransaction(txHash, [options])` |
|
||||
| RPC | `{"method": "debug_traceTransaction", "params": [txHash, {}]}` |
|
||||
|
||||
|
||||
#### TraceConfig
|
||||
|
||||
In addition to the hash of the transaction you may give it a secondary *optional* argument, which specifies the options for this specific call. The possible options are:
|
||||
In addition to the hash of the transaction you may give it a secondary _optional_ argument, which specifies the options for this specific call. The possible options are:
|
||||
|
||||
- `disableStorage`: `BOOL`. Setting this to true will disable storage capture (default = false).
|
||||
- `disableStack`: `BOOL`. Setting this to true will disable stack capture (default = false).
|
||||
- `enableMemory`: `BOOL`. Setting this to true will enable memory capture (default = false).
|
||||
- `enableReturnData`: `BOOL`. Setting this to true will enable return data capture (default = false).
|
||||
- `tracer`: `STRING`. Name for built-in tracer or Javascript expression. See below for more details.
|
||||
|
||||
* `disableStorage`: `BOOL`. Setting this to true will disable storage capture (default = false).
|
||||
* `disableStack`: `BOOL`. Setting this to true will disable stack capture (default = false).
|
||||
* `enableMemory`: `BOOL`. Setting this to true will enable memory capture (default = false).
|
||||
* `enableReturnData`: `BOOL`. Setting this to true will enable return data capture (default = false).
|
||||
* `tracer`: `STRING`. Name for built-in tracer or Javascript expression. See below for more details.
|
||||
|
||||
If set, the previous four arguments will be ignored.
|
||||
|
||||
* `timeout`: `STRING`. Overrides the default timeout of 5 seconds for JavaScript-based tracing calls.
|
||||
- `timeout`: `STRING`. Overrides the default timeout of 5 seconds for JavaScript-based tracing calls.
|
||||
Valid values are described [here](https://golang.org/pkg/time/#ParseDuration).
|
||||
* `tracerConfig`: Config for the specified `tracer`. For example see callTracer's [config](/docs/evm-tracing/builtin-tracers#config).
|
||||
- `tracerConfig`: Config for the specified `tracer`. For example see callTracer's [config](/docs/evm-tracing/builtin-tracers#config).
|
||||
|
||||
Geth comes with a bundle of [built-in tracers](/docs/evm-tracing/builtin-tracers), each providing various data about a transaction. This method defaults to the [struct logger](/docs/evm-tracing/builtin-tracers#structopcode-logger). The `tracer` field of the second parameter can be set to use any of the other tracers. Alternatively a [custom tracer](/docs/evm-tracing/custom-tracer) can be implemented in either Go or Javascript.
|
||||
|
||||
@ -742,31 +727,30 @@ Sets the logging verbosity pattern.
|
||||
| Console | `debug.vmodule(string)` |
|
||||
| RPC | `{"method": "debug_vmodule", "params": [string]}` |
|
||||
|
||||
|
||||
#### Examples
|
||||
|
||||
If you want to see messages from a particular Go package (directory) and all subdirectories, use:
|
||||
|
||||
``` javascript
|
||||
```javascript
|
||||
> debug.vmodule("eth/*=6")
|
||||
```
|
||||
|
||||
If you want to restrict messages to a particular package (e.g. p2p) but exclude subdirectories, use:
|
||||
|
||||
``` javascript
|
||||
```javascript
|
||||
> debug.vmodule("p2p=6")
|
||||
```
|
||||
|
||||
If you want to see log messages from a particular source file, use
|
||||
|
||||
``` javascript
|
||||
```javascript
|
||||
> debug.vmodule("server.go=6")
|
||||
```
|
||||
|
||||
You can compose these basic patterns. If you want to see all output from peer.go in a package below eth (eth/peer.go, eth/downloader/peer.go) as well as output from package p2p at level <= 5, use:
|
||||
|
||||
``` javascript
|
||||
debug.vmodule("eth/*/peer.go=6,p2p=5")
|
||||
```javascript
|
||||
debug.vmodule('eth/*/peer.go=6,p2p=5');
|
||||
```
|
||||
|
||||
### debug_writeBlockProfile
|
||||
@ -794,4 +778,4 @@ Writes a goroutine blocking profile to the given file.
|
||||
| Client | Method invocation |
|
||||
| :------ | --------------------------------------------------------- |
|
||||
| Console | `debug.writeMutexProfile(file)` |
|
||||
| RPC | `{"method": "debug_writeMutexProfile", "params": [file]}` |
|
||||
| RPC | `{"method": "debug_writeMutexProfile", "params": [file]}` |
|
||||
|
@ -9,7 +9,7 @@ The JSON-RPC API's `personal` namespace has historically been used to manage acc
|
||||
|
||||
### personal_unlockAccount
|
||||
|
||||
There is no need for a direct replacement for `personal_unlockAccount`. Using Clef to manually approve actions or to attest custom rulesets is a much more secure way to interact with accounts without needing to indiscriminately unlock accounts.
|
||||
There is no need for a direct replacement for `personal_unlockAccount`. Using Clef to manually approve actions or to attest custom rulesets is a much more secure way to interact with accounts without needing to indiscriminately unlock accounts.
|
||||
|
||||
### personal_lockAccount
|
||||
|
||||
@ -38,7 +38,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1
|
||||
|
||||
```js
|
||||
// eth_accounts in Geth's JS console
|
||||
eth.accounts
|
||||
eth.accounts;
|
||||
```
|
||||
|
||||
```sh
|
||||
@ -68,8 +68,8 @@ curl --data '{"id": 4, "jsonrpc": "2.0", "method": "account_ecRecover","params":
|
||||
clef importraw <private-key-as-hex-string>
|
||||
```
|
||||
|
||||
|
||||
### personal_listWallets
|
||||
|
||||
As opposed to `listAccounts`, this method lists full details, including usb path or keystore-file paths. The equivalent method is `clef_listWallets`. This method can be called from the terminal using:
|
||||
|
||||
```sh
|
||||
@ -100,18 +100,19 @@ Both require manual approval in Clef unless a custom ruleset is in place.
|
||||
|
||||
### personal_sendTransaction
|
||||
|
||||
`personal_sendTransaction` ws used to sign and submit a transaction. This can be done using `eth_sendTransaction`, requiring manual approval in Clef.
|
||||
`personal_sendTransaction` ws used to sign and submit a transaction. This can be done using `eth_sendTransaction`, requiring manual approval in Clef.
|
||||
|
||||
Example call (Javascript console):
|
||||
|
||||
```js
|
||||
// this command requires 2x approval in Clef because it loads account data via eth.accounts[0]
|
||||
// and eth.accounts[1]
|
||||
var tx = {from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(0.1, "ether")}
|
||||
var tx = { from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(0.1, 'ether') };
|
||||
|
||||
// then send the transaction
|
||||
eth.sendTransaction(tx)
|
||||
eth.sendTransaction(tx);
|
||||
```
|
||||
|
||||
Example call (terminal)
|
||||
|
||||
```sh
|
||||
@ -218,4 +219,3 @@ Example call (terminal):
|
||||
```sh
|
||||
curl --data '{"id": 2, "jsonrpc": "2.0", "method": "account_signTransaction", "params": [{"from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db", "gas": "0x55555","gasPrice": "0x1234", "input": "0xabcd", "nonce": "0x0", "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value": "0x1234"}]}' -X POST -H "Content-Type: application/json" localhost:8550
|
||||
```
|
||||
|
||||
|
@ -71,7 +71,7 @@ InfluxDB is running and configured to store metrics from Geth.
|
||||
|
||||
## Preparing Geth {#preparing-geth}
|
||||
|
||||
After setting up database, metrics need to be enabled in Geth. Various options are available, as documented in the `METRICS AND STATS OPTIONS`
|
||||
After setting up database, metrics need to be enabled in Geth. Various options are available, as documented in the `METRICS AND STATS OPTIONS`
|
||||
in `geth --help` and in our [metrics page](/docs/monitoring/metrics). In this case Geth will be configured to push data into InfluxDB. Basic setup specifies the endpoint where InfluxDB is reachable and authenticates the database.
|
||||
|
||||
```sh
|
||||
@ -132,10 +132,9 @@ For a Geth monitoring dashboard, copy the URL of [this dashboard](https://grafan
|
||||
|
||||
![Grafana 1](/public/images/docs/grafana.png)
|
||||
|
||||
|
||||
## Customization {#customization}
|
||||
|
||||
The dashboards can be customized further. Each panel can be edited, moved, removed or added. To learn more about how dashboards work, refer to
|
||||
The dashboards can be customized further. Each panel can be edited, moved, removed or added. To learn more about how dashboards work, refer to
|
||||
[Grafana's documentation](https://grafana.com/docs/grafana/latest/dashboards/).
|
||||
|
||||
Some users might also be interested in automatic [alerting](https://grafana.com/docs/grafana/latest/alerting/), which sets up alert notifications that are sent automatically when metrics reach certain values. Various communication channels are supported.
|
||||
@ -144,4 +143,4 @@ Some users might also be interested in automatic [alerting](https://grafana.com/
|
||||
|
||||
This page has outlined how to set up a simple node monitoring dashboard using Grafana.
|
||||
|
||||
***NB: this page was adapted from a tutorial on ethereum.org written by Mario Havel***
|
||||
**_NB: this page was adapted from a tutorial on ethereum.org written by Mario Havel_**
|
||||
|
4
netlify.toml
Normal file
4
netlify.toml
Normal file
@ -0,0 +1,4 @@
|
||||
# https://docs.netlify.com/integrations/frameworks/next-js/incremental-static-regeneration/
|
||||
|
||||
[functions]
|
||||
included_files = ["src/**"]
|
@ -20,6 +20,7 @@
|
||||
"@mdx-js/react": "^2.1.3",
|
||||
"@next/mdx": "^12.3.0",
|
||||
"chakra-ui-markdown-renderer": "^4.1.0",
|
||||
"fast-xml-parser": "^4.0.12",
|
||||
"focus-visible": "^5.2.0",
|
||||
"framer-motion": "^7.3.2",
|
||||
"gray-matter": "^4.0.3",
|
||||
|
BIN
public/images/metadata-gopher.png
Normal file
BIN
public/images/metadata-gopher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
@ -1,4 +0,0 @@
|
||||
<svg width="283" height="64" viewBox="0 0 283 64" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
@ -92,14 +92,22 @@ const MDXComponents = {
|
||||
// code
|
||||
code: ({ children, ...props }: any) => <Code {...props}>{children}</Code>,
|
||||
// list
|
||||
ul: ({children}: any) => {
|
||||
return <UnorderedList mb={7} px={4}>{children}</UnorderedList>
|
||||
ul: ({ children }: any) => {
|
||||
return (
|
||||
<UnorderedList mb={7} px={4}>
|
||||
{children}
|
||||
</UnorderedList>
|
||||
);
|
||||
},
|
||||
ol: ({children}: any) => {
|
||||
return <OrderedList mb={7} px={4}>{children}</OrderedList>
|
||||
ol: ({ children }: any) => {
|
||||
return (
|
||||
<OrderedList mb={7} px={4}>
|
||||
{children}
|
||||
</OrderedList>
|
||||
);
|
||||
},
|
||||
li: ({ children }: any) => {
|
||||
return <ListItem color='primary'>{children}</ListItem>
|
||||
return <ListItem color='primary'>{children}</ListItem>;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1,15 +1,15 @@
|
||||
import { Link, Stack, Text } from '@chakra-ui/react';
|
||||
import NextLink, { LinkProps } from 'next/link';
|
||||
|
||||
import { Link as LinkTheme } from "../../theme/components"
|
||||
import { Link as LinkTheme } from '../../theme/components';
|
||||
|
||||
interface Props extends LinkProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
export const ButtonLinkSecondary: React.FC<Props> = ({ href, children, ...restProps}) => {
|
||||
export const ButtonLinkSecondary: React.FC<Props> = ({ href, children, ...restProps }) => {
|
||||
const isExternal: boolean = href.toString().startsWith('http');
|
||||
const variant = LinkTheme.variants["button-link-secondary"]
|
||||
const variant = LinkTheme.variants['button-link-secondary'];
|
||||
return (
|
||||
<Stack sx={{ mt: '0 !important' }} {...variant}>
|
||||
<NextLink href={href} passHref {...restProps}>
|
||||
|
@ -1,8 +1,11 @@
|
||||
import { Table, Thead, Tr, Th, TableContainer, Text, Tbody, Td } from '@chakra-ui/react';
|
||||
import { Link, Table, Thead, Tr, Th, TableContainer, Text, Tbody, Td } from '@chakra-ui/react';
|
||||
import { FC } from 'react';
|
||||
import { ReleaseData } from '../../types';
|
||||
import { getParsedDate } from '../../utils';
|
||||
|
||||
interface Props {
|
||||
columnHeaders: string[];
|
||||
// TODO: update data type
|
||||
data: any;
|
||||
}
|
||||
|
||||
@ -41,20 +44,44 @@ export const DataTable: FC<Props> = ({ columnHeaders, data }) => {
|
||||
})}
|
||||
</Tr>
|
||||
</Thead>
|
||||
|
||||
<Tbody>
|
||||
{data.map((item: any, idx: number) => {
|
||||
{data.map((r: ReleaseData, idx: number) => {
|
||||
return (
|
||||
<Tr
|
||||
key={idx}
|
||||
// TODO: Get new background color from nuno for hover
|
||||
transition={'all 0.5s'}
|
||||
_hover={{ background: 'button-bg', transition: 'all 0.5s' }}
|
||||
>
|
||||
{columnHeaders.map((columnHeader, idx) => {
|
||||
// TODO: Make the font size smaller (refer to design system)
|
||||
{Object.entries(r).map((item, idx) => {
|
||||
const objectItems = ['release', 'commit', 'signature'];
|
||||
|
||||
if (objectItems.includes(item[0])) {
|
||||
const label = item[1].label;
|
||||
const url = item[1].url;
|
||||
|
||||
return (
|
||||
<Td key={idx} px={4} textStyle='hero-text-small'>
|
||||
<Link _hover={{ textDecoration: 'none' }} href={url} isExternal>
|
||||
<Text color='primary'>
|
||||
{item[0] === 'commit' ? `${label}...` : label}
|
||||
</Text>
|
||||
</Link>
|
||||
</Td>
|
||||
);
|
||||
}
|
||||
|
||||
if (item[0] === 'published') {
|
||||
return (
|
||||
<Td key={idx} px={4} textStyle='hero-text-small'>
|
||||
<Text>{getParsedDate(item[1])}</Text>
|
||||
</Td>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Td key={idx} px={4} fontSize='13px'>
|
||||
{item[columnHeader.toLowerCase()]}
|
||||
<Td key={idx} px={4} textStyle='hero-text-small'>
|
||||
<Text>{item[1]}</Text>
|
||||
</Td>
|
||||
);
|
||||
})}
|
||||
|
@ -36,14 +36,12 @@ export const Header: FC = () => {
|
||||
|
||||
<Flex>
|
||||
{/* HEADER BUTTONS */}
|
||||
<Stack display={{base: 'none', md: 'block'}}>
|
||||
<Stack display={{ base: 'none', md: 'block' }}>
|
||||
<HeaderButtons />
|
||||
</Stack>
|
||||
|
||||
{/* SEARCH */}
|
||||
<Stack
|
||||
display={{ base: 'none', md: 'block' }}
|
||||
>
|
||||
<Stack display={{ base: 'none', md: 'block' }}>
|
||||
<Search />
|
||||
</Stack>
|
||||
|
||||
@ -65,7 +63,6 @@ export const Header: FC = () => {
|
||||
|
||||
{/* MOBILE MENU */}
|
||||
<MobileMenu />
|
||||
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
@ -13,7 +13,7 @@ export const PageMetadata: React.FC<Props> = ({ title, description, image }) =>
|
||||
const router = useRouter();
|
||||
const url = `${SITE_URL}${router.asPath}`;
|
||||
const fullTitle = `${title} | ${SITE_NAME}`;
|
||||
const defaultOgImage = `${SITE_URL}/images/pages/gopher-downloads-front-light.svg`; // TODO: update with right image
|
||||
const defaultOgImage = `${SITE_URL}/images/metadata-gopher.png`;
|
||||
const ogImage = !image ? defaultOgImage : `${SITE_URL}${image}`;
|
||||
|
||||
return (
|
||||
|
@ -1 +1 @@
|
||||
export * from './Code';
|
||||
export * from './Code';
|
||||
|
@ -1,20 +1,43 @@
|
||||
import { Stack, Tabs, TabList, Tab, Text, TabPanel, TabPanels } from '@chakra-ui/react';
|
||||
import { FC } from 'react';
|
||||
|
||||
import { DOWNLOAD_TABS, DOWNLOAD_TAB_COLUMN_HEADERS } from '../../../constants';
|
||||
|
||||
import { DataTable } from '../../UI';
|
||||
|
||||
import { DOWNLOADS_TABLE_TABS, DOWNLOADS_TABLE_TAB_COLUMN_HEADERS } from '../../../constants';
|
||||
import { ReleaseData } from '../../../types';
|
||||
|
||||
interface Props {
|
||||
data: any;
|
||||
linuxData: ReleaseData[];
|
||||
macOSData: ReleaseData[];
|
||||
windowsData: ReleaseData[];
|
||||
iOSData: ReleaseData[];
|
||||
androidData: ReleaseData[];
|
||||
amountOfReleasesToShow: number;
|
||||
setTotalReleases: (idx: number) => void;
|
||||
}
|
||||
|
||||
export const DownloadsTable: FC<Props> = ({ data }) => {
|
||||
export const DownloadsTable: FC<Props> = ({
|
||||
linuxData,
|
||||
macOSData,
|
||||
windowsData,
|
||||
iOSData,
|
||||
androidData,
|
||||
amountOfReleasesToShow,
|
||||
setTotalReleases
|
||||
}) => {
|
||||
const totalReleases = [
|
||||
linuxData.length,
|
||||
macOSData.length,
|
||||
windowsData.length,
|
||||
iOSData.length,
|
||||
androidData.length
|
||||
];
|
||||
|
||||
return (
|
||||
<Stack sx={{ mt: '0 !important' }} borderBottom='2px solid' borderColor='primary'>
|
||||
<Tabs variant='unstyled'>
|
||||
<Tabs variant='unstyled' onChange={idx => setTotalReleases(totalReleases[idx])}>
|
||||
<TabList color='primary' bg='button-bg'>
|
||||
{DOWNLOAD_TABS.map((tab, idx) => {
|
||||
{DOWNLOADS_TABLE_TABS.map((tab, idx) => {
|
||||
return (
|
||||
<Tab
|
||||
key={tab}
|
||||
@ -25,7 +48,7 @@ export const DownloadsTable: FC<Props> = ({ data }) => {
|
||||
color: 'bg'
|
||||
}}
|
||||
borderBottom='2px solid'
|
||||
borderRight={idx === DOWNLOAD_TABS.length - 1 ? 'none' : '2px solid'}
|
||||
borderRight={idx === DOWNLOADS_TABLE_TABS.length - 1 ? 'none' : '2px solid'}
|
||||
borderColor='primary'
|
||||
>
|
||||
<Text textStyle='download-tab-label'>{tab}</Text>
|
||||
@ -33,21 +56,37 @@ export const DownloadsTable: FC<Props> = ({ data }) => {
|
||||
);
|
||||
})}
|
||||
</TabList>
|
||||
|
||||
<TabPanels>
|
||||
<TabPanel p={0}>
|
||||
<DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
|
||||
<DataTable
|
||||
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
|
||||
data={linuxData.slice(0, amountOfReleasesToShow)}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel p={0}>
|
||||
<DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
|
||||
<DataTable
|
||||
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
|
||||
data={macOSData.slice(0, amountOfReleasesToShow)}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel p={0}>
|
||||
<DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
|
||||
<DataTable
|
||||
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
|
||||
data={windowsData.slice(0, amountOfReleasesToShow)}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel p={0}>
|
||||
<DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
|
||||
<DataTable
|
||||
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
|
||||
data={iOSData.slice(0, amountOfReleasesToShow)}
|
||||
/>
|
||||
</TabPanel>
|
||||
<TabPanel p={0}>
|
||||
<DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
|
||||
<DataTable
|
||||
columnHeaders={DOWNLOADS_TABLE_TAB_COLUMN_HEADERS}
|
||||
data={androidData.slice(0, amountOfReleasesToShow)}
|
||||
/>
|
||||
</TabPanel>
|
||||
</TabPanels>
|
||||
</Tabs>
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { Box, Flex, Image, Stack } from '@chakra-ui/react';
|
||||
import { Box, Flex, Grid, GridItem, Image, Stack } from '@chakra-ui/react';
|
||||
import { FC } from 'react';
|
||||
import { GopherHomeLinks } from '../svgs';
|
||||
|
||||
@ -8,31 +8,33 @@ interface Props {
|
||||
|
||||
export const SpecificVersionsSection: FC<Props> = ({ children }) => {
|
||||
return (
|
||||
<Flex
|
||||
id='specificversions'
|
||||
border='2px'
|
||||
borderColor='primary'
|
||||
flexDir={{ base: 'column', md: 'row' }}
|
||||
>
|
||||
<Flex
|
||||
p={4}
|
||||
alignItems='center'
|
||||
justifyContent='center'
|
||||
borderBottom={{ base: '2px', md: 'none' }}
|
||||
borderRight={{ base: 'none', md: '2px' }}
|
||||
borderColor='primary !important'
|
||||
flex='none'
|
||||
>
|
||||
<GopherHomeLinks />
|
||||
</Flex>
|
||||
<Flex flexDir='column'>
|
||||
<Stack p={4} borderBottom='2px' borderColor='primary' sx={{ mt: '0 !important' }}>
|
||||
<Box as='h2' textStyle='h2'>
|
||||
Specific Versions
|
||||
</Box>
|
||||
</Stack>
|
||||
{children}
|
||||
</Flex>
|
||||
</Flex>
|
||||
<Grid id='specificversions' templateColumns={{ base: '1fr', md: '300px 1fr' }} gap={4}>
|
||||
<GridItem w='auto'>
|
||||
<Box h='100%'>
|
||||
{/* TODO: replace with animated/video version */}
|
||||
<Stack
|
||||
justifyContent='center'
|
||||
alignItems='center'
|
||||
p={4}
|
||||
border='2px solid'
|
||||
borderColor='primary'
|
||||
h='100%'
|
||||
>
|
||||
<GopherHomeLinks />
|
||||
</Stack>
|
||||
</Box>
|
||||
</GridItem>
|
||||
|
||||
<GridItem>
|
||||
<Flex flexDir='column' border='2px solid' borderColor='primary' pb={6}>
|
||||
<Stack p={4} borderBottom='2px' borderColor='primary' sx={{ mt: '0 !important' }}>
|
||||
<Box as='h2' textStyle='h2'>
|
||||
Specific Versions
|
||||
</Box>
|
||||
</Stack>
|
||||
{children}
|
||||
</Flex>
|
||||
</GridItem>
|
||||
</Grid>
|
||||
);
|
||||
};
|
||||
|
@ -18,11 +18,7 @@ export const QuickLinks: FC = () => {
|
||||
sx={{ mt: '0 !important' }}
|
||||
>
|
||||
{/* get started */}
|
||||
<GridItem
|
||||
borderRight='2px solid'
|
||||
borderBottom='2px solid'
|
||||
borderColor='primary'
|
||||
>
|
||||
<GridItem borderRight='2px solid' borderBottom='2px solid' borderColor='primary'>
|
||||
<Stack p={4} h='100%'>
|
||||
<Text textStyle='quick-link-text' mb={-1}>
|
||||
Don't know where to start?
|
||||
@ -60,11 +56,7 @@ export const QuickLinks: FC = () => {
|
||||
</GridItem>
|
||||
|
||||
{/* faq */}
|
||||
<GridItem
|
||||
borderRight='2px solid'
|
||||
borderBottom='2px solid'
|
||||
borderColor='primary'
|
||||
>
|
||||
<GridItem borderRight='2px solid' borderBottom='2px solid' borderColor='primary'>
|
||||
<Stack p={4} h='100%'>
|
||||
<Text textStyle='quick-link-text' mb={-1}>
|
||||
Have doubts?
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Box, Grid, GridItem, Stack } from '@chakra-ui/react';
|
||||
import { FC } from 'react';
|
||||
|
||||
import { ButtonLinkSecondary } from '..'
|
||||
import { ButtonLinkSecondary } from '..';
|
||||
import { GopherHomeNodes } from '../svgs/GopherHomeNodes';
|
||||
import { ETHEREUM_ORG_RUN_A_NODE_URL } from '../../../constants';
|
||||
|
||||
|
@ -4,8 +4,11 @@ export const DiscordIcon = createIcon({
|
||||
displayName: 'DiscordIcon',
|
||||
viewBox: '0 0 32 24',
|
||||
path: (
|
||||
<svg width="32" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M26.9846 2.02697C26.9758 2.01 26.9612 1.99671 26.9435 1.98947C24.8961 1.05243 22.7354 0.384243 20.5157 0.00163895C20.4955 -0.00210093 20.4747 0.000597065 20.4561 0.00934923C20.4376 0.0181014 20.4223 0.0324621 20.4124 0.0503891C20.1182 0.583045 19.8511 1.13017 19.6122 1.68968C17.2194 1.32737 14.7855 1.32737 12.3927 1.68968C12.1522 1.12875 11.8808 0.581488 11.5799 0.0503891C11.5696 0.0328517 11.5542 0.0188217 11.5357 0.0101264C11.5173 0.0014311 11.4967 -0.0015265 11.4765 0.00163895C9.25655 0.38344 7.09577 1.05167 5.0486 1.98952C5.03107 1.99693 5.01629 2.00958 5.00628 2.02573C0.912331 8.12422 -0.209155 14.0728 0.341008 19.9476C0.342556 19.962 0.346991 19.976 0.354049 19.9886C0.361107 20.0013 0.370644 20.0124 0.382093 20.0213C2.76596 21.7819 5.43234 23.1259 8.26746 23.9957C8.28743 24.0017 8.30875 24.0014 8.32855 23.9949C8.34836 23.9885 8.36571 23.9761 8.37825 23.9595C8.98718 23.133 9.52673 22.2579 9.99142 21.3429C9.9978 21.3304 10.0014 21.3166 10.0021 21.3026C10.0028 21.2885 10.0005 21.2745 9.99528 21.2614C9.99011 21.2483 9.98221 21.2364 9.97212 21.2266C9.96202 21.2167 9.94994 21.2091 9.93669 21.2043C9.08586 20.8796 8.26216 20.4881 7.47331 20.0336C7.45898 20.0252 7.44695 20.0134 7.43827 19.9993C7.42959 19.9851 7.42454 19.9691 7.42356 19.9525C7.42257 19.936 7.42569 19.9194 7.43264 19.9044C7.43958 19.8893 7.45014 19.8762 7.46338 19.8661C7.6289 19.7424 7.79453 19.6138 7.95258 19.4838C7.96662 19.4723 7.98362 19.4649 8.00164 19.4624C8.01967 19.46 8.03802 19.4627 8.05462 19.4701C13.2227 21.8228 18.8178 21.8228 23.9247 19.4701C23.9414 19.4622 23.9599 19.4592 23.9782 19.4614C23.9965 19.4636 24.0138 19.4709 24.028 19.4826C24.1861 19.6125 24.3517 19.7424 24.5185 19.8661C24.5318 19.8761 24.5424 19.8891 24.5495 19.9041C24.5565 19.9191 24.5598 19.9356 24.5589 19.9522C24.5581 19.9687 24.5531 19.9848 24.5446 19.999C24.536 20.0132 24.524 20.0251 24.5098 20.0336C23.7227 20.4919 22.8983 20.8832 22.0452 21.2031C22.032 21.2081 22.0199 21.2159 22.0099 21.2259C21.9999 21.2358 21.9921 21.2478 21.987 21.261C21.9819 21.2742 21.9797 21.2884 21.9805 21.3025C21.9813 21.3166 21.985 21.3304 21.9915 21.3429C22.464 22.2528 23.0027 23.1268 23.6034 23.958C23.6156 23.9751 23.6329 23.9879 23.6528 23.9946C23.6727 24.0014 23.6942 24.0017 23.7142 23.9955C26.5544 23.1287 29.2255 21.7846 31.6123 20.0213C31.624 20.0128 31.6336 20.002 31.6407 19.9895C31.6478 19.977 31.6521 19.9632 31.6534 19.9489C32.3121 13.1569 30.5507 7.25711 26.9846 2.02697ZM10.7632 16.3704C9.20726 16.3704 7.92519 14.9461 7.92519 13.1969C7.92519 11.4477 9.18239 10.0233 10.7632 10.0233C12.3564 10.0233 13.6261 11.4601 13.6012 13.1968C13.6012 14.9461 12.344 16.3704 10.7632 16.3704ZM21.2563 16.3704C19.7004 16.3704 18.4183 14.9461 18.4183 13.1969C18.4183 11.4477 19.6755 10.0233 21.2563 10.0233C22.8496 10.0233 24.1192 11.4601 24.0943 13.1968C24.0943 14.9461 22.8496 16.3704 21.2563 16.3704Z" fill="currentColor"/>
|
||||
<svg width='32' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'>
|
||||
<path
|
||||
d='M26.9846 2.02697C26.9758 2.01 26.9612 1.99671 26.9435 1.98947C24.8961 1.05243 22.7354 0.384243 20.5157 0.00163895C20.4955 -0.00210093 20.4747 0.000597065 20.4561 0.00934923C20.4376 0.0181014 20.4223 0.0324621 20.4124 0.0503891C20.1182 0.583045 19.8511 1.13017 19.6122 1.68968C17.2194 1.32737 14.7855 1.32737 12.3927 1.68968C12.1522 1.12875 11.8808 0.581488 11.5799 0.0503891C11.5696 0.0328517 11.5542 0.0188217 11.5357 0.0101264C11.5173 0.0014311 11.4967 -0.0015265 11.4765 0.00163895C9.25655 0.38344 7.09577 1.05167 5.0486 1.98952C5.03107 1.99693 5.01629 2.00958 5.00628 2.02573C0.912331 8.12422 -0.209155 14.0728 0.341008 19.9476C0.342556 19.962 0.346991 19.976 0.354049 19.9886C0.361107 20.0013 0.370644 20.0124 0.382093 20.0213C2.76596 21.7819 5.43234 23.1259 8.26746 23.9957C8.28743 24.0017 8.30875 24.0014 8.32855 23.9949C8.34836 23.9885 8.36571 23.9761 8.37825 23.9595C8.98718 23.133 9.52673 22.2579 9.99142 21.3429C9.9978 21.3304 10.0014 21.3166 10.0021 21.3026C10.0028 21.2885 10.0005 21.2745 9.99528 21.2614C9.99011 21.2483 9.98221 21.2364 9.97212 21.2266C9.96202 21.2167 9.94994 21.2091 9.93669 21.2043C9.08586 20.8796 8.26216 20.4881 7.47331 20.0336C7.45898 20.0252 7.44695 20.0134 7.43827 19.9993C7.42959 19.9851 7.42454 19.9691 7.42356 19.9525C7.42257 19.936 7.42569 19.9194 7.43264 19.9044C7.43958 19.8893 7.45014 19.8762 7.46338 19.8661C7.6289 19.7424 7.79453 19.6138 7.95258 19.4838C7.96662 19.4723 7.98362 19.4649 8.00164 19.4624C8.01967 19.46 8.03802 19.4627 8.05462 19.4701C13.2227 21.8228 18.8178 21.8228 23.9247 19.4701C23.9414 19.4622 23.9599 19.4592 23.9782 19.4614C23.9965 19.4636 24.0138 19.4709 24.028 19.4826C24.1861 19.6125 24.3517 19.7424 24.5185 19.8661C24.5318 19.8761 24.5424 19.8891 24.5495 19.9041C24.5565 19.9191 24.5598 19.9356 24.5589 19.9522C24.5581 19.9687 24.5531 19.9848 24.5446 19.999C24.536 20.0132 24.524 20.0251 24.5098 20.0336C23.7227 20.4919 22.8983 20.8832 22.0452 21.2031C22.032 21.2081 22.0199 21.2159 22.0099 21.2259C21.9999 21.2358 21.9921 21.2478 21.987 21.261C21.9819 21.2742 21.9797 21.2884 21.9805 21.3025C21.9813 21.3166 21.985 21.3304 21.9915 21.3429C22.464 22.2528 23.0027 23.1268 23.6034 23.958C23.6156 23.9751 23.6329 23.9879 23.6528 23.9946C23.6727 24.0014 23.6942 24.0017 23.7142 23.9955C26.5544 23.1287 29.2255 21.7846 31.6123 20.0213C31.624 20.0128 31.6336 20.002 31.6407 19.9895C31.6478 19.977 31.6521 19.9632 31.6534 19.9489C32.3121 13.1569 30.5507 7.25711 26.9846 2.02697ZM10.7632 16.3704C9.20726 16.3704 7.92519 14.9461 7.92519 13.1969C7.92519 11.4477 9.18239 10.0233 10.7632 10.0233C12.3564 10.0233 13.6261 11.4601 13.6012 13.1968C13.6012 14.9461 12.344 16.3704 10.7632 16.3704ZM21.2563 16.3704C19.7004 16.3704 18.4183 14.9461 18.4183 13.1969C18.4183 11.4477 19.6755 10.0233 21.2563 10.0233C22.8496 10.0233 24.1192 11.4601 24.0943 13.1968C24.0943 14.9461 22.8496 16.3704 21.2563 16.3704Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
});
|
||||
|
@ -4,8 +4,11 @@ export const GitHubIcon = createIcon({
|
||||
displayName: 'GitHubIcon',
|
||||
viewBox: '0 0 26 24',
|
||||
path: (
|
||||
<svg width="26" height="24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.82878 19.3248C8.82878 19.424 8.71193 19.5034 8.56459 19.5034C8.39693 19.5183 8.28007 19.4389 8.28007 19.3248C8.28007 19.2255 8.39693 19.1461 8.54427 19.1461C8.69669 19.1312 8.82878 19.2106 8.82878 19.3248ZM7.2487 19.1014C7.21314 19.2007 7.31475 19.3148 7.46717 19.3446C7.59927 19.3942 7.75169 19.3446 7.78217 19.2454C7.81265 19.1461 7.71612 19.032 7.5637 18.9873C7.43161 18.9526 7.28427 19.0022 7.2487 19.1014ZM9.49435 19.0171C9.34701 19.0518 9.2454 19.1461 9.26064 19.2603C9.27588 19.3595 9.40798 19.424 9.5604 19.3893C9.70774 19.3545 9.80935 19.2603 9.79411 19.161C9.77886 19.0667 9.64169 19.0022 9.49435 19.0171ZM12.8374 0C5.79056 0 0.399994 5.22573 0.399994 12.109C0.399994 17.6126 3.94628 22.3222 9.01169 23.9798C9.66201 24.0939 9.89064 23.7019 9.89064 23.3793C9.89064 23.0716 9.8754 21.3744 9.8754 20.3322C9.8754 20.3322 6.31895 21.0766 5.57209 18.8533C5.57209 18.8533 4.9929 17.4092 4.15967 17.037C4.15967 17.037 2.9962 16.2578 4.24096 16.2727C4.24096 16.2727 5.50604 16.372 6.20209 17.5531C7.31475 19.4687 9.17935 18.9178 9.90588 18.5903C10.0227 17.7963 10.353 17.2454 10.7188 16.9179C7.8787 16.6102 5.01322 16.2082 5.01322 11.4341C5.01322 10.0693 5.39935 9.38447 6.21225 8.51103C6.08015 8.18846 5.6483 6.85846 6.34435 5.14136C7.4062 4.81878 9.84999 6.48129 9.84999 6.48129C10.8661 6.20338 11.9585 6.05946 13.0406 6.05946C14.1228 6.05946 15.2152 6.20338 16.2313 6.48129C16.2313 6.48129 18.6751 4.81382 19.7369 5.14136C20.433 6.86342 20.0011 8.18846 19.869 8.51103C20.6819 9.38943 21.1798 10.0743 21.1798 11.4341C21.1798 16.2231 18.1873 16.6052 15.3473 16.9179C15.8147 17.3099 16.211 18.0543 16.211 19.2205C16.211 20.893 16.1957 22.9624 16.1957 23.3694C16.1957 23.6919 16.4294 24.084 17.0747 23.9699C22.1553 22.3222 25.6 17.6126 25.6 12.109C25.6 5.22573 19.8843 0 12.8374 0ZM5.33838 17.1164C5.27233 17.166 5.28757 17.2801 5.37395 17.3744C5.45524 17.4538 5.57209 17.4886 5.63814 17.424C5.70419 17.3744 5.68895 17.2603 5.60257 17.166C5.52128 17.0866 5.40443 17.0518 5.33838 17.1164ZM4.78967 16.7144C4.75411 16.7789 4.80491 16.8583 4.90653 16.9079C4.98782 16.9576 5.08943 16.9427 5.12499 16.8732C5.16056 16.8087 5.10975 16.7293 5.00814 16.6796C4.90653 16.6499 4.82524 16.6648 4.78967 16.7144ZM6.4358 18.4811C6.35451 18.5456 6.38499 18.6945 6.50185 18.7888C6.6187 18.9029 6.76604 18.9178 6.83209 18.8384C6.89814 18.7739 6.86765 18.625 6.76604 18.5307C6.65427 18.4166 6.50185 18.4017 6.4358 18.4811ZM5.85661 17.7516C5.77532 17.8012 5.77532 17.9302 5.85661 18.0444C5.9379 18.1585 6.07507 18.2082 6.14112 18.1585C6.22241 18.094 6.22241 17.965 6.14112 17.8508C6.06999 17.7367 5.9379 17.6871 5.85661 17.7516Z" fill="currentColor"/>
|
||||
<svg width='26' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'>
|
||||
<path
|
||||
d='M8.82878 19.3248C8.82878 19.424 8.71193 19.5034 8.56459 19.5034C8.39693 19.5183 8.28007 19.4389 8.28007 19.3248C8.28007 19.2255 8.39693 19.1461 8.54427 19.1461C8.69669 19.1312 8.82878 19.2106 8.82878 19.3248ZM7.2487 19.1014C7.21314 19.2007 7.31475 19.3148 7.46717 19.3446C7.59927 19.3942 7.75169 19.3446 7.78217 19.2454C7.81265 19.1461 7.71612 19.032 7.5637 18.9873C7.43161 18.9526 7.28427 19.0022 7.2487 19.1014ZM9.49435 19.0171C9.34701 19.0518 9.2454 19.1461 9.26064 19.2603C9.27588 19.3595 9.40798 19.424 9.5604 19.3893C9.70774 19.3545 9.80935 19.2603 9.79411 19.161C9.77886 19.0667 9.64169 19.0022 9.49435 19.0171ZM12.8374 0C5.79056 0 0.399994 5.22573 0.399994 12.109C0.399994 17.6126 3.94628 22.3222 9.01169 23.9798C9.66201 24.0939 9.89064 23.7019 9.89064 23.3793C9.89064 23.0716 9.8754 21.3744 9.8754 20.3322C9.8754 20.3322 6.31895 21.0766 5.57209 18.8533C5.57209 18.8533 4.9929 17.4092 4.15967 17.037C4.15967 17.037 2.9962 16.2578 4.24096 16.2727C4.24096 16.2727 5.50604 16.372 6.20209 17.5531C7.31475 19.4687 9.17935 18.9178 9.90588 18.5903C10.0227 17.7963 10.353 17.2454 10.7188 16.9179C7.8787 16.6102 5.01322 16.2082 5.01322 11.4341C5.01322 10.0693 5.39935 9.38447 6.21225 8.51103C6.08015 8.18846 5.6483 6.85846 6.34435 5.14136C7.4062 4.81878 9.84999 6.48129 9.84999 6.48129C10.8661 6.20338 11.9585 6.05946 13.0406 6.05946C14.1228 6.05946 15.2152 6.20338 16.2313 6.48129C16.2313 6.48129 18.6751 4.81382 19.7369 5.14136C20.433 6.86342 20.0011 8.18846 19.869 8.51103C20.6819 9.38943 21.1798 10.0743 21.1798 11.4341C21.1798 16.2231 18.1873 16.6052 15.3473 16.9179C15.8147 17.3099 16.211 18.0543 16.211 19.2205C16.211 20.893 16.1957 22.9624 16.1957 23.3694C16.1957 23.6919 16.4294 24.084 17.0747 23.9699C22.1553 22.3222 25.6 17.6126 25.6 12.109C25.6 5.22573 19.8843 0 12.8374 0ZM5.33838 17.1164C5.27233 17.166 5.28757 17.2801 5.37395 17.3744C5.45524 17.4538 5.57209 17.4886 5.63814 17.424C5.70419 17.3744 5.68895 17.2603 5.60257 17.166C5.52128 17.0866 5.40443 17.0518 5.33838 17.1164ZM4.78967 16.7144C4.75411 16.7789 4.80491 16.8583 4.90653 16.9079C4.98782 16.9576 5.08943 16.9427 5.12499 16.8732C5.16056 16.8087 5.10975 16.7293 5.00814 16.6796C4.90653 16.6499 4.82524 16.6648 4.78967 16.7144ZM6.4358 18.4811C6.35451 18.5456 6.38499 18.6945 6.50185 18.7888C6.6187 18.9029 6.76604 18.9178 6.83209 18.8384C6.89814 18.7739 6.86765 18.625 6.76604 18.5307C6.65427 18.4166 6.50185 18.4017 6.4358 18.4811ZM5.85661 17.7516C5.77532 17.8012 5.77532 17.9302 5.85661 18.0444C5.9379 18.1585 6.07507 18.2082 6.14112 18.1585C6.22241 18.094 6.22241 17.965 6.14112 17.8508C6.06999 17.7367 5.9379 17.6871 5.85661 17.7516Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
});
|
||||
|
@ -4,16 +4,31 @@ export const SunIcon = createIcon({
|
||||
displayName: 'SunIcon',
|
||||
viewBox: '0 0 44 44',
|
||||
path: (
|
||||
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M21 0H23V12H21V0Z" fill="currentColor"/>
|
||||
<path d="M0 23V21H12V23H0Z" fill="currentColor"/>
|
||||
<path d="M44 21H32V23H44V21Z" fill="currentColor"/>
|
||||
<path d="M21 32H23V44H21V32Z" fill="currentColor"/>
|
||||
<path d="M7.15074 5.73633L5.73653 7.15054L14.2218 15.6358L15.636 14.2216L7.15074 5.73633Z" fill="currentColor"/>
|
||||
<path d="M36.8493 5.73618L38.2635 7.15039L29.7782 15.6357L28.364 14.2215L36.8493 5.73618Z" fill="currentColor"/>
|
||||
<path d="M29.7782 28.3643L28.364 29.7785L36.8492 38.2638L38.2635 36.8495L29.7782 28.3643Z" fill="currentColor"/>
|
||||
<path d="M14.2218 28.3641L15.636 29.7783L7.15076 38.2636L5.73655 36.8494L14.2218 28.3641Z" fill="currentColor"/>
|
||||
<path d="M30 22C30 26.4183 26.4183 30 22 30C17.5817 30 14 26.4183 14 22C14 17.5817 17.5817 14 22 14C26.4183 14 30 17.5817 30 22Z" fill="currentColor"/>
|
||||
<svg width='44' height='44' viewBox='0 0 44 44' fill='none' xmlns='http://www.w3.org/2000/svg'>
|
||||
<path d='M21 0H23V12H21V0Z' fill='currentColor' />
|
||||
<path d='M0 23V21H12V23H0Z' fill='currentColor' />
|
||||
<path d='M44 21H32V23H44V21Z' fill='currentColor' />
|
||||
<path d='M21 32H23V44H21V32Z' fill='currentColor' />
|
||||
<path
|
||||
d='M7.15074 5.73633L5.73653 7.15054L14.2218 15.6358L15.636 14.2216L7.15074 5.73633Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
<path
|
||||
d='M36.8493 5.73618L38.2635 7.15039L29.7782 15.6357L28.364 14.2215L36.8493 5.73618Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
<path
|
||||
d='M29.7782 28.3643L28.364 29.7785L36.8492 38.2638L38.2635 36.8495L29.7782 28.3643Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
<path
|
||||
d='M14.2218 28.3641L15.636 29.7783L7.15076 38.2636L5.73655 36.8494L14.2218 28.3641Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
<path
|
||||
d='M30 22C30 26.4183 26.4183 30 22 30C17.5817 30 14 26.4183 14 22C14 17.5817 17.5817 14 22 14C26.4183 14 30 17.5817 30 22Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
});
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { FC } from 'react';
|
||||
import { Input, InputGroup, Stack } from '@chakra-ui/react'
|
||||
import { Input, InputGroup, Stack } from '@chakra-ui/react';
|
||||
|
||||
import { BORDER_WIDTH } from '../../../constants'
|
||||
import { BORDER_WIDTH } from '../../../constants';
|
||||
import { LensIcon } from '../icons';
|
||||
|
||||
export const Search: FC = () => {
|
||||
@ -12,14 +12,14 @@ export const Search: FC = () => {
|
||||
borderColor={{ base: 'bg', md: 'primary' }}
|
||||
px={4}
|
||||
py={{ base: 8, md: 4 }}
|
||||
_hover={{ base: {bg: 'primary'}, md: {bg: 'none'}}}
|
||||
_hover={{ base: { bg: 'primary' }, md: { bg: 'none' } }}
|
||||
>
|
||||
<InputGroup>
|
||||
<Input
|
||||
variant='unstyled'
|
||||
placeholder='search'
|
||||
size='md'
|
||||
_placeholder={{ color: {base: 'bg', md: 'primary'}, fontStyle: 'italic' }}
|
||||
_placeholder={{ color: { base: 'bg', md: 'primary' }, fontStyle: 'italic' }}
|
||||
/>
|
||||
<Stack pl={4} justifyContent='center' alignItems='center'>
|
||||
<LensIcon color={{ base: 'bg', md: 'primary' }} fontSize={{ base: '3xl', md: 'md' }} />
|
||||
@ -27,4 +27,4 @@ export const Search: FC = () => {
|
||||
</InputGroup>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
};
|
||||
|
@ -1 +1 @@
|
||||
export * from './Search';
|
||||
export * from './Search';
|
||||
|
@ -7,15 +7,47 @@ const Icon = createIcon({
|
||||
displayName: 'GlyphHome',
|
||||
viewBox: `0 0 ${w} ${h}`,
|
||||
path: (
|
||||
<svg width={w} height={h} fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M90.0002 276.5V207.379L2.76453 157.376L90.0002 276.5Z" stroke="currentColor" strokeWidth="2" strokeLinejoin="round"/>
|
||||
<path d="M90.0001 276.5V207.379L177.236 157.376L90.0001 276.5Z" stroke="currentColor" strokeWidth="2" strokeLinejoin="round"/>
|
||||
<path d="M89.9999 190.325V102.883L1.5 141.27L89.9999 190.325Z" stroke="currentColor" strokeWidth="2" strokeLinejoin="round"/>
|
||||
<path d="M90.0001 190.325V102.883L178.5 141.27L90.0001 190.325Z" stroke="currentColor" strokeWidth="2" strokeLinejoin="round"/>
|
||||
<path d="M1.5 140.901L89.9999 1.5V102.26L1.5 140.901Z" stroke="currentColor" strokeWidth="2" strokeLinejoin="round"/>
|
||||
<path d="M178.5 140.901L90.0001 1.5V102.26L178.5 140.901Z" stroke="currentColor" strokeWidth="2" strokeLinejoin="round"/>
|
||||
<svg width={w} height={h} fill='none' xmlns='http://www.w3.org/2000/svg'>
|
||||
<path
|
||||
d='M90.0002 276.5V207.379L2.76453 157.376L90.0002 276.5Z'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2'
|
||||
strokeLinejoin='round'
|
||||
/>
|
||||
<path
|
||||
d='M90.0001 276.5V207.379L177.236 157.376L90.0001 276.5Z'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2'
|
||||
strokeLinejoin='round'
|
||||
/>
|
||||
<path
|
||||
d='M89.9999 190.325V102.883L1.5 141.27L89.9999 190.325Z'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2'
|
||||
strokeLinejoin='round'
|
||||
/>
|
||||
<path
|
||||
d='M90.0001 190.325V102.883L178.5 141.27L90.0001 190.325Z'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2'
|
||||
strokeLinejoin='round'
|
||||
/>
|
||||
<path
|
||||
d='M1.5 140.901L89.9999 1.5V102.26L1.5 140.901Z'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2'
|
||||
strokeLinejoin='round'
|
||||
/>
|
||||
<path
|
||||
d='M178.5 140.901L90.0001 1.5V102.26L178.5 140.901Z'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2'
|
||||
strokeLinejoin='round'
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
});
|
||||
|
||||
export const GlyphHome: React.FC<IconProps> = (props) => <Icon h={h} w={w} color='primary' {...props} />;
|
||||
export const GlyphHome: React.FC<IconProps> = props => (
|
||||
<Icon h={h} w={w} color='primary' {...props} />
|
||||
);
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
export * from './Breadcrumbs'
|
||||
export * from './Breadcrumbs';
|
||||
|
@ -54,8 +54,8 @@ export const DOWNLOAD_HEADER_BUTTONS: {
|
||||
buildURL: ''
|
||||
}
|
||||
};
|
||||
export const DOWNLOAD_TABS = ['Linux', 'macOS', 'Windows', 'iOS', 'Android'];
|
||||
export const DOWNLOAD_TAB_COLUMN_HEADERS = [
|
||||
export const DOWNLOADS_TABLE_TABS = ['Linux', 'macOS', 'Windows', 'iOS', 'Android'];
|
||||
export const DOWNLOADS_TABLE_TAB_COLUMN_HEADERS = [
|
||||
'Release',
|
||||
'Commit',
|
||||
'Kind',
|
||||
@ -65,13 +65,13 @@ export const DOWNLOAD_TAB_COLUMN_HEADERS = [
|
||||
'Signature',
|
||||
'Checksum (MD5)'
|
||||
];
|
||||
export const DOWNLOAD_OPENPGP_BUILD_HEADERS = [
|
||||
export const DOWNLOADS_OPENPGP_BUILD_HEADERS = [
|
||||
'Build Server',
|
||||
'Unique ID',
|
||||
'OpenPGP Key',
|
||||
'Fingerprint'
|
||||
];
|
||||
export const DOWNLOAD_OPENPGP_DEVELOPER_HEADERS = [
|
||||
export const DOWNLOADS_OPENPGP_DEVELOPER_HEADERS = [
|
||||
'Developer',
|
||||
'Unique ID',
|
||||
'OpenPGP Key',
|
||||
@ -92,9 +92,11 @@ export const METADATA = {
|
||||
// GitHub urls
|
||||
export const LATEST_GETH_RELEASE_URL =
|
||||
'https://api.github.com/repos/ethereum/go-ethereum/releases/latest';
|
||||
export const ALL_GETH_RELEASES_URL = 'https://api.github.com/repos/ethereum/go-ethereum/releases';
|
||||
export const ALL_GETH_COMMITS_URL = 'https://api.github.com/repos/ethereum/go-ethereum/commits/';
|
||||
export const RELEASE_COMMIT_BASE_URL = 'https://github.com/ethereum/go-ethereum/tree/';
|
||||
|
||||
// Binaries urls
|
||||
export const BINARIES_BASE_URL = 'https://gethstore.blob.core.windows.net/builds/';
|
||||
export const LINUX_BINARY_BASE_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-';
|
||||
export const MACOS_BINARY_BASE_URL =
|
||||
@ -102,7 +104,37 @@ export const MACOS_BINARY_BASE_URL =
|
||||
export const WINDOWS_BINARY_BASE_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds/geth-windows-amd64-';
|
||||
|
||||
// Blobs urls
|
||||
// linux
|
||||
export const ALL_LINUX_GETH_RELEASES_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds?restype=container&comp=list&prefix=geth-linux';
|
||||
export const ALL_LINUX_ALLTOOLS_GETH_RELEASES_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds?restype=container&comp=list&prefix=geth-alltools-linux';
|
||||
|
||||
// macOS
|
||||
export const ALL_MACOS_GETH_RELEASES_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds?restype=container&comp=list&prefix=geth-darwin';
|
||||
export const ALL_MACOS_ALLTOOLS_GETH_RELEASES_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds?restype=container&comp=list&prefix=geth-alltools-darwin';
|
||||
|
||||
// windows
|
||||
export const ALL_WINDOWS_GETH_RELEASES_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds?restype=container&comp=list&prefix=geth-windows';
|
||||
export const ALL_WINDOWS_ALLTOOLS_GETH_RELEASES_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds?restype=container&comp=list&prefix=geth-alltools-windows';
|
||||
|
||||
// android
|
||||
export const ALL_ANDROID_GETH_RELEASES_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds?restype=container&comp=list&prefix=geth-android-all';
|
||||
|
||||
// iOS
|
||||
export const ALL_IOS_GETH_RELEASES_URL =
|
||||
'https://gethstore.blob.core.windows.net/builds?restype=container&comp=list&prefix=geth-ios-all';
|
||||
|
||||
// Sources urls
|
||||
export const LATEST_SOURCES_BASE_URL = 'https://github.com/ethereum/go-ethereum/archive/';
|
||||
|
||||
// Release notes urls
|
||||
export const RELEASE_NOTES_BASE_URL = 'https://github.com/ethereum/go-ethereum/releases/tag/';
|
||||
|
||||
// Code snippet class constants
|
||||
|
@ -1,122 +0,0 @@
|
||||
export const testDownloadData = [
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
},
|
||||
{
|
||||
release: 'Geth 1.10.23',
|
||||
commit: 'd901d853…',
|
||||
kind: 'archive',
|
||||
arch: '64-bit',
|
||||
size: '11.71 MB',
|
||||
published: 'Last Wednesday at 11:11 AM',
|
||||
signature: 'Signature',
|
||||
'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
|
||||
}
|
||||
];
|
@ -1,6 +1,7 @@
|
||||
import { Center, Code, Flex, Link, ListItem, Stack, Text, UnorderedList } from '@chakra-ui/react';
|
||||
import type { GetServerSideProps, NextPage } from 'next';
|
||||
import type { GetStaticProps, NextPage } from 'next';
|
||||
import { useState } from 'react';
|
||||
import { XMLParser } from 'fast-xml-parser';
|
||||
|
||||
import {
|
||||
DownloadsHero,
|
||||
@ -11,49 +12,43 @@ import {
|
||||
import { DataTable, PageMetadata } from '../components/UI';
|
||||
|
||||
import {
|
||||
ALL_GETH_COMMITS_URL,
|
||||
DEFAULT_BUILD_AMOUNT_TO_SHOW,
|
||||
DOWNLOAD_OPENPGP_BUILD_HEADERS,
|
||||
DOWNLOAD_OPENPGP_DEVELOPER_HEADERS,
|
||||
DOWNLOADS_OPENPGP_BUILD_HEADERS,
|
||||
DOWNLOADS_OPENPGP_DEVELOPER_HEADERS,
|
||||
GETH_REPO_URL,
|
||||
METADATA,
|
||||
LATEST_GETH_RELEASE_URL,
|
||||
LATEST_SOURCES_BASE_URL,
|
||||
LINUX_BINARY_BASE_URL,
|
||||
MACOS_BINARY_BASE_URL,
|
||||
RELEASE_NOTES_BASE_URL,
|
||||
WINDOWS_BINARY_BASE_URL
|
||||
RELEASE_NOTES_BASE_URL
|
||||
} from '../constants';
|
||||
|
||||
import { testDownloadData } from '../data/test/download-testdata';
|
||||
import { pgpBuildTestData } from '../data/test/pgpbuild-testdata';
|
||||
import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata';
|
||||
|
||||
export const getServerSideProps: GetServerSideProps = async () => {
|
||||
// Latest release name & version number
|
||||
const { versionNumber, releaseName } = await fetch(LATEST_GETH_RELEASE_URL)
|
||||
.then(response => response.json())
|
||||
.then(release => {
|
||||
return {
|
||||
versionNumber: release.tag_name,
|
||||
releaseName: release.name
|
||||
};
|
||||
});
|
||||
import {
|
||||
fetchLatestReleaseCommit,
|
||||
fetchLatestReleaseVersionAndName,
|
||||
fetchXMLData,
|
||||
getLatestBinaryURL,
|
||||
getSortedReleases,
|
||||
mapReleasesData
|
||||
} from '../utils';
|
||||
import { LatestReleasesData, ReleaseData } from '../types';
|
||||
|
||||
// This function gets called at build time on server-side.
|
||||
// It'll be called again if a new request comes in after 1hr, so data is refreshed periodically
|
||||
// More info: https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration
|
||||
export const getStaticProps: GetStaticProps = async () => {
|
||||
// ==== LATEST RELEASES DATA ====
|
||||
|
||||
// Latest version number & release name
|
||||
const { versionNumber, releaseName } = await fetchLatestReleaseVersionAndName();
|
||||
// Latest release commit hash
|
||||
const commit = await fetch(`${ALL_GETH_COMMITS_URL}/${versionNumber}`)
|
||||
.then(response => response.json())
|
||||
.then(commit => commit.sha.slice(0, 8));
|
||||
const commit = await fetchLatestReleaseCommit(versionNumber);
|
||||
|
||||
// Latest binaries urls
|
||||
const LATEST_LINUX_BINARY_URL = `${LINUX_BINARY_BASE_URL}${versionNumber.slice(
|
||||
1
|
||||
)}-${commit}.tar.gz`;
|
||||
const LATEST_MACOS_BINARY_URL = `${MACOS_BINARY_BASE_URL}${versionNumber.slice(
|
||||
1
|
||||
)}-${commit}.tar.gz`;
|
||||
const LATEST_WINDOWS_BINARY_URL = `${WINDOWS_BINARY_BASE_URL}${versionNumber.slice(
|
||||
1
|
||||
)}-${commit}.exe`;
|
||||
const LATEST_LINUX_BINARY_URL = getLatestBinaryURL('linux', versionNumber, commit);
|
||||
const LATEST_MACOS_BINARY_URL = getLatestBinaryURL('darwin', versionNumber, commit);
|
||||
const LATEST_WINDOWS_BINARY_URL = getLatestBinaryURL('windows', versionNumber, commit);
|
||||
|
||||
// Sources urls
|
||||
const LATEST_SOURCES_URL = `${LATEST_SOURCES_BASE_URL}${versionNumber}.tar.gz`;
|
||||
@ -71,63 +66,249 @@ export const getServerSideProps: GetServerSideProps = async () => {
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
props: {
|
||||
data: { LATEST_RELEASES_DATA }
|
||||
}
|
||||
};
|
||||
// ==== ALL RELEASES DATA ====
|
||||
|
||||
// 1) fetch XML data
|
||||
try {
|
||||
const [
|
||||
ALL_LINUX_RELEASES_XML_DATA,
|
||||
ALL_LINUX_ALL_TOOLS_RELEASES_XML_DATA,
|
||||
ALL_MACOS_RELEASES_XML_DATA,
|
||||
ALL_MACOS_ALL_TOOLS_RELEASES_XML_DATA,
|
||||
ALL_WINDOWS_RELEASES_XML_DATA,
|
||||
ALL_WINDOWS_ALL_TOOLS_RELEASES_XML_DATA,
|
||||
ALL_ANDROID_RELEASES_XML_DATA,
|
||||
ALL_IOS_RELEASES_XML_DATA
|
||||
] = await fetchXMLData();
|
||||
|
||||
// 2) XML data parsing
|
||||
const parser = new XMLParser();
|
||||
|
||||
// linux
|
||||
const linuxJson = parser.parse(ALL_LINUX_RELEASES_XML_DATA);
|
||||
const ALL_LINUX_BLOBS_JSON_DATA = linuxJson.EnumerationResults.Blobs.Blob;
|
||||
|
||||
const linuxAllToolsJson = parser.parse(ALL_LINUX_ALL_TOOLS_RELEASES_XML_DATA);
|
||||
const ALL_LINUX_ALL_TOOLS_BLOBS_JSON_DATA = linuxAllToolsJson.EnumerationResults.Blobs.Blob;
|
||||
|
||||
// macOS
|
||||
const macOSJson = parser.parse(ALL_MACOS_RELEASES_XML_DATA);
|
||||
const ALL_MACOS_BLOBS_JSON_DATA = macOSJson.EnumerationResults.Blobs.Blob;
|
||||
|
||||
const macOSAllToolsJson = parser.parse(ALL_MACOS_ALL_TOOLS_RELEASES_XML_DATA);
|
||||
const ALL_MACOS_ALL_TOOLS_BLOBS_JSON_DATA = macOSAllToolsJson.EnumerationResults.Blobs.Blob;
|
||||
|
||||
// windows
|
||||
const windowsJson = parser.parse(ALL_WINDOWS_RELEASES_XML_DATA);
|
||||
const ALL_WINDOWS_BLOBS_JSON_DATA = windowsJson.EnumerationResults.Blobs.Blob;
|
||||
|
||||
const windowsAllToolsJson = parser.parse(ALL_WINDOWS_ALL_TOOLS_RELEASES_XML_DATA);
|
||||
const ALL_WINDOWS_ALL_TOOLS_BLOBS_JSON_DATA = windowsAllToolsJson.EnumerationResults.Blobs.Blob;
|
||||
|
||||
// android
|
||||
const androidJson = parser.parse(ALL_ANDROID_RELEASES_XML_DATA);
|
||||
const ALL_ANDROID_BLOBS_JSON_DATA = androidJson.EnumerationResults.Blobs.Blob;
|
||||
|
||||
// iOS
|
||||
const iOSJson = parser.parse(ALL_IOS_RELEASES_XML_DATA);
|
||||
const ALL_IOS_BLOBS_JSON_DATA = iOSJson.EnumerationResults.Blobs.Blob;
|
||||
|
||||
// 3) get blobs
|
||||
// linux
|
||||
const LINUX_STABLE_RELEASES_DATA = mapReleasesData({
|
||||
blobsList: ALL_LINUX_BLOBS_JSON_DATA,
|
||||
isStableRelease: true
|
||||
});
|
||||
const LINUX_ALLTOOLS_STABLE_RELEASES_DATA = mapReleasesData({
|
||||
blobsList: ALL_LINUX_ALL_TOOLS_BLOBS_JSON_DATA,
|
||||
isStableRelease: true
|
||||
});
|
||||
const LINUX_DEV_BUILDS_DATA = mapReleasesData({
|
||||
blobsList: ALL_LINUX_BLOBS_JSON_DATA,
|
||||
isStableRelease: false
|
||||
});
|
||||
const LINUX_ALLTOOLS_DEV_BUILDS_DATA = mapReleasesData({
|
||||
blobsList: ALL_LINUX_ALL_TOOLS_BLOBS_JSON_DATA,
|
||||
isStableRelease: false
|
||||
});
|
||||
|
||||
// macOS
|
||||
const MACOS_STABLE_RELEASES_DATA = mapReleasesData({
|
||||
blobsList: ALL_MACOS_BLOBS_JSON_DATA,
|
||||
isStableRelease: true
|
||||
});
|
||||
const MACOS_ALLTOOLS_STABLE_RELEASES_DATA = mapReleasesData({
|
||||
blobsList: ALL_MACOS_ALL_TOOLS_BLOBS_JSON_DATA,
|
||||
isStableRelease: true
|
||||
});
|
||||
const MACOS_DEV_BUILDS_DATA = mapReleasesData({
|
||||
blobsList: ALL_MACOS_BLOBS_JSON_DATA,
|
||||
isStableRelease: false
|
||||
});
|
||||
const MACOS_ALLTOOLS_DEV_BUILDS_DATA = mapReleasesData({
|
||||
blobsList: ALL_MACOS_ALL_TOOLS_BLOBS_JSON_DATA,
|
||||
isStableRelease: false
|
||||
});
|
||||
|
||||
// windows
|
||||
const WINDOWS_STABLE_RELEASES_DATA = mapReleasesData({
|
||||
blobsList: ALL_WINDOWS_BLOBS_JSON_DATA,
|
||||
isStableRelease: true
|
||||
});
|
||||
const WINDOWS_ALLTOOLS_STABLE_RELEASES_DATA = mapReleasesData({
|
||||
blobsList: ALL_WINDOWS_ALL_TOOLS_BLOBS_JSON_DATA,
|
||||
isStableRelease: true
|
||||
});
|
||||
const WINDOWS_DEV_BUILDS_DATA = mapReleasesData({
|
||||
blobsList: ALL_WINDOWS_BLOBS_JSON_DATA,
|
||||
isStableRelease: false
|
||||
});
|
||||
const WINDOWS_ALLTOOLS_DEV_BUILDS_DATA = mapReleasesData({
|
||||
blobsList: ALL_WINDOWS_ALL_TOOLS_BLOBS_JSON_DATA,
|
||||
isStableRelease: false
|
||||
});
|
||||
|
||||
// android
|
||||
const ANDROID_STABLE_RELEASES_DATA = mapReleasesData({
|
||||
blobsList: ALL_ANDROID_BLOBS_JSON_DATA,
|
||||
isStableRelease: true
|
||||
});
|
||||
const ANDROID_DEV_BUILDS_DATA = mapReleasesData({
|
||||
blobsList: ALL_ANDROID_BLOBS_JSON_DATA,
|
||||
isStableRelease: false
|
||||
});
|
||||
|
||||
// iOS
|
||||
const IOS_STABLE_RELEASES_DATA = mapReleasesData({
|
||||
blobsList: ALL_IOS_BLOBS_JSON_DATA,
|
||||
isStableRelease: true
|
||||
});
|
||||
const IOS_DEV_BUILDS_DATA = mapReleasesData({
|
||||
blobsList: ALL_IOS_BLOBS_JSON_DATA,
|
||||
isStableRelease: false
|
||||
});
|
||||
|
||||
return {
|
||||
props: {
|
||||
data: {
|
||||
// latest
|
||||
LATEST_RELEASES_DATA,
|
||||
// linux
|
||||
ALL_LINUX_STABLE_RELEASES: getSortedReleases(
|
||||
LINUX_STABLE_RELEASES_DATA,
|
||||
LINUX_ALLTOOLS_STABLE_RELEASES_DATA
|
||||
),
|
||||
ALL_LINUX_DEV_BUILDS: getSortedReleases(
|
||||
LINUX_DEV_BUILDS_DATA,
|
||||
LINUX_ALLTOOLS_DEV_BUILDS_DATA
|
||||
),
|
||||
// macOS
|
||||
ALL_MACOS_STABLE_RELEASES: getSortedReleases(
|
||||
MACOS_STABLE_RELEASES_DATA,
|
||||
MACOS_ALLTOOLS_STABLE_RELEASES_DATA
|
||||
),
|
||||
ALL_MACOS_DEV_BUILDS: getSortedReleases(
|
||||
MACOS_DEV_BUILDS_DATA,
|
||||
MACOS_ALLTOOLS_DEV_BUILDS_DATA
|
||||
),
|
||||
// windows
|
||||
ALL_WINDOWS_STABLE_RELEASES: getSortedReleases(
|
||||
WINDOWS_STABLE_RELEASES_DATA,
|
||||
WINDOWS_ALLTOOLS_STABLE_RELEASES_DATA
|
||||
),
|
||||
ALL_WINDOWS_DEV_BUILDS: getSortedReleases(
|
||||
WINDOWS_DEV_BUILDS_DATA,
|
||||
WINDOWS_ALLTOOLS_DEV_BUILDS_DATA
|
||||
),
|
||||
// android
|
||||
ALL_ANDROID_STABLE_RELEASES: getSortedReleases(ANDROID_STABLE_RELEASES_DATA),
|
||||
ALL_ANDROID_DEV_BUILDS: getSortedReleases(ANDROID_DEV_BUILDS_DATA),
|
||||
// iOS
|
||||
ALL_IOS_STABLE_RELEASES: getSortedReleases(IOS_STABLE_RELEASES_DATA),
|
||||
ALL_IOS_DEV_BUILDS: getSortedReleases(IOS_DEV_BUILDS_DATA)
|
||||
}
|
||||
},
|
||||
// using ISR here (https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration)
|
||||
revalidate: 3600 // 1hr in seconds
|
||||
};
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
return { notFound: true };
|
||||
}
|
||||
};
|
||||
|
||||
interface Props {
|
||||
data: {
|
||||
// TODO: define interfaces after adding the rest of the logic
|
||||
LATEST_RELEASES_DATA: {
|
||||
versionNumber: string;
|
||||
releaseName: string;
|
||||
urls: {
|
||||
LATEST_LINUX_BINARY_URL: string;
|
||||
LATEST_MACOS_BINARY_URL: string;
|
||||
LATEST_WINDOWS_BINARY_URL: string;
|
||||
LATEST_SOURCES_URL: string;
|
||||
RELEASE_NOTES_URL: string;
|
||||
};
|
||||
};
|
||||
// latest
|
||||
LATEST_RELEASES_DATA: LatestReleasesData;
|
||||
// linux
|
||||
ALL_LINUX_STABLE_RELEASES: ReleaseData[];
|
||||
ALL_LINUX_DEV_BUILDS: ReleaseData[];
|
||||
// macOS
|
||||
ALL_MACOS_STABLE_RELEASES: ReleaseData[];
|
||||
ALL_MACOS_DEV_BUILDS: ReleaseData[];
|
||||
// windows
|
||||
ALL_WINDOWS_STABLE_RELEASES: ReleaseData[];
|
||||
ALL_WINDOWS_DEV_BUILDS: ReleaseData[];
|
||||
// android
|
||||
ALL_ANDROID_STABLE_RELEASES: ReleaseData[];
|
||||
ALL_ANDROID_DEV_BUILDS: ReleaseData[];
|
||||
// iOS
|
||||
ALL_IOS_STABLE_RELEASES: ReleaseData[];
|
||||
ALL_IOS_DEV_BUILDS: ReleaseData[];
|
||||
};
|
||||
}
|
||||
|
||||
const DownloadsPage: NextPage<Props> = ({ data }) => {
|
||||
const [amountStableReleases, updateAmountStables] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
||||
const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
||||
const {
|
||||
// latest
|
||||
LATEST_RELEASES_DATA,
|
||||
// linux
|
||||
ALL_LINUX_STABLE_RELEASES,
|
||||
ALL_LINUX_DEV_BUILDS,
|
||||
// macOS
|
||||
ALL_MACOS_STABLE_RELEASES,
|
||||
ALL_MACOS_DEV_BUILDS,
|
||||
// windows
|
||||
ALL_WINDOWS_STABLE_RELEASES,
|
||||
ALL_WINDOWS_DEV_BUILDS,
|
||||
// android
|
||||
ALL_ANDROID_STABLE_RELEASES,
|
||||
ALL_ANDROID_DEV_BUILDS,
|
||||
// iOS
|
||||
ALL_IOS_STABLE_RELEASES,
|
||||
ALL_IOS_DEV_BUILDS
|
||||
} = data;
|
||||
|
||||
const [amountStableReleases, setAmountStableReleases] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
||||
const [amountDevBuilds, setAmountDevBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
|
||||
|
||||
const [totalStableReleases, setTotalStableReleases] = useState(ALL_LINUX_STABLE_RELEASES.length);
|
||||
const [totalDevBuilds, setTotalDevBuilds] = useState(ALL_LINUX_DEV_BUILDS.length);
|
||||
|
||||
const showMoreStableReleases = () => {
|
||||
updateAmountStables(amountStableReleases + 10);
|
||||
setAmountStableReleases(amountStableReleases + 10);
|
||||
};
|
||||
|
||||
const showMoreDevelopBuilds = () => {
|
||||
updateAmountDevelopBuilds(amountDevelopBuilds + 10);
|
||||
const showMoreDevBuilds = () => {
|
||||
setAmountDevBuilds(amountDevBuilds + 10);
|
||||
};
|
||||
|
||||
const {
|
||||
LATEST_RELEASES_DATA: { releaseName, versionNumber, urls }
|
||||
} = data;
|
||||
|
||||
return (
|
||||
<>
|
||||
<PageMetadata
|
||||
title={METADATA.DOWNLOADS_TITLE}
|
||||
description={METADATA.DOWNLOADS_DESCRIPTION}
|
||||
/>
|
||||
<PageMetadata title={METADATA.DOWNLOADS_TITLE} description={METADATA.DOWNLOADS_DESCRIPTION} />
|
||||
|
||||
<main>
|
||||
<Stack spacing={4}>
|
||||
<DownloadsHero
|
||||
currentBuild={releaseName}
|
||||
currentBuildVersion={versionNumber}
|
||||
linuxBuildURL={urls.LATEST_LINUX_BINARY_URL}
|
||||
macOSBuildURL={urls.LATEST_MACOS_BINARY_URL}
|
||||
windowsBuildURL={urls.LATEST_WINDOWS_BINARY_URL}
|
||||
sourceCodeURL={urls.LATEST_SOURCES_URL}
|
||||
releaseNotesURL={urls.RELEASE_NOTES_URL}
|
||||
currentBuild={LATEST_RELEASES_DATA.releaseName}
|
||||
currentBuildVersion={LATEST_RELEASES_DATA.versionNumber}
|
||||
linuxBuildURL={LATEST_RELEASES_DATA.urls.LATEST_LINUX_BINARY_URL}
|
||||
macOSBuildURL={LATEST_RELEASES_DATA.urls.LATEST_MACOS_BINARY_URL}
|
||||
windowsBuildURL={LATEST_RELEASES_DATA.urls.LATEST_WINDOWS_BINARY_URL}
|
||||
sourceCodeURL={LATEST_RELEASES_DATA.urls.LATEST_SOURCES_URL}
|
||||
releaseNotesURL={LATEST_RELEASES_DATA.urls.RELEASE_NOTES_URL}
|
||||
/>
|
||||
|
||||
<SpecificVersionsSection>
|
||||
@ -168,6 +349,7 @@ const DownloadsPage: NextPage<Props> = ({ data }) => {
|
||||
</Stack>
|
||||
</SpecificVersionsSection>
|
||||
|
||||
{/* STABLE RELEASES */}
|
||||
<DownloadsSection
|
||||
id='stablereleases'
|
||||
sectionDescription={
|
||||
@ -181,42 +363,59 @@ const DownloadsPage: NextPage<Props> = ({ data }) => {
|
||||
}
|
||||
sectionTitle='Stable releases'
|
||||
>
|
||||
{/* TODO: swap test data for real data */}
|
||||
<DownloadsTable data={testDownloadData.slice(0, amountStableReleases)} />
|
||||
|
||||
<DownloadsTable
|
||||
linuxData={ALL_LINUX_STABLE_RELEASES}
|
||||
macOSData={ALL_MACOS_STABLE_RELEASES}
|
||||
windowsData={ALL_WINDOWS_STABLE_RELEASES}
|
||||
iOSData={ALL_IOS_STABLE_RELEASES}
|
||||
androidData={ALL_ANDROID_STABLE_RELEASES}
|
||||
amountOfReleasesToShow={amountStableReleases}
|
||||
setTotalReleases={setTotalStableReleases}
|
||||
/>
|
||||
<Flex
|
||||
sx={{ mt: '0 !important' }}
|
||||
flexDirection={{ base: 'column', md: 'row' }}
|
||||
justifyContent='space-between'
|
||||
alignItems='center'
|
||||
>
|
||||
<Stack p={4} display={{ base: 'none', md: 'block' }}>
|
||||
<Center>
|
||||
{/* TODO: swap testDownloadData with actual data */}
|
||||
<Text>
|
||||
Showing {amountStableReleases} latest releases of a total{' '}
|
||||
{testDownloadData.length} releases
|
||||
</Text>
|
||||
</Center>
|
||||
<Stack p={4} display={{ base: 'none', md: 'block' }} mx='auto'>
|
||||
<Text textStyle='hero-text-small'>
|
||||
{totalStableReleases > 0
|
||||
? `Showing ${Math.min(
|
||||
amountStableReleases,
|
||||
totalStableReleases
|
||||
)} latest releases of
|
||||
a total ${totalStableReleases} releases`
|
||||
: `No releases`}
|
||||
</Text>
|
||||
</Stack>
|
||||
<Stack
|
||||
sx={{ mt: '0 !important' }}
|
||||
borderLeft={{ base: 'none', md: '2px solid #11866f' }}
|
||||
>
|
||||
<Link as='button' variant='button-link-secondary' onClick={showMoreStableReleases}>
|
||||
<Text
|
||||
fontFamily='"JetBrains Mono", monospace'
|
||||
fontWeight={700}
|
||||
textTransform='uppercase'
|
||||
textAlign='center'
|
||||
p={4}
|
||||
|
||||
{totalStableReleases > amountStableReleases && (
|
||||
<Stack
|
||||
sx={{ mt: '0 !important' }}
|
||||
borderLeft={{ base: 'none', md: '2px solid #11866f' }}
|
||||
>
|
||||
<Link
|
||||
as='button'
|
||||
variant='button-link-secondary'
|
||||
onClick={showMoreStableReleases}
|
||||
>
|
||||
Show older releases
|
||||
</Text>
|
||||
</Link>
|
||||
</Stack>
|
||||
<Text
|
||||
fontFamily='"JetBrains Mono", monospace'
|
||||
fontWeight={700}
|
||||
textTransform='uppercase'
|
||||
textAlign='center'
|
||||
p={4}
|
||||
>
|
||||
Show older releases
|
||||
</Text>
|
||||
</Link>
|
||||
</Stack>
|
||||
)}
|
||||
</Flex>
|
||||
</DownloadsSection>
|
||||
|
||||
{/* DEV BUILDS */}
|
||||
<DownloadsSection
|
||||
id='developbuilds'
|
||||
sectionDescription={
|
||||
@ -230,39 +429,48 @@ const DownloadsPage: NextPage<Props> = ({ data }) => {
|
||||
}
|
||||
sectionTitle='Develop builds'
|
||||
>
|
||||
{/* TODO: swap for real data */}
|
||||
<DownloadsTable data={testDownloadData.slice(0, amountDevelopBuilds)} />
|
||||
|
||||
<DownloadsTable
|
||||
linuxData={ALL_LINUX_DEV_BUILDS}
|
||||
macOSData={ALL_MACOS_DEV_BUILDS}
|
||||
windowsData={ALL_WINDOWS_DEV_BUILDS}
|
||||
iOSData={ALL_IOS_DEV_BUILDS}
|
||||
androidData={ALL_ANDROID_DEV_BUILDS}
|
||||
amountOfReleasesToShow={amountDevBuilds}
|
||||
setTotalReleases={setTotalDevBuilds}
|
||||
/>
|
||||
<Flex
|
||||
sx={{ mt: '0 !important' }}
|
||||
flexDirection={{ base: 'column', md: 'row' }}
|
||||
justifyContent='space-between'
|
||||
alignItems='center'
|
||||
>
|
||||
<Stack p={4} display={{ base: 'none', md: 'block' }}>
|
||||
<Center>
|
||||
{/* TODO: swap testDownloadData with actual data */}
|
||||
<Text>
|
||||
Showing {amountDevelopBuilds} latest releases of a total{' '}
|
||||
{testDownloadData.length} releases
|
||||
</Text>
|
||||
</Center>
|
||||
</Stack>
|
||||
<Stack
|
||||
sx={{ mt: '0 !important' }}
|
||||
borderLeft={{ base: 'none', md: '2px solid #11866f' }}
|
||||
>
|
||||
<Link as='button' variant='button-link-secondary' onClick={showMoreDevelopBuilds}>
|
||||
<Text
|
||||
fontFamily='"JetBrains Mono", monospace'
|
||||
fontWeight={700}
|
||||
textTransform='uppercase'
|
||||
textAlign='center'
|
||||
p={4}
|
||||
>
|
||||
Show older releases
|
||||
</Text>
|
||||
</Link>
|
||||
<Stack p={4} display={{ base: 'none', md: 'block' }} mx='auto'>
|
||||
<Text textStyle='hero-text-small'>
|
||||
{totalDevBuilds > 0
|
||||
? `Showing ${Math.min(amountDevBuilds, totalDevBuilds)} latest releases of
|
||||
a total ${totalDevBuilds} releases`
|
||||
: `No releases`}
|
||||
</Text>
|
||||
</Stack>
|
||||
|
||||
{totalDevBuilds > amountDevBuilds && (
|
||||
<Stack
|
||||
sx={{ mt: '0 !important' }}
|
||||
borderLeft={{ base: 'none', md: '2px solid #11866f' }}
|
||||
>
|
||||
<Link as='button' variant='button-link-secondary' onClick={showMoreDevBuilds}>
|
||||
<Text
|
||||
fontFamily='"JetBrains Mono", monospace'
|
||||
fontWeight={700}
|
||||
textTransform='uppercase'
|
||||
textAlign='center'
|
||||
p={4}
|
||||
>
|
||||
Show older releases
|
||||
</Text>
|
||||
</Link>
|
||||
</Stack>
|
||||
)}
|
||||
</Flex>
|
||||
</DownloadsSection>
|
||||
|
||||
@ -277,13 +485,13 @@ const DownloadsPage: NextPage<Props> = ({ data }) => {
|
||||
>
|
||||
{/* TODO: swap for real data */}
|
||||
<Stack borderBottom='2px solid' borderColor='primary'>
|
||||
<DataTable columnHeaders={DOWNLOAD_OPENPGP_BUILD_HEADERS} data={pgpBuildTestData} />
|
||||
<DataTable columnHeaders={DOWNLOADS_OPENPGP_BUILD_HEADERS} data={pgpBuildTestData} />
|
||||
</Stack>
|
||||
|
||||
{/* TODO: swap for real data */}
|
||||
<Stack>
|
||||
<DataTable
|
||||
columnHeaders={DOWNLOAD_OPENPGP_DEVELOPER_HEADERS}
|
||||
columnHeaders={DOWNLOADS_OPENPGP_DEVELOPER_HEADERS}
|
||||
data={pgpDeveloperTestData}
|
||||
/>
|
||||
</Stack>
|
||||
|
@ -142,7 +142,7 @@ const HomePage: NextPage = ({}) => {
|
||||
</GridItem>
|
||||
</Grid>
|
||||
|
||||
<Grid templateColumns={{ base: 'repeat(1, 1fr)', md: '300px 1fr' }} gap={4}>
|
||||
<Grid templateColumns={{ base: '1fr', md: '300px 1fr' }} gap={4}>
|
||||
<GridItem w='auto'>
|
||||
<Box h='100%'>
|
||||
{/* TODO: replace with animated/video version */}
|
||||
|
@ -10,7 +10,7 @@ export const textStyles = {
|
||||
h2: {
|
||||
fontFamily: 'heading',
|
||||
fontWeight: 400,
|
||||
fontSize: '1.5rem',
|
||||
fontSize: { base: '1.5rem', md: '1.75rem' },
|
||||
lineHeight: 'normal',
|
||||
letterSpacing: '0.04em',
|
||||
color: 'body'
|
||||
|
36
src/types.ts
Normal file
36
src/types.ts
Normal file
@ -0,0 +1,36 @@
|
||||
export interface LatestReleasesData {
|
||||
versionNumber: string;
|
||||
releaseName: string;
|
||||
urls: {
|
||||
LATEST_LINUX_BINARY_URL: string;
|
||||
LATEST_MACOS_BINARY_URL: string;
|
||||
LATEST_WINDOWS_BINARY_URL: string;
|
||||
LATEST_SOURCES_URL: string;
|
||||
RELEASE_NOTES_URL: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ReleaseData {
|
||||
release: {
|
||||
label: string;
|
||||
url: string;
|
||||
};
|
||||
commit: {
|
||||
label: string;
|
||||
url: string;
|
||||
};
|
||||
kind: string;
|
||||
arch: string;
|
||||
size: string;
|
||||
published: string;
|
||||
signature: {
|
||||
label: string;
|
||||
url: string;
|
||||
};
|
||||
checksum: string;
|
||||
}
|
||||
|
||||
export interface ReleaseParams {
|
||||
blobsList: string[];
|
||||
isStableRelease: boolean;
|
||||
}
|
13
src/utils/compareReleasesFn.ts
Normal file
13
src/utils/compareReleasesFn.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { ReleaseData } from '../types';
|
||||
|
||||
export const compareReleasesFn = (a: ReleaseData, b: ReleaseData) => {
|
||||
if (new Date(a.published) > new Date(b.published)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (new Date(a.published) < new Date(b.published)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
};
|
7
src/utils/fetchLatestReleaseCommit.ts
Normal file
7
src/utils/fetchLatestReleaseCommit.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { ALL_GETH_COMMITS_URL } from '../constants';
|
||||
|
||||
export const fetchLatestReleaseCommit = (versionNumber: string) => {
|
||||
return fetch(`${ALL_GETH_COMMITS_URL}/${versionNumber}`)
|
||||
.then(response => response.json())
|
||||
.then(commit => commit.sha.slice(0, 8));
|
||||
};
|
12
src/utils/fetchLatestReleaseVersionAndName.ts
Normal file
12
src/utils/fetchLatestReleaseVersionAndName.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { LATEST_GETH_RELEASE_URL } from '../constants';
|
||||
|
||||
export const fetchLatestReleaseVersionAndName = () => {
|
||||
return fetch(LATEST_GETH_RELEASE_URL)
|
||||
.then(response => response.json())
|
||||
.then(release => {
|
||||
return {
|
||||
versionNumber: release.tag_name as string,
|
||||
releaseName: release.name as string
|
||||
};
|
||||
});
|
||||
};
|
25
src/utils/fetchXMLData.ts
Normal file
25
src/utils/fetchXMLData.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import {
|
||||
ALL_ANDROID_GETH_RELEASES_URL,
|
||||
ALL_IOS_GETH_RELEASES_URL,
|
||||
ALL_LINUX_ALLTOOLS_GETH_RELEASES_URL,
|
||||
ALL_LINUX_GETH_RELEASES_URL,
|
||||
ALL_MACOS_ALLTOOLS_GETH_RELEASES_URL,
|
||||
ALL_MACOS_GETH_RELEASES_URL,
|
||||
ALL_WINDOWS_ALLTOOLS_GETH_RELEASES_URL,
|
||||
ALL_WINDOWS_GETH_RELEASES_URL
|
||||
} from '../constants';
|
||||
|
||||
export const fetchXMLData = () => {
|
||||
const urls = [
|
||||
ALL_LINUX_GETH_RELEASES_URL,
|
||||
ALL_LINUX_ALLTOOLS_GETH_RELEASES_URL,
|
||||
ALL_MACOS_GETH_RELEASES_URL,
|
||||
ALL_MACOS_ALLTOOLS_GETH_RELEASES_URL,
|
||||
ALL_WINDOWS_GETH_RELEASES_URL,
|
||||
ALL_WINDOWS_ALLTOOLS_GETH_RELEASES_URL,
|
||||
ALL_ANDROID_GETH_RELEASES_URL,
|
||||
ALL_IOS_GETH_RELEASES_URL
|
||||
];
|
||||
|
||||
return Promise.all(urls.map(url => fetch(url).then(response => response.text())));
|
||||
};
|
10
src/utils/getChecksum.ts
Normal file
10
src/utils/getChecksum.ts
Normal file
@ -0,0 +1,10 @@
|
||||
export const getChecksum = (contentMD5: string) => {
|
||||
// based on https://github.com/ethereum/go-ethereum/blob/7519505d6fbd1fd29a8595aafbf880a04fb3e7e1/downloads.html#L318
|
||||
return Buffer.from(contentMD5, 'base64')
|
||||
.toString('binary')
|
||||
.split('')
|
||||
.map(function (char) {
|
||||
return ('0' + char.charCodeAt(0).toString(16)).slice(-2);
|
||||
})
|
||||
.join('');
|
||||
};
|
13
src/utils/getLatestBinaryURL.ts
Normal file
13
src/utils/getLatestBinaryURL.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import {
|
||||
LINUX_BINARY_BASE_URL,
|
||||
MACOS_BINARY_BASE_URL,
|
||||
WINDOWS_BINARY_BASE_URL
|
||||
} from '../constants';
|
||||
|
||||
export const getLatestBinaryURL = (os: string, versionNumber: string, commit: string) => {
|
||||
if (os === 'linux') return `${LINUX_BINARY_BASE_URL}${versionNumber.slice(1)}-${commit}.tar.gz`;
|
||||
|
||||
if (os === 'darwin') return `${MACOS_BINARY_BASE_URL}${versionNumber.slice(1)}-${commit}.tar.gz`;
|
||||
|
||||
return `${WINDOWS_BINARY_BASE_URL}${versionNumber.slice(1)}-${commit}.exe`;
|
||||
};
|
12
src/utils/getParsedDate.ts
Normal file
12
src/utils/getParsedDate.ts
Normal file
@ -0,0 +1,12 @@
|
||||
export const getParsedDate = (date: string) => {
|
||||
const dateOptions = {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
timeZone: 'UTC'
|
||||
} as const;
|
||||
|
||||
return new Date(date).toLocaleDateString('en', dateOptions);
|
||||
};
|
28
src/utils/getReleaseArch.ts
Normal file
28
src/utils/getReleaseArch.ts
Normal file
@ -0,0 +1,28 @@
|
||||
export const getReleaseArch = (filename: string) => {
|
||||
const arch = filename.includes('alltools') ? filename.split('-')[3] : filename.split('-')[2];
|
||||
|
||||
switch (arch) {
|
||||
case '386':
|
||||
return '32-bit';
|
||||
case 'amd64':
|
||||
return '64-bit';
|
||||
case 'arm5':
|
||||
return 'ARMv5';
|
||||
case 'arm6':
|
||||
return 'ARMv6';
|
||||
case 'arm7':
|
||||
return 'ARMv7';
|
||||
case 'arm64':
|
||||
return 'ARM64';
|
||||
case 'mips':
|
||||
return 'MIPS32';
|
||||
case 'mipsle':
|
||||
return 'MIPS32(le)';
|
||||
case 'mips64':
|
||||
return 'MIPS64';
|
||||
case 'MIPS64(le)':
|
||||
return 'MIPS64(le)';
|
||||
default:
|
||||
return 'all';
|
||||
}
|
||||
};
|
3
src/utils/getReleaseCommitHash.ts
Normal file
3
src/utils/getReleaseCommitHash.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export const getReleaseCommitHash = (filename: string) => {
|
||||
return filename.split('-').reverse()[0].split('.')[0];
|
||||
};
|
3
src/utils/getReleaseCommitURL.ts
Normal file
3
src/utils/getReleaseCommitURL.ts
Normal file
@ -0,0 +1,3 @@
|
||||
import { RELEASE_COMMIT_BASE_URL } from '../constants';
|
||||
|
||||
export const getReleaseCommitURL = (hash: string) => `${RELEASE_COMMIT_BASE_URL}${hash}`;
|
17
src/utils/getReleaseKind.ts
Normal file
17
src/utils/getReleaseKind.ts
Normal file
@ -0,0 +1,17 @@
|
||||
export const getReleaseKind = (filename: string) => {
|
||||
const os = filename.includes('alltools') ? filename.split('-')[2] : filename.split('-')[1];
|
||||
|
||||
if (os == 'android' || os == 'ios') {
|
||||
return 'Library';
|
||||
}
|
||||
|
||||
if (os == 'windows') {
|
||||
if (filename.endsWith('.exe')) {
|
||||
return 'Installer';
|
||||
} else {
|
||||
return 'Library';
|
||||
}
|
||||
}
|
||||
|
||||
return 'Archive';
|
||||
};
|
5
src/utils/getReleaseName.ts
Normal file
5
src/utils/getReleaseName.ts
Normal file
@ -0,0 +1,5 @@
|
||||
export const getReleaseName = (filename: string) => {
|
||||
return filename.includes('alltools')
|
||||
? `Geth & Tools ${filename.split('-')[4]}`
|
||||
: `Geth ${filename.split('-')[3]}`;
|
||||
};
|
8
src/utils/getReleaseSize.ts
Normal file
8
src/utils/getReleaseSize.ts
Normal file
@ -0,0 +1,8 @@
|
||||
export const getReleaseSize = (bytes: number) => {
|
||||
const k = 1024;
|
||||
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
||||
|
||||
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
||||
|
||||
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
||||
};
|
3
src/utils/getReleaseURL.ts
Normal file
3
src/utils/getReleaseURL.ts
Normal file
@ -0,0 +1,3 @@
|
||||
import { BINARIES_BASE_URL } from '../constants';
|
||||
|
||||
export const getReleaseURL = (filename: string) => `${BINARIES_BASE_URL}${filename}`;
|
4
src/utils/getSignatureURL.ts
Normal file
4
src/utils/getSignatureURL.ts
Normal file
@ -0,0 +1,4 @@
|
||||
import { BINARIES_BASE_URL } from '../constants';
|
||||
|
||||
// only .sc files are being considered for signatures (https://github.com/ethereum/go-ethereum/blob/7519505d6fbd1fd29a8595aafbf880a04fb3e7e1/downloads.html#L299)
|
||||
export const getSignatureURL = (filename: string) => `${BINARIES_BASE_URL}${filename}.asc`;
|
6
src/utils/getSortedReleases.ts
Normal file
6
src/utils/getSortedReleases.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { ReleaseData } from './../types';
|
||||
import { compareReleasesFn } from './compareReleasesFn';
|
||||
|
||||
export const getSortedReleases = (releases: ReleaseData[], moreReleases: ReleaseData[] = []) => {
|
||||
return releases.concat(moreReleases).sort(compareReleasesFn);
|
||||
};
|
@ -1 +1,18 @@
|
||||
export * from './getProgrammingLanguageName';
|
||||
export { compareReleasesFn } from './compareReleasesFn';
|
||||
export { fetchLatestReleaseCommit } from './fetchLatestReleaseCommit';
|
||||
export { fetchLatestReleaseVersionAndName } from './fetchLatestReleaseVersionAndName';
|
||||
export { fetchXMLData } from './fetchXMLData';
|
||||
export { getLatestBinaryURL } from './getLatestBinaryURL';
|
||||
export { getChecksum } from './getChecksum';
|
||||
export { getParsedDate } from './getParsedDate';
|
||||
export { getProgrammingLanguageName } from './getProgrammingLanguageName';
|
||||
export { getReleaseArch } from './getReleaseArch';
|
||||
export { getReleaseCommitHash } from './getReleaseCommitHash';
|
||||
export { getReleaseCommitURL } from './getReleaseCommitURL';
|
||||
export { getReleaseKind } from './getReleaseKind';
|
||||
export { getReleaseName } from './getReleaseName';
|
||||
export { getReleaseSize } from './getReleaseSize';
|
||||
export { getReleaseURL } from './getReleaseURL';
|
||||
export { getSignatureURL } from './getSignatureURL';
|
||||
export { getSortedReleases } from './getSortedReleases';
|
||||
export { mapReleasesData } from './mapReleasesData';
|
||||
|
45
src/utils/mapReleasesData.ts
Normal file
45
src/utils/mapReleasesData.ts
Normal file
@ -0,0 +1,45 @@
|
||||
import {
|
||||
getChecksum,
|
||||
getReleaseArch,
|
||||
getReleaseCommitHash,
|
||||
getReleaseCommitURL,
|
||||
getReleaseKind,
|
||||
getReleaseName,
|
||||
getReleaseSize,
|
||||
getReleaseURL,
|
||||
getSignatureURL
|
||||
} from '.';
|
||||
|
||||
import { ReleaseData, ReleaseParams } from '../types';
|
||||
|
||||
export const mapReleasesData = ({ blobsList, isStableRelease }: ReleaseParams): ReleaseData[] => {
|
||||
return blobsList
|
||||
.filter(({ Name }: any) => !Name.endsWith('.asc') && !Name.endsWith('.sig')) // skip blobs we don't need to list
|
||||
.filter(({ Name }: any) =>
|
||||
isStableRelease ? !Name.includes('unstable') : Name.includes('unstable')
|
||||
) // filter by stable/dev builds
|
||||
.map(({ Name, Properties }: any) => {
|
||||
const commitHash = getReleaseCommitHash(Name);
|
||||
|
||||
return {
|
||||
release: {
|
||||
label: getReleaseName(Name),
|
||||
url: getReleaseURL(Name)
|
||||
},
|
||||
commit: {
|
||||
label: commitHash,
|
||||
url: getReleaseCommitURL(commitHash)
|
||||
},
|
||||
kind: getReleaseKind(Name),
|
||||
arch: getReleaseArch(Name),
|
||||
size: getReleaseSize(Properties['Content-Length']),
|
||||
// date is formatted later on the table, we use the raw value here for comparison
|
||||
published: Properties['Last-Modified'],
|
||||
signature: {
|
||||
label: 'Signature',
|
||||
url: getSignatureURL(Name)
|
||||
},
|
||||
checksum: getChecksum(Properties['Content-MD5'])
|
||||
};
|
||||
});
|
||||
};
|
226
yarn.lock
226
yarn.lock
@ -73,7 +73,7 @@
|
||||
|
||||
"@chakra-ui/accordion@2.0.12":
|
||||
version "2.0.12"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.0.12.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-2.0.12.tgz#dd260fbecb639748314f440c89052ed45006c585"
|
||||
integrity sha512-O3qq8mILo1QODjCGr2xwxC5LNFakBoMzTjEgpvpIMynxWc/1RKfGuFLis3IDfpHIicXmBTK6sNiZXewmna88CQ==
|
||||
dependencies:
|
||||
"@chakra-ui/descendant" "3.0.9"
|
||||
@ -85,7 +85,7 @@
|
||||
|
||||
"@chakra-ui/alert@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/alert/-/alert-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-2.0.9.tgz#25e88c105e095def374c9fe1e3c8a3f6fab08f6c"
|
||||
integrity sha512-hFRIh6ZzQJ0sAESRym15mW/mcZE/yu4z6lFtdToBhpfSlhZLuE7gDdOTxqGkg417hY//48NiNXOCoQ2dUUuHKw==
|
||||
dependencies:
|
||||
"@chakra-ui/icon" "3.0.9"
|
||||
@ -94,12 +94,12 @@
|
||||
|
||||
"@chakra-ui/anatomy@2.0.6":
|
||||
version "2.0.6"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.0.6.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/anatomy/-/anatomy-2.0.6.tgz#83164841d27eaa271ffa747534519bcd323c312f"
|
||||
integrity sha512-Vgop2FFdhVtX7BydjZdJWZAWy+DdXBU1IMaBppz6COaH+/7OXxoI2ec2bs17ehJyBO0M+ud3OLj5UCFQ79YsoQ==
|
||||
|
||||
"@chakra-ui/avatar@2.1.0":
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/avatar/-/avatar-2.1.0.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-2.1.0.tgz#009b4e126c58ef0183618cfbfb29f8e7e3357ee9"
|
||||
integrity sha512-SRQeH6NNvIBgUc4OsO14ypvcn8I66ndw7r4piIkm+R2zqbYnrzpp1d2zNPNHkChc4xQY71/GenenYO5Fhsi2DA==
|
||||
dependencies:
|
||||
"@chakra-ui/image" "2.0.10"
|
||||
@ -108,7 +108,7 @@
|
||||
|
||||
"@chakra-ui/breadcrumb@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/breadcrumb/-/breadcrumb-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-2.0.9.tgz#357e4e2a50cdad87c0b3b59656aafa85671e6142"
|
||||
integrity sha512-cc3WbxrJNRUph4v45qCdcIKJI0xECeV9VikQNIactBB+iexN4d+5P66xZABAkD8wWGmyH5KuSZcd9sFYNmC13w==
|
||||
dependencies:
|
||||
"@chakra-ui/react-children-utils" "2.0.1"
|
||||
@ -116,12 +116,12 @@
|
||||
|
||||
"@chakra-ui/breakpoint-utils@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.3.tgz#af7f7603f31a7d8d0166307a47e88cf5902401b4"
|
||||
integrity sha512-smi41ZtaiPw4mXaCgicyAh5M45Drt20wypThP+qQUT2CQ51UFZhYlItRA2lCXKQ9QB83POcHPC/oAwIsNOAfTg==
|
||||
|
||||
"@chakra-ui/button@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/button/-/button-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-2.0.9.tgz#f005f98bb5f1d5673a244957e6b3e2396acdf395"
|
||||
integrity sha512-4BuDBiBlChHW1rQ9iod9MKs87AY3IyvZQwjV3DZTU4IG0KcDDfLQf++jj4dkg9Ttu+pIWhwF42pzA40JxW1oNg==
|
||||
dependencies:
|
||||
"@chakra-ui/react-context" "2.0.3"
|
||||
@ -130,7 +130,7 @@
|
||||
|
||||
"@chakra-ui/checkbox@2.1.8":
|
||||
version "2.1.8"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/checkbox/-/checkbox-2.1.8.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-2.1.8.tgz#d04a9a65494cf22e8bcfafa161bb7185d92dc13b"
|
||||
integrity sha512-HhRs3nwTFoIE/UpX4N2AZxxW39Xm/Vw01HjwP/59X60kdKs3RBXlm52cODkfUDfveyT9o5ezLhU/jRf0qA909Q==
|
||||
dependencies:
|
||||
"@chakra-ui/form-control" "2.0.9"
|
||||
@ -146,33 +146,33 @@
|
||||
|
||||
"@chakra-ui/clickable@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/clickable/-/clickable-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-2.0.9.tgz#c06486d36f4a4cb517ea75176e05021dfde117cd"
|
||||
integrity sha512-tGXYM6M6I954fif98QkNu5M76oBZmksCTj2mILOan9/BSimpFpu06aPGX3ZIkNsz300nIObn0FdtMvKpIEQueA==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-merge-refs" "2.0.3"
|
||||
|
||||
"@chakra-ui/close-button@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/close-button/-/close-button-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-2.0.9.tgz#dab2d66c7a240c4d3d150e370980709336a4a266"
|
||||
integrity sha512-0RI/zLR+/mycGbYCCwDAc9hAVG7IIVmdikmo1ET7+rYip4TN94aWR0hA4dYtWqqghG1oW/pYQ9Yja6fEY90V5w==
|
||||
dependencies:
|
||||
"@chakra-ui/icon" "3.0.9"
|
||||
|
||||
"@chakra-ui/color-mode@2.1.7":
|
||||
version "2.1.7"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/color-mode/-/color-mode-2.1.7.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-2.1.7.tgz#91c02e82e551c5448081e4934efeddb10bb732c5"
|
||||
integrity sha512-GAoKJzVRQeuEfCa2i0BZdMwxuOoaGknU3+5wgvLuaSpwlov4OyqpjKMRdSdpjr4IFiqqHK47dsr3H4LQsbO+9w==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-safe-layout-effect" "2.0.1"
|
||||
|
||||
"@chakra-ui/control-box@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/control-box/-/control-box-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-2.0.9.tgz#b3cd98ceb1ce683c00445ab7469e65ba3d90c3cc"
|
||||
integrity sha512-/viS9OBah1wCLNZbgfwkoQOnVRUYgp8Gypjqk9QNQwnNdFUTEgWc1RWN+1RYO85esJzHLkA2hZFIrYu1TZeZ6g==
|
||||
|
||||
"@chakra-ui/counter@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/counter/-/counter-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-2.0.9.tgz#b1b7c74c4e5d1ac506d699d93da57d535370a702"
|
||||
integrity sha512-LuqtpyxCOZM19gAmV0vtVeaFd9ccPmEjoGJQ0NoO8CFheltgLC/7m/8YpDbgWiG4+BAkTUfIG+5nLg5hwvvQxw==
|
||||
dependencies:
|
||||
"@chakra-ui/number-utils" "2.0.3"
|
||||
@ -180,12 +180,12 @@
|
||||
|
||||
"@chakra-ui/css-reset@2.0.7":
|
||||
version "2.0.7"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/css-reset/-/css-reset-2.0.7.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/css-reset/-/css-reset-2.0.7.tgz#28f4284c36230e30892dc3f2de2464aaacc4f623"
|
||||
integrity sha512-ztGdFQ6U1hX2k6a3HZ8D3A/dZWVxlGe2F5mvUrRU554mFWBYmsq0ydZ7UBEPlykv9NoCz4nN8VCkIxcKJ3p29Q==
|
||||
|
||||
"@chakra-ui/descendant@3.0.9":
|
||||
version "3.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/descendant/-/descendant-3.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-3.0.9.tgz#6574a1ce00067c49a070c5b005f8f1ca399006ea"
|
||||
integrity sha512-30E5yMWvxgBx43PoI/67r9h9OhbpDfLb/MLOCjtEwebSbD0V5+fmnmCoUELScQbhozQVjA9t195X6UP0VQWj8w==
|
||||
dependencies:
|
||||
"@chakra-ui/react-context" "2.0.3"
|
||||
@ -193,12 +193,12 @@
|
||||
|
||||
"@chakra-ui/dom-utils@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/dom-utils/-/dom-utils-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/dom-utils/-/dom-utils-2.0.1.tgz#3061819ac365f5947423d63a5fcc26a281bbb5c2"
|
||||
integrity sha512-sbob9AHQq1+KIQ3XKslafislwtC8pYcpwM0S1SLzgyZumHRwhDimKwdi4MtRQfOCenub0E3diRjp4RpGRL0JuQ==
|
||||
|
||||
"@chakra-ui/editable@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/editable/-/editable-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-2.0.9.tgz#a31d2e1c176c0817574e98a8567314c1a74444ab"
|
||||
integrity sha512-s5F3UMR09s6ga3eVhw0UBMGmegtxg6jCp29VLqaEwP5BuWIEOjcJz358gTlnFr3dhvb31e3rcr+B1XiYv4wxqg==
|
||||
dependencies:
|
||||
"@chakra-ui/react-context" "2.0.3"
|
||||
@ -212,12 +212,12 @@
|
||||
|
||||
"@chakra-ui/event-utils@2.0.4":
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/event-utils/-/event-utils-2.0.4.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/event-utils/-/event-utils-2.0.4.tgz#eeb3eb4f37c3828955dbbc182ea43a8a3238a599"
|
||||
integrity sha512-J2YgAM5Dw9hMkwfMsWhsiAG848GfTMxNclUIUcgV9RQhLEs0eTFhelzNiKVOMA3vBxlT6lOARuRun/ESiFZgGg==
|
||||
|
||||
"@chakra-ui/focus-lock@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/focus-lock/-/focus-lock-2.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-2.0.10.tgz#8f17d212786bd2977afc07f72b520aeae30b9434"
|
||||
integrity sha512-LeRZYzwfJp0eq84oO8e1pC2qC8v8fJw/P4nYDrCDjuJU753DV6nVjp5MKMRqbkp+6IAElPc+ojy/sp2a9GCocw==
|
||||
dependencies:
|
||||
"@chakra-ui/dom-utils" "2.0.1"
|
||||
@ -225,7 +225,7 @@
|
||||
|
||||
"@chakra-ui/form-control@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-2.0.9.tgz#10678857e6586e7d1be0a34c8d045c6484c1180b"
|
||||
integrity sha512-P8Tr45z/XSAa1m6uAma0eKf1h7Ltg2sLj2jK5YhaXJER9VUUY18iGe96D4JrAXlgEWDhTyWMb63nB+eYO1tKtw==
|
||||
dependencies:
|
||||
"@chakra-ui/icon" "3.0.9"
|
||||
@ -235,7 +235,7 @@
|
||||
|
||||
"@chakra-ui/hooks@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-2.0.9.tgz#1f6d6157968a60dd9678112763d8f5fd3bdeffad"
|
||||
integrity sha512-0JRgEPtsBaXr9nQW1xEKlWGA7WwFbLNqac7fQXp9zQvoHOWTfNJkK/NJaVBvyFPgfTLxy37WKHooVSwNG/Lwmg==
|
||||
dependencies:
|
||||
"@chakra-ui/react-utils" "2.0.6"
|
||||
@ -245,14 +245,14 @@
|
||||
|
||||
"@chakra-ui/icon@3.0.11":
|
||||
version "3.0.11"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.0.11.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-3.0.11.tgz#a51dda24bed2f2ed77b4136ada8f22d3249c9870"
|
||||
integrity sha512-RG4jf/XmBdaxOYI5J5QstEtTCPoVlmrQ/XiWhvN0LTgAnmZIqVwFl3Uw+satArdStHAs0GmJZg/E/soFTWuFmw==
|
||||
dependencies:
|
||||
"@chakra-ui/shared-utils" "2.0.2"
|
||||
|
||||
"@chakra-ui/icon@3.0.9":
|
||||
version "3.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-3.0.9.tgz#ba127d9eefd727f62e9bce07a23eca39ae506744"
|
||||
integrity sha512-P2Pwm/za6m1W1oqL2kGHH6XrrymsBjqYAFwOW2lB5Q6mI1e+RYe/iMxDoPSLHMYhqdfH7vyib/ffE3Vv3a5oTA==
|
||||
dependencies:
|
||||
"@chakra-ui/shared-utils" "2.0.1"
|
||||
@ -266,14 +266,14 @@
|
||||
|
||||
"@chakra-ui/image@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/image/-/image-2.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-2.0.10.tgz#712c0e1c579d959225bd8316d8d8f66cbeb95bb8"
|
||||
integrity sha512-Atc1bdog4V5xv7IbpF2F2UkKWfgG/TD74cIac09JuSpQcYyh7lrJ7iVvhTkeP+LDdCs+QCD7SnTUM4Y0ZlaHbA==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-safe-layout-effect" "2.0.1"
|
||||
|
||||
"@chakra-ui/input@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/input/-/input-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-2.0.9.tgz#905b82ed647a20080a25a6a7e6740e3bb65586c1"
|
||||
integrity sha512-6MKydxTyF7JV7PtQHircQ5HBTd6Ik9Vn7p8fCLeAieT0TK8UQTxMWZVPminS7TRWMutrq8W99DcQOBlMz0cKrw==
|
||||
dependencies:
|
||||
"@chakra-ui/form-control" "2.0.9"
|
||||
@ -284,7 +284,7 @@
|
||||
|
||||
"@chakra-ui/layout@2.1.6":
|
||||
version "2.1.6"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/layout/-/layout-2.1.6.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-2.1.6.tgz#3dfdd8b3f08d9ff34fc923d44ebe4bc86291b889"
|
||||
integrity sha512-QDNaVu44UI46c+YlSF1KrzJkiwua0UtRXNTnR3jBE1uzcuqRow7xgr3E60dLphY2cPFqAljfQZUNlP3sgvCLww==
|
||||
dependencies:
|
||||
"@chakra-ui/breakpoint-utils" "2.0.3"
|
||||
@ -296,17 +296,17 @@
|
||||
|
||||
"@chakra-ui/lazy-utils@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/lazy-utils/-/lazy-utils-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/lazy-utils/-/lazy-utils-2.0.1.tgz#6814836552028fa0823563ce3d39d22bccb203e1"
|
||||
integrity sha512-986YjYq+hEzHDLZiqYlYbdqfiKdC3h2g896Eoe5K2UXtAVxqZI3UOnMH781X6N1R7rGJWquskzG681qFigW/BA==
|
||||
|
||||
"@chakra-ui/live-region@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/live-region/-/live-region-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-2.0.9.tgz#f26cf1b96df51515cd3a0897f9516f8b5f6bbfec"
|
||||
integrity sha512-ilbo/C5wcUoSHDU5owFPQP3KsabPYGzDEbwV+Z76BlyNdFN2PD0j13RGEH+sBNNZ3HzLyyuuc1YmkVcJi7ycQg==
|
||||
|
||||
"@chakra-ui/media-query@3.2.5":
|
||||
version "3.2.5"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-3.2.5.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-3.2.5.tgz#c0b9dc4bc6245d9abddcbe17693e40bf5dfe34f8"
|
||||
integrity sha512-V+Dngi/r7u/uj7JhsZerM1RI597Oo4wED2ojNfclnnEVb/IoqktiuFy6RQgbo3HmE7M/E5B1i4yYzt7tQJhXlg==
|
||||
dependencies:
|
||||
"@chakra-ui/breakpoint-utils" "2.0.3"
|
||||
@ -314,7 +314,7 @@
|
||||
|
||||
"@chakra-ui/menu@2.0.13":
|
||||
version "2.0.13"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/menu/-/menu-2.0.13.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-2.0.13.tgz#3ac5f448efc894045769c606ebe1376051556be9"
|
||||
integrity sha512-XZYoq9k/txAELUgn5OokyxfXEpVZwBueVYXiT9ji0XvMuzXVxeHd40klJEkiJUctNsOahZf10t5yxlT4B00pwA==
|
||||
dependencies:
|
||||
"@chakra-ui/clickable" "2.0.9"
|
||||
@ -334,7 +334,7 @@
|
||||
|
||||
"@chakra-ui/modal@2.1.7":
|
||||
version "2.1.7"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/modal/-/modal-2.1.7.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-2.1.7.tgz#dba55bddd407689f4c2bba886b03a5355578a20d"
|
||||
integrity sha512-A+CbvhQYpmLH3SrqJ1wJysUCGm0mNoSDxRjP4wX98j56nMTDAsMYlzttpuLmKaSzvbJ7uEQDLtQV8lZjB0gUuw==
|
||||
dependencies:
|
||||
"@chakra-ui/close-button" "2.0.9"
|
||||
@ -349,7 +349,7 @@
|
||||
|
||||
"@chakra-ui/number-input@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/number-input/-/number-input-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-2.0.9.tgz#c5ebfa0311f7586fb4c1e5f4284355b1d1f04383"
|
||||
integrity sha512-RsDzoNvSBZMgyXjN543AtQ2v99U1p/0xnGWZy4NCkgCDWMBn3kIXqSzQq5CB9Ot0MD8nnKF5VYdVdXWguXExEQ==
|
||||
dependencies:
|
||||
"@chakra-ui/counter" "2.0.9"
|
||||
@ -366,17 +366,17 @@
|
||||
|
||||
"@chakra-ui/number-utils@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/number-utils/-/number-utils-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/number-utils/-/number-utils-2.0.3.tgz#2cf1190647ac5a17c90baaf8176226a98eb3bfff"
|
||||
integrity sha512-oN03kYAUCCp/FNtpLr5mh+cvd/sRTzZWTBoFydmxc955psXq/X950gzs6o5kzoeFCpgXaxMmHAXQm3ReEK2NsQ==
|
||||
|
||||
"@chakra-ui/object-utils@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/object-utils/-/object-utils-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/object-utils/-/object-utils-2.0.3.tgz#0bc8d1c7c452fe1ce8fcda439336e0392e867d7e"
|
||||
integrity sha512-36prckrqTynVD/JTzyCr8OCWVOrMs/awZo3djVbIiNxRIcJ5iEwUVy26h3MWN4ENSopipBtxNfAwPNTLU5Si/g==
|
||||
|
||||
"@chakra-ui/pin-input@2.0.12":
|
||||
version "2.0.12"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/pin-input/-/pin-input-2.0.12.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-2.0.12.tgz#1ff927fdc61433a7b9b4421ceafad5674299e91a"
|
||||
integrity sha512-gaMRp5AFW+qAJCUj93V1WluuYBBZ/5A3Wy5q796g8Auvw7vufgkVtl6EBznwvtynZN8gJwbRFpMtJxQyXCkUiw==
|
||||
dependencies:
|
||||
"@chakra-ui/descendant" "3.0.9"
|
||||
@ -387,7 +387,7 @@
|
||||
|
||||
"@chakra-ui/popover@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/popover/-/popover-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-2.0.9.tgz#7f2df4cbbc3eee7440c311750e18ba00150f973f"
|
||||
integrity sha512-+7tH4RVuheFQOyAZ5KT9x+qsLvz7rGuKaHtb0427+5bhUzLaSAghtr/afzOKHDwUVBwF2tTUNanR23ipW1fXDg==
|
||||
dependencies:
|
||||
"@chakra-ui/close-button" "2.0.9"
|
||||
@ -401,7 +401,7 @@
|
||||
|
||||
"@chakra-ui/popper@3.0.7":
|
||||
version "3.0.7"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/popper/-/popper-3.0.7.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-3.0.7.tgz#af3428bf5d64ad9372210a70181f69a9d79eefb2"
|
||||
integrity sha512-xLYhuNsk1gOjymtek1ZdZlG21hmg2a7Iu2KsD9Hi7+aUxc2K5/XxX+/vyjjz8u4s0gmj83pTqnauQRynb/TCXA==
|
||||
dependencies:
|
||||
"@chakra-ui/react-types" "2.0.3"
|
||||
@ -410,7 +410,7 @@
|
||||
|
||||
"@chakra-ui/portal@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/portal/-/portal-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-2.0.9.tgz#b427c383a9d602c5b52b21312b4b1c0ffecaf583"
|
||||
integrity sha512-9e9S0MLbkpofPGlyYA12jNYSdndugy6ylPi5pC9nr3/VqG2Kn+8VcBChAeXW8K4ms7WFc74rNX1pBY/UVwr4qg==
|
||||
dependencies:
|
||||
"@chakra-ui/react-context" "2.0.3"
|
||||
@ -418,14 +418,14 @@
|
||||
|
||||
"@chakra-ui/progress@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/progress/-/progress-2.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-2.0.10.tgz#9191ae9061ef08066d37c5cb8341fedc10214a29"
|
||||
integrity sha512-my0Pi3NG1PYhlvCav4fybg3gL5HBNe+7lO4PVdri4QHEyfJlrDeBWID+1GgqlpUWdTj3sOf7ysku+FEgkeOeSA==
|
||||
dependencies:
|
||||
"@chakra-ui/react-context" "2.0.3"
|
||||
|
||||
"@chakra-ui/provider@2.0.16":
|
||||
version "2.0.16"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/provider/-/provider-2.0.16.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-2.0.16.tgz#a4afdb4c8f2050beb5d2b61db8971a145481c6f2"
|
||||
integrity sha512-4t/PmjJ7WXPPaPfoYgw8F1/rVtorZuvknugHfOZcOtAPGQmOPotSv28qjKpu/mCvc1GMGV0swMsvCeInYz7g0w==
|
||||
dependencies:
|
||||
"@chakra-ui/css-reset" "2.0.7"
|
||||
@ -436,7 +436,7 @@
|
||||
|
||||
"@chakra-ui/radio@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/radio/-/radio-2.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-2.0.10.tgz#82eb02313efafc460da3030d011bfd434b1ecabc"
|
||||
integrity sha512-LhAWsY22cmb+M/iyhFgkzf2+V9TJmAC77Cd+GbP3M3sxDSEUDtq08KOc3JjoYc3GzeZml3JL1yssbxh+liY3xA==
|
||||
dependencies:
|
||||
"@chakra-ui/form-control" "2.0.9"
|
||||
@ -447,27 +447,27 @@
|
||||
|
||||
"@chakra-ui/react-children-utils@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-children-utils/-/react-children-utils-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-children-utils/-/react-children-utils-2.0.1.tgz#321ac05362ade1495a34ea74052d3c7da3d9e923"
|
||||
integrity sha512-sEgpuh/vWSt2+W0F49EGYXXUyjmg0lbosjVg6qUKHv9sAyx5tbrOrZ6df/TaMUSAe9m3AUOMGqUIPLpxno0DjA==
|
||||
|
||||
"@chakra-ui/react-context@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-context/-/react-context-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-context/-/react-context-2.0.3.tgz#e988be62f5f5fe29d6a8496c79cbf934f840fa5a"
|
||||
integrity sha512-KmPq6sb1y05WsOUqXZtBBC4LsNKZIFrp2thTsLBwcuH7lkXZwPMHmJGKa9K980P+SWEgfH2s2PY2z+QrIuqWGg==
|
||||
|
||||
"@chakra-ui/react-env@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-env/-/react-env-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-env/-/react-env-2.0.9.tgz#d51efc31d77197a3526e2c4b2f2fde557396bb3c"
|
||||
integrity sha512-4AJHNUGBR19hzVyOILYpZZgq8jGrpEcbhvR++CppbvPH7vfPZpoz6L/cBtHxS07YwDtUeBL8yCNiLlTxctV//Q==
|
||||
|
||||
"@chakra-ui/react-types@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-types/-/react-types-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-types/-/react-types-2.0.3.tgz#dc454c4703b4de585e6461fd607304ede06fe595"
|
||||
integrity sha512-1mJYOQldFTALE0Wr3j6tk/MYvgQIp6CKkJulNzZrI8QN+ox/bJOh8OVP4vhwqvfigdLTui0g0k8M9h+j2ub/Mw==
|
||||
|
||||
"@chakra-ui/react-use-animation-state@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.0.3.tgz#c10e575de76e907a84358595884a819039b24200"
|
||||
integrity sha512-sjGgzMMmxurwKDSFhDLpLNn3SWUERI5iAZOOa0pYnyOLGVXMowgIjK6jpZxre1vc3A+unjJk5P4qeiyY+C4uwQ==
|
||||
dependencies:
|
||||
"@chakra-ui/dom-utils" "2.0.1"
|
||||
@ -475,33 +475,33 @@
|
||||
|
||||
"@chakra-ui/react-use-callback-ref@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.0.3.tgz#532f993ae0dda27b2638d41e98f42c83751cd3b6"
|
||||
integrity sha512-kdYlhgnQKWWLNwl3WSv/Oq3+mlnu2p3y4Xc1AqKVHVcBOdQE9lpW3d7ZaOoK2aIXXWq1rocscOiXBUtM0Vqd2A==
|
||||
|
||||
"@chakra-ui/react-use-controllable-state@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.0.3.tgz#7aa3f9c038513763332f6754e69ece90aed55a9c"
|
||||
integrity sha512-su8efwCWWnY2LQUU6PEnYwSGJX8kvPSO2KyUKuymx8q3fNWuyhzAZriG/TbeeCxESLp70+wuniUlSGRa4vxylQ==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-callback-ref" "2.0.3"
|
||||
|
||||
"@chakra-ui/react-use-disclosure@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.0.3.tgz#c27bfc7e3af0728423b9e2def1e1665d0ba941bb"
|
||||
integrity sha512-3IdrzvQZcgjqSx5wTVffInOyhMU+d3ZlIE26JmqejMyN/B+qAs932iKfm0A1mTMPTz38ZnNtuaKazmzyfR1ePg==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-callback-ref" "2.0.3"
|
||||
|
||||
"@chakra-ui/react-use-event-listener@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.0.3.tgz#11b5409c4442888e7981d5288c9e781acdacd685"
|
||||
integrity sha512-m3ZdJjo3QQ1HcQGnehlBTgHaCVewz5fwIRTXVzbZTraVJr4k589Zf87eagW57tT4dyv656lSmdhaFGZ8p5Snww==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-callback-ref" "2.0.3"
|
||||
|
||||
"@chakra-ui/react-use-focus-effect@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.0.3.tgz#3e221a5e9b06a7b832a6fca1f883e6335fd69f19"
|
||||
integrity sha512-N0rho7P+rH5cn13dbS8GUOye+6RYXAmXhmlS+WW/3lWidGH3HAbMoOVf56UiuSnE1+2or8/U7qRshUryj2H1nA==
|
||||
dependencies:
|
||||
"@chakra-ui/dom-utils" "2.0.1"
|
||||
@ -510,33 +510,33 @@
|
||||
|
||||
"@chakra-ui/react-use-focus-on-pointer-down@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.0.1.tgz#be0668ff844dec8bbfe978d6eaff50534f290c48"
|
||||
integrity sha512-f0qL2iWvajUo+0jwDZyJpUMJ6J6BH3WjDZE2Rp6cns4pgI6uYuv2gj+FqQ5jnoYdXkeER6lBI56a+aIW/1RYiA==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-event-listener" "2.0.3"
|
||||
|
||||
"@chakra-ui/react-use-interval@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-interval/-/react-use-interval-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-interval/-/react-use-interval-2.0.1.tgz#a8f5dbf83607f5dc53022aa2a766fdcb09d8a081"
|
||||
integrity sha512-6ZLzKA7Ga894UZcXO3bbGYThlhviiau1oxZ1UcJG5pUXNM9Up7O/4Joq31sL+KcpteCN45vd1etomilsv/blxw==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-callback-ref" "2.0.3"
|
||||
|
||||
"@chakra-ui/react-use-merge-refs@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.0.3.tgz#cd8dac79c62dd45daaf4acc4507721d23dc5dc51"
|
||||
integrity sha512-n35BmVbasy5Esa6qxznWmiV3NaRxGpqMpZH0n+X7aXt8VkGAJzRpAVjUmKCLNYyCLpqsQceCmAEK8a5SR6vxqw==
|
||||
|
||||
"@chakra-ui/react-use-outside-click@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.0.3.tgz#d0136d1c2fb45d86361224e98e3a50648bf9b85f"
|
||||
integrity sha512-r5OohM8lOuZTz6e3vVHvfm/3sEkd06nUPBNU+r3rWh1I7bR9z5Gia/BOQD6GE4jUTanDkHcH76Pf9qJ45kpibQ==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-callback-ref" "2.0.3"
|
||||
|
||||
"@chakra-ui/react-use-pan-event@2.0.4":
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.0.4.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.0.4.tgz#bfc2c1a2a44b2996951a729182566f02c7dc05e4"
|
||||
integrity sha512-lcEjngfCgIjE5qZeJiaDx+aJzZPLjbjUmbWumi8pIgWOnDL8Ffjh7AMKW4CddP5OgcRnDDb+7aqJbb55wraboA==
|
||||
dependencies:
|
||||
"@chakra-ui/event-utils" "2.0.4"
|
||||
@ -544,36 +544,36 @@
|
||||
|
||||
"@chakra-ui/react-use-previous@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-previous/-/react-use-previous-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-previous/-/react-use-previous-2.0.1.tgz#e19f6b363271f62c36c9f3bd91dc60caa4c4e340"
|
||||
integrity sha512-ROi+/puVd8D1QaxBSOcGlJNqV2x02ppSgmXzZZJhM8ryFLZjY9ojV3HhamB2IJ/7SIb1rMSSV1GPedFw7YMCwA==
|
||||
|
||||
"@chakra-ui/react-use-safe-layout-effect@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.0.1.tgz#76f8882abaf17078c3b6eb93e1bb26f8c319f3f7"
|
||||
integrity sha512-H+ZOjkPqv3KBPEoP68JKpQBNdLOI0mwzEiTT397UdvBVCCJ+1/ijWVUT+Ub/pYic60O6xUghy5ORaWqJHhnKDA==
|
||||
|
||||
"@chakra-ui/react-use-size@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-size/-/react-use-size-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-size/-/react-use-size-2.0.3.tgz#ae3bd683eb87a40208cf0dd467a5dafb68d87b3e"
|
||||
integrity sha512-hr4hKepPUmM2paXseSZiOTK2y+ZqnSzYNusDEB01f+cDerFjdN1jSfNJKXpiKF0+hNESXfOPQb3Zt0eDusRdoA==
|
||||
dependencies:
|
||||
"@zag-js/element-size" "0.1.0"
|
||||
|
||||
"@chakra-ui/react-use-timeout@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-timeout/-/react-use-timeout-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-timeout/-/react-use-timeout-2.0.1.tgz#acacadfb7c1443aacf634ddce710b1cd7cf3b6ec"
|
||||
integrity sha512-zXh9RH+GciKr8hvaOADHOoHP72B7UZUEymA8CWCV4WEs/9s/PfQJH7X1bwvaj43CcOmfVQg4oODWqCYQM1lSsg==
|
||||
dependencies:
|
||||
"@chakra-ui/react-use-callback-ref" "2.0.3"
|
||||
|
||||
"@chakra-ui/react-use-update-effect@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.0.3.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.0.3.tgz#5b0128fe1325b5b1413690db6bc8dd0712d01e29"
|
||||
integrity sha512-8hkP1o/UUUA49w/R+XyAlPiCjxXTCWCNsHWUOEhAitjJfoCNUjgaNKOD52hT07kc5ACJEcJQHA5327LnwtiIlg==
|
||||
|
||||
"@chakra-ui/react-utils@2.0.6":
|
||||
version "2.0.6"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/react-utils/-/react-utils-2.0.6.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/react-utils/-/react-utils-2.0.6.tgz#bb471ce2bff724b99563685962145a2cc56bf61d"
|
||||
integrity sha512-ZL0FPaolovXOxMzYRSLHgBYtvxIkA/c5GTSYpXL8DcC+TBLZnAmQ8BPTS2b6xys6xvwdQjkZRUeQ0cBNFaryJg==
|
||||
dependencies:
|
||||
"@chakra-ui/utils" "2.0.9"
|
||||
@ -633,24 +633,24 @@
|
||||
|
||||
"@chakra-ui/select@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/select/-/select-2.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-2.0.10.tgz#827028484769a32205f99baed3098a115da292b3"
|
||||
integrity sha512-7AslBWwI/JyczjMMGtPuN34M/C38koVd+N/pb6swHoIP9TRkkdvDlonIakcmtO1oLEzlNIFKmt4FQ7bUp9ea5Q==
|
||||
dependencies:
|
||||
"@chakra-ui/form-control" "2.0.9"
|
||||
|
||||
"@chakra-ui/shared-utils@2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/shared-utils/-/shared-utils-2.0.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/shared-utils/-/shared-utils-2.0.1.tgz#41e314e42c96039e8ffb265e73145cf755813ab4"
|
||||
integrity sha512-NXDBl/u4wrSNp0ON5R3r3evkRurrAz2yuO7neooaG+O5HEenVouGqm4CsXd6lUAPmjwiGzA0LQFNCt0Hj92dXg==
|
||||
|
||||
"@chakra-ui/shared-utils@2.0.2":
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/shared-utils/-/shared-utils-2.0.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/shared-utils/-/shared-utils-2.0.2.tgz#1df08133194c12ac4df9302604ec37784c2bb026"
|
||||
integrity sha512-wC58Fh6wCnFFQyiebVZ0NI7PFW9+Vch0QE6qN7iR+bLseOzQY9miYuzPJ1kMYiFd6QTOmPJkI39M3wHqrPYiOg==
|
||||
|
||||
"@chakra-ui/skeleton@2.0.15":
|
||||
version "2.0.15"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/skeleton/-/skeleton-2.0.15.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-2.0.15.tgz#fd41383bf84319e47c6ea1f4f3138f5f5e0dabca"
|
||||
integrity sha512-QVMkXwrH9jLfim8uJTZcjHeGjzoquNcHGXD5wapd7eDqp9BygvmMXAHBxFm8eEJLHuvIqLX94P6DLeiieYwX7Q==
|
||||
dependencies:
|
||||
"@chakra-ui/media-query" "3.2.5"
|
||||
@ -658,7 +658,7 @@
|
||||
|
||||
"@chakra-ui/slider@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/slider/-/slider-2.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-2.0.10.tgz#ffd7376d4a7fd9aa02e72b148e3ad4739c880498"
|
||||
integrity sha512-F0RGl2ruADbXO/GnoBUiTEl+przxhZo2e0tfw9VTtS+RsJZ22uHrTNVvVJHNmjK7/E3++kBfaLCacoJFz/io+g==
|
||||
dependencies:
|
||||
"@chakra-ui/number-utils" "2.0.3"
|
||||
@ -673,12 +673,12 @@
|
||||
|
||||
"@chakra-ui/spinner@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-2.0.9.tgz#1d8544cc136699a590c3f5c518ae2c14abb459cf"
|
||||
integrity sha512-9ALl51fiVWptDu2J2xcv0TSfGf4buumpHrEXHvV2Qy+HZ6rYnUmSThBSb/VgoQS+rASG8bAbLUPlQTQ+v9ibFg==
|
||||
|
||||
"@chakra-ui/stat@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/stat/-/stat-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-2.0.9.tgz#cecf35a4392a88227c3b85e80a45f0f5ac5f298d"
|
||||
integrity sha512-C9cytqegWSGJ/hh3/qwsgGlerXLYHrU0iQcJQ+pKSRFJhshXsv3go5IR6kVL72Yf2s4Gs5c3GsMZrLM22ePpDg==
|
||||
dependencies:
|
||||
"@chakra-ui/icon" "3.0.9"
|
||||
@ -686,7 +686,7 @@
|
||||
|
||||
"@chakra-ui/styled-system@2.3.1":
|
||||
version "2.3.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.3.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-2.3.1.tgz#abf7c4e1638aaa9d92e7cf9acde17785703d166e"
|
||||
integrity sha512-jyR9s2yk5TEyq4HUfjrgUeaOzd9ZTZrbjK96UjtiTCZGO/q4j2RXtYvfheUjUyW1UnzI2A1ffHOJca8tBMDjpA==
|
||||
dependencies:
|
||||
csstype "^3.0.11"
|
||||
@ -694,14 +694,14 @@
|
||||
|
||||
"@chakra-ui/switch@2.0.11":
|
||||
version "2.0.11"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/switch/-/switch-2.0.11.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-2.0.11.tgz#57117417d1bb072f506c8c30e1a961ee7f78496b"
|
||||
integrity sha512-gY8OGBnoPosZpq7dDNVf432t67pTc/cz5VkGhbtER7bbjXSoXe0DAiAYL+HT2kD7mbTJQzzHK/y0St0WimR1Mw==
|
||||
dependencies:
|
||||
"@chakra-ui/checkbox" "2.1.8"
|
||||
|
||||
"@chakra-ui/system@2.2.9":
|
||||
version "2.2.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/system/-/system-2.2.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-2.2.9.tgz#d6e7dfb9a954b8ab03c28e14c69aad56a9fcffbd"
|
||||
integrity sha512-SyTeIGm+goyYK8vqX4dU6oeLhxUAeGI3Cl+mxA+aiKIX01YTALhTWhpbrsuMYBevV+l9EGK12egPUQE+Mo3WlQ==
|
||||
dependencies:
|
||||
"@chakra-ui/color-mode" "2.1.7"
|
||||
@ -712,14 +712,14 @@
|
||||
|
||||
"@chakra-ui/table@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/table/-/table-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-2.0.9.tgz#2ddb0202e8146e517bf602e62195d13fee8f1b0a"
|
||||
integrity sha512-XRz6+x4dMeQX3xyViyG2H/P1STI/2vwvgU2cjzzwS+5fZ2JdGaTgYzBb+IZoH9agEq1Ma3rlKMUPDrRCFb7kLQ==
|
||||
dependencies:
|
||||
"@chakra-ui/react-context" "2.0.3"
|
||||
|
||||
"@chakra-ui/tabs@2.1.1":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/tabs/-/tabs-2.1.1.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-2.1.1.tgz#0fb540782c2e4122b63a203fc1f04eff850f2c0e"
|
||||
integrity sha512-xA+vwqpAHb0nBLrkiO5Lea2UDGROyAIBqsyp/8XXXEr6eKxtNe1I6WJPbDQy0aazB2ToAA0R6fT34HjLaXP8MQ==
|
||||
dependencies:
|
||||
"@chakra-ui/clickable" "2.0.9"
|
||||
@ -733,7 +733,7 @@
|
||||
|
||||
"@chakra-ui/tag@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/tag/-/tag-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-2.0.9.tgz#bf8530aa766bd6b9196d374ff75b0b1ce62cd0d3"
|
||||
integrity sha512-NKARwhsZ04t2vkrdRhNcakEiVtg1q44yUUsDw2Jwdu4idAWQupZGGochQI2Ac4T2MI1b66zQUkaGnm3l1mhTtg==
|
||||
dependencies:
|
||||
"@chakra-ui/icon" "3.0.9"
|
||||
@ -741,14 +741,14 @@
|
||||
|
||||
"@chakra-ui/textarea@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/textarea/-/textarea-2.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-2.0.10.tgz#dbbc8df8adddb488d0ee97164917e7be33d6b247"
|
||||
integrity sha512-HSo0EPsY8XKGA+Af6jTob1oe1T6NKZwgjLmX0binK3MMM9pDTXsUTw8GD0g971lxw9oktVMLK/O9QVAgVAm5mw==
|
||||
dependencies:
|
||||
"@chakra-ui/form-control" "2.0.9"
|
||||
|
||||
"@chakra-ui/theme-tools@2.0.11":
|
||||
version "2.0.11"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.0.11.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-2.0.11.tgz#de97b422799627b5a514ae424ca08c1d348bc2a5"
|
||||
integrity sha512-0Juf98bAyOgnBeQ39nMKWqRsOxZDw75BbAB8o0oVyjhYVS1wJh7tFX1ZRV8N/+AN6fuRXEznZPpyUh3J+ZTiRg==
|
||||
dependencies:
|
||||
"@chakra-ui/anatomy" "2.0.6"
|
||||
@ -756,7 +756,7 @@
|
||||
|
||||
"@chakra-ui/theme@2.1.11":
|
||||
version "2.1.11"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/theme/-/theme-2.1.11.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-2.1.11.tgz#cdfca3e84fc6913c5bb1a06e24b7cbb1246e127e"
|
||||
integrity sha512-gI0NLU6wO/5cRq8gbDHuy24Y/ZhJxN4D/2uucNN9is3h+d58/En5jV3fwzZW8PLiLKW/T2CmbYWEZWV2YkcUVA==
|
||||
dependencies:
|
||||
"@chakra-ui/anatomy" "2.0.6"
|
||||
@ -764,7 +764,7 @@
|
||||
|
||||
"@chakra-ui/toast@3.0.10":
|
||||
version "3.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/toast/-/toast-3.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-3.0.10.tgz#5918beb208ca592f72a9e24923254341fa38df58"
|
||||
integrity sha512-i/oEtzmarO0hM6fxa55OmA8ZGkZv9b+vIC2xs5kQ/C0rJaC0ycibok8srq2Stjq9309fZNezyzThQp6e9acUYQ==
|
||||
dependencies:
|
||||
"@chakra-ui/alert" "2.0.9"
|
||||
@ -776,7 +776,7 @@
|
||||
|
||||
"@chakra-ui/tooltip@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/tooltip/-/tooltip-2.0.10.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-2.0.10.tgz#2166753f9f246dd217d3170fd85f95a86392d9b6"
|
||||
integrity sha512-pBILBdZoux2K3EW9V6JuyZYUWz2/Y7oYCVO6AwNOesiEBGAONyzoDwFV728EzPEHe9e+YBcKOSZ9tEpDdrzHMA==
|
||||
dependencies:
|
||||
"@chakra-ui/popper" "3.0.7"
|
||||
@ -788,12 +788,12 @@
|
||||
|
||||
"@chakra-ui/transition@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/transition/-/transition-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-2.0.9.tgz#1967fd77f44b57681a9efe4e87561c82420cd2a2"
|
||||
integrity sha512-cVfKdZl128AEj0LDS8M9dzXao4wmTVj3gRJBnm91Qcg243Pm8OlgIBNbHEwsq/Fps+PsN431BtEGfL4w79wQEA==
|
||||
|
||||
"@chakra-ui/utils@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/utils/-/utils-2.0.9.tgz#1af3882b31fb46e0a411998d8e3607656f8d5043"
|
||||
integrity sha512-7ct5562Jw6pZdtj63XfUkEUXXsCCVqdqIXyLtQ9VgOKtRQWwDxzc8uPI5Zjdw9AleEITZFUH8TNKWn75nm54kQ==
|
||||
dependencies:
|
||||
"@types/lodash.mergewith" "4.6.6"
|
||||
@ -803,7 +803,7 @@
|
||||
|
||||
"@chakra-ui/visually-hidden@2.0.9":
|
||||
version "2.0.9"
|
||||
resolved "https://registry.npmjs.org/@chakra-ui/visually-hidden/-/visually-hidden-2.0.9.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.0.9.tgz#b43a3dd0bc1108954ad0eeb50d0261887ab5e31c"
|
||||
integrity sha512-PkNxrRGp9H3bdqEaoo8XGt/AL9UuGRTom0/9XJa+G/Dj8Cy1sDuamOWk3pN/ZQs46RokfK9Uh5LqPY5dwSDweg==
|
||||
|
||||
"@ctrl/tinycolor@^3.4.0":
|
||||
@ -812,33 +812,33 @@
|
||||
integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
|
||||
|
||||
"@emotion/babel-plugin@^11.10.0":
|
||||
version "11.10.2"
|
||||
resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz"
|
||||
integrity sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==
|
||||
version "11.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c"
|
||||
integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.16.7"
|
||||
"@babel/plugin-syntax-jsx" "^7.17.12"
|
||||
"@babel/runtime" "^7.18.3"
|
||||
"@emotion/hash" "^0.9.0"
|
||||
"@emotion/memoize" "^0.8.0"
|
||||
"@emotion/serialize" "^1.1.0"
|
||||
"@emotion/serialize" "^1.1.1"
|
||||
babel-plugin-macros "^3.1.0"
|
||||
convert-source-map "^1.5.0"
|
||||
escape-string-regexp "^4.0.0"
|
||||
find-root "^1.1.0"
|
||||
source-map "^0.5.7"
|
||||
stylis "4.0.13"
|
||||
stylis "4.1.3"
|
||||
|
||||
"@emotion/cache@^11.10.0":
|
||||
version "11.10.3"
|
||||
resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz"
|
||||
integrity sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==
|
||||
version "11.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12"
|
||||
integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==
|
||||
dependencies:
|
||||
"@emotion/memoize" "^0.8.0"
|
||||
"@emotion/sheet" "^1.2.0"
|
||||
"@emotion/sheet" "^1.2.1"
|
||||
"@emotion/utils" "^1.2.0"
|
||||
"@emotion/weak-memoize" "^0.3.0"
|
||||
stylis "4.0.13"
|
||||
stylis "4.1.3"
|
||||
|
||||
"@emotion/hash@^0.9.0":
|
||||
version "0.9.0"
|
||||
@ -883,10 +883,10 @@
|
||||
"@emotion/weak-memoize" "^0.3.0"
|
||||
hoist-non-react-statics "^3.3.1"
|
||||
|
||||
"@emotion/serialize@^1.1.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz"
|
||||
integrity sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==
|
||||
"@emotion/serialize@^1.1.0", "@emotion/serialize@^1.1.1":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0"
|
||||
integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==
|
||||
dependencies:
|
||||
"@emotion/hash" "^0.9.0"
|
||||
"@emotion/memoize" "^0.8.0"
|
||||
@ -894,10 +894,10 @@
|
||||
"@emotion/utils" "^1.2.0"
|
||||
csstype "^3.0.2"
|
||||
|
||||
"@emotion/sheet@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz"
|
||||
integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==
|
||||
"@emotion/sheet@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c"
|
||||
integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==
|
||||
|
||||
"@emotion/styled@^11.10.4":
|
||||
version "11.10.4"
|
||||
@ -1064,7 +1064,7 @@
|
||||
|
||||
"@next/env@13.0.2":
|
||||
version "13.0.2"
|
||||
resolved "https://registry.npmjs.org/@next/env/-/env-13.0.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.2.tgz#5fbd7b4146175ae406edfb4a38b62de8c880c09d"
|
||||
integrity sha512-Qb6WPuRriGIQ19qd6NBxpcrFOfj8ziN7l9eZUfwff5gl4zLXluqtuZPddYZM/oWjN53ZYcuRXzL+oowKyJeYtA==
|
||||
|
||||
"@next/eslint-plugin-next@12.2.5":
|
||||
@ -1091,7 +1091,7 @@
|
||||
|
||||
"@next/swc-darwin-arm64@13.0.2":
|
||||
version "13.0.2"
|
||||
resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.2.tgz"
|
||||
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.2.tgz#d7e01a33393e83456dbfdc41446bb8a923968ff7"
|
||||
integrity sha512-1zGIOkInkOLRv0QQGZ+3wffYsyKI4vIy62LYTvDWUn7TAYqnmXwougp9NSLqDeagLwgsv2URrykyAFixA/YqxA==
|
||||
|
||||
"@next/swc-darwin-x64@13.0.2":
|
||||
@ -2156,6 +2156,13 @@ fast-levenshtein@^2.0.6:
|
||||
resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
|
||||
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
|
||||
|
||||
fast-xml-parser@^4.0.12:
|
||||
version "4.0.12"
|
||||
resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.0.12.tgz#9e3117d76523d20dfbd30482c1621fb9b03a7817"
|
||||
integrity sha512-/Nmo3823Rfx7UTJosQNz6hBVbszfv1Unb7A4iNJZhvCGCgtIHv/uODmrYIH8vc05+XKZ4hNIOv6SlBejvJgATw==
|
||||
dependencies:
|
||||
strnum "^1.0.5"
|
||||
|
||||
fastq@^1.6.0:
|
||||
version "1.13.0"
|
||||
resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz"
|
||||
@ -4096,6 +4103,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
|
||||
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
|
||||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
||||
|
||||
strnum@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
|
||||
integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
|
||||
|
||||
style-to-object@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz"
|
||||
@ -4118,10 +4130,10 @@ styled-jsx@5.1.0:
|
||||
dependencies:
|
||||
client-only "0.0.1"
|
||||
|
||||
stylis@4.0.13:
|
||||
version "4.0.13"
|
||||
resolved "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz"
|
||||
integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==
|
||||
stylis@4.1.3:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7"
|
||||
integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
|
Loading…
Reference in New Issue
Block a user