mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
commit
9d971ed3f6
358 changed files with 11406 additions and 27646 deletions
3
.github/workflows/ci_deploy.yaml
vendored
3
.github/workflows/ci_deploy.yaml
vendored
|
|
@ -34,6 +34,9 @@ jobs:
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install --save-dev hardhat
|
run: npm install --save-dev hardhat
|
||||||
|
|
||||||
|
- name: Compile contracts
|
||||||
|
run: npx hardhat compile
|
||||||
|
|
||||||
- name: Run local devnet
|
- name: Run local devnet
|
||||||
run: |
|
run: |
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
|
|
|
||||||
61
.gitignore
vendored
61
.gitignore
vendored
|
|
@ -1,52 +1,17 @@
|
||||||
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
node_modules
|
||||||
#
|
.env
|
||||||
# If you find yourself ignoring temporary files generated by your text editor
|
|
||||||
# or operating system, you probably want to add a global ignore instead:
|
|
||||||
# git config --global core.excludesfile ~/.gitignore_global
|
|
||||||
|
|
||||||
/tmp
|
# Hardhat files
|
||||||
*/**/*un~
|
/cache
|
||||||
*/**/*.test
|
/artifacts
|
||||||
*un~
|
|
||||||
.DS_Store
|
|
||||||
*/**/.DS_Store
|
|
||||||
.ethtest
|
|
||||||
*/**/*tx_database*
|
|
||||||
*/**/*dapps*
|
|
||||||
build/_vendor/pkg
|
|
||||||
|
|
||||||
#*
|
# TypeChain files
|
||||||
.#*
|
/typechain
|
||||||
*#
|
/typechain-types
|
||||||
*~
|
|
||||||
.project
|
|
||||||
.settings
|
|
||||||
|
|
||||||
# used by the Makefile
|
# solidity-coverage files
|
||||||
/build/_workspace/
|
/coverage
|
||||||
/build/cache/
|
/coverage.json
|
||||||
/build/bin/
|
|
||||||
/geth*.zip
|
|
||||||
|
|
||||||
# travis
|
# Hardhat Ignition default folder for deployments against a local node
|
||||||
profile.tmp
|
ignition/deployments/chain-31337
|
||||||
profile.cov
|
|
||||||
|
|
||||||
# IdeaIDE
|
|
||||||
.idea
|
|
||||||
|
|
||||||
# VS Code
|
|
||||||
.vscode
|
|
||||||
|
|
||||||
# dashboard
|
|
||||||
/dashboard/assets/flow-typed
|
|
||||||
/dashboard/assets/node_modules
|
|
||||||
/dashboard/assets/stats.json
|
|
||||||
/dashboard/assets/bundle.js
|
|
||||||
/dashboard/assets/bundle.js.map
|
|
||||||
/dashboard/assets/package-lock.json
|
|
||||||
|
|
||||||
**/yarn-error.log
|
|
||||||
logs/
|
|
||||||
|
|
||||||
tests/spec-tests/
|
|
||||||
|
|
|
||||||
361
README.md
361
README.md
|
|
@ -1,358 +1,13 @@
|
||||||
## Go Ethereum
|
# Sample Hardhat Project
|
||||||
|
|
||||||
Golang execution layer implementation of the Ethereum protocol.
|
This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a Hardhat Ignition module that deploys that contract.
|
||||||
|
|
||||||
[](https://pkg.go.dev/github.com/ethereum/go-ethereum?tab=doc)
|
|
||||||
[](https://goreportcard.com/report/github.com/ethereum/go-ethereum)
|
|
||||||
[](https://app.travis-ci.com/github/ethereum/go-ethereum)
|
|
||||||
[](https://discord.gg/nthXNEv)
|
|
||||||
|
|
||||||
Automated builds are available for stable releases and the unstable master branch. Binary
|
|
||||||
archives are published at https://geth.ethereum.org/downloads/.
|
|
||||||
|
|
||||||
## Building the source
|
|
||||||
|
|
||||||
For prerequisites and detailed build instructions please read the [Installation Instructions](https://geth.ethereum.org/docs/getting-started/installing-geth).
|
|
||||||
|
|
||||||
Building `geth` requires both a Go (version 1.21 or later) and a C compiler. You can install
|
|
||||||
them using your favourite package manager. Once the dependencies are installed, run
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
make geth
|
npx hardhat help
|
||||||
|
npx hardhat test
|
||||||
|
REPORT_GAS=true npx hardhat test
|
||||||
|
npx hardhat node
|
||||||
|
npx hardhat ignition deploy ./ignition/modules/Lock.js
|
||||||
```
|
```
|
||||||
|
|
||||||
or, to build the full suite of utilities:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
make all
|
|
||||||
```
|
|
||||||
|
|
||||||
## Executables
|
|
||||||
|
|
||||||
The go-ethereum project comes with several wrappers/executables found in the `cmd`
|
|
||||||
directory.
|
|
||||||
|
|
||||||
| Command | Description |
|
|
||||||
| :--------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| **`geth`** | Our main Ethereum CLI client. It is the entry point into the Ethereum network (main-, test- or private net), capable of running as a full node (default), archive node (retaining all historical state) or a light node (retrieving data live). It can be used by other processes as a gateway into the Ethereum network via JSON RPC endpoints exposed on top of HTTP, WebSocket and/or IPC transports. `geth --help` and the [CLI page](https://geth.ethereum.org/docs/fundamentals/command-line-options) for command line options. |
|
|
||||||
| `clef` | Stand-alone signing tool, which can be used as a backend signer for `geth`. |
|
|
||||||
| `devp2p` | Utilities to interact with nodes on the networking layer, without running a full blockchain. |
|
|
||||||
| `abigen` | Source code generator to convert Ethereum contract definitions into easy-to-use, compile-time type-safe Go packages. It operates on plain [Ethereum contract ABIs](https://docs.soliditylang.org/en/develop/abi-spec.html) with expanded functionality if the contract bytecode is also available. However, it also accepts Solidity source files, making development much more streamlined. Please see our [Native DApps](https://geth.ethereum.org/docs/developers/dapp-developer/native-bindings) page for details. |
|
|
||||||
| `bootnode` | Stripped down version of our Ethereum client implementation that only takes part in the network node discovery protocol, but does not run any of the higher level application protocols. It can be used as a lightweight bootstrap node to aid in finding peers in private networks. |
|
|
||||||
| `evm` | Developer utility version of the EVM (Ethereum Virtual Machine) that is capable of running bytecode snippets within a configurable environment and execution mode. Its purpose is to allow isolated, fine-grained debugging of EVM opcodes (e.g. `evm --code 60ff60ff --debug run`). |
|
|
||||||
| `rlpdump` | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user-friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`). |
|
|
||||||
|
|
||||||
## Running `geth`
|
|
||||||
|
|
||||||
Going through all the possible command line flags is out of scope here (please consult our
|
|
||||||
[CLI Wiki page](https://geth.ethereum.org/docs/fundamentals/command-line-options)),
|
|
||||||
but we've enumerated a few common parameter combos to get you up to speed quickly
|
|
||||||
on how you can run your own `geth` instance.
|
|
||||||
|
|
||||||
### Hardware Requirements
|
|
||||||
|
|
||||||
Minimum:
|
|
||||||
|
|
||||||
* CPU with 2+ cores
|
|
||||||
* 4GB RAM
|
|
||||||
* 1TB free storage space to sync the Mainnet
|
|
||||||
* 8 MBit/sec download Internet service
|
|
||||||
|
|
||||||
Recommended:
|
|
||||||
|
|
||||||
* Fast CPU with 4+ cores
|
|
||||||
* 16GB+ RAM
|
|
||||||
* High-performance SSD with at least 1TB of free space
|
|
||||||
* 25+ MBit/sec download Internet service
|
|
||||||
|
|
||||||
### Full node on the main Ethereum network
|
|
||||||
|
|
||||||
By far the most common scenario is people wanting to simply interact with the Ethereum
|
|
||||||
network: create accounts; transfer funds; deploy and interact with contracts. For this
|
|
||||||
particular use case, the user doesn't care about years-old historical data, so we can
|
|
||||||
sync quickly to the current state of the network. To do so:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ geth console
|
|
||||||
```
|
|
||||||
|
|
||||||
This command will:
|
|
||||||
* Start `geth` in snap sync mode (default, can be changed with the `--syncmode` flag),
|
|
||||||
causing it to download more data in exchange for avoiding processing the entire history
|
|
||||||
of the Ethereum network, which is very CPU intensive.
|
|
||||||
* Start the built-in interactive [JavaScript console](https://geth.ethereum.org/docs/interacting-with-geth/javascript-console),
|
|
||||||
(via the trailing `console` subcommand) through which you can interact using [`web3` methods](https://github.com/ChainSafe/web3.js/blob/0.20.7/DOCUMENTATION.md)
|
|
||||||
(note: the `web3` version bundled within `geth` is very old, and not up to date with official docs),
|
|
||||||
as well as `geth`'s own [management APIs](https://geth.ethereum.org/docs/interacting-with-geth/rpc).
|
|
||||||
This tool is optional and if you leave it out you can always attach it to an already running
|
|
||||||
`geth` instance with `geth attach`.
|
|
||||||
|
|
||||||
### A Full node on the Görli test network
|
|
||||||
|
|
||||||
Transitioning towards developers, if you'd like to play around with creating Ethereum
|
|
||||||
contracts, you almost certainly would like to do that without any real money involved until
|
|
||||||
you get the hang of the entire system. In other words, instead of attaching to the main
|
|
||||||
network, you want to join the **test** network with your node, which is fully equivalent to
|
|
||||||
the main network, but with play-Ether only.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ geth --goerli console
|
|
||||||
```
|
|
||||||
|
|
||||||
The `console` subcommand has the same meaning as above and is equally
|
|
||||||
useful on the testnet too.
|
|
||||||
|
|
||||||
Specifying the `--goerli` flag, however, will reconfigure your `geth` instance a bit:
|
|
||||||
|
|
||||||
* Instead of connecting to the main Ethereum network, the client will connect to the Görli
|
|
||||||
test network, which uses different P2P bootnodes, different network IDs and genesis
|
|
||||||
states.
|
|
||||||
* Instead of using the default data directory (`~/.ethereum` on Linux for example), `geth`
|
|
||||||
will nest itself one level deeper into a `goerli` subfolder (`~/.ethereum/goerli` on
|
|
||||||
Linux). Note, on OSX and Linux this also means that attaching to a running testnet node
|
|
||||||
requires the use of a custom endpoint since `geth attach` will try to attach to a
|
|
||||||
production node endpoint by default, e.g.,
|
|
||||||
`geth attach <datadir>/goerli/geth.ipc`. Windows users are not affected by
|
|
||||||
this.
|
|
||||||
|
|
||||||
*Note: Although some internal protective measures prevent transactions from
|
|
||||||
crossing over between the main network and test network, you should always
|
|
||||||
use separate accounts for play and real money. Unless you manually move
|
|
||||||
accounts, `geth` will by default correctly separate the two networks and will not make any
|
|
||||||
accounts available between them.*
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
As an alternative to passing the numerous flags to the `geth` binary, you can also pass a
|
|
||||||
configuration file via:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ geth --config /path/to/your_config.toml
|
|
||||||
```
|
|
||||||
|
|
||||||
To get an idea of how the file should look like you can use the `dumpconfig` subcommand to
|
|
||||||
export your existing configuration:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ geth --your-favourite-flags dumpconfig
|
|
||||||
```
|
|
||||||
|
|
||||||
*Note: This works only with `geth` v1.6.0 and above.*
|
|
||||||
|
|
||||||
#### Docker quick start
|
|
||||||
|
|
||||||
One of the quickest ways to get Ethereum up and running on your machine is by using
|
|
||||||
Docker:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
|
|
||||||
-p 8545:8545 -p 30303:30303 \
|
|
||||||
ethereum/client-go
|
|
||||||
```
|
|
||||||
|
|
||||||
This will start `geth` in snap-sync mode with a DB memory allowance of 1GB, as the
|
|
||||||
above command does. It will also create a persistent volume in your home directory for
|
|
||||||
saving your blockchain as well as map the default ports. There is also an `alpine` tag
|
|
||||||
available for a slim version of the image.
|
|
||||||
|
|
||||||
Do not forget `--http.addr 0.0.0.0`, if you want to access RPC from other containers
|
|
||||||
and/or hosts. By default, `geth` binds to the local interface and RPC endpoints are not
|
|
||||||
accessible from the outside.
|
|
||||||
|
|
||||||
### Programmatically interfacing `geth` nodes
|
|
||||||
|
|
||||||
As a developer, sooner rather than later you'll want to start interacting with `geth` and the
|
|
||||||
Ethereum network via your own programs and not manually through the console. To aid
|
|
||||||
this, `geth` has built-in support for a JSON-RPC based APIs ([standard APIs](https://ethereum.github.io/execution-apis/api-documentation/)
|
|
||||||
and [`geth` specific APIs](https://geth.ethereum.org/docs/interacting-with-geth/rpc)).
|
|
||||||
These can be exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based
|
|
||||||
platforms, and named pipes on Windows).
|
|
||||||
|
|
||||||
The IPC interface is enabled by default and exposes all the APIs supported by `geth`,
|
|
||||||
whereas the HTTP and WS interfaces need to manually be enabled and only expose a
|
|
||||||
subset of APIs due to security reasons. These can be turned on/off and configured as
|
|
||||||
you'd expect.
|
|
||||||
|
|
||||||
HTTP based JSON-RPC API options:
|
|
||||||
|
|
||||||
* `--http` Enable the HTTP-RPC server
|
|
||||||
* `--http.addr` HTTP-RPC server listening interface (default: `localhost`)
|
|
||||||
* `--http.port` HTTP-RPC server listening port (default: `8545`)
|
|
||||||
* `--http.api` API's offered over the HTTP-RPC interface (default: `eth,net,web3`)
|
|
||||||
* `--http.corsdomain` Comma separated list of domains from which to accept cross origin requests (browser enforced)
|
|
||||||
* `--ws` Enable the WS-RPC server
|
|
||||||
* `--ws.addr` WS-RPC server listening interface (default: `localhost`)
|
|
||||||
* `--ws.port` WS-RPC server listening port (default: `8546`)
|
|
||||||
* `--ws.api` API's offered over the WS-RPC interface (default: `eth,net,web3`)
|
|
||||||
* `--ws.origins` Origins from which to accept WebSocket requests
|
|
||||||
* `--ipcdisable` Disable the IPC-RPC server
|
|
||||||
* `--ipcapi` API's offered over the IPC-RPC interface (default: `admin,debug,eth,miner,net,personal,txpool,web3`)
|
|
||||||
* `--ipcpath` Filename for IPC socket/pipe within the datadir (explicit paths escape it)
|
|
||||||
|
|
||||||
You'll need to use your own programming environments' capabilities (libraries, tools, etc) to
|
|
||||||
connect via HTTP, WS or IPC to a `geth` node configured with the above flags and you'll
|
|
||||||
need to speak [JSON-RPC](https://www.jsonrpc.org/specification) on all transports. You
|
|
||||||
can reuse the same connection for multiple requests!
|
|
||||||
|
|
||||||
**Note: Please understand the security implications of opening up an HTTP/WS based
|
|
||||||
transport before doing so! Hackers on the internet are actively trying to subvert
|
|
||||||
Ethereum nodes with exposed APIs! Further, all browser tabs can access locally
|
|
||||||
running web servers, so malicious web pages could try to subvert locally available
|
|
||||||
APIs!**
|
|
||||||
|
|
||||||
### Operating a private network
|
|
||||||
|
|
||||||
Maintaining your own private network is more involved as a lot of configurations taken for
|
|
||||||
granted in the official networks need to be manually set up.
|
|
||||||
|
|
||||||
#### Defining the private genesis state
|
|
||||||
|
|
||||||
First, you'll need to create the genesis state of your networks, which all nodes need to be
|
|
||||||
aware of and agree upon. This consists of a small JSON file (e.g. call it `genesis.json`):
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"config": {
|
|
||||||
"chainId": <arbitrary positive integer>,
|
|
||||||
"homesteadBlock": 0,
|
|
||||||
"eip150Block": 0,
|
|
||||||
"eip155Block": 0,
|
|
||||||
"eip158Block": 0,
|
|
||||||
"byzantiumBlock": 0,
|
|
||||||
"constantinopleBlock": 0,
|
|
||||||
"petersburgBlock": 0,
|
|
||||||
"istanbulBlock": 0,
|
|
||||||
"berlinBlock": 0,
|
|
||||||
"londonBlock": 0
|
|
||||||
},
|
|
||||||
"alloc": {},
|
|
||||||
"coinbase": "0x0000000000000000000000000000000000000000",
|
|
||||||
"difficulty": "0x20000",
|
|
||||||
"extraData": "",
|
|
||||||
"gasLimit": "0x2fefd8",
|
|
||||||
"nonce": "0x0000000000000042",
|
|
||||||
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"timestamp": "0x00"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The above fields should be fine for most purposes, although we'd recommend changing
|
|
||||||
the `nonce` to some random value so you prevent unknown remote nodes from being able
|
|
||||||
to connect to you. If you'd like to pre-fund some accounts for easier testing, create
|
|
||||||
the accounts and populate the `alloc` field with their addresses.
|
|
||||||
|
|
||||||
```json
|
|
||||||
"alloc": {
|
|
||||||
"0x0000000000000000000000000000000000000001": {
|
|
||||||
"balance": "111111111"
|
|
||||||
},
|
|
||||||
"0x0000000000000000000000000000000000000002": {
|
|
||||||
"balance": "222222222"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
With the genesis state defined in the above JSON file, you'll need to initialize **every**
|
|
||||||
`geth` node with it prior to starting it up to ensure all blockchain parameters are correctly
|
|
||||||
set:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ geth init path/to/genesis.json
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Creating the rendezvous point
|
|
||||||
|
|
||||||
With all nodes that you want to run initialized to the desired genesis state, you'll need to
|
|
||||||
start a bootstrap node that others can use to find each other in your network and/or over
|
|
||||||
the internet. The clean way is to configure and run a dedicated bootnode:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ bootnode --genkey=boot.key
|
|
||||||
$ bootnode --nodekey=boot.key
|
|
||||||
```
|
|
||||||
|
|
||||||
With the bootnode online, it will display an [`enode` URL](https://ethereum.org/en/developers/docs/networking-layer/network-addresses/#enode)
|
|
||||||
that other nodes can use to connect to it and exchange peer information. Make sure to
|
|
||||||
replace the displayed IP address information (most probably `[::]`) with your externally
|
|
||||||
accessible IP to get the actual `enode` URL.
|
|
||||||
|
|
||||||
*Note: You could also use a full-fledged `geth` node as a bootnode, but it's the less
|
|
||||||
recommended way.*
|
|
||||||
|
|
||||||
#### Starting up your member nodes
|
|
||||||
|
|
||||||
With the bootnode operational and externally reachable (you can try
|
|
||||||
`telnet <ip> <port>` to ensure it's indeed reachable), start every subsequent `geth`
|
|
||||||
node pointed to the bootnode for peer discovery via the `--bootnodes` flag. It will
|
|
||||||
probably also be desirable to keep the data directory of your private network separated, so
|
|
||||||
do also specify a custom `--datadir` flag.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ geth --datadir=path/to/custom/data/folder --bootnodes=<bootnode-enode-url-from-above>
|
|
||||||
```
|
|
||||||
|
|
||||||
*Note: Since your network will be completely cut off from the main and test networks, you'll
|
|
||||||
also need to configure a miner to process transactions and create new blocks for you.*
|
|
||||||
|
|
||||||
#### Running a private miner
|
|
||||||
|
|
||||||
|
|
||||||
In a private network setting a single CPU miner instance is more than enough for
|
|
||||||
practical purposes as it can produce a stable stream of blocks at the correct intervals
|
|
||||||
without needing heavy resources (consider running on a single thread, no need for multiple
|
|
||||||
ones either). To start a `geth` instance for mining, run it with all your usual flags, extended
|
|
||||||
by:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ geth <usual-flags> --mine --miner.threads=1 --miner.etherbase=0x0000000000000000000000000000000000000000
|
|
||||||
```
|
|
||||||
|
|
||||||
Which will start mining blocks and transactions on a single CPU thread, crediting all
|
|
||||||
proceedings to the account specified by `--miner.etherbase`. You can further tune the mining
|
|
||||||
by changing the default gas limit blocks converge to (`--miner.targetgaslimit`) and the price
|
|
||||||
transactions are accepted at (`--miner.gasprice`).
|
|
||||||
|
|
||||||
## Contribution
|
|
||||||
|
|
||||||
Thank you for considering helping out with the source code! We welcome contributions
|
|
||||||
from anyone on the internet, and are grateful for even the smallest of fixes!
|
|
||||||
|
|
||||||
If you'd like to contribute to go-ethereum, please fork, fix, commit and send a pull request
|
|
||||||
for the maintainers to review and merge into the main code base. If you wish to submit
|
|
||||||
more complex changes though, please check up with the core devs first on [our Discord Server](https://discord.gg/invite/nthXNEv)
|
|
||||||
to ensure those changes are in line with the general philosophy of the project and/or get
|
|
||||||
some early feedback which can make both your efforts much lighter as well as our review
|
|
||||||
and merge procedures quick and simple.
|
|
||||||
|
|
||||||
Please make sure your contributions adhere to our coding guidelines:
|
|
||||||
|
|
||||||
* Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting)
|
|
||||||
guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)).
|
|
||||||
* Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary)
|
|
||||||
guidelines.
|
|
||||||
* Pull requests need to be based on and opened against the `master` branch.
|
|
||||||
* Commit messages should be prefixed with the package(s) they modify.
|
|
||||||
* E.g. "eth, rpc: make trace configs optional"
|
|
||||||
|
|
||||||
Please see the [Developers' Guide](https://geth.ethereum.org/docs/developers/geth-developer/dev-guide)
|
|
||||||
for more details on configuring your environment, managing project dependencies, and
|
|
||||||
testing procedures.
|
|
||||||
|
|
||||||
### Contributing to geth.ethereum.org
|
|
||||||
|
|
||||||
For contributions to the [go-ethereum website](https://geth.ethereum.org), please checkout and raise pull requests against the `website` branch.
|
|
||||||
For more detailed instructions please see the `website` branch [README](https://github.com/ethereum/go-ethereum/tree/website#readme) or the
|
|
||||||
[contributing](https://geth.ethereum.org/docs/developers/geth-developer/contributing) page of the website.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
The go-ethereum library (i.e. all code outside of the `cmd` directory) is licensed under the
|
|
||||||
[GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html),
|
|
||||||
also included in our repository in the `COPYING.LESSER` file.
|
|
||||||
|
|
||||||
The go-ethereum binaries (i.e. all code inside of the `cmd` directory) are licensed under the
|
|
||||||
[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also
|
|
||||||
included in our repository in the `COPYING` file.
|
|
||||||
|
|
|
||||||
34
contracts/Lock.sol
Normal file
34
contracts/Lock.sol
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
// SPDX-License-Identifier: UNLICENSED
|
||||||
|
pragma solidity ^0.8.24;
|
||||||
|
|
||||||
|
// Uncomment this line to use console.log
|
||||||
|
// import "hardhat/console.sol";
|
||||||
|
|
||||||
|
contract Lock {
|
||||||
|
uint public unlockTime;
|
||||||
|
address payable public owner;
|
||||||
|
|
||||||
|
event Withdrawal(uint amount, uint when);
|
||||||
|
|
||||||
|
constructor(uint _unlockTime) payable {
|
||||||
|
require(
|
||||||
|
block.timestamp < _unlockTime,
|
||||||
|
"Unlock time should be in the future"
|
||||||
|
);
|
||||||
|
|
||||||
|
unlockTime = _unlockTime;
|
||||||
|
owner = payable(msg.sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
function withdraw() public {
|
||||||
|
// Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal
|
||||||
|
// console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp);
|
||||||
|
|
||||||
|
require(block.timestamp >= unlockTime, "You can't withdraw yet");
|
||||||
|
require(msg.sender == owner, "You aren't the owner");
|
||||||
|
|
||||||
|
emit Withdrawal(address(this).balance, block.timestamp);
|
||||||
|
|
||||||
|
owner.transfer(address(this).balance);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
node_modules/.bin/_mocha
generated
vendored
1
node_modules/.bin/_mocha
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../mocha/bin/_mocha
|
|
||||||
10
node_modules/.bin/_mocha
generated
vendored
Executable file
10
node_modules/.bin/_mocha
generated
vendored
Executable file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file remains for backwards compatibility only.
|
||||||
|
* Don't put stuff in this file.
|
||||||
|
* @see module:lib/cli
|
||||||
|
*/
|
||||||
|
|
||||||
|
require('../lib/cli').main();
|
||||||
1
node_modules/.bin/acorn
generated
vendored
1
node_modules/.bin/acorn
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../acorn/bin/acorn
|
|
||||||
4
node_modules/.bin/acorn
generated
vendored
Executable file
4
node_modules/.bin/acorn
generated
vendored
Executable file
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict"
|
||||||
|
|
||||||
|
require("../dist/bin.js")
|
||||||
1
node_modules/.bin/escodegen
generated
vendored
1
node_modules/.bin/escodegen
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../escodegen/bin/escodegen.js
|
|
||||||
77
node_modules/.bin/escodegen
generated
vendored
Executable file
77
node_modules/.bin/escodegen
generated
vendored
Executable file
|
|
@ -0,0 +1,77 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
/*
|
||||||
|
Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint sloppy:true node:true */
|
||||||
|
|
||||||
|
var fs = require('fs'),
|
||||||
|
path = require('path'),
|
||||||
|
root = path.join(path.dirname(fs.realpathSync(__filename)), '..'),
|
||||||
|
esprima = require('esprima'),
|
||||||
|
escodegen = require(root),
|
||||||
|
optionator = require('optionator')({
|
||||||
|
prepend: 'Usage: escodegen [options] file...',
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
option: 'config',
|
||||||
|
alias: 'c',
|
||||||
|
type: 'String',
|
||||||
|
description: 'configuration json for escodegen'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
args = optionator.parse(process.argv),
|
||||||
|
files = args._,
|
||||||
|
options,
|
||||||
|
esprimaOptions = {
|
||||||
|
raw: true,
|
||||||
|
tokens: true,
|
||||||
|
range: true,
|
||||||
|
comment: true
|
||||||
|
};
|
||||||
|
|
||||||
|
if (files.length === 0) {
|
||||||
|
console.log(optionator.generateHelp());
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.config) {
|
||||||
|
try {
|
||||||
|
options = JSON.parse(fs.readFileSync(args.config, 'utf-8'));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error parsing config: ', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
files.forEach(function (filename) {
|
||||||
|
var content = fs.readFileSync(filename, 'utf-8'),
|
||||||
|
syntax = esprima.parse(content, esprimaOptions);
|
||||||
|
|
||||||
|
if (options.comment) {
|
||||||
|
escodegen.attachComments(syntax, syntax.comments, syntax.tokens);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(escodegen.generate(syntax, options));
|
||||||
|
});
|
||||||
|
/* vim: set sw=4 ts=4 et tw=80 : */
|
||||||
1
node_modules/.bin/esgenerate
generated
vendored
1
node_modules/.bin/esgenerate
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../escodegen/bin/esgenerate.js
|
|
||||||
64
node_modules/.bin/esgenerate
generated
vendored
Executable file
64
node_modules/.bin/esgenerate
generated
vendored
Executable file
|
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
/*
|
||||||
|
Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint sloppy:true node:true */
|
||||||
|
|
||||||
|
var fs = require('fs'),
|
||||||
|
path = require('path'),
|
||||||
|
root = path.join(path.dirname(fs.realpathSync(__filename)), '..'),
|
||||||
|
escodegen = require(root),
|
||||||
|
optionator = require('optionator')({
|
||||||
|
prepend: 'Usage: esgenerate [options] file.json ...',
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
option: 'config',
|
||||||
|
alias: 'c',
|
||||||
|
type: 'String',
|
||||||
|
description: 'configuration json for escodegen'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
args = optionator.parse(process.argv),
|
||||||
|
files = args._,
|
||||||
|
options;
|
||||||
|
|
||||||
|
if (files.length === 0) {
|
||||||
|
console.log(optionator.generateHelp());
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.config) {
|
||||||
|
try {
|
||||||
|
options = JSON.parse(fs.readFileSync(args.config, 'utf-8'))
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error parsing config: ', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
files.forEach(function (filename) {
|
||||||
|
var content = fs.readFileSync(filename, 'utf-8');
|
||||||
|
console.log(escodegen.generate(JSON.parse(content), options));
|
||||||
|
});
|
||||||
|
/* vim: set sw=4 ts=4 et tw=80 : */
|
||||||
1
node_modules/.bin/esparse
generated
vendored
1
node_modules/.bin/esparse
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../esprima/bin/esparse.js
|
|
||||||
126
node_modules/.bin/esparse
generated
vendored
Executable file
126
node_modules/.bin/esparse
generated
vendored
Executable file
|
|
@ -0,0 +1,126 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
/*
|
||||||
|
Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint sloppy:true node:true rhino:true */
|
||||||
|
|
||||||
|
var fs, esprima, fname, content, options, syntax;
|
||||||
|
|
||||||
|
if (typeof require === 'function') {
|
||||||
|
fs = require('fs');
|
||||||
|
esprima = require('esprima');
|
||||||
|
} else if (typeof load === 'function') {
|
||||||
|
try {
|
||||||
|
load('esprima.js');
|
||||||
|
} catch (e) {
|
||||||
|
load('../esprima.js');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shims to Node.js objects when running under Rhino.
|
||||||
|
if (typeof console === 'undefined' && typeof process === 'undefined') {
|
||||||
|
console = { log: print };
|
||||||
|
fs = { readFileSync: readFile };
|
||||||
|
process = { argv: arguments, exit: quit };
|
||||||
|
process.argv.unshift('esparse.js');
|
||||||
|
process.argv.unshift('rhino');
|
||||||
|
}
|
||||||
|
|
||||||
|
function showUsage() {
|
||||||
|
console.log('Usage:');
|
||||||
|
console.log(' esparse [options] file.js');
|
||||||
|
console.log();
|
||||||
|
console.log('Available options:');
|
||||||
|
console.log();
|
||||||
|
console.log(' --comment Gather all line and block comments in an array');
|
||||||
|
console.log(' --loc Include line-column location info for each syntax node');
|
||||||
|
console.log(' --range Include index-based range for each syntax node');
|
||||||
|
console.log(' --raw Display the raw value of literals');
|
||||||
|
console.log(' --tokens List all tokens in an array');
|
||||||
|
console.log(' --tolerant Tolerate errors on a best-effort basis (experimental)');
|
||||||
|
console.log(' -v, --version Shows program version');
|
||||||
|
console.log();
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv.length <= 2) {
|
||||||
|
showUsage();
|
||||||
|
}
|
||||||
|
|
||||||
|
options = {};
|
||||||
|
|
||||||
|
process.argv.splice(2).forEach(function (entry) {
|
||||||
|
|
||||||
|
if (entry === '-h' || entry === '--help') {
|
||||||
|
showUsage();
|
||||||
|
} else if (entry === '-v' || entry === '--version') {
|
||||||
|
console.log('ECMAScript Parser (using Esprima version', esprima.version, ')');
|
||||||
|
console.log();
|
||||||
|
process.exit(0);
|
||||||
|
} else if (entry === '--comment') {
|
||||||
|
options.comment = true;
|
||||||
|
} else if (entry === '--loc') {
|
||||||
|
options.loc = true;
|
||||||
|
} else if (entry === '--range') {
|
||||||
|
options.range = true;
|
||||||
|
} else if (entry === '--raw') {
|
||||||
|
options.raw = true;
|
||||||
|
} else if (entry === '--tokens') {
|
||||||
|
options.tokens = true;
|
||||||
|
} else if (entry === '--tolerant') {
|
||||||
|
options.tolerant = true;
|
||||||
|
} else if (entry.slice(0, 2) === '--') {
|
||||||
|
console.log('Error: unknown option ' + entry + '.');
|
||||||
|
process.exit(1);
|
||||||
|
} else if (typeof fname === 'string') {
|
||||||
|
console.log('Error: more than one input file.');
|
||||||
|
process.exit(1);
|
||||||
|
} else {
|
||||||
|
fname = entry;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (typeof fname !== 'string') {
|
||||||
|
console.log('Error: no input file.');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Special handling for regular expression literal since we need to
|
||||||
|
// convert it to a string literal, otherwise it will be decoded
|
||||||
|
// as object "{}" and the regular expression would be lost.
|
||||||
|
function adjustRegexLiteral(key, value) {
|
||||||
|
if (key === 'value' && value instanceof RegExp) {
|
||||||
|
value = value.toString();
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
content = fs.readFileSync(fname, 'utf-8');
|
||||||
|
syntax = esprima.parse(content, options);
|
||||||
|
console.log(JSON.stringify(syntax, adjustRegexLiteral, 4));
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Error: ' + e.message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
1
node_modules/.bin/esvalidate
generated
vendored
1
node_modules/.bin/esvalidate
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../esprima/bin/esvalidate.js
|
|
||||||
199
node_modules/.bin/esvalidate
generated
vendored
Executable file
199
node_modules/.bin/esvalidate
generated
vendored
Executable file
|
|
@ -0,0 +1,199 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
/*
|
||||||
|
Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint sloppy:true plusplus:true node:true rhino:true */
|
||||||
|
/*global phantom:true */
|
||||||
|
|
||||||
|
var fs, system, esprima, options, fnames, count;
|
||||||
|
|
||||||
|
if (typeof esprima === 'undefined') {
|
||||||
|
// PhantomJS can only require() relative files
|
||||||
|
if (typeof phantom === 'object') {
|
||||||
|
fs = require('fs');
|
||||||
|
system = require('system');
|
||||||
|
esprima = require('./esprima');
|
||||||
|
} else if (typeof require === 'function') {
|
||||||
|
fs = require('fs');
|
||||||
|
esprima = require('esprima');
|
||||||
|
} else if (typeof load === 'function') {
|
||||||
|
try {
|
||||||
|
load('esprima.js');
|
||||||
|
} catch (e) {
|
||||||
|
load('../esprima.js');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shims to Node.js objects when running under PhantomJS 1.7+.
|
||||||
|
if (typeof phantom === 'object') {
|
||||||
|
fs.readFileSync = fs.read;
|
||||||
|
process = {
|
||||||
|
argv: [].slice.call(system.args),
|
||||||
|
exit: phantom.exit
|
||||||
|
};
|
||||||
|
process.argv.unshift('phantomjs');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shims to Node.js objects when running under Rhino.
|
||||||
|
if (typeof console === 'undefined' && typeof process === 'undefined') {
|
||||||
|
console = { log: print };
|
||||||
|
fs = { readFileSync: readFile };
|
||||||
|
process = { argv: arguments, exit: quit };
|
||||||
|
process.argv.unshift('esvalidate.js');
|
||||||
|
process.argv.unshift('rhino');
|
||||||
|
}
|
||||||
|
|
||||||
|
function showUsage() {
|
||||||
|
console.log('Usage:');
|
||||||
|
console.log(' esvalidate [options] file.js');
|
||||||
|
console.log();
|
||||||
|
console.log('Available options:');
|
||||||
|
console.log();
|
||||||
|
console.log(' --format=type Set the report format, plain (default) or junit');
|
||||||
|
console.log(' -v, --version Print program version');
|
||||||
|
console.log();
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv.length <= 2) {
|
||||||
|
showUsage();
|
||||||
|
}
|
||||||
|
|
||||||
|
options = {
|
||||||
|
format: 'plain'
|
||||||
|
};
|
||||||
|
|
||||||
|
fnames = [];
|
||||||
|
|
||||||
|
process.argv.splice(2).forEach(function (entry) {
|
||||||
|
|
||||||
|
if (entry === '-h' || entry === '--help') {
|
||||||
|
showUsage();
|
||||||
|
} else if (entry === '-v' || entry === '--version') {
|
||||||
|
console.log('ECMAScript Validator (using Esprima version', esprima.version, ')');
|
||||||
|
console.log();
|
||||||
|
process.exit(0);
|
||||||
|
} else if (entry.slice(0, 9) === '--format=') {
|
||||||
|
options.format = entry.slice(9);
|
||||||
|
if (options.format !== 'plain' && options.format !== 'junit') {
|
||||||
|
console.log('Error: unknown report format ' + options.format + '.');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
} else if (entry.slice(0, 2) === '--') {
|
||||||
|
console.log('Error: unknown option ' + entry + '.');
|
||||||
|
process.exit(1);
|
||||||
|
} else {
|
||||||
|
fnames.push(entry);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (fnames.length === 0) {
|
||||||
|
console.log('Error: no input file.');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.format === 'junit') {
|
||||||
|
console.log('<?xml version="1.0" encoding="UTF-8"?>');
|
||||||
|
console.log('<testsuites>');
|
||||||
|
}
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
fnames.forEach(function (fname) {
|
||||||
|
var content, timestamp, syntax, name;
|
||||||
|
try {
|
||||||
|
content = fs.readFileSync(fname, 'utf-8');
|
||||||
|
|
||||||
|
if (content[0] === '#' && content[1] === '!') {
|
||||||
|
content = '//' + content.substr(2, content.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
timestamp = Date.now();
|
||||||
|
syntax = esprima.parse(content, { tolerant: true });
|
||||||
|
|
||||||
|
if (options.format === 'junit') {
|
||||||
|
|
||||||
|
name = fname;
|
||||||
|
if (name.lastIndexOf('/') >= 0) {
|
||||||
|
name = name.slice(name.lastIndexOf('/') + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('<testsuite name="' + fname + '" errors="0" ' +
|
||||||
|
' failures="' + syntax.errors.length + '" ' +
|
||||||
|
' tests="' + syntax.errors.length + '" ' +
|
||||||
|
' time="' + Math.round((Date.now() - timestamp) / 1000) +
|
||||||
|
'">');
|
||||||
|
|
||||||
|
syntax.errors.forEach(function (error) {
|
||||||
|
var msg = error.message;
|
||||||
|
msg = msg.replace(/^Line\ [0-9]*\:\ /, '');
|
||||||
|
console.log(' <testcase name="Line ' + error.lineNumber + ': ' + msg + '" ' +
|
||||||
|
' time="0">');
|
||||||
|
console.log(' <error type="SyntaxError" message="' + error.message + '">' +
|
||||||
|
error.message + '(' + name + ':' + error.lineNumber + ')' +
|
||||||
|
'</error>');
|
||||||
|
console.log(' </testcase>');
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('</testsuite>');
|
||||||
|
|
||||||
|
} else if (options.format === 'plain') {
|
||||||
|
|
||||||
|
syntax.errors.forEach(function (error) {
|
||||||
|
var msg = error.message;
|
||||||
|
msg = msg.replace(/^Line\ [0-9]*\:\ /, '');
|
||||||
|
msg = fname + ':' + error.lineNumber + ': ' + msg;
|
||||||
|
console.log(msg);
|
||||||
|
++count;
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
++count;
|
||||||
|
if (options.format === 'junit') {
|
||||||
|
console.log('<testsuite name="' + fname + '" errors="1" failures="0" tests="1" ' +
|
||||||
|
' time="' + Math.round((Date.now() - timestamp) / 1000) + '">');
|
||||||
|
console.log(' <testcase name="' + e.message + '" ' + ' time="0">');
|
||||||
|
console.log(' <error type="ParseError" message="' + e.message + '">' +
|
||||||
|
e.message + '(' + fname + ((e.lineNumber) ? ':' + e.lineNumber : '') +
|
||||||
|
')</error>');
|
||||||
|
console.log(' </testcase>');
|
||||||
|
console.log('</testsuite>');
|
||||||
|
} else {
|
||||||
|
console.log('Error: ' + e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (options.format === 'junit') {
|
||||||
|
console.log('</testsuites>');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count > 0) {
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count === 0 && typeof phantom === 'object') {
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
1
node_modules/.bin/flat
generated
vendored
1
node_modules/.bin/flat
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../flat/cli.js
|
|
||||||
42
node_modules/.bin/flat
generated
vendored
Executable file
42
node_modules/.bin/flat
generated
vendored
Executable file
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
const readline = require('readline')
|
||||||
|
|
||||||
|
const flat = require('./index')
|
||||||
|
|
||||||
|
const filepath = process.argv.slice(2)[0]
|
||||||
|
if (filepath) {
|
||||||
|
// Read from file
|
||||||
|
const file = path.resolve(process.cwd(), filepath)
|
||||||
|
fs.accessSync(file, fs.constants.R_OK) // allow to throw if not readable
|
||||||
|
out(require(file))
|
||||||
|
} else if (process.stdin.isTTY) {
|
||||||
|
usage(0)
|
||||||
|
} else {
|
||||||
|
// Read from newline-delimited STDIN
|
||||||
|
const lines = []
|
||||||
|
readline.createInterface({
|
||||||
|
input: process.stdin,
|
||||||
|
output: process.stdout,
|
||||||
|
terminal: false
|
||||||
|
})
|
||||||
|
.on('line', line => lines.push(line))
|
||||||
|
.on('close', () => out(JSON.parse(lines.join('\n'))))
|
||||||
|
}
|
||||||
|
|
||||||
|
function out (data) {
|
||||||
|
process.stdout.write(JSON.stringify(flat(data), null, 2))
|
||||||
|
}
|
||||||
|
|
||||||
|
function usage (code) {
|
||||||
|
console.log(`
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
flat foo.json
|
||||||
|
cat foo.json | flat
|
||||||
|
`)
|
||||||
|
|
||||||
|
process.exit(code || 0)
|
||||||
|
}
|
||||||
1
node_modules/.bin/handlebars
generated
vendored
1
node_modules/.bin/handlebars
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../handlebars/bin/handlebars
|
|
||||||
176
node_modules/.bin/handlebars
generated
vendored
Executable file
176
node_modules/.bin/handlebars
generated
vendored
Executable file
|
|
@ -0,0 +1,176 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var argv = parseArgs({
|
||||||
|
'f': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Output File',
|
||||||
|
'alias': 'output'
|
||||||
|
},
|
||||||
|
'map': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Source Map File'
|
||||||
|
},
|
||||||
|
'a': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Exports amd style (require.js)',
|
||||||
|
'alias': 'amd'
|
||||||
|
},
|
||||||
|
'c': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Exports CommonJS style, path to Handlebars module',
|
||||||
|
'alias': 'commonjs',
|
||||||
|
'default': null
|
||||||
|
},
|
||||||
|
'h': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Path to handlebar.js (only valid for amd-style)',
|
||||||
|
'alias': 'handlebarPath',
|
||||||
|
'default': ''
|
||||||
|
},
|
||||||
|
'k': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Known helpers',
|
||||||
|
'alias': 'known'
|
||||||
|
},
|
||||||
|
'o': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Known helpers only',
|
||||||
|
'alias': 'knownOnly'
|
||||||
|
},
|
||||||
|
'm': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Minimize output',
|
||||||
|
'alias': 'min'
|
||||||
|
},
|
||||||
|
'n': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Template namespace',
|
||||||
|
'alias': 'namespace',
|
||||||
|
'default': 'Handlebars.templates'
|
||||||
|
},
|
||||||
|
's': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Output template function only.',
|
||||||
|
'alias': 'simple'
|
||||||
|
},
|
||||||
|
'N': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Name of passed string templates. Optional if running in a simple mode. Required when operating on multiple templates.',
|
||||||
|
'alias': 'name'
|
||||||
|
},
|
||||||
|
'i': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Generates a template from the passed CLI argument.\n"-" is treated as a special value and causes stdin to be read for the template value.',
|
||||||
|
'alias': 'string'
|
||||||
|
},
|
||||||
|
'r': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Template root. Base value that will be stripped from template names.',
|
||||||
|
'alias': 'root'
|
||||||
|
},
|
||||||
|
'p': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Compiling a partial template',
|
||||||
|
'alias': 'partial'
|
||||||
|
},
|
||||||
|
'd': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Include data when compiling',
|
||||||
|
'alias': 'data'
|
||||||
|
},
|
||||||
|
'e': {
|
||||||
|
'type': 'string',
|
||||||
|
'description': 'Template extension.',
|
||||||
|
'alias': 'extension',
|
||||||
|
'default': 'handlebars'
|
||||||
|
},
|
||||||
|
'b': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Removes the BOM (Byte Order Mark) from the beginning of the templates.',
|
||||||
|
'alias': 'bom'
|
||||||
|
},
|
||||||
|
'v': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Prints the current compiler version',
|
||||||
|
'alias': 'version'
|
||||||
|
},
|
||||||
|
'help': {
|
||||||
|
'type': 'boolean',
|
||||||
|
'description': 'Outputs this message'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
argv.files = argv._;
|
||||||
|
delete argv._;
|
||||||
|
|
||||||
|
var Precompiler = require('../dist/cjs/precompiler');
|
||||||
|
Precompiler.loadTemplates(argv, function(err, opts) {
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.help || (!opts.templates.length && !opts.version)) {
|
||||||
|
printUsage(argv._spec, 120);
|
||||||
|
} else {
|
||||||
|
Precompiler.cli(opts);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function pad(n) {
|
||||||
|
var str = '';
|
||||||
|
while (str.length < n) {
|
||||||
|
str += ' ';
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseArgs(spec) {
|
||||||
|
var opts = { alias: {}, boolean: [], default: {}, string: [] };
|
||||||
|
|
||||||
|
Object.keys(spec).forEach(function (arg) {
|
||||||
|
var opt = spec[arg];
|
||||||
|
opts[opt.type].push(arg);
|
||||||
|
if ('alias' in opt) opts.alias[arg] = opt.alias;
|
||||||
|
if ('default' in opt) opts.default[arg] = opt.default;
|
||||||
|
});
|
||||||
|
|
||||||
|
var argv = require('minimist')(process.argv.slice(2), opts);
|
||||||
|
argv._spec = spec;
|
||||||
|
return argv;
|
||||||
|
}
|
||||||
|
|
||||||
|
function printUsage(spec, wrap) {
|
||||||
|
var wordwrap = require('wordwrap');
|
||||||
|
|
||||||
|
console.log('Precompile handlebar templates.');
|
||||||
|
console.log('Usage: handlebars [template|directory]...');
|
||||||
|
|
||||||
|
var opts = [];
|
||||||
|
var width = 0;
|
||||||
|
Object.keys(spec).forEach(function (arg) {
|
||||||
|
var opt = spec[arg];
|
||||||
|
|
||||||
|
var name = (arg.length === 1 ? '-' : '--') + arg;
|
||||||
|
if ('alias' in opt) name += ', --' + opt.alias;
|
||||||
|
|
||||||
|
var meta = '[' + opt.type + ']';
|
||||||
|
if ('default' in opt) meta += ' [default: ' + JSON.stringify(opt.default) + ']';
|
||||||
|
|
||||||
|
opts.push({ name: name, desc: opt.description, meta: meta });
|
||||||
|
if (name.length > width) width = name.length;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('Options:');
|
||||||
|
opts.forEach(function (opt) {
|
||||||
|
var desc = wordwrap(width + 4, wrap + 1)(opt.desc);
|
||||||
|
|
||||||
|
console.log(' %s%s%s%s%s',
|
||||||
|
opt.name,
|
||||||
|
pad(width - opt.name.length + 2),
|
||||||
|
desc.slice(width + 4),
|
||||||
|
pad(wrap - opt.meta.length - desc.split(/\n/).pop().length),
|
||||||
|
opt.meta
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
1
node_modules/.bin/hardhat
generated
vendored
1
node_modules/.bin/hardhat
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../hardhat/internal/cli/bootstrap.js
|
|
||||||
16
node_modules/.bin/hardhat
generated
vendored
Executable file
16
node_modules/.bin/hardhat
generated
vendored
Executable file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const semver_1 = __importDefault(require("semver"));
|
||||||
|
const chalk_1 = __importDefault(require("chalk"));
|
||||||
|
const constants_1 = require("./constants");
|
||||||
|
if (!semver_1.default.satisfies(process.version, constants_1.SUPPORTED_NODE_VERSIONS.join(" || "))) {
|
||||||
|
console.warn(chalk_1.default.yellow.bold(`WARNING:`), `You are currently using Node.js ${process.version}, which is not supported by Hardhat. This can lead to unexpected behavior. See https://hardhat.org/nodejs-versions`);
|
||||||
|
console.log();
|
||||||
|
console.log();
|
||||||
|
}
|
||||||
|
require("./cli");
|
||||||
|
//# sourceMappingURL=bootstrap.js.map
|
||||||
1
node_modules/.bin/he
generated
vendored
1
node_modules/.bin/he
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../he/bin/he
|
|
||||||
148
node_modules/.bin/he
generated
vendored
Executable file
148
node_modules/.bin/he
generated
vendored
Executable file
|
|
@ -0,0 +1,148 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
var fs = require('fs');
|
||||||
|
var he = require('../he.js');
|
||||||
|
var strings = process.argv.splice(2);
|
||||||
|
var stdin = process.stdin;
|
||||||
|
var data;
|
||||||
|
var timeout;
|
||||||
|
var action;
|
||||||
|
var options = {};
|
||||||
|
var log = console.log;
|
||||||
|
|
||||||
|
var main = function() {
|
||||||
|
var option = strings[0];
|
||||||
|
var count = 0;
|
||||||
|
|
||||||
|
if (/^(?:-h|--help|undefined)$/.test(option)) {
|
||||||
|
log(
|
||||||
|
'he v%s - https://mths.be/he',
|
||||||
|
he.version
|
||||||
|
);
|
||||||
|
log([
|
||||||
|
'\nUsage:\n',
|
||||||
|
'\the [--escape] string',
|
||||||
|
'\the [--encode] [--use-named-refs] [--everything] [--allow-unsafe] [--decimal] string',
|
||||||
|
'\the [--decode] [--attribute] [--strict] string',
|
||||||
|
'\the [-v | --version]',
|
||||||
|
'\the [-h | --help]',
|
||||||
|
'\nExamples:\n',
|
||||||
|
'\the --escape \\<img\\ src\\=\\\'x\\\'\\ onerror\\=\\"prompt\\(1\\)\\"\\>',
|
||||||
|
'\techo \'© 𝌆\' | he --decode'
|
||||||
|
].join('\n'));
|
||||||
|
return process.exit(option ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (/^(?:-v|--version)$/.test(option)) {
|
||||||
|
log('v%s', he.version);
|
||||||
|
return process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
strings.forEach(function(string) {
|
||||||
|
// Process options
|
||||||
|
if (string == '--escape') {
|
||||||
|
action = 'escape';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (string == '--encode') {
|
||||||
|
action = 'encode';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (string == '--use-named-refs') {
|
||||||
|
action = 'encode';
|
||||||
|
options.useNamedReferences = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (string == '--everything') {
|
||||||
|
action = 'encode';
|
||||||
|
options.encodeEverything = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (string == '--allow-unsafe') {
|
||||||
|
action = 'encode';
|
||||||
|
options.allowUnsafeSymbols = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (string == '--decimal') {
|
||||||
|
action = 'encode';
|
||||||
|
options.decimal = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (string == '--decode') {
|
||||||
|
action = 'decode';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (string == '--attribute') {
|
||||||
|
action = 'decode';
|
||||||
|
options.isAttributeValue = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (string == '--strict') {
|
||||||
|
action = 'decode';
|
||||||
|
options.strict = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Process string(s)
|
||||||
|
var result;
|
||||||
|
if (!action) {
|
||||||
|
log('Error: he requires at least one option and a string argument.');
|
||||||
|
log('Try `he --help` for more information.');
|
||||||
|
return process.exit(1);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
result = he[action](string, options);
|
||||||
|
log(result);
|
||||||
|
count++;
|
||||||
|
} catch(error) {
|
||||||
|
log(error.message + '\n');
|
||||||
|
log('Error: failed to %s.', action);
|
||||||
|
log('If you think this is a bug in he, please report it:');
|
||||||
|
log('https://github.com/mathiasbynens/he/issues/new');
|
||||||
|
log(
|
||||||
|
'\nStack trace using he@%s:\n',
|
||||||
|
he.version
|
||||||
|
);
|
||||||
|
log(error.stack);
|
||||||
|
return process.exit(1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!count) {
|
||||||
|
log('Error: he requires a string argument.');
|
||||||
|
log('Try `he --help` for more information.');
|
||||||
|
return process.exit(1);
|
||||||
|
}
|
||||||
|
// Return with exit status 0 outside of the `forEach` loop, in case
|
||||||
|
// multiple strings were passed in.
|
||||||
|
return process.exit(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (stdin.isTTY) {
|
||||||
|
// handle shell arguments
|
||||||
|
main();
|
||||||
|
} else {
|
||||||
|
// Either the script is called from within a non-TTY context, or `stdin`
|
||||||
|
// content is being piped in.
|
||||||
|
if (!process.stdout.isTTY) {
|
||||||
|
// The script was called from a non-TTY context. This is a rather uncommon
|
||||||
|
// use case we don’t actively support. However, we don’t want the script
|
||||||
|
// to wait forever in such cases, so…
|
||||||
|
timeout = setTimeout(function() {
|
||||||
|
// …if no piped data arrived after a whole minute, handle shell
|
||||||
|
// arguments instead.
|
||||||
|
main();
|
||||||
|
}, 60000);
|
||||||
|
}
|
||||||
|
data = '';
|
||||||
|
stdin.on('data', function(chunk) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
data += chunk;
|
||||||
|
});
|
||||||
|
stdin.on('end', function() {
|
||||||
|
strings.push(data.trim());
|
||||||
|
main();
|
||||||
|
});
|
||||||
|
stdin.resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
}());
|
||||||
1
node_modules/.bin/istanbul
generated
vendored
1
node_modules/.bin/istanbul
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../sc-istanbul/lib/cli.js
|
|
||||||
99
node_modules/.bin/istanbul
generated
vendored
Executable file
99
node_modules/.bin/istanbul
generated
vendored
Executable file
|
|
@ -0,0 +1,99 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (c) 2012, Yahoo! Inc. All rights reserved.
|
||||||
|
Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
var async = require('async'),
|
||||||
|
Command = require('./command'),
|
||||||
|
inputError = require('./util/input-error'),
|
||||||
|
exitProcess = process.exit; //hold a reference to original process.exit so that we are not affected even when a test changes it
|
||||||
|
|
||||||
|
require('./register-plugins');
|
||||||
|
|
||||||
|
function findCommandPosition(args) {
|
||||||
|
var i;
|
||||||
|
|
||||||
|
for (i = 0; i < args.length; i += 1) {
|
||||||
|
if (args[i].charAt(0) !== '-') {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function exit(ex, code) {
|
||||||
|
// flush output for Node.js Windows pipe bug
|
||||||
|
// https://github.com/joyent/node/issues/6247 is just one bug example
|
||||||
|
// https://github.com/visionmedia/mocha/issues/333 has a good discussion
|
||||||
|
var streams = [process.stdout, process.stderr];
|
||||||
|
async.forEach(streams, function (stream, done) {
|
||||||
|
// submit a write request and wait until it's written
|
||||||
|
stream.write('', done);
|
||||||
|
}, function () {
|
||||||
|
if (ex) {
|
||||||
|
if (typeof ex === 'string') {
|
||||||
|
console.error(ex);
|
||||||
|
exitProcess(1);
|
||||||
|
} else {
|
||||||
|
throw ex; // turn it into an uncaught exception
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
exitProcess(code);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function errHandler (ex) {
|
||||||
|
if (!ex) { return; }
|
||||||
|
if (!ex.inputError) {
|
||||||
|
// exit with exception stack trace
|
||||||
|
exit(ex);
|
||||||
|
} else {
|
||||||
|
//don't print nasty traces but still exit(1)
|
||||||
|
console.error(ex.message);
|
||||||
|
console.error('Try "istanbul help" for usage');
|
||||||
|
exit(null, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function runCommand(args, callback) {
|
||||||
|
var pos = findCommandPosition(args),
|
||||||
|
command,
|
||||||
|
commandArgs,
|
||||||
|
commandObject;
|
||||||
|
|
||||||
|
if (pos < 0) {
|
||||||
|
return callback(inputError.create('Need a command to run'));
|
||||||
|
}
|
||||||
|
|
||||||
|
commandArgs = args.slice(0, pos);
|
||||||
|
command = args[pos];
|
||||||
|
commandArgs.push.apply(commandArgs, args.slice(pos + 1));
|
||||||
|
|
||||||
|
try {
|
||||||
|
commandObject = Command.create(command);
|
||||||
|
} catch (ex) {
|
||||||
|
errHandler(inputError.create(ex.message));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
commandObject.run(commandArgs, errHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
function runToCompletion(args) {
|
||||||
|
runCommand(args, errHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* istanbul ignore if: untestable */
|
||||||
|
if (require.main === module) {
|
||||||
|
var args = Array.prototype.slice.call(process.argv, 2);
|
||||||
|
runToCompletion(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
runToCompletion: runToCompletion
|
||||||
|
};
|
||||||
|
|
||||||
1
node_modules/.bin/js-yaml
generated
vendored
1
node_modules/.bin/js-yaml
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../js-yaml/bin/js-yaml.js
|
|
||||||
126
node_modules/.bin/js-yaml
generated
vendored
Executable file
126
node_modules/.bin/js-yaml
generated
vendored
Executable file
|
|
@ -0,0 +1,126 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*eslint-disable no-console*/
|
||||||
|
|
||||||
|
|
||||||
|
var fs = require('fs');
|
||||||
|
var argparse = require('argparse');
|
||||||
|
var yaml = require('..');
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
var cli = new argparse.ArgumentParser({
|
||||||
|
prog: 'js-yaml',
|
||||||
|
add_help: true
|
||||||
|
});
|
||||||
|
|
||||||
|
cli.add_argument('-v', '--version', {
|
||||||
|
action: 'version',
|
||||||
|
version: require('../package.json').version
|
||||||
|
});
|
||||||
|
|
||||||
|
cli.add_argument('-c', '--compact', {
|
||||||
|
help: 'Display errors in compact mode',
|
||||||
|
action: 'store_true'
|
||||||
|
});
|
||||||
|
|
||||||
|
// deprecated (not needed after we removed output colors)
|
||||||
|
// option suppressed, but not completely removed for compatibility
|
||||||
|
cli.add_argument('-j', '--to-json', {
|
||||||
|
help: argparse.SUPPRESS,
|
||||||
|
dest: 'json',
|
||||||
|
action: 'store_true'
|
||||||
|
});
|
||||||
|
|
||||||
|
cli.add_argument('-t', '--trace', {
|
||||||
|
help: 'Show stack trace on error',
|
||||||
|
action: 'store_true'
|
||||||
|
});
|
||||||
|
|
||||||
|
cli.add_argument('file', {
|
||||||
|
help: 'File to read, utf-8 encoded without BOM',
|
||||||
|
nargs: '?',
|
||||||
|
default: '-'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
var options = cli.parse_args();
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
function readFile(filename, encoding, callback) {
|
||||||
|
if (options.file === '-') {
|
||||||
|
// read from stdin
|
||||||
|
|
||||||
|
var chunks = [];
|
||||||
|
|
||||||
|
process.stdin.on('data', function (chunk) {
|
||||||
|
chunks.push(chunk);
|
||||||
|
});
|
||||||
|
|
||||||
|
process.stdin.on('end', function () {
|
||||||
|
return callback(null, Buffer.concat(chunks).toString(encoding));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
fs.readFile(filename, encoding, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readFile(options.file, 'utf8', function (error, input) {
|
||||||
|
var output, isYaml;
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
if (error.code === 'ENOENT') {
|
||||||
|
console.error('File not found: ' + options.file);
|
||||||
|
process.exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.error(
|
||||||
|
options.trace && error.stack ||
|
||||||
|
error.message ||
|
||||||
|
String(error));
|
||||||
|
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
output = JSON.parse(input);
|
||||||
|
isYaml = false;
|
||||||
|
} catch (err) {
|
||||||
|
if (err instanceof SyntaxError) {
|
||||||
|
try {
|
||||||
|
output = [];
|
||||||
|
yaml.loadAll(input, function (doc) { output.push(doc); }, {});
|
||||||
|
isYaml = true;
|
||||||
|
|
||||||
|
if (output.length === 0) output = null;
|
||||||
|
else if (output.length === 1) output = output[0];
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
if (options.trace && err.stack) console.error(e.stack);
|
||||||
|
else console.error(e.toString(options.compact));
|
||||||
|
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error(
|
||||||
|
options.trace && err.stack ||
|
||||||
|
err.message ||
|
||||||
|
String(err));
|
||||||
|
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isYaml) console.log(JSON.stringify(output, null, ' '));
|
||||||
|
else console.log(yaml.dump(output));
|
||||||
|
});
|
||||||
1
node_modules/.bin/mkdirp
generated
vendored
1
node_modules/.bin/mkdirp
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../mkdirp/bin/cmd.js
|
|
||||||
33
node_modules/.bin/mkdirp
generated
vendored
Executable file
33
node_modules/.bin/mkdirp
generated
vendored
Executable file
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var mkdirp = require('../');
|
||||||
|
var minimist = require('minimist');
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
var argv = minimist(process.argv.slice(2), {
|
||||||
|
alias: { m: 'mode', h: 'help' },
|
||||||
|
string: [ 'mode' ]
|
||||||
|
});
|
||||||
|
if (argv.help) {
|
||||||
|
fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var paths = argv._.slice();
|
||||||
|
var mode = argv.mode ? parseInt(argv.mode, 8) : undefined;
|
||||||
|
|
||||||
|
(function next () {
|
||||||
|
if (paths.length === 0) return;
|
||||||
|
var p = paths.shift();
|
||||||
|
|
||||||
|
if (mode === undefined) mkdirp(p, cb)
|
||||||
|
else mkdirp(p, mode, cb)
|
||||||
|
|
||||||
|
function cb (err) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
else next();
|
||||||
|
}
|
||||||
|
})();
|
||||||
1
node_modules/.bin/mocha
generated
vendored
1
node_modules/.bin/mocha
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../mocha/bin/mocha.js
|
|
||||||
142
node_modules/.bin/mocha
generated
vendored
Executable file
142
node_modules/.bin/mocha
generated
vendored
Executable file
|
|
@ -0,0 +1,142 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This wrapper executable checks for known node flags and appends them when found,
|
||||||
|
* before invoking the "real" executable (`lib/cli/cli.js`)
|
||||||
|
*
|
||||||
|
* @module bin/mocha
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
const {loadOptions} = require('../lib/cli/options');
|
||||||
|
const {
|
||||||
|
unparseNodeFlags,
|
||||||
|
isNodeFlag,
|
||||||
|
impliesNoTimeouts
|
||||||
|
} = require('../lib/cli/node-flags');
|
||||||
|
const unparse = require('yargs-unparser');
|
||||||
|
const debug = require('debug')('mocha:cli:mocha');
|
||||||
|
const {aliases} = require('../lib/cli/run-option-metadata');
|
||||||
|
|
||||||
|
const mochaArgs = {};
|
||||||
|
const nodeArgs = {};
|
||||||
|
let hasInspect = false;
|
||||||
|
|
||||||
|
const opts = loadOptions(process.argv.slice(2));
|
||||||
|
debug('loaded opts', opts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given option/command `value`, disable timeouts if applicable
|
||||||
|
* @param {string} [value] - Value to check
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
const disableTimeouts = value => {
|
||||||
|
if (impliesNoTimeouts(value)) {
|
||||||
|
debug('option %s disabled timeouts', value);
|
||||||
|
mochaArgs.timeout = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If `value` begins with `v8-` and is not explicitly `v8-options`, remove prefix
|
||||||
|
* @param {string} [value] - Value to check
|
||||||
|
* @returns {string} `value` with prefix (maybe) removed
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
const trimV8Option = value =>
|
||||||
|
value !== 'v8-options' && /^v8-/.test(value) ? value.slice(3) : value;
|
||||||
|
|
||||||
|
// sort options into "node" and "mocha" buckets
|
||||||
|
Object.keys(opts).forEach(opt => {
|
||||||
|
if (isNodeFlag(opt)) {
|
||||||
|
nodeArgs[trimV8Option(opt)] = opts[opt];
|
||||||
|
} else {
|
||||||
|
mochaArgs[opt] = opts[opt];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// disable 'timeout' for debugFlags
|
||||||
|
Object.keys(nodeArgs).forEach(opt => disableTimeouts(opt));
|
||||||
|
mochaArgs['node-option'] &&
|
||||||
|
mochaArgs['node-option'].forEach(opt => disableTimeouts(opt));
|
||||||
|
|
||||||
|
// Native debugger handling
|
||||||
|
// see https://nodejs.org/api/debugger.html#debugger_debugger
|
||||||
|
// look for 'inspect' that would launch this debugger,
|
||||||
|
// remove it from Mocha's opts and prepend it to Node's opts.
|
||||||
|
// A deprecation warning will be printed by node, if applicable.
|
||||||
|
// (mochaArgs._ are "positional" arguments, not prefixed with - or --)
|
||||||
|
if (mochaArgs._) {
|
||||||
|
const i = mochaArgs._.findIndex(val => val === 'inspect');
|
||||||
|
if (i > -1) {
|
||||||
|
mochaArgs._.splice(i, 1);
|
||||||
|
disableTimeouts('inspect');
|
||||||
|
hasInspect = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mochaArgs['node-option'] || Object.keys(nodeArgs).length || hasInspect) {
|
||||||
|
const {spawn} = require('child_process');
|
||||||
|
const mochaPath = require.resolve('../lib/cli/cli.js');
|
||||||
|
|
||||||
|
const nodeArgv =
|
||||||
|
(mochaArgs['node-option'] && mochaArgs['node-option'].map(v => '--' + v)) ||
|
||||||
|
unparseNodeFlags(nodeArgs);
|
||||||
|
|
||||||
|
if (hasInspect) nodeArgv.unshift('inspect');
|
||||||
|
delete mochaArgs['node-option'];
|
||||||
|
|
||||||
|
debug('final node argv', nodeArgv);
|
||||||
|
|
||||||
|
const args = [].concat(
|
||||||
|
nodeArgv,
|
||||||
|
mochaPath,
|
||||||
|
unparse(mochaArgs, {alias: aliases})
|
||||||
|
);
|
||||||
|
|
||||||
|
debug(
|
||||||
|
'forking child process via command: %s %s',
|
||||||
|
process.execPath,
|
||||||
|
args.join(' ')
|
||||||
|
);
|
||||||
|
|
||||||
|
const proc = spawn(process.execPath, args, {
|
||||||
|
stdio: 'inherit'
|
||||||
|
});
|
||||||
|
|
||||||
|
proc.on('exit', (code, signal) => {
|
||||||
|
process.on('exit', () => {
|
||||||
|
if (signal) {
|
||||||
|
process.kill(process.pid, signal);
|
||||||
|
} else {
|
||||||
|
process.exit(code);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// terminate children.
|
||||||
|
process.on('SIGINT', () => {
|
||||||
|
// XXX: a previous comment said this would abort the runner, but I can't see that it does
|
||||||
|
// anything with the default runner.
|
||||||
|
debug('main process caught SIGINT');
|
||||||
|
proc.kill('SIGINT');
|
||||||
|
// if running in parallel mode, we will have a proper SIGINT handler, so the below won't
|
||||||
|
// be needed.
|
||||||
|
if (!args.parallel || args.jobs < 2) {
|
||||||
|
// win32 does not support SIGTERM, so use next best thing.
|
||||||
|
if (require('os').platform() === 'win32') {
|
||||||
|
proc.kill('SIGKILL');
|
||||||
|
} else {
|
||||||
|
// using SIGKILL won't cleanly close the output streams, which can result
|
||||||
|
// in cut-off text or a befouled terminal.
|
||||||
|
debug('sending SIGTERM to child process');
|
||||||
|
proc.kill('SIGTERM');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
debug('running Mocha in-process');
|
||||||
|
require('../lib/cli/cli').main([], mochaArgs);
|
||||||
|
}
|
||||||
1
node_modules/.bin/ndjson
generated
vendored
1
node_modules/.bin/ndjson
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ndjson/cli.js
|
|
||||||
28
node_modules/.bin/ndjson
generated
vendored
Executable file
28
node_modules/.bin/ndjson
generated
vendored
Executable file
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const fs = require('fs')
|
||||||
|
const { pipeline } = require('readable-stream')
|
||||||
|
const minimist = require('minimist')
|
||||||
|
const ndjson = require('./index.js')
|
||||||
|
|
||||||
|
const args = minimist(process.argv.slice(2))
|
||||||
|
const first = args._[0]
|
||||||
|
|
||||||
|
if (!first) {
|
||||||
|
console.error('Usage: ndjson [input] <options>')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
const inputStream = first === '-'
|
||||||
|
? process.stdin
|
||||||
|
: fs.createReadStream(first)
|
||||||
|
|
||||||
|
pipeline(
|
||||||
|
inputStream,
|
||||||
|
ndjson.parse(args),
|
||||||
|
ndjson.stringify(args),
|
||||||
|
process.stdout,
|
||||||
|
(err) => {
|
||||||
|
err ? process.exit(1) : process.exit(0)
|
||||||
|
}
|
||||||
|
)
|
||||||
1
node_modules/.bin/node-gyp-build
generated
vendored
1
node_modules/.bin/node-gyp-build
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../node-gyp-build/bin.js
|
|
||||||
82
node_modules/.bin/node-gyp-build
generated
vendored
Executable file
82
node_modules/.bin/node-gyp-build
generated
vendored
Executable file
|
|
@ -0,0 +1,82 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var proc = require('child_process')
|
||||||
|
var os = require('os')
|
||||||
|
var path = require('path')
|
||||||
|
|
||||||
|
if (!buildFromSource()) {
|
||||||
|
proc.exec('node-gyp-build-test', function (err, stdout, stderr) {
|
||||||
|
if (err) {
|
||||||
|
if (verbose()) console.error(stderr)
|
||||||
|
preinstall()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
preinstall()
|
||||||
|
}
|
||||||
|
|
||||||
|
function build () {
|
||||||
|
var win32 = os.platform() === 'win32'
|
||||||
|
var args = [win32 ? 'node-gyp.cmd' : 'node-gyp', 'rebuild']
|
||||||
|
|
||||||
|
try {
|
||||||
|
var pkg = require('node-gyp/package.json')
|
||||||
|
args = [
|
||||||
|
process.execPath,
|
||||||
|
path.join(require.resolve('node-gyp/package.json'), '..', typeof pkg.bin === 'string' ? pkg.bin : pkg.bin['node-gyp']),
|
||||||
|
'rebuild'
|
||||||
|
]
|
||||||
|
} catch (_) {}
|
||||||
|
|
||||||
|
proc.spawn(args[0], args.slice(1), { stdio: 'inherit', shell: win32, windowsHide: true }).on('exit', function (code) {
|
||||||
|
if (code || !process.argv[3]) process.exit(code)
|
||||||
|
exec(process.argv[3]).on('exit', function (code) {
|
||||||
|
process.exit(code)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function preinstall () {
|
||||||
|
if (!process.argv[2]) return build()
|
||||||
|
exec(process.argv[2]).on('exit', function (code) {
|
||||||
|
if (code) process.exit(code)
|
||||||
|
build()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function exec (cmd) {
|
||||||
|
if (process.platform !== 'win32') {
|
||||||
|
var shell = os.platform() === 'android' ? 'sh' : true
|
||||||
|
return proc.spawn(cmd, [], {
|
||||||
|
shell,
|
||||||
|
stdio: 'inherit'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return proc.spawn(cmd, [], {
|
||||||
|
windowsVerbatimArguments: true,
|
||||||
|
stdio: 'inherit',
|
||||||
|
shell: true,
|
||||||
|
windowsHide: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildFromSource () {
|
||||||
|
return hasFlag('--build-from-source') || process.env.npm_config_build_from_source === 'true'
|
||||||
|
}
|
||||||
|
|
||||||
|
function verbose () {
|
||||||
|
return hasFlag('--verbose') || process.env.npm_config_loglevel === 'verbose'
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO (next major): remove in favor of env.npm_config_* which works since npm
|
||||||
|
// 0.1.8 while npm_config_argv will stop working in npm 7. See npm/rfcs#90
|
||||||
|
function hasFlag (flag) {
|
||||||
|
if (!process.env.npm_config_argv) return false
|
||||||
|
|
||||||
|
try {
|
||||||
|
return JSON.parse(process.env.npm_config_argv).original.indexOf(flag) !== -1
|
||||||
|
} catch (_) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
1
node_modules/.bin/node-gyp-build-optional
generated
vendored
1
node_modules/.bin/node-gyp-build-optional
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../node-gyp-build/optional.js
|
|
||||||
7
node_modules/.bin/node-gyp-build-optional
generated
vendored
Executable file
7
node_modules/.bin/node-gyp-build-optional
generated
vendored
Executable file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
/*
|
||||||
|
I am only useful as an install script to make node-gyp not compile for purely optional native deps
|
||||||
|
*/
|
||||||
|
|
||||||
|
process.exit(0)
|
||||||
1
node_modules/.bin/node-gyp-build-test
generated
vendored
1
node_modules/.bin/node-gyp-build-test
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../node-gyp-build/build-test.js
|
|
||||||
19
node_modules/.bin/node-gyp-build-test
generated
vendored
Executable file
19
node_modules/.bin/node-gyp-build-test
generated
vendored
Executable file
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
process.env.NODE_ENV = 'test'
|
||||||
|
|
||||||
|
var path = require('path')
|
||||||
|
var test = null
|
||||||
|
|
||||||
|
try {
|
||||||
|
var pkg = require(path.join(process.cwd(), 'package.json'))
|
||||||
|
if (pkg.name && process.env[pkg.name.toUpperCase().replace(/-/g, '_')]) {
|
||||||
|
process.exit(0)
|
||||||
|
}
|
||||||
|
test = pkg.prebuild.test
|
||||||
|
} catch (err) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
if (test) require(path.join(process.cwd(), test))
|
||||||
|
else require('./')()
|
||||||
1
node_modules/.bin/nopt
generated
vendored
1
node_modules/.bin/nopt
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../nopt/bin/nopt.js
|
|
||||||
54
node_modules/.bin/nopt
generated
vendored
Executable file
54
node_modules/.bin/nopt
generated
vendored
Executable file
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
var nopt = require("../lib/nopt")
|
||||||
|
, path = require("path")
|
||||||
|
, types = { num: Number
|
||||||
|
, bool: Boolean
|
||||||
|
, help: Boolean
|
||||||
|
, list: Array
|
||||||
|
, "num-list": [Number, Array]
|
||||||
|
, "str-list": [String, Array]
|
||||||
|
, "bool-list": [Boolean, Array]
|
||||||
|
, str: String
|
||||||
|
, clear: Boolean
|
||||||
|
, config: Boolean
|
||||||
|
, length: Number
|
||||||
|
, file: path
|
||||||
|
}
|
||||||
|
, shorthands = { s: [ "--str", "astring" ]
|
||||||
|
, b: [ "--bool" ]
|
||||||
|
, nb: [ "--no-bool" ]
|
||||||
|
, tft: [ "--bool-list", "--no-bool-list", "--bool-list", "true" ]
|
||||||
|
, "?": ["--help"]
|
||||||
|
, h: ["--help"]
|
||||||
|
, H: ["--help"]
|
||||||
|
, n: [ "--num", "125" ]
|
||||||
|
, c: ["--config"]
|
||||||
|
, l: ["--length"]
|
||||||
|
, f: ["--file"]
|
||||||
|
}
|
||||||
|
, parsed = nopt( types
|
||||||
|
, shorthands
|
||||||
|
, process.argv
|
||||||
|
, 2 )
|
||||||
|
|
||||||
|
console.log("parsed", parsed)
|
||||||
|
|
||||||
|
if (parsed.help) {
|
||||||
|
console.log("")
|
||||||
|
console.log("nopt cli tester")
|
||||||
|
console.log("")
|
||||||
|
console.log("types")
|
||||||
|
console.log(Object.keys(types).map(function M (t) {
|
||||||
|
var type = types[t]
|
||||||
|
if (Array.isArray(type)) {
|
||||||
|
return [t, type.map(function (type) { return type.name })]
|
||||||
|
}
|
||||||
|
return [t, type && type.name]
|
||||||
|
}).reduce(function (s, i) {
|
||||||
|
s[i[0]] = i[1]
|
||||||
|
return s
|
||||||
|
}, {}))
|
||||||
|
console.log("")
|
||||||
|
console.log("shorthands")
|
||||||
|
console.log(shorthands)
|
||||||
|
}
|
||||||
1
node_modules/.bin/prettier
generated
vendored
1
node_modules/.bin/prettier
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../prettier/bin-prettier.js
|
|
||||||
64
node_modules/.bin/prettier
generated
vendored
Executable file
64
node_modules/.bin/prettier
generated
vendored
Executable file
|
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __commonJS = function(cb, mod) {
|
||||||
|
return function __require() {
|
||||||
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// node_modules/semver-compare/index.js
|
||||||
|
var require_semver_compare = __commonJS({
|
||||||
|
"node_modules/semver-compare/index.js": function(exports2, module2) {
|
||||||
|
module2.exports = function cmp(a, b) {
|
||||||
|
var pa = a.split(".");
|
||||||
|
var pb = b.split(".");
|
||||||
|
for (var i = 0; i < 3; i++) {
|
||||||
|
var na = Number(pa[i]);
|
||||||
|
var nb = Number(pb[i]);
|
||||||
|
if (na > nb)
|
||||||
|
return 1;
|
||||||
|
if (nb > na)
|
||||||
|
return -1;
|
||||||
|
if (!isNaN(na) && isNaN(nb))
|
||||||
|
return 1;
|
||||||
|
if (isNaN(na) && !isNaN(nb))
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// node_modules/please-upgrade-node/index.js
|
||||||
|
var require_please_upgrade_node = __commonJS({
|
||||||
|
"node_modules/please-upgrade-node/index.js": function(exports2, module2) {
|
||||||
|
var semverCompare = require_semver_compare();
|
||||||
|
module2.exports = function pleaseUpgradeNode2(pkg, opts) {
|
||||||
|
var opts = opts || {};
|
||||||
|
var requiredVersion = pkg.engines.node.replace(">=", "");
|
||||||
|
var currentVersion = process.version.replace("v", "");
|
||||||
|
if (semverCompare(currentVersion, requiredVersion) === -1) {
|
||||||
|
if (opts.message) {
|
||||||
|
console.error(opts.message(requiredVersion));
|
||||||
|
} else {
|
||||||
|
console.error(
|
||||||
|
pkg.name + " requires at least version " + requiredVersion + " of Node, please upgrade"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (opts.hasOwnProperty("exitCode")) {
|
||||||
|
process.exit(opts.exitCode);
|
||||||
|
} else {
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// bin/prettier.js
|
||||||
|
var pleaseUpgradeNode = require_please_upgrade_node();
|
||||||
|
var packageJson = require("./package.json");
|
||||||
|
pleaseUpgradeNode(packageJson);
|
||||||
|
var cli = require("./cli.js");
|
||||||
|
module.exports = cli.run(process.argv.slice(2));
|
||||||
1
node_modules/.bin/rimraf
generated
vendored
1
node_modules/.bin/rimraf
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../rimraf/bin.js
|
|
||||||
50
node_modules/.bin/rimraf
generated
vendored
Executable file
50
node_modules/.bin/rimraf
generated
vendored
Executable file
|
|
@ -0,0 +1,50 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var rimraf = require('./')
|
||||||
|
|
||||||
|
var help = false
|
||||||
|
var dashdash = false
|
||||||
|
var noglob = false
|
||||||
|
var args = process.argv.slice(2).filter(function(arg) {
|
||||||
|
if (dashdash)
|
||||||
|
return !!arg
|
||||||
|
else if (arg === '--')
|
||||||
|
dashdash = true
|
||||||
|
else if (arg === '--no-glob' || arg === '-G')
|
||||||
|
noglob = true
|
||||||
|
else if (arg === '--glob' || arg === '-g')
|
||||||
|
noglob = false
|
||||||
|
else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/))
|
||||||
|
help = true
|
||||||
|
else
|
||||||
|
return !!arg
|
||||||
|
})
|
||||||
|
|
||||||
|
if (help || args.length === 0) {
|
||||||
|
// If they didn't ask for help, then this is not a "success"
|
||||||
|
var log = help ? console.log : console.error
|
||||||
|
log('Usage: rimraf <path> [<path> ...]')
|
||||||
|
log('')
|
||||||
|
log(' Deletes all files and folders at "path" recursively.')
|
||||||
|
log('')
|
||||||
|
log('Options:')
|
||||||
|
log('')
|
||||||
|
log(' -h, --help Display this usage info')
|
||||||
|
log(' -G, --no-glob Do not expand glob patterns in arguments')
|
||||||
|
log(' -g, --glob Expand glob patterns in arguments (default)')
|
||||||
|
process.exit(help ? 0 : 1)
|
||||||
|
} else
|
||||||
|
go(0)
|
||||||
|
|
||||||
|
function go (n) {
|
||||||
|
if (n >= args.length)
|
||||||
|
return
|
||||||
|
var options = {}
|
||||||
|
if (noglob)
|
||||||
|
options = { glob: false }
|
||||||
|
rimraf(args[n], options, function (er) {
|
||||||
|
if (er)
|
||||||
|
throw er
|
||||||
|
go(n+1)
|
||||||
|
})
|
||||||
|
}
|
||||||
1
node_modules/.bin/rlp
generated
vendored
1
node_modules/.bin/rlp
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../@ethereumjs/rlp/bin/rlp
|
|
||||||
58
node_modules/.bin/rlp
generated
vendored
Executable file
58
node_modules/.bin/rlp
generated
vendored
Executable file
|
|
@ -0,0 +1,58 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const RLP = require('../dist/index.js')
|
||||||
|
const method = process.argv[2]
|
||||||
|
const strInput = process.argv[3]
|
||||||
|
|
||||||
|
const { bytesToHex } = RLP.utils
|
||||||
|
|
||||||
|
if (typeof strInput !== 'string') {
|
||||||
|
return console.error(`Expected JSON string input, received type: ${typeof strInput}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method === 'encode') {
|
||||||
|
// Parse JSON
|
||||||
|
let json
|
||||||
|
try {
|
||||||
|
json = JSON.parse(strInput)
|
||||||
|
} catch (error) {
|
||||||
|
const errorMsg = error.message ? error.message : error
|
||||||
|
return console.error(`Error could not parse JSON: ${errorMsg}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encode RLP
|
||||||
|
try {
|
||||||
|
const encoded = RLP.encode(json)
|
||||||
|
console.log('0x' + bytesToHex(encoded))
|
||||||
|
} catch (error) {
|
||||||
|
const errorMsg = error.message ? error.message : error
|
||||||
|
console.error(`Error encoding RLP: ${errorMsg}`)
|
||||||
|
}
|
||||||
|
} else if (method === 'decode') {
|
||||||
|
// Decode
|
||||||
|
try {
|
||||||
|
const decoded = RLP.decode(strInput)
|
||||||
|
const json = JSON.stringify(arrToJSON(decoded))
|
||||||
|
console.log(json)
|
||||||
|
} catch (error) {
|
||||||
|
const errorMsg = error.message ? error.message : error
|
||||||
|
console.error(`Error decoding RLP: ${errorMsg}`)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error('Unsupported method')
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uint8Array or Array<Uint8Array> to JSON
|
||||||
|
*/
|
||||||
|
function arrToJSON(ba) {
|
||||||
|
if (ba instanceof Uint8Array) {
|
||||||
|
return bytesToHex(ba)
|
||||||
|
} else if (ba instanceof Array) {
|
||||||
|
const arr = []
|
||||||
|
for (let i = 0; i < ba.length; i++) {
|
||||||
|
arr.push(arrToJSON(ba[i]))
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
}
|
||||||
1
node_modules/.bin/semver
generated
vendored
1
node_modules/.bin/semver
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../semver/bin/semver.js
|
|
||||||
174
node_modules/.bin/semver
generated
vendored
Executable file
174
node_modules/.bin/semver
generated
vendored
Executable file
|
|
@ -0,0 +1,174 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
// Standalone semver comparison program.
|
||||||
|
// Exits successfully and prints matching version(s) if
|
||||||
|
// any supplied version is valid and passes all tests.
|
||||||
|
|
||||||
|
var argv = process.argv.slice(2)
|
||||||
|
|
||||||
|
var versions = []
|
||||||
|
|
||||||
|
var range = []
|
||||||
|
|
||||||
|
var inc = null
|
||||||
|
|
||||||
|
var version = require('../package.json').version
|
||||||
|
|
||||||
|
var loose = false
|
||||||
|
|
||||||
|
var includePrerelease = false
|
||||||
|
|
||||||
|
var coerce = false
|
||||||
|
|
||||||
|
var rtl = false
|
||||||
|
|
||||||
|
var identifier
|
||||||
|
|
||||||
|
var semver = require('../semver')
|
||||||
|
|
||||||
|
var reverse = false
|
||||||
|
|
||||||
|
var options = {}
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
function main () {
|
||||||
|
if (!argv.length) return help()
|
||||||
|
while (argv.length) {
|
||||||
|
var a = argv.shift()
|
||||||
|
var indexOfEqualSign = a.indexOf('=')
|
||||||
|
if (indexOfEqualSign !== -1) {
|
||||||
|
a = a.slice(0, indexOfEqualSign)
|
||||||
|
argv.unshift(a.slice(indexOfEqualSign + 1))
|
||||||
|
}
|
||||||
|
switch (a) {
|
||||||
|
case '-rv': case '-rev': case '--rev': case '--reverse':
|
||||||
|
reverse = true
|
||||||
|
break
|
||||||
|
case '-l': case '--loose':
|
||||||
|
loose = true
|
||||||
|
break
|
||||||
|
case '-p': case '--include-prerelease':
|
||||||
|
includePrerelease = true
|
||||||
|
break
|
||||||
|
case '-v': case '--version':
|
||||||
|
versions.push(argv.shift())
|
||||||
|
break
|
||||||
|
case '-i': case '--inc': case '--increment':
|
||||||
|
switch (argv[0]) {
|
||||||
|
case 'major': case 'minor': case 'patch': case 'prerelease':
|
||||||
|
case 'premajor': case 'preminor': case 'prepatch':
|
||||||
|
inc = argv.shift()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
inc = 'patch'
|
||||||
|
break
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case '--preid':
|
||||||
|
identifier = argv.shift()
|
||||||
|
break
|
||||||
|
case '-r': case '--range':
|
||||||
|
range.push(argv.shift())
|
||||||
|
break
|
||||||
|
case '-c': case '--coerce':
|
||||||
|
coerce = true
|
||||||
|
break
|
||||||
|
case '--rtl':
|
||||||
|
rtl = true
|
||||||
|
break
|
||||||
|
case '--ltr':
|
||||||
|
rtl = false
|
||||||
|
break
|
||||||
|
case '-h': case '--help': case '-?':
|
||||||
|
return help()
|
||||||
|
default:
|
||||||
|
versions.push(a)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl }
|
||||||
|
|
||||||
|
versions = versions.map(function (v) {
|
||||||
|
return coerce ? (semver.coerce(v, options) || { version: v }).version : v
|
||||||
|
}).filter(function (v) {
|
||||||
|
return semver.valid(v)
|
||||||
|
})
|
||||||
|
if (!versions.length) return fail()
|
||||||
|
if (inc && (versions.length !== 1 || range.length)) { return failInc() }
|
||||||
|
|
||||||
|
for (var i = 0, l = range.length; i < l; i++) {
|
||||||
|
versions = versions.filter(function (v) {
|
||||||
|
return semver.satisfies(v, range[i], options)
|
||||||
|
})
|
||||||
|
if (!versions.length) return fail()
|
||||||
|
}
|
||||||
|
return success(versions)
|
||||||
|
}
|
||||||
|
|
||||||
|
function failInc () {
|
||||||
|
console.error('--inc can only be used on a single version with no range')
|
||||||
|
fail()
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail () { process.exit(1) }
|
||||||
|
|
||||||
|
function success () {
|
||||||
|
var compare = reverse ? 'rcompare' : 'compare'
|
||||||
|
versions.sort(function (a, b) {
|
||||||
|
return semver[compare](a, b, options)
|
||||||
|
}).map(function (v) {
|
||||||
|
return semver.clean(v, options)
|
||||||
|
}).map(function (v) {
|
||||||
|
return inc ? semver.inc(v, inc, options, identifier) : v
|
||||||
|
}).forEach(function (v, i, _) { console.log(v) })
|
||||||
|
}
|
||||||
|
|
||||||
|
function help () {
|
||||||
|
console.log(['SemVer ' + version,
|
||||||
|
'',
|
||||||
|
'A JavaScript implementation of the https://semver.org/ specification',
|
||||||
|
'Copyright Isaac Z. Schlueter',
|
||||||
|
'',
|
||||||
|
'Usage: semver [options] <version> [<version> [...]]',
|
||||||
|
'Prints valid versions sorted by SemVer precedence',
|
||||||
|
'',
|
||||||
|
'Options:',
|
||||||
|
'-r --range <range>',
|
||||||
|
' Print versions that match the specified range.',
|
||||||
|
'',
|
||||||
|
'-i --increment [<level>]',
|
||||||
|
' Increment a version by the specified level. Level can',
|
||||||
|
' be one of: major, minor, patch, premajor, preminor,',
|
||||||
|
" prepatch, or prerelease. Default level is 'patch'.",
|
||||||
|
' Only one version may be specified.',
|
||||||
|
'',
|
||||||
|
'--preid <identifier>',
|
||||||
|
' Identifier to be used to prefix premajor, preminor,',
|
||||||
|
' prepatch or prerelease version increments.',
|
||||||
|
'',
|
||||||
|
'-l --loose',
|
||||||
|
' Interpret versions and ranges loosely',
|
||||||
|
'',
|
||||||
|
'-p --include-prerelease',
|
||||||
|
' Always include prerelease versions in range matching',
|
||||||
|
'',
|
||||||
|
'-c --coerce',
|
||||||
|
' Coerce a string into SemVer if possible',
|
||||||
|
' (does not imply --loose)',
|
||||||
|
'',
|
||||||
|
'--rtl',
|
||||||
|
' Coerce version strings right to left',
|
||||||
|
'',
|
||||||
|
'--ltr',
|
||||||
|
' Coerce version strings left to right (default)',
|
||||||
|
'',
|
||||||
|
'Program exits successfully if any valid version satisfies',
|
||||||
|
'all supplied ranges, and prints all satisfying versions.',
|
||||||
|
'',
|
||||||
|
'If no satisfying versions are found, then exits failure.',
|
||||||
|
'',
|
||||||
|
'Versions are printed in ascending order, so supplying',
|
||||||
|
'multiple versions to the utility will just sort them.'
|
||||||
|
].join('\n'))
|
||||||
|
}
|
||||||
1
node_modules/.bin/sha.js
generated
vendored
1
node_modules/.bin/sha.js
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../sha.js/bin.js
|
|
||||||
41
node_modules/.bin/sha.js
generated
vendored
Executable file
41
node_modules/.bin/sha.js
generated
vendored
Executable file
|
|
@ -0,0 +1,41 @@
|
||||||
|
#! /usr/bin/env node
|
||||||
|
|
||||||
|
var createHash = require('./browserify')
|
||||||
|
var argv = process.argv.slice(2)
|
||||||
|
|
||||||
|
function pipe (algorithm, s) {
|
||||||
|
var start = Date.now()
|
||||||
|
var hash = createHash(algorithm || 'sha1')
|
||||||
|
|
||||||
|
s.on('data', function (data) {
|
||||||
|
hash.update(data)
|
||||||
|
})
|
||||||
|
|
||||||
|
s.on('end', function () {
|
||||||
|
if (process.env.DEBUG) {
|
||||||
|
return console.log(hash.digest('hex'), Date.now() - start)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(hash.digest('hex'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function usage () {
|
||||||
|
console.error('sha.js [algorithm=sha1] [filename] # hash filename with algorithm')
|
||||||
|
console.error('input | sha.js [algorithm=sha1] # hash stdin with algorithm')
|
||||||
|
console.error('sha.js --help # display this message')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!process.stdin.isTTY) {
|
||||||
|
pipe(argv[0], process.stdin)
|
||||||
|
} else if (argv.length) {
|
||||||
|
if (/--help|-h/.test(argv[0])) {
|
||||||
|
usage()
|
||||||
|
} else {
|
||||||
|
var filename = argv.pop()
|
||||||
|
var algorithm = argv.pop()
|
||||||
|
pipe(algorithm, require('fs').createReadStream(filename))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
usage()
|
||||||
|
}
|
||||||
1
node_modules/.bin/shjs
generated
vendored
1
node_modules/.bin/shjs
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../shelljs/bin/shjs
|
|
||||||
48
node_modules/.bin/shjs
generated
vendored
Executable file
48
node_modules/.bin/shjs
generated
vendored
Executable file
|
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
if (require.main !== module) {
|
||||||
|
throw new Error('Executable-only module should not be required');
|
||||||
|
}
|
||||||
|
|
||||||
|
// we must import global ShellJS methods after the require.main check to prevent the global
|
||||||
|
// namespace from being polluted if the error is caught
|
||||||
|
require('../global');
|
||||||
|
|
||||||
|
function exitWithErrorMessage(msg) {
|
||||||
|
console.log(msg);
|
||||||
|
console.log();
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.argv.length < 3) {
|
||||||
|
exitWithErrorMessage('ShellJS: missing argument (script name)');
|
||||||
|
}
|
||||||
|
|
||||||
|
var args,
|
||||||
|
scriptName = process.argv[2];
|
||||||
|
env['NODE_PATH'] = __dirname + '/../..';
|
||||||
|
|
||||||
|
if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) {
|
||||||
|
if (test('-f', scriptName + '.js'))
|
||||||
|
scriptName += '.js';
|
||||||
|
if (test('-f', scriptName + '.coffee'))
|
||||||
|
scriptName += '.coffee';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!test('-f', scriptName)) {
|
||||||
|
exitWithErrorMessage('ShellJS: script not found ('+scriptName+')');
|
||||||
|
}
|
||||||
|
|
||||||
|
args = process.argv.slice(3);
|
||||||
|
|
||||||
|
for (var i = 0, l = args.length; i < l; i++) {
|
||||||
|
if (args[i][0] !== "-"){
|
||||||
|
args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var path = require('path');
|
||||||
|
var extensions = require('interpret').extensions;
|
||||||
|
var rechoir = require('rechoir');
|
||||||
|
rechoir.prepare(extensions, scriptName);
|
||||||
|
require(require.resolve(path.resolve(process.cwd(), scriptName)));
|
||||||
1
node_modules/.bin/solcjs
generated
vendored
1
node_modules/.bin/solcjs
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../solc/solcjs
|
|
||||||
170
node_modules/.bin/solcjs
generated
vendored
Executable file
170
node_modules/.bin/solcjs
generated
vendored
Executable file
|
|
@ -0,0 +1,170 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
// hold on to any exception handlers that existed prior to this script running, we'll be adding them back at the end
|
||||||
|
var originalUncaughtExceptionListeners = process.listeners("uncaughtException");
|
||||||
|
|
||||||
|
var fs = require('fs-extra');
|
||||||
|
var path = require('path');
|
||||||
|
var solc = require('./index.js');
|
||||||
|
var smtchecker = require('./smtchecker.js');
|
||||||
|
var smtsolver = require('./smtsolver.js');
|
||||||
|
// FIXME: remove annoying exception catcher of Emscripten
|
||||||
|
// see https://github.com/chriseth/browser-solidity/issues/167
|
||||||
|
process.removeAllListeners('uncaughtException');
|
||||||
|
var commander = require('commander');
|
||||||
|
|
||||||
|
var program = new commander.Command();
|
||||||
|
program.name('solcjs');
|
||||||
|
program.version(solc.version());
|
||||||
|
program
|
||||||
|
.option('--version', 'Show version and exit.')
|
||||||
|
.option('--optimize', 'Enable bytecode optimizer.')
|
||||||
|
.option('--bin', 'Binary of the contracts in hex.')
|
||||||
|
.option('--abi', 'ABI of the contracts.')
|
||||||
|
.option('--standard-json', 'Turn on Standard JSON Input / Output mode.')
|
||||||
|
.option('--base-path <path>', 'Automatically resolve all imports inside the given path.')
|
||||||
|
.option('-o, --output-dir <output-directory>', 'Output directory for the contracts.');
|
||||||
|
program.parse(process.argv);
|
||||||
|
|
||||||
|
var files = program.args;
|
||||||
|
var destination = program.outputDir || '.'
|
||||||
|
|
||||||
|
function abort (msg) {
|
||||||
|
console.error(msg || 'Error occured');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function readFileCallback(path) {
|
||||||
|
path = program.basePath + '/' + path;
|
||||||
|
if (fs.existsSync(path)) {
|
||||||
|
try {
|
||||||
|
return { 'contents': fs.readFileSync(path).toString('utf8') }
|
||||||
|
} catch (e) {
|
||||||
|
return { error: 'Error reading ' + path + ': ' + e };
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
return { error: 'File not found at ' + path}
|
||||||
|
}
|
||||||
|
function stripBasePath(path) {
|
||||||
|
if (program.basePath && path.startsWith(program.basePath))
|
||||||
|
return path.slice(program.basePath.length);
|
||||||
|
else
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
var callbacks = undefined
|
||||||
|
if (program.basePath)
|
||||||
|
callbacks = {'import': readFileCallback};
|
||||||
|
|
||||||
|
if (program.standardJson) {
|
||||||
|
var input = fs.readFileSync(process.stdin.fd).toString('utf8');
|
||||||
|
var output = solc.compile(input, callbacks);
|
||||||
|
|
||||||
|
try {
|
||||||
|
var inputJSON = smtchecker.handleSMTQueries(JSON.parse(input), JSON.parse(output), smtsolver.smtSolver);
|
||||||
|
if (inputJSON) {
|
||||||
|
output = solc.compile(JSON.stringify(inputJSON), callbacks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
var addError = {
|
||||||
|
component: "general",
|
||||||
|
formattedMessage: e.toString(),
|
||||||
|
message: e.toString(),
|
||||||
|
type: "Warning"
|
||||||
|
};
|
||||||
|
|
||||||
|
var outputJSON = JSON.parse(output);
|
||||||
|
if (!outputJSON.errors) {
|
||||||
|
outputJSON.errors = []
|
||||||
|
}
|
||||||
|
outputJSON.errors.push(addError);
|
||||||
|
output = JSON.stringify(outputJSON);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(output);
|
||||||
|
process.exit(0);
|
||||||
|
} else if (files.length === 0) {
|
||||||
|
console.error('Must provide a file');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(program.bin || program.abi)) {
|
||||||
|
abort('Invalid option selected, must specify either --bin or --abi');
|
||||||
|
}
|
||||||
|
|
||||||
|
var sources = {};
|
||||||
|
|
||||||
|
for (var i = 0; i < files.length; i++) {
|
||||||
|
try {
|
||||||
|
sources[stripBasePath(files[i])] = { content: fs.readFileSync(files[i]).toString() };
|
||||||
|
} catch (e) {
|
||||||
|
abort('Error reading ' + files[i] + ': ' + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var output = JSON.parse(solc.compile(JSON.stringify({
|
||||||
|
language: 'Solidity',
|
||||||
|
settings: {
|
||||||
|
optimizer: {
|
||||||
|
enabled: program.optimize
|
||||||
|
},
|
||||||
|
outputSelection: {
|
||||||
|
'*': {
|
||||||
|
'*': [ 'abi', 'evm.bytecode' ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sources: sources
|
||||||
|
}), callbacks));
|
||||||
|
|
||||||
|
let hasError = false;
|
||||||
|
|
||||||
|
if (!output) {
|
||||||
|
abort('No output from compiler');
|
||||||
|
} else if (output['errors']) {
|
||||||
|
for (var error in output['errors']) {
|
||||||
|
var message = output['errors'][error]
|
||||||
|
if (message.severity === 'warning') {
|
||||||
|
console.log(message.formattedMessage)
|
||||||
|
} else {
|
||||||
|
console.error(message.formattedMessage)
|
||||||
|
hasError = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.ensureDirSync (destination);
|
||||||
|
|
||||||
|
function writeFile (file, content) {
|
||||||
|
file = path.join(destination, file);
|
||||||
|
fs.writeFile(file, content, function (err) {
|
||||||
|
if (err) {
|
||||||
|
console.error('Failed to write ' + file + ': ' + err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var fileName in output.contracts) {
|
||||||
|
for (var contractName in output.contracts[fileName]) {
|
||||||
|
var contractFileName = fileName + ':' + contractName;
|
||||||
|
contractFileName = contractFileName.replace(/[:./\\]/g, '_');
|
||||||
|
|
||||||
|
if (program.bin) {
|
||||||
|
writeFile(contractFileName + '.bin', output.contracts[fileName][contractName].evm.bytecode.object);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (program.abi) {
|
||||||
|
writeFile(contractFileName + '.abi', JSON.stringify(output.contracts[fileName][contractName].abi));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put back original exception handlers.
|
||||||
|
originalUncaughtExceptionListeners.forEach(function (listener) {
|
||||||
|
process.addListener('uncaughtException', listener);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (hasError) {
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
1
node_modules/.bin/solidity-coverage
generated
vendored
1
node_modules/.bin/solidity-coverage
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../solidity-coverage/plugins/bin.js
|
|
||||||
10
node_modules/.bin/solidity-coverage
generated
vendored
Executable file
10
node_modules/.bin/solidity-coverage
generated
vendored
Executable file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
/*
|
||||||
|
Logs a warning / informational message when user tries to
|
||||||
|
invoke 'solidity-coverage' as a shell command. This file
|
||||||
|
is listed as the package.json "bin".
|
||||||
|
*/
|
||||||
|
const AppUI = require('../lib/ui').AppUI;
|
||||||
|
|
||||||
|
(new AppUI()).report('command');
|
||||||
1
node_modules/.bin/testrpc-sc
generated
vendored
1
node_modules/.bin/testrpc-sc
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ghost-testrpc/index.js
|
|
||||||
29
node_modules/.bin/testrpc-sc
generated
vendored
Executable file
29
node_modules/.bin/testrpc-sc
generated
vendored
Executable file
|
|
@ -0,0 +1,29 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const c = require('chalk');
|
||||||
|
const emoji = require('node-emoji');
|
||||||
|
|
||||||
|
const title = `
|
||||||
|
:warning: ${c.red.bold('solidity-coverage >= 0.7.0 does not use "testrpc-sc"')} :warning:
|
||||||
|
${c.bold('===========================================================')}`;
|
||||||
|
|
||||||
|
const info = `
|
||||||
|
Instead, you can use any ganache version you'd like & configure it as you wish
|
||||||
|
via the .solcover.js options. (It also comes with a default version for easy use.)
|
||||||
|
|
||||||
|
> ${c.bold('Launching the client independently of the coverage tool is no longer supported.')}
|
||||||
|
> See github.com/sc-forks/solidity-coverage for help with configuration.`;
|
||||||
|
|
||||||
|
const thanks = `
|
||||||
|
Thanks! - sc-forks
|
||||||
|
`;
|
||||||
|
|
||||||
|
|
||||||
|
const msg = `
|
||||||
|
${title}
|
||||||
|
${info}
|
||||||
|
${c.green.bold(thanks)}
|
||||||
|
`
|
||||||
|
console.log(emoji.emojify(msg));
|
||||||
|
|
||||||
|
process.exit(1);
|
||||||
1
node_modules/.bin/ts-node
generated
vendored
1
node_modules/.bin/ts-node
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ts-node/dist/bin.js
|
|
||||||
581
node_modules/.bin/ts-node
generated
vendored
Executable file
581
node_modules/.bin/ts-node
generated
vendored
Executable file
|
|
@ -0,0 +1,581 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.bootstrap = exports.main = void 0;
|
||||||
|
const path_1 = require("path");
|
||||||
|
const util_1 = require("util");
|
||||||
|
const Module = require("module");
|
||||||
|
let arg;
|
||||||
|
const util_2 = require("./util");
|
||||||
|
const repl_1 = require("./repl");
|
||||||
|
const index_1 = require("./index");
|
||||||
|
const node_internal_modules_cjs_helpers_1 = require("../dist-raw/node-internal-modules-cjs-helpers");
|
||||||
|
const spawn_child_1 = require("./child/spawn-child");
|
||||||
|
const configuration_1 = require("./configuration");
|
||||||
|
/**
|
||||||
|
* Main `bin` functionality.
|
||||||
|
*
|
||||||
|
* This file is split into a chain of functions (phases), each one adding to a shared state object.
|
||||||
|
* This is done so that the next function can either be invoked in-process or, if necessary, invoked in a child process.
|
||||||
|
*
|
||||||
|
* The functions are intentionally given uncreative names and left in the same order as the original code, to make a
|
||||||
|
* smaller git diff.
|
||||||
|
*/
|
||||||
|
function main(argv = process.argv.slice(2), entrypointArgs = {}) {
|
||||||
|
const args = parseArgv(argv, entrypointArgs);
|
||||||
|
const state = {
|
||||||
|
shouldUseChildProcess: false,
|
||||||
|
isInChildProcess: false,
|
||||||
|
isCli: true,
|
||||||
|
tsNodeScript: __filename,
|
||||||
|
parseArgvResult: args,
|
||||||
|
};
|
||||||
|
return bootstrap(state);
|
||||||
|
}
|
||||||
|
exports.main = main;
|
||||||
|
/** @internal */
|
||||||
|
function bootstrap(state) {
|
||||||
|
if (!state.phase2Result) {
|
||||||
|
state.phase2Result = phase2(state);
|
||||||
|
if (state.shouldUseChildProcess && !state.isInChildProcess) {
|
||||||
|
// Note: When transitioning into the child-process after `phase2`,
|
||||||
|
// the updated working directory needs to be preserved.
|
||||||
|
return (0, spawn_child_1.callInChild)(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!state.phase3Result) {
|
||||||
|
state.phase3Result = phase3(state);
|
||||||
|
if (state.shouldUseChildProcess && !state.isInChildProcess) {
|
||||||
|
// Note: When transitioning into the child-process after `phase2`,
|
||||||
|
// the updated working directory needs to be preserved.
|
||||||
|
return (0, spawn_child_1.callInChild)(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return phase4(state);
|
||||||
|
}
|
||||||
|
exports.bootstrap = bootstrap;
|
||||||
|
function parseArgv(argv, entrypointArgs) {
|
||||||
|
arg !== null && arg !== void 0 ? arg : (arg = require('arg'));
|
||||||
|
// HACK: technically, this function is not marked @internal so it's possible
|
||||||
|
// that libraries in the wild are doing `require('ts-node/dist/bin').main({'--transpile-only': true})`
|
||||||
|
// We can mark this function @internal in next major release.
|
||||||
|
// For now, rewrite args to avoid a breaking change.
|
||||||
|
entrypointArgs = { ...entrypointArgs };
|
||||||
|
for (const key of Object.keys(entrypointArgs)) {
|
||||||
|
entrypointArgs[key.replace(/([a-z])-([a-z])/g, (_$0, $1, $2) => `${$1}${$2.toUpperCase()}`)] = entrypointArgs[key];
|
||||||
|
}
|
||||||
|
const args = {
|
||||||
|
...entrypointArgs,
|
||||||
|
...arg({
|
||||||
|
// Node.js-like options.
|
||||||
|
'--eval': String,
|
||||||
|
'--interactive': Boolean,
|
||||||
|
'--print': Boolean,
|
||||||
|
'--require': [String],
|
||||||
|
// CLI options.
|
||||||
|
'--help': Boolean,
|
||||||
|
'--cwdMode': Boolean,
|
||||||
|
'--scriptMode': Boolean,
|
||||||
|
'--version': arg.COUNT,
|
||||||
|
'--showConfig': Boolean,
|
||||||
|
'--esm': Boolean,
|
||||||
|
// Project options.
|
||||||
|
'--cwd': String,
|
||||||
|
'--files': Boolean,
|
||||||
|
'--compiler': String,
|
||||||
|
'--compilerOptions': util_2.parse,
|
||||||
|
'--project': String,
|
||||||
|
'--ignoreDiagnostics': [String],
|
||||||
|
'--ignore': [String],
|
||||||
|
'--transpileOnly': Boolean,
|
||||||
|
'--transpiler': String,
|
||||||
|
'--swc': Boolean,
|
||||||
|
'--typeCheck': Boolean,
|
||||||
|
'--compilerHost': Boolean,
|
||||||
|
'--pretty': Boolean,
|
||||||
|
'--skipProject': Boolean,
|
||||||
|
'--skipIgnore': Boolean,
|
||||||
|
'--preferTsExts': Boolean,
|
||||||
|
'--logError': Boolean,
|
||||||
|
'--emit': Boolean,
|
||||||
|
'--scope': Boolean,
|
||||||
|
'--scopeDir': String,
|
||||||
|
'--noExperimentalReplAwait': Boolean,
|
||||||
|
'--experimentalSpecifierResolution': String,
|
||||||
|
// Aliases.
|
||||||
|
'-e': '--eval',
|
||||||
|
'-i': '--interactive',
|
||||||
|
'-p': '--print',
|
||||||
|
'-r': '--require',
|
||||||
|
'-h': '--help',
|
||||||
|
'-s': '--script-mode',
|
||||||
|
'-v': '--version',
|
||||||
|
'-T': '--transpileOnly',
|
||||||
|
'-H': '--compilerHost',
|
||||||
|
'-I': '--ignore',
|
||||||
|
'-P': '--project',
|
||||||
|
'-C': '--compiler',
|
||||||
|
'-D': '--ignoreDiagnostics',
|
||||||
|
'-O': '--compilerOptions',
|
||||||
|
'--dir': '--cwd',
|
||||||
|
// Support both tsc-style camelCase and node-style hypen-case for *all* flags
|
||||||
|
'--cwd-mode': '--cwdMode',
|
||||||
|
'--script-mode': '--scriptMode',
|
||||||
|
'--show-config': '--showConfig',
|
||||||
|
'--compiler-options': '--compilerOptions',
|
||||||
|
'--ignore-diagnostics': '--ignoreDiagnostics',
|
||||||
|
'--transpile-only': '--transpileOnly',
|
||||||
|
'--type-check': '--typeCheck',
|
||||||
|
'--compiler-host': '--compilerHost',
|
||||||
|
'--skip-project': '--skipProject',
|
||||||
|
'--skip-ignore': '--skipIgnore',
|
||||||
|
'--prefer-ts-exts': '--preferTsExts',
|
||||||
|
'--log-error': '--logError',
|
||||||
|
'--scope-dir': '--scopeDir',
|
||||||
|
'--no-experimental-repl-await': '--noExperimentalReplAwait',
|
||||||
|
'--experimental-specifier-resolution': '--experimentalSpecifierResolution',
|
||||||
|
}, {
|
||||||
|
argv,
|
||||||
|
stopAtPositional: true,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
// Only setting defaults for CLI-specific flags
|
||||||
|
// Anything passed to `register()` can be `undefined`; `create()` will apply
|
||||||
|
// defaults.
|
||||||
|
const { '--cwd': cwdArg, '--help': help = false, '--scriptMode': scriptMode, '--cwdMode': cwdMode, '--version': version = 0, '--showConfig': showConfig, '--require': argsRequire = [], '--eval': code = undefined, '--print': print = false, '--interactive': interactive = false, '--files': files, '--compiler': compiler, '--compilerOptions': compilerOptions, '--project': project, '--ignoreDiagnostics': ignoreDiagnostics, '--ignore': ignore, '--transpileOnly': transpileOnly, '--typeCheck': typeCheck, '--transpiler': transpiler, '--swc': swc, '--compilerHost': compilerHost, '--pretty': pretty, '--skipProject': skipProject, '--skipIgnore': skipIgnore, '--preferTsExts': preferTsExts, '--logError': logError, '--emit': emit, '--scope': scope = undefined, '--scopeDir': scopeDir = undefined, '--noExperimentalReplAwait': noExperimentalReplAwait, '--experimentalSpecifierResolution': experimentalSpecifierResolution, '--esm': esm, _: restArgs, } = args;
|
||||||
|
return {
|
||||||
|
// Note: argv and restArgs may be overwritten by child process
|
||||||
|
argv: process.argv,
|
||||||
|
restArgs,
|
||||||
|
cwdArg,
|
||||||
|
help,
|
||||||
|
scriptMode,
|
||||||
|
cwdMode,
|
||||||
|
version,
|
||||||
|
showConfig,
|
||||||
|
argsRequire,
|
||||||
|
code,
|
||||||
|
print,
|
||||||
|
interactive,
|
||||||
|
files,
|
||||||
|
compiler,
|
||||||
|
compilerOptions,
|
||||||
|
project,
|
||||||
|
ignoreDiagnostics,
|
||||||
|
ignore,
|
||||||
|
transpileOnly,
|
||||||
|
typeCheck,
|
||||||
|
transpiler,
|
||||||
|
swc,
|
||||||
|
compilerHost,
|
||||||
|
pretty,
|
||||||
|
skipProject,
|
||||||
|
skipIgnore,
|
||||||
|
preferTsExts,
|
||||||
|
logError,
|
||||||
|
emit,
|
||||||
|
scope,
|
||||||
|
scopeDir,
|
||||||
|
noExperimentalReplAwait,
|
||||||
|
experimentalSpecifierResolution,
|
||||||
|
esm,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function phase2(payload) {
|
||||||
|
const { help, version, cwdArg, esm } = payload.parseArgvResult;
|
||||||
|
if (help) {
|
||||||
|
console.log(`
|
||||||
|
Usage: ts-node [options] [ -e script | script.ts ] [arguments]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
-e, --eval [code] Evaluate code
|
||||||
|
-p, --print Print result of \`--eval\`
|
||||||
|
-r, --require [path] Require a node module before execution
|
||||||
|
-i, --interactive Opens the REPL even if stdin does not appear to be a terminal
|
||||||
|
|
||||||
|
--esm Bootstrap with the ESM loader, enabling full ESM support
|
||||||
|
--swc Use the faster swc transpiler
|
||||||
|
|
||||||
|
-h, --help Print CLI usage
|
||||||
|
-v, --version Print module version information. -vvv to print additional information
|
||||||
|
--showConfig Print resolved configuration and exit
|
||||||
|
|
||||||
|
-T, --transpileOnly Use TypeScript's faster \`transpileModule\` or a third-party transpiler
|
||||||
|
-H, --compilerHost Use TypeScript's compiler host API
|
||||||
|
-I, --ignore [pattern] Override the path patterns to skip compilation
|
||||||
|
-P, --project [path] Path to TypeScript JSON project file
|
||||||
|
-C, --compiler [name] Specify a custom TypeScript compiler
|
||||||
|
--transpiler [name] Specify a third-party, non-typechecking transpiler
|
||||||
|
-D, --ignoreDiagnostics [code] Ignore TypeScript warnings by diagnostic code
|
||||||
|
-O, --compilerOptions [opts] JSON object to merge with compiler options
|
||||||
|
|
||||||
|
--cwd Behave as if invoked within this working directory.
|
||||||
|
--files Load \`files\`, \`include\` and \`exclude\` from \`tsconfig.json\` on startup
|
||||||
|
--pretty Use pretty diagnostic formatter (usually enabled by default)
|
||||||
|
--cwdMode Use current directory instead of <script.ts> for config resolution
|
||||||
|
--skipProject Skip reading \`tsconfig.json\`
|
||||||
|
--skipIgnore Skip \`--ignore\` checks
|
||||||
|
--emit Emit output files into \`.ts-node\` directory
|
||||||
|
--scope Scope compiler to files within \`scopeDir\`. Anything outside this directory is ignored.
|
||||||
|
--scopeDir Directory for \`--scope\`
|
||||||
|
--preferTsExts Prefer importing TypeScript files over JavaScript files
|
||||||
|
--logError Logs TypeScript errors to stderr instead of throwing exceptions
|
||||||
|
--noExperimentalReplAwait Disable top-level await in REPL. Equivalent to node's --no-experimental-repl-await
|
||||||
|
--experimentalSpecifierResolution [node|explicit]
|
||||||
|
Equivalent to node's --experimental-specifier-resolution
|
||||||
|
`);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
// Output project information.
|
||||||
|
if (version === 1) {
|
||||||
|
console.log(`v${index_1.VERSION}`);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
const cwd = cwdArg ? (0, path_1.resolve)(cwdArg) : process.cwd();
|
||||||
|
// If ESM is explicitly enabled through the flag, stage3 should be run in a child process
|
||||||
|
// with the ESM loaders configured.
|
||||||
|
if (esm)
|
||||||
|
payload.shouldUseChildProcess = true;
|
||||||
|
return {
|
||||||
|
cwd,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function phase3(payload) {
|
||||||
|
const { emit, files, pretty, transpileOnly, transpiler, noExperimentalReplAwait, typeCheck, swc, compilerHost, ignore, preferTsExts, logError, scriptMode, cwdMode, project, skipProject, skipIgnore, compiler, ignoreDiagnostics, compilerOptions, argsRequire, scope, scopeDir, esm, experimentalSpecifierResolution, } = payload.parseArgvResult;
|
||||||
|
const { cwd } = payload.phase2Result;
|
||||||
|
// NOTE: When we transition to a child process for ESM, the entry-point script determined
|
||||||
|
// here might not be the one used later in `phase4`. This can happen when we execute the
|
||||||
|
// original entry-point but then the process forks itself using e.g. `child_process.fork`.
|
||||||
|
// We will always use the original TS project in forked processes anyway, so it is
|
||||||
|
// expected and acceptable to retrieve the entry-point information here in `phase2`.
|
||||||
|
// See: https://github.com/TypeStrong/ts-node/issues/1812.
|
||||||
|
const { entryPointPath } = getEntryPointInfo(payload);
|
||||||
|
const preloadedConfig = (0, configuration_1.findAndReadConfig)({
|
||||||
|
cwd,
|
||||||
|
emit,
|
||||||
|
files,
|
||||||
|
pretty,
|
||||||
|
transpileOnly: (transpileOnly !== null && transpileOnly !== void 0 ? transpileOnly : transpiler != null) ? true : undefined,
|
||||||
|
experimentalReplAwait: noExperimentalReplAwait ? false : undefined,
|
||||||
|
typeCheck,
|
||||||
|
transpiler,
|
||||||
|
swc,
|
||||||
|
compilerHost,
|
||||||
|
ignore,
|
||||||
|
logError,
|
||||||
|
projectSearchDir: getProjectSearchDir(cwd, scriptMode, cwdMode, entryPointPath),
|
||||||
|
project,
|
||||||
|
skipProject,
|
||||||
|
skipIgnore,
|
||||||
|
compiler,
|
||||||
|
ignoreDiagnostics,
|
||||||
|
compilerOptions,
|
||||||
|
require: argsRequire,
|
||||||
|
scope,
|
||||||
|
scopeDir,
|
||||||
|
preferTsExts,
|
||||||
|
esm,
|
||||||
|
experimentalSpecifierResolution: experimentalSpecifierResolution,
|
||||||
|
});
|
||||||
|
// If ESM is enabled through the parsed tsconfig, stage4 should be run in a child
|
||||||
|
// process with the ESM loaders configured.
|
||||||
|
if (preloadedConfig.options.esm)
|
||||||
|
payload.shouldUseChildProcess = true;
|
||||||
|
return { preloadedConfig };
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Determines the entry-point information from the argv and phase2 result. This
|
||||||
|
* method will be invoked in two places:
|
||||||
|
*
|
||||||
|
* 1. In phase 3 to be able to find a project from the potential entry-point script.
|
||||||
|
* 2. In phase 4 to determine the actual entry-point script.
|
||||||
|
*
|
||||||
|
* Note that we need to explicitly re-resolve the entry-point information in the final
|
||||||
|
* stage because the previous stage information could be modified when the bootstrap
|
||||||
|
* invocation transitioned into a child process for ESM.
|
||||||
|
*
|
||||||
|
* Stages before (phase 4) can and will be cached by the child process through the Brotli
|
||||||
|
* configuration and entry-point information is only reliable in the final phase. More
|
||||||
|
* details can be found in here: https://github.com/TypeStrong/ts-node/issues/1812.
|
||||||
|
*/
|
||||||
|
function getEntryPointInfo(state) {
|
||||||
|
const { code, interactive, restArgs } = state.parseArgvResult;
|
||||||
|
const { cwd } = state.phase2Result;
|
||||||
|
const { isCli } = state;
|
||||||
|
// Figure out which we are executing: piped stdin, --eval, REPL, and/or entrypoint
|
||||||
|
// This is complicated because node's behavior is complicated
|
||||||
|
// `node -e code -i ./script.js` ignores -e
|
||||||
|
const executeEval = code != null && !(interactive && restArgs.length);
|
||||||
|
const executeEntrypoint = !executeEval && restArgs.length > 0;
|
||||||
|
const executeRepl = !executeEntrypoint &&
|
||||||
|
(interactive || (process.stdin.isTTY && !executeEval));
|
||||||
|
const executeStdin = !executeEval && !executeRepl && !executeEntrypoint;
|
||||||
|
/**
|
||||||
|
* Unresolved. May point to a symlink, not realpath. May be missing file extension
|
||||||
|
* NOTE: resolution relative to cwd option (not `process.cwd()`) is legacy backwards-compat; should be changed in next major: https://github.com/TypeStrong/ts-node/issues/1834
|
||||||
|
*/
|
||||||
|
const entryPointPath = executeEntrypoint
|
||||||
|
? isCli
|
||||||
|
? (0, path_1.resolve)(cwd, restArgs[0])
|
||||||
|
: (0, path_1.resolve)(restArgs[0])
|
||||||
|
: undefined;
|
||||||
|
return {
|
||||||
|
executeEval,
|
||||||
|
executeEntrypoint,
|
||||||
|
executeRepl,
|
||||||
|
executeStdin,
|
||||||
|
entryPointPath,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function phase4(payload) {
|
||||||
|
var _a, _b, _c, _d, _e, _f, _g;
|
||||||
|
const { isInChildProcess, tsNodeScript } = payload;
|
||||||
|
const { version, showConfig, restArgs, code, print, argv } = payload.parseArgvResult;
|
||||||
|
const { cwd } = payload.phase2Result;
|
||||||
|
const { preloadedConfig } = payload.phase3Result;
|
||||||
|
const { entryPointPath, executeEntrypoint, executeEval, executeRepl, executeStdin, } = getEntryPointInfo(payload);
|
||||||
|
let evalStuff;
|
||||||
|
let replStuff;
|
||||||
|
let stdinStuff;
|
||||||
|
let evalAwarePartialHost = undefined;
|
||||||
|
if (executeEval) {
|
||||||
|
const state = new repl_1.EvalState((0, path_1.join)(cwd, repl_1.EVAL_FILENAME));
|
||||||
|
evalStuff = {
|
||||||
|
state,
|
||||||
|
repl: (0, repl_1.createRepl)({
|
||||||
|
state,
|
||||||
|
composeWithEvalAwarePartialHost: evalAwarePartialHost,
|
||||||
|
ignoreDiagnosticsThatAreAnnoyingInInteractiveRepl: false,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
({ evalAwarePartialHost } = evalStuff.repl);
|
||||||
|
// Create a local module instance based on `cwd`.
|
||||||
|
const module = (evalStuff.module = new Module(repl_1.EVAL_NAME));
|
||||||
|
module.filename = evalStuff.state.path;
|
||||||
|
module.paths = Module._nodeModulePaths(cwd);
|
||||||
|
}
|
||||||
|
if (executeStdin) {
|
||||||
|
const state = new repl_1.EvalState((0, path_1.join)(cwd, repl_1.STDIN_FILENAME));
|
||||||
|
stdinStuff = {
|
||||||
|
state,
|
||||||
|
repl: (0, repl_1.createRepl)({
|
||||||
|
state,
|
||||||
|
composeWithEvalAwarePartialHost: evalAwarePartialHost,
|
||||||
|
ignoreDiagnosticsThatAreAnnoyingInInteractiveRepl: false,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
({ evalAwarePartialHost } = stdinStuff.repl);
|
||||||
|
// Create a local module instance based on `cwd`.
|
||||||
|
const module = (stdinStuff.module = new Module(repl_1.STDIN_NAME));
|
||||||
|
module.filename = stdinStuff.state.path;
|
||||||
|
module.paths = Module._nodeModulePaths(cwd);
|
||||||
|
}
|
||||||
|
if (executeRepl) {
|
||||||
|
const state = new repl_1.EvalState((0, path_1.join)(cwd, repl_1.REPL_FILENAME));
|
||||||
|
replStuff = {
|
||||||
|
state,
|
||||||
|
repl: (0, repl_1.createRepl)({
|
||||||
|
state,
|
||||||
|
composeWithEvalAwarePartialHost: evalAwarePartialHost,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
({ evalAwarePartialHost } = replStuff.repl);
|
||||||
|
}
|
||||||
|
// Register the TypeScript compiler instance.
|
||||||
|
const service = (0, index_1.createFromPreloadedConfig)({
|
||||||
|
// Since this struct may have been marshalled across thread or process boundaries, we must restore
|
||||||
|
// un-marshall-able values.
|
||||||
|
...preloadedConfig,
|
||||||
|
options: {
|
||||||
|
...preloadedConfig.options,
|
||||||
|
readFile: (_a = evalAwarePartialHost === null || evalAwarePartialHost === void 0 ? void 0 : evalAwarePartialHost.readFile) !== null && _a !== void 0 ? _a : undefined,
|
||||||
|
fileExists: (_b = evalAwarePartialHost === null || evalAwarePartialHost === void 0 ? void 0 : evalAwarePartialHost.fileExists) !== null && _b !== void 0 ? _b : undefined,
|
||||||
|
tsTrace: index_1.DEFAULTS.tsTrace,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
(0, index_1.register)(service);
|
||||||
|
if (isInChildProcess)
|
||||||
|
require('./child/child-loader').lateBindHooks((0, index_1.createEsmHooks)(service));
|
||||||
|
// Bind REPL service to ts-node compiler service (chicken-and-egg problem)
|
||||||
|
replStuff === null || replStuff === void 0 ? void 0 : replStuff.repl.setService(service);
|
||||||
|
evalStuff === null || evalStuff === void 0 ? void 0 : evalStuff.repl.setService(service);
|
||||||
|
stdinStuff === null || stdinStuff === void 0 ? void 0 : stdinStuff.repl.setService(service);
|
||||||
|
// Output project information.
|
||||||
|
if (version === 2) {
|
||||||
|
console.log(`ts-node v${index_1.VERSION}`);
|
||||||
|
console.log(`node ${process.version}`);
|
||||||
|
console.log(`compiler v${service.ts.version}`);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
if (version >= 3) {
|
||||||
|
console.log(`ts-node v${index_1.VERSION} ${(0, path_1.dirname)(__dirname)}`);
|
||||||
|
console.log(`node ${process.version}`);
|
||||||
|
console.log(`compiler v${service.ts.version} ${(_c = service.compilerPath) !== null && _c !== void 0 ? _c : ''}`);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
if (showConfig) {
|
||||||
|
const ts = service.ts;
|
||||||
|
if (typeof ts.convertToTSConfig !== 'function') {
|
||||||
|
console.error('Error: --showConfig requires a typescript versions >=3.2 that support --showConfig');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
let moduleTypes = undefined;
|
||||||
|
if (service.options.moduleTypes) {
|
||||||
|
// Assumption: this codepath requires CLI invocation, so moduleTypes must have come from a tsconfig, not API.
|
||||||
|
const showRelativeTo = (0, path_1.dirname)(service.configFilePath);
|
||||||
|
moduleTypes = {};
|
||||||
|
for (const [key, value] of Object.entries(service.options.moduleTypes)) {
|
||||||
|
moduleTypes[(0, path_1.relative)(showRelativeTo, (0, path_1.resolve)((_d = service.options.optionBasePaths) === null || _d === void 0 ? void 0 : _d.moduleTypes, key))] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const json = {
|
||||||
|
['ts-node']: {
|
||||||
|
...service.options,
|
||||||
|
require: ((_e = service.options.require) === null || _e === void 0 ? void 0 : _e.length)
|
||||||
|
? service.options.require
|
||||||
|
: undefined,
|
||||||
|
moduleTypes,
|
||||||
|
optionBasePaths: undefined,
|
||||||
|
compilerOptions: undefined,
|
||||||
|
project: (_f = service.configFilePath) !== null && _f !== void 0 ? _f : service.options.project,
|
||||||
|
},
|
||||||
|
...ts.convertToTSConfig(service.config, (_g = service.configFilePath) !== null && _g !== void 0 ? _g : (0, path_1.join)(cwd, 'ts-node-implicit-tsconfig.json'), service.ts.sys),
|
||||||
|
};
|
||||||
|
console.log(
|
||||||
|
// Assumes that all configuration options which can possibly be specified via the CLI are JSON-compatible.
|
||||||
|
// If, in the future, we must log functions, for example readFile and fileExists, then we can implement a JSON
|
||||||
|
// replacer function.
|
||||||
|
JSON.stringify(json, null, 2));
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
// Prepend `ts-node` arguments to CLI for child processes.
|
||||||
|
process.execArgv.push(tsNodeScript, ...argv.slice(2, argv.length - restArgs.length));
|
||||||
|
// TODO this comes from BootstrapState
|
||||||
|
process.argv = [process.argv[1]]
|
||||||
|
.concat(executeEntrypoint ? [entryPointPath] : [])
|
||||||
|
.concat(restArgs.slice(executeEntrypoint ? 1 : 0));
|
||||||
|
// Execute the main contents (either eval, script or piped).
|
||||||
|
if (executeEntrypoint) {
|
||||||
|
if (payload.isInChildProcess &&
|
||||||
|
(0, util_2.versionGteLt)(process.versions.node, '18.6.0')) {
|
||||||
|
// HACK workaround node regression
|
||||||
|
require('../dist-raw/runmain-hack.js').run(entryPointPath);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Module.runMain();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Note: eval and repl may both run, but never with stdin.
|
||||||
|
// If stdin runs, eval and repl will not.
|
||||||
|
if (executeEval) {
|
||||||
|
(0, node_internal_modules_cjs_helpers_1.addBuiltinLibsToObject)(global);
|
||||||
|
evalAndExitOnTsError(evalStuff.repl, evalStuff.module, code, print, 'eval');
|
||||||
|
}
|
||||||
|
if (executeRepl) {
|
||||||
|
replStuff.repl.start();
|
||||||
|
}
|
||||||
|
if (executeStdin) {
|
||||||
|
let buffer = code || '';
|
||||||
|
process.stdin.on('data', (chunk) => (buffer += chunk));
|
||||||
|
process.stdin.on('end', () => {
|
||||||
|
evalAndExitOnTsError(stdinStuff.repl, stdinStuff.module, buffer,
|
||||||
|
// `echo 123 | node -p` still prints 123
|
||||||
|
print, 'stdin');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get project search path from args.
|
||||||
|
*/
|
||||||
|
function getProjectSearchDir(cwd, scriptMode, cwdMode, scriptPath) {
|
||||||
|
// Validate `--script-mode` / `--cwd-mode` / `--cwd` usage is correct.
|
||||||
|
if (scriptMode && cwdMode) {
|
||||||
|
throw new TypeError('--cwd-mode cannot be combined with --script-mode');
|
||||||
|
}
|
||||||
|
if (scriptMode && !scriptPath) {
|
||||||
|
throw new TypeError('--script-mode must be used with a script name, e.g. `ts-node --script-mode <script.ts>`');
|
||||||
|
}
|
||||||
|
const doScriptMode = scriptMode === true ? true : cwdMode === true ? false : !!scriptPath;
|
||||||
|
if (doScriptMode) {
|
||||||
|
// Use node's own resolution behavior to ensure we follow symlinks.
|
||||||
|
// scriptPath may omit file extension or point to a directory with or without package.json.
|
||||||
|
// This happens before we are registered, so we tell node's resolver to consider ts, tsx, and jsx files.
|
||||||
|
// In extremely rare cases, is is technically possible to resolve the wrong directory,
|
||||||
|
// because we do not yet know preferTsExts, jsx, nor allowJs.
|
||||||
|
// See also, justification why this will not happen in real-world situations:
|
||||||
|
// https://github.com/TypeStrong/ts-node/pull/1009#issuecomment-613017081
|
||||||
|
const exts = ['.js', '.jsx', '.ts', '.tsx'];
|
||||||
|
const extsTemporarilyInstalled = [];
|
||||||
|
for (const ext of exts) {
|
||||||
|
if (!(0, util_2.hasOwnProperty)(require.extensions, ext)) {
|
||||||
|
extsTemporarilyInstalled.push(ext);
|
||||||
|
require.extensions[ext] = function () { };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return (0, path_1.dirname)(requireResolveNonCached(scriptPath));
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
for (const ext of extsTemporarilyInstalled) {
|
||||||
|
delete require.extensions[ext];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cwd;
|
||||||
|
}
|
||||||
|
const guaranteedNonexistentDirectoryPrefix = (0, path_1.resolve)(__dirname, 'doesnotexist');
|
||||||
|
let guaranteedNonexistentDirectorySuffix = 0;
|
||||||
|
/**
|
||||||
|
* require.resolve an absolute path, tricking node into *not* caching the results.
|
||||||
|
* Necessary so that we do not pollute require.resolve cache prior to installing require.extensions
|
||||||
|
*
|
||||||
|
* Is a terrible hack, because node does not expose the necessary cache invalidation APIs
|
||||||
|
* https://stackoverflow.com/questions/59865584/how-to-invalidate-cached-require-resolve-results
|
||||||
|
*/
|
||||||
|
function requireResolveNonCached(absoluteModuleSpecifier) {
|
||||||
|
// node <= 12.1.x fallback: The trick below triggers a node bug on old versions.
|
||||||
|
// On these old versions, pollute the require cache instead. This is a deliberate
|
||||||
|
// ts-node limitation that will *rarely* manifest, and will not matter once node 12
|
||||||
|
// is end-of-life'd on 2022-04-30
|
||||||
|
const isSupportedNodeVersion = (0, util_2.versionGteLt)(process.versions.node, '12.2.0');
|
||||||
|
if (!isSupportedNodeVersion)
|
||||||
|
return require.resolve(absoluteModuleSpecifier);
|
||||||
|
const { dir, base } = (0, path_1.parse)(absoluteModuleSpecifier);
|
||||||
|
const relativeModuleSpecifier = `./${base}`;
|
||||||
|
const req = (0, util_2.createRequire)((0, path_1.join)(dir, 'imaginaryUncacheableRequireResolveScript'));
|
||||||
|
return req.resolve(relativeModuleSpecifier, {
|
||||||
|
paths: [
|
||||||
|
`${guaranteedNonexistentDirectoryPrefix}${guaranteedNonexistentDirectorySuffix++}`,
|
||||||
|
...(req.resolve.paths(relativeModuleSpecifier) || []),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Evaluate an [eval] or [stdin] script
|
||||||
|
*/
|
||||||
|
function evalAndExitOnTsError(replService, module, code, isPrinted, filenameAndDirname) {
|
||||||
|
let result;
|
||||||
|
(0, repl_1.setupContext)(global, module, filenameAndDirname);
|
||||||
|
try {
|
||||||
|
result = replService.evalCode(code);
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
if (error instanceof index_1.TSError) {
|
||||||
|
console.error(error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
if (isPrinted) {
|
||||||
|
console.log(typeof result === 'string'
|
||||||
|
? result
|
||||||
|
: (0, util_1.inspect)(result, { colors: process.stdout.isTTY }));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (require.main === module) {
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=bin.js.map
|
||||||
1
node_modules/.bin/ts-node-cwd
generated
vendored
1
node_modules/.bin/ts-node-cwd
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ts-node/dist/bin-cwd.js
|
|
||||||
6
node_modules/.bin/ts-node-cwd
generated
vendored
Executable file
6
node_modules/.bin/ts-node-cwd
generated
vendored
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const bin_1 = require("./bin");
|
||||||
|
(0, bin_1.main)(undefined, { '--cwdMode': true });
|
||||||
|
//# sourceMappingURL=bin-cwd.js.map
|
||||||
1
node_modules/.bin/ts-node-esm
generated
vendored
1
node_modules/.bin/ts-node-esm
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ts-node/dist/bin-esm.js
|
|
||||||
6
node_modules/.bin/ts-node-esm
generated
vendored
Executable file
6
node_modules/.bin/ts-node-esm
generated
vendored
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const bin_1 = require("./bin");
|
||||||
|
(0, bin_1.main)(undefined, { '--esm': true });
|
||||||
|
//# sourceMappingURL=bin-esm.js.map
|
||||||
1
node_modules/.bin/ts-node-script
generated
vendored
1
node_modules/.bin/ts-node-script
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ts-node/dist/bin-script.js
|
|
||||||
6
node_modules/.bin/ts-node-script
generated
vendored
Executable file
6
node_modules/.bin/ts-node-script
generated
vendored
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const bin_1 = require("./bin");
|
||||||
|
(0, bin_1.main)(undefined, { '--scriptMode': true });
|
||||||
|
//# sourceMappingURL=bin-script.js.map
|
||||||
1
node_modules/.bin/ts-node-transpile-only
generated
vendored
1
node_modules/.bin/ts-node-transpile-only
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ts-node/dist/bin-transpile.js
|
|
||||||
6
node_modules/.bin/ts-node-transpile-only
generated
vendored
Executable file
6
node_modules/.bin/ts-node-transpile-only
generated
vendored
Executable file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const bin_1 = require("./bin");
|
||||||
|
(0, bin_1.main)(undefined, { '--transpileOnly': true });
|
||||||
|
//# sourceMappingURL=bin-transpile.js.map
|
||||||
1
node_modules/.bin/ts-script
generated
vendored
1
node_modules/.bin/ts-script
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ts-node/dist/bin-script-deprecated.js
|
|
||||||
7
node_modules/.bin/ts-script
generated
vendored
Executable file
7
node_modules/.bin/ts-script
generated
vendored
Executable file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const bin_1 = require("./bin");
|
||||||
|
console.warn('ts-script has been deprecated and will be removed in the next major release.', 'Please use ts-node-script instead');
|
||||||
|
(0, bin_1.main)(undefined, { '--scriptMode': true });
|
||||||
|
//# sourceMappingURL=bin-script-deprecated.js.map
|
||||||
1
node_modules/.bin/tsc
generated
vendored
1
node_modules/.bin/tsc
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../typescript/bin/tsc
|
|
||||||
2
node_modules/.bin/tsc
generated
vendored
Executable file
2
node_modules/.bin/tsc
generated
vendored
Executable file
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
require('../lib/tsc.js')
|
||||||
1
node_modules/.bin/tsserver
generated
vendored
1
node_modules/.bin/tsserver
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../typescript/bin/tsserver
|
|
||||||
2
node_modules/.bin/tsserver
generated
vendored
Executable file
2
node_modules/.bin/tsserver
generated
vendored
Executable file
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
require('../lib/tsserver.js')
|
||||||
1
node_modules/.bin/typechain
generated
vendored
1
node_modules/.bin/typechain
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../typechain/dist/cli/cli.js
|
|
||||||
81
node_modules/.bin/typechain
generated
vendored
Executable file
81
node_modules/.bin/typechain
generated
vendored
Executable file
|
|
@ -0,0 +1,81 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const prettier = __importStar(require("prettier"));
|
||||||
|
const runTypeChain_1 = require("../typechain/runTypeChain");
|
||||||
|
const files_1 = require("../utils/files");
|
||||||
|
const glob_1 = require("../utils/glob");
|
||||||
|
const logger_1 = require("../utils/logger");
|
||||||
|
const parseArgs_1 = require("./parseArgs");
|
||||||
|
async function main() {
|
||||||
|
;
|
||||||
|
global.IS_CLI = true;
|
||||||
|
const cliConfig = (0, parseArgs_1.parseArgs)();
|
||||||
|
const cwd = process.cwd();
|
||||||
|
const files = getFilesToProcess(cwd, cliConfig.files);
|
||||||
|
if (files.length === 0) {
|
||||||
|
throw new Error('No files passed.' + '\n' + `\`${cliConfig.files}\` didn't match any input files in ${cwd}`);
|
||||||
|
}
|
||||||
|
const config = {
|
||||||
|
cwd,
|
||||||
|
target: cliConfig.target,
|
||||||
|
outDir: cliConfig.outDir,
|
||||||
|
allFiles: files,
|
||||||
|
filesToProcess: files,
|
||||||
|
inputDir: cliConfig.inputDir || (0, files_1.detectInputsRoot)(files),
|
||||||
|
prettier,
|
||||||
|
flags: {
|
||||||
|
...cliConfig.flags,
|
||||||
|
environment: undefined,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const result = await (0, runTypeChain_1.runTypeChain)(config);
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log(`Successfully generated ${result.filesGenerated} typings!`);
|
||||||
|
}
|
||||||
|
main().catch((e) => {
|
||||||
|
logger_1.logger.error('Error occured: ', e.message);
|
||||||
|
const stackTracesEnabled = process.argv.includes('--show-stack-traces');
|
||||||
|
if (stackTracesEnabled) {
|
||||||
|
logger_1.logger.error('Stack trace: ', e.stack);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
logger_1.logger.error('Run with --show-stack-traces to see the full stacktrace');
|
||||||
|
}
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
function getFilesToProcess(cwd, filesOrPattern) {
|
||||||
|
var _a;
|
||||||
|
let res = (0, glob_1.glob)(cwd, filesOrPattern);
|
||||||
|
if (res.length === 0) {
|
||||||
|
// If there are no files found, but first parameter is surrounded with single quotes, we try again without quotes
|
||||||
|
const match = (_a = filesOrPattern[0].match(/'([\s\S]*)'/)) === null || _a === void 0 ? void 0 : _a[1];
|
||||||
|
if (match)
|
||||||
|
res = (0, glob_1.glob)(cwd, [match]);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=cli.js.map
|
||||||
1
node_modules/.bin/uglifyjs
generated
vendored
1
node_modules/.bin/uglifyjs
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../uglify-js/bin/uglifyjs
|
|
||||||
621
node_modules/.bin/uglifyjs
generated
vendored
Executable file
621
node_modules/.bin/uglifyjs
generated
vendored
Executable file
|
|
@ -0,0 +1,621 @@
|
||||||
|
#! /usr/bin/env node
|
||||||
|
// -*- js -*-
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
require("../tools/tty");
|
||||||
|
|
||||||
|
var fs = require("fs");
|
||||||
|
var info = require("../package.json");
|
||||||
|
var path = require("path");
|
||||||
|
var UglifyJS = require("../tools/node");
|
||||||
|
|
||||||
|
var skip_keys = [ "cname", "fixed", "in_arg", "inlined", "length_read", "parent_scope", "redef", "scope", "unused" ];
|
||||||
|
var truthy_keys = [ "optional", "pure", "terminal", "uses_arguments", "uses_eval", "uses_with" ];
|
||||||
|
|
||||||
|
var files = {};
|
||||||
|
var options = {};
|
||||||
|
var short_forms = {
|
||||||
|
b: "beautify",
|
||||||
|
c: "compress",
|
||||||
|
d: "define",
|
||||||
|
e: "enclose",
|
||||||
|
h: "help",
|
||||||
|
m: "mangle",
|
||||||
|
o: "output",
|
||||||
|
O: "output-opts",
|
||||||
|
p: "parse",
|
||||||
|
v: "version",
|
||||||
|
V: "version",
|
||||||
|
};
|
||||||
|
var args = process.argv.slice(2);
|
||||||
|
var paths = [];
|
||||||
|
var output, nameCache;
|
||||||
|
var specified = {};
|
||||||
|
while (args.length) {
|
||||||
|
var arg = args.shift();
|
||||||
|
if (arg[0] != "-") {
|
||||||
|
paths.push(arg);
|
||||||
|
} else if (arg == "--") {
|
||||||
|
paths = paths.concat(args);
|
||||||
|
break;
|
||||||
|
} else if (arg[1] == "-") {
|
||||||
|
process_option(arg.slice(2));
|
||||||
|
} else [].forEach.call(arg.slice(1), function(letter, index, arg) {
|
||||||
|
if (!(letter in short_forms)) fatal("invalid option -" + letter);
|
||||||
|
process_option(short_forms[letter], index + 1 < arg.length);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function process_option(name, no_value) {
|
||||||
|
specified[name] = true;
|
||||||
|
switch (name) {
|
||||||
|
case "help":
|
||||||
|
switch (read_value()) {
|
||||||
|
case "ast":
|
||||||
|
print(UglifyJS.describe_ast());
|
||||||
|
break;
|
||||||
|
case "options":
|
||||||
|
var text = [];
|
||||||
|
var toplevels = [];
|
||||||
|
var padding = "";
|
||||||
|
var defaults = UglifyJS.default_options();
|
||||||
|
for (var name in defaults) {
|
||||||
|
var option = defaults[name];
|
||||||
|
if (option && typeof option == "object") {
|
||||||
|
text.push("--" + ({
|
||||||
|
output: "beautify",
|
||||||
|
sourceMap: "source-map",
|
||||||
|
}[name] || name) + " options:");
|
||||||
|
text.push(format_object(option));
|
||||||
|
text.push("");
|
||||||
|
} else {
|
||||||
|
if (padding.length < name.length) padding = Array(name.length + 1).join(" ");
|
||||||
|
toplevels.push([ {
|
||||||
|
keep_fargs: "keep-fargs",
|
||||||
|
keep_fnames: "keep-fnames",
|
||||||
|
nameCache: "name-cache",
|
||||||
|
}[name] || name, option ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toplevels.forEach(function(tokens) {
|
||||||
|
text.push("--" + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
|
||||||
|
});
|
||||||
|
print(text.join("\n"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
print([
|
||||||
|
"Usage: uglifyjs [files...] [options]",
|
||||||
|
"",
|
||||||
|
"Options:",
|
||||||
|
" -h, --help Print usage information.",
|
||||||
|
" `--help options` for details on available options.",
|
||||||
|
" -v, -V, --version Print version number.",
|
||||||
|
" -p, --parse <options> Specify parser options.",
|
||||||
|
" -c, --compress [options] Enable compressor/specify compressor options.",
|
||||||
|
" -m, --mangle [options] Mangle names/specify mangler options.",
|
||||||
|
" --mangle-props [options] Mangle properties/specify mangler options.",
|
||||||
|
" -b, --beautify [options] Beautify output/specify output options.",
|
||||||
|
" -O, --output-opts <options> Output options (beautify disabled).",
|
||||||
|
" -o, --output <file> Output file (default STDOUT).",
|
||||||
|
" --annotations Process and preserve comment annotations.",
|
||||||
|
" --no-annotations Ignore and discard comment annotations.",
|
||||||
|
" --comments [filter] Preserve copyright comments in the output.",
|
||||||
|
" --config-file <file> Read minify() options from JSON file.",
|
||||||
|
" -d, --define <expr>[=value] Global definitions.",
|
||||||
|
" -e, --enclose [arg[,...][:value[,...]]] Embed everything in a big function, with configurable argument(s) & value(s).",
|
||||||
|
" --expression Parse a single expression, rather than a program.",
|
||||||
|
" --ie Support non-standard Internet Explorer.",
|
||||||
|
" --keep-fargs Do not mangle/drop function arguments.",
|
||||||
|
" --keep-fnames Do not mangle/drop function names. Useful for code relying on Function.prototype.name.",
|
||||||
|
" --module Process input as ES module (implies --toplevel).",
|
||||||
|
" --no-module Process input with improved JavaScript compatibility.",
|
||||||
|
" --name-cache <file> File to hold mangled name mappings.",
|
||||||
|
" --rename Force symbol expansion.",
|
||||||
|
" --no-rename Disable symbol expansion.",
|
||||||
|
" --self Build UglifyJS as a library (implies --wrap UglifyJS)",
|
||||||
|
" --source-map [options] Enable source map/specify source map options.",
|
||||||
|
" --timings Display operations run time on STDERR.",
|
||||||
|
" --toplevel Compress and/or mangle variables in toplevel scope.",
|
||||||
|
" --v8 Support non-standard Chrome & Node.js.",
|
||||||
|
" --validate Perform validation during AST manipulations.",
|
||||||
|
" --verbose Print diagnostic messages.",
|
||||||
|
" --warn Print warning messages.",
|
||||||
|
" --webkit Support non-standard Safari/Webkit.",
|
||||||
|
" --wrap <name> Embed everything as a function with “exports” corresponding to “name” globally.",
|
||||||
|
"",
|
||||||
|
"(internal debug use only)",
|
||||||
|
" --in-situ Warning: replaces original source files with minified output.",
|
||||||
|
" --reduce-test Reduce a standalone test case (assumes cloned repository).",
|
||||||
|
].join("\n"));
|
||||||
|
}
|
||||||
|
process.exit();
|
||||||
|
case "version":
|
||||||
|
print(info.name + " " + info.version);
|
||||||
|
process.exit();
|
||||||
|
case "config-file":
|
||||||
|
var config = JSON.parse(read_file(read_value(true)));
|
||||||
|
if (config.mangle && config.mangle.properties && config.mangle.properties.regex) {
|
||||||
|
config.mangle.properties.regex = UglifyJS.parse(config.mangle.properties.regex, {
|
||||||
|
expression: true,
|
||||||
|
}).value;
|
||||||
|
}
|
||||||
|
for (var key in config) if (!(key in options)) options[key] = config[key];
|
||||||
|
break;
|
||||||
|
case "compress":
|
||||||
|
case "mangle":
|
||||||
|
options[name] = parse_js(read_value(), options[name]);
|
||||||
|
break;
|
||||||
|
case "source-map":
|
||||||
|
options.sourceMap = parse_js(read_value(), options.sourceMap);
|
||||||
|
break;
|
||||||
|
case "enclose":
|
||||||
|
options[name] = read_value();
|
||||||
|
break;
|
||||||
|
case "annotations":
|
||||||
|
case "expression":
|
||||||
|
case "ie":
|
||||||
|
case "ie8":
|
||||||
|
case "timings":
|
||||||
|
case "toplevel":
|
||||||
|
case "v8":
|
||||||
|
case "validate":
|
||||||
|
case "webkit":
|
||||||
|
options[name] = true;
|
||||||
|
break;
|
||||||
|
case "no-annotations":
|
||||||
|
options.annotations = false;
|
||||||
|
break;
|
||||||
|
case "keep-fargs":
|
||||||
|
options.keep_fargs = true;
|
||||||
|
break;
|
||||||
|
case "keep-fnames":
|
||||||
|
options.keep_fnames = true;
|
||||||
|
break;
|
||||||
|
case "wrap":
|
||||||
|
options[name] = read_value(true);
|
||||||
|
break;
|
||||||
|
case "verbose":
|
||||||
|
options.warnings = "verbose";
|
||||||
|
break;
|
||||||
|
case "warn":
|
||||||
|
if (!options.warnings) options.warnings = true;
|
||||||
|
break;
|
||||||
|
case "beautify":
|
||||||
|
options.output = parse_js(read_value(), options.output);
|
||||||
|
if (!("beautify" in options.output)) options.output.beautify = true;
|
||||||
|
break;
|
||||||
|
case "output-opts":
|
||||||
|
options.output = parse_js(read_value(true), options.output);
|
||||||
|
break;
|
||||||
|
case "comments":
|
||||||
|
if (typeof options.output != "object") options.output = {};
|
||||||
|
options.output.comments = read_value();
|
||||||
|
if (options.output.comments === true) options.output.comments = "some";
|
||||||
|
break;
|
||||||
|
case "define":
|
||||||
|
if (typeof options.compress != "object") options.compress = {};
|
||||||
|
options.compress.global_defs = parse_js(read_value(true), options.compress.global_defs, "define");
|
||||||
|
break;
|
||||||
|
case "mangle-props":
|
||||||
|
if (typeof options.mangle != "object") options.mangle = {};
|
||||||
|
options.mangle.properties = parse_js(read_value(), options.mangle.properties);
|
||||||
|
break;
|
||||||
|
case "module":
|
||||||
|
options.module = true;
|
||||||
|
break;
|
||||||
|
case "no-module":
|
||||||
|
options.module = false;
|
||||||
|
break;
|
||||||
|
case "name-cache":
|
||||||
|
nameCache = read_value(true);
|
||||||
|
options.nameCache = JSON.parse(read_file(nameCache, "{}"));
|
||||||
|
break;
|
||||||
|
case "output":
|
||||||
|
output = read_value(true);
|
||||||
|
break;
|
||||||
|
case "parse":
|
||||||
|
options.parse = parse_js(read_value(true), options.parse);
|
||||||
|
break;
|
||||||
|
case "rename":
|
||||||
|
options.rename = true;
|
||||||
|
break;
|
||||||
|
case "no-rename":
|
||||||
|
options.rename = false;
|
||||||
|
break;
|
||||||
|
case "in-situ":
|
||||||
|
case "reduce-test":
|
||||||
|
case "self":
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fatal("invalid option --" + name);
|
||||||
|
}
|
||||||
|
|
||||||
|
function read_value(required) {
|
||||||
|
if (no_value || !args.length || args[0][0] == "-") {
|
||||||
|
if (required) fatal("missing option argument for --" + name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return args.shift();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!output && options.sourceMap && options.sourceMap.url != "inline") fatal("cannot write source map to STDOUT");
|
||||||
|
if (specified["beautify"] && specified["output-opts"]) fatal("--beautify cannot be used with --output-opts");
|
||||||
|
[ "compress", "mangle" ].forEach(function(name) {
|
||||||
|
if (!(name in options)) options[name] = false;
|
||||||
|
});
|
||||||
|
if (/^ast|spidermonkey$/.test(output)) {
|
||||||
|
if (typeof options.output != "object") options.output = {};
|
||||||
|
options.output.ast = true;
|
||||||
|
options.output.code = false;
|
||||||
|
}
|
||||||
|
if (options.parse && (options.parse.acorn || options.parse.spidermonkey)
|
||||||
|
&& options.sourceMap && options.sourceMap.content == "inline") {
|
||||||
|
fatal("inline source map only works with built-in parser");
|
||||||
|
}
|
||||||
|
if (options.warnings) {
|
||||||
|
UglifyJS.AST_Node.log_function(print_error, options.warnings == "verbose");
|
||||||
|
delete options.warnings;
|
||||||
|
}
|
||||||
|
var convert_path = function(name) {
|
||||||
|
return name;
|
||||||
|
};
|
||||||
|
if (typeof options.sourceMap == "object" && "base" in options.sourceMap) {
|
||||||
|
convert_path = function() {
|
||||||
|
var base = options.sourceMap.base;
|
||||||
|
delete options.sourceMap.base;
|
||||||
|
return function(name) {
|
||||||
|
return path.relative(base, name);
|
||||||
|
};
|
||||||
|
}();
|
||||||
|
}
|
||||||
|
if (specified["self"]) {
|
||||||
|
if (paths.length) UglifyJS.AST_Node.warn("Ignoring input files since --self was passed");
|
||||||
|
if (!options.wrap) options.wrap = "UglifyJS";
|
||||||
|
paths = UglifyJS.FILES;
|
||||||
|
} else if (paths.length) {
|
||||||
|
paths = simple_glob(paths);
|
||||||
|
}
|
||||||
|
if (specified["in-situ"]) {
|
||||||
|
if (output && output != "spidermonkey" || specified["reduce-test"] || specified["self"]) {
|
||||||
|
fatal("incompatible options specified");
|
||||||
|
}
|
||||||
|
paths.forEach(function(name) {
|
||||||
|
print(name);
|
||||||
|
if (/^ast|spidermonkey$/.test(name)) fatal("invalid file name specified");
|
||||||
|
files = {};
|
||||||
|
files[convert_path(name)] = read_file(name);
|
||||||
|
output = name;
|
||||||
|
run();
|
||||||
|
});
|
||||||
|
} else if (paths.length) {
|
||||||
|
paths.forEach(function(name) {
|
||||||
|
files[convert_path(name)] = read_file(name);
|
||||||
|
});
|
||||||
|
run();
|
||||||
|
} else {
|
||||||
|
var timerId = process.stdin.isTTY && process.argv.length < 3 && setTimeout(function() {
|
||||||
|
print_error("Waiting for input... (use `--help` to print usage information)");
|
||||||
|
}, 1500);
|
||||||
|
var chunks = [];
|
||||||
|
process.stdin.setEncoding("utf8");
|
||||||
|
process.stdin.once("data", function() {
|
||||||
|
clearTimeout(timerId);
|
||||||
|
}).on("data", process.stdin.isTTY ? function(chunk) {
|
||||||
|
// emulate console input termination via Ctrl+D / Ctrl+Z
|
||||||
|
var match = /[\x04\x1a]\r?\n?$/.exec(chunk);
|
||||||
|
if (match) {
|
||||||
|
chunks.push(chunk.slice(0, -match[0].length));
|
||||||
|
process.stdin.pause();
|
||||||
|
process.stdin.emit("end");
|
||||||
|
} else {
|
||||||
|
chunks.push(chunk);
|
||||||
|
}
|
||||||
|
} : function(chunk) {
|
||||||
|
chunks.push(chunk);
|
||||||
|
}).once("end", function() {
|
||||||
|
files = { STDIN: chunks.join("") };
|
||||||
|
run();
|
||||||
|
});
|
||||||
|
process.stdin.resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
function convert_ast(fn) {
|
||||||
|
return UglifyJS.AST_Node.from_mozilla_ast(Object.keys(files).reduce(fn, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
function run() {
|
||||||
|
var content = options.sourceMap && options.sourceMap.content;
|
||||||
|
if (content && content != "inline") {
|
||||||
|
UglifyJS.AST_Node.info("Using input source map: {content}", {
|
||||||
|
content : content,
|
||||||
|
});
|
||||||
|
options.sourceMap.content = read_file(content, content);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (options.parse) {
|
||||||
|
if (options.parse.acorn) {
|
||||||
|
var annotations = Object.create(null);
|
||||||
|
files = convert_ast(function(toplevel, name) {
|
||||||
|
var content = files[name];
|
||||||
|
var list = annotations[name] = [];
|
||||||
|
var prev = -1;
|
||||||
|
return require("acorn").parse(content, {
|
||||||
|
allowHashBang: true,
|
||||||
|
ecmaVersion: "latest",
|
||||||
|
locations: true,
|
||||||
|
onComment: function(block, text, start, end) {
|
||||||
|
var match = /[@#]__PURE__/.exec(text);
|
||||||
|
if (!match) {
|
||||||
|
if (start != prev) return;
|
||||||
|
match = [ list[prev] ];
|
||||||
|
}
|
||||||
|
while (/\s/.test(content[end])) end++;
|
||||||
|
list[end] = match[0];
|
||||||
|
prev = end;
|
||||||
|
},
|
||||||
|
preserveParens: true,
|
||||||
|
program: toplevel,
|
||||||
|
sourceFile: name,
|
||||||
|
sourceType: "module",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
files.walk(new UglifyJS.TreeWalker(function(node) {
|
||||||
|
if (!(node instanceof UglifyJS.AST_Call)) return;
|
||||||
|
var list = annotations[node.start.file];
|
||||||
|
var pure = list[node.start.pos];
|
||||||
|
if (!pure) {
|
||||||
|
var tokens = node.start.parens;
|
||||||
|
if (tokens) for (var i = 0; !pure && i < tokens.length; i++) {
|
||||||
|
pure = list[tokens[i].pos];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pure) node.pure = pure;
|
||||||
|
}));
|
||||||
|
} else if (options.parse.spidermonkey) {
|
||||||
|
files = convert_ast(function(toplevel, name) {
|
||||||
|
var obj = JSON.parse(files[name]);
|
||||||
|
if (!toplevel) return obj;
|
||||||
|
toplevel.body = toplevel.body.concat(obj.body);
|
||||||
|
return toplevel;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (ex) {
|
||||||
|
fatal(ex);
|
||||||
|
}
|
||||||
|
var result;
|
||||||
|
if (specified["reduce-test"]) {
|
||||||
|
// load on demand - assumes cloned repository
|
||||||
|
var reduce_test = require("../test/reduce");
|
||||||
|
if (Object.keys(files).length != 1) fatal("can only test on a single file");
|
||||||
|
result = reduce_test(files[Object.keys(files)[0]], options, {
|
||||||
|
log: print_error,
|
||||||
|
verbose: true,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
result = UglifyJS.minify(files, options);
|
||||||
|
}
|
||||||
|
if (result.error) {
|
||||||
|
var ex = result.error;
|
||||||
|
if (ex.name == "SyntaxError") {
|
||||||
|
print_error("Parse error at " + ex.filename + ":" + ex.line + "," + ex.col);
|
||||||
|
var file = files[ex.filename];
|
||||||
|
if (file) {
|
||||||
|
var col = ex.col;
|
||||||
|
var lines = file.split(/\r?\n/);
|
||||||
|
var line = lines[ex.line - 1];
|
||||||
|
if (!line && !col) {
|
||||||
|
line = lines[ex.line - 2];
|
||||||
|
col = line.length;
|
||||||
|
}
|
||||||
|
if (line) {
|
||||||
|
var limit = 70;
|
||||||
|
if (col > limit) {
|
||||||
|
line = line.slice(col - limit);
|
||||||
|
col = limit;
|
||||||
|
}
|
||||||
|
print_error(line.slice(0, 80));
|
||||||
|
print_error(line.slice(0, col).replace(/\S/g, " ") + "^");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (ex.defs) {
|
||||||
|
print_error("Supported options:");
|
||||||
|
print_error(format_object(ex.defs));
|
||||||
|
}
|
||||||
|
fatal(ex);
|
||||||
|
} else if (output == "ast") {
|
||||||
|
if (!options.compress && !options.mangle) {
|
||||||
|
var toplevel = result.ast;
|
||||||
|
if (!(toplevel instanceof UglifyJS.AST_Toplevel)) {
|
||||||
|
if (!(toplevel instanceof UglifyJS.AST_Statement)) toplevel = new UglifyJS.AST_SimpleStatement({
|
||||||
|
body: toplevel,
|
||||||
|
});
|
||||||
|
toplevel = new UglifyJS.AST_Toplevel({
|
||||||
|
body: [ toplevel ],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
toplevel.figure_out_scope({});
|
||||||
|
}
|
||||||
|
print(JSON.stringify(result.ast, function(key, value) {
|
||||||
|
if (value) switch (key) {
|
||||||
|
case "enclosed":
|
||||||
|
return value.length ? value.map(symdef) : undefined;
|
||||||
|
case "functions":
|
||||||
|
case "globals":
|
||||||
|
case "variables":
|
||||||
|
return value.size() ? value.map(symdef) : undefined;
|
||||||
|
case "thedef":
|
||||||
|
return symdef(value);
|
||||||
|
}
|
||||||
|
if (skip_property(key, value)) return;
|
||||||
|
if (value instanceof UglifyJS.AST_Token) return;
|
||||||
|
if (value instanceof UglifyJS.Dictionary) return;
|
||||||
|
if (value instanceof UglifyJS.AST_Node) {
|
||||||
|
var result = {
|
||||||
|
_class: "AST_" + value.TYPE
|
||||||
|
};
|
||||||
|
value.CTOR.PROPS.forEach(function(prop) {
|
||||||
|
result[prop] = value[prop];
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}, 2));
|
||||||
|
} else if (output == "spidermonkey") {
|
||||||
|
print(JSON.stringify(result.ast.to_mozilla_ast(), null, 2));
|
||||||
|
} else if (output) {
|
||||||
|
var code;
|
||||||
|
if (result.ast) {
|
||||||
|
var opts = {};
|
||||||
|
for (var name in options.output) {
|
||||||
|
if (!/^ast|code$/.test(name)) opts[name] = options.output[name];
|
||||||
|
}
|
||||||
|
code = UglifyJS.AST_Node.from_mozilla_ast(result.ast.to_mozilla_ast()).print_to_string(opts);
|
||||||
|
} else {
|
||||||
|
code = result.code;
|
||||||
|
}
|
||||||
|
fs.writeFileSync(output, code);
|
||||||
|
if (result.map) fs.writeFileSync(output + ".map", result.map);
|
||||||
|
} else {
|
||||||
|
print(result.code);
|
||||||
|
}
|
||||||
|
if (nameCache) fs.writeFileSync(nameCache, JSON.stringify(options.nameCache));
|
||||||
|
if (result.timings) for (var phase in result.timings) {
|
||||||
|
print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fatal(message) {
|
||||||
|
if (message instanceof Error) {
|
||||||
|
message = message.stack.replace(/^\S*?Error:/, "ERROR:")
|
||||||
|
} else {
|
||||||
|
message = "ERROR: " + message;
|
||||||
|
}
|
||||||
|
print_error(message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// A file glob function that only supports "*" and "?" wildcards in the basename.
|
||||||
|
// Example: "foo/bar/*baz??.*.js"
|
||||||
|
// Argument `paths` must be an array of strings.
|
||||||
|
// Returns an array of strings. Garbage in, garbage out.
|
||||||
|
function simple_glob(paths) {
|
||||||
|
return paths.reduce(function(paths, glob) {
|
||||||
|
if (/\*|\?/.test(glob)) {
|
||||||
|
var dir = path.dirname(glob);
|
||||||
|
try {
|
||||||
|
var entries = fs.readdirSync(dir).filter(function(name) {
|
||||||
|
try {
|
||||||
|
return fs.statSync(path.join(dir, name)).isFile();
|
||||||
|
} catch (ex) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (ex) {}
|
||||||
|
if (entries) {
|
||||||
|
var pattern = "^" + path.basename(glob)
|
||||||
|
.replace(/[.+^$[\]\\(){}]/g, "\\$&")
|
||||||
|
.replace(/\*/g, "[^/\\\\]*")
|
||||||
|
.replace(/\?/g, "[^/\\\\]") + "$";
|
||||||
|
var mod = process.platform === "win32" ? "i" : "";
|
||||||
|
var rx = new RegExp(pattern, mod);
|
||||||
|
var results = entries.filter(function(name) {
|
||||||
|
return rx.test(name);
|
||||||
|
}).sort().map(function(name) {
|
||||||
|
return path.join(dir, name);
|
||||||
|
});
|
||||||
|
if (results.length) {
|
||||||
|
[].push.apply(paths, results);
|
||||||
|
return paths;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
paths.push(glob);
|
||||||
|
return paths;
|
||||||
|
}, []);
|
||||||
|
}
|
||||||
|
|
||||||
|
function read_file(path, default_value) {
|
||||||
|
try {
|
||||||
|
return fs.readFileSync(path, "utf8");
|
||||||
|
} catch (ex) {
|
||||||
|
if (ex.code == "ENOENT" && default_value != null) return default_value;
|
||||||
|
fatal(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse_js(value, options, flag) {
|
||||||
|
if (!options || typeof options != "object") options = Object.create(null);
|
||||||
|
if (typeof value == "string") try {
|
||||||
|
UglifyJS.parse(value, {
|
||||||
|
expression: true
|
||||||
|
}).walk(new UglifyJS.TreeWalker(function(node) {
|
||||||
|
if (node instanceof UglifyJS.AST_Assign) {
|
||||||
|
var name = node.left.print_to_string();
|
||||||
|
var value = node.right;
|
||||||
|
if (flag) {
|
||||||
|
options[name] = value;
|
||||||
|
} else if (value instanceof UglifyJS.AST_Array) {
|
||||||
|
options[name] = value.elements.map(to_string);
|
||||||
|
} else {
|
||||||
|
options[name] = to_string(value);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (node instanceof UglifyJS.AST_Symbol || node instanceof UglifyJS.AST_PropAccess) {
|
||||||
|
var name = node.print_to_string();
|
||||||
|
options[name] = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(node instanceof UglifyJS.AST_Sequence)) throw node;
|
||||||
|
|
||||||
|
function to_string(value) {
|
||||||
|
return value instanceof UglifyJS.AST_Constant ? value.value : value.print_to_string({
|
||||||
|
quote_keys: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
} catch (ex) {
|
||||||
|
if (flag) {
|
||||||
|
fatal("cannot parse arguments for '" + flag + "': " + value);
|
||||||
|
} else {
|
||||||
|
options[value] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
function skip_property(key, value) {
|
||||||
|
return skip_keys.indexOf(key) >= 0
|
||||||
|
// only skip truthy_keys if their value is falsy
|
||||||
|
|| truthy_keys.indexOf(key) >= 0 && !value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function symdef(def) {
|
||||||
|
var ret = (1e6 + def.id) + " " + def.name;
|
||||||
|
if (def.mangled_name) ret += " " + def.mangled_name;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function format_object(obj) {
|
||||||
|
var lines = [];
|
||||||
|
var padding = "";
|
||||||
|
Object.keys(obj).map(function(name) {
|
||||||
|
if (padding.length < name.length) padding = Array(name.length + 1).join(" ");
|
||||||
|
return [ name, JSON.stringify(obj[name]) ];
|
||||||
|
}).forEach(function(tokens) {
|
||||||
|
lines.push(" " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
|
||||||
|
});
|
||||||
|
return lines.join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_error(msg) {
|
||||||
|
process.stderr.write(msg);
|
||||||
|
process.stderr.write("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function print(txt) {
|
||||||
|
process.stdout.write(txt);
|
||||||
|
process.stdout.write("\n");
|
||||||
|
}
|
||||||
1
node_modules/.bin/uuid
generated
vendored
1
node_modules/.bin/uuid
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../uuid/dist/bin/uuid
|
|
||||||
2
node_modules/.bin/uuid
generated
vendored
Executable file
2
node_modules/.bin/uuid
generated
vendored
Executable file
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
require('../uuid-bin');
|
||||||
1
node_modules/.bin/which
generated
vendored
1
node_modules/.bin/which
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../which/bin/which
|
|
||||||
52
node_modules/.bin/which
generated
vendored
Executable file
52
node_modules/.bin/which
generated
vendored
Executable file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
var which = require("../")
|
||||||
|
if (process.argv.length < 3)
|
||||||
|
usage()
|
||||||
|
|
||||||
|
function usage () {
|
||||||
|
console.error('usage: which [-as] program ...')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
var all = false
|
||||||
|
var silent = false
|
||||||
|
var dashdash = false
|
||||||
|
var args = process.argv.slice(2).filter(function (arg) {
|
||||||
|
if (dashdash || !/^-/.test(arg))
|
||||||
|
return true
|
||||||
|
|
||||||
|
if (arg === '--') {
|
||||||
|
dashdash = true
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var flags = arg.substr(1).split('')
|
||||||
|
for (var f = 0; f < flags.length; f++) {
|
||||||
|
var flag = flags[f]
|
||||||
|
switch (flag) {
|
||||||
|
case 's':
|
||||||
|
silent = true
|
||||||
|
break
|
||||||
|
case 'a':
|
||||||
|
all = true
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
console.error('which: illegal option -- ' + flag)
|
||||||
|
usage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
|
process.exit(args.reduce(function (pv, current) {
|
||||||
|
try {
|
||||||
|
var f = which.sync(current, { all: all })
|
||||||
|
if (all)
|
||||||
|
f = f.join('\n')
|
||||||
|
if (!silent)
|
||||||
|
console.log(f)
|
||||||
|
return pv;
|
||||||
|
} catch (e) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}, 0))
|
||||||
1
node_modules/.bin/write-markdown
generated
vendored
1
node_modules/.bin/write-markdown
generated
vendored
|
|
@ -1 +0,0 @@
|
||||||
../ts-command-line-args/dist/write-markdown.js
|
|
||||||
96
node_modules/.bin/write-markdown
generated
vendored
Executable file
96
node_modules/.bin/write-markdown
generated
vendored
Executable file
|
|
@ -0,0 +1,96 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
|
function step(op) {
|
||||||
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
|
while (_) try {
|
||||||
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
||||||
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
||||||
|
switch (op[0]) {
|
||||||
|
case 0: case 1: t = op; break;
|
||||||
|
case 4: _.label++; return { value: op[1], done: false };
|
||||||
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
||||||
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
||||||
|
default:
|
||||||
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
||||||
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
||||||
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
||||||
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
||||||
|
if (t[2]) _.ops.pop();
|
||||||
|
_.trys.pop(); continue;
|
||||||
|
}
|
||||||
|
op = body.call(thisArg, _);
|
||||||
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
||||||
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var parse_1 = require("./parse");
|
||||||
|
var path_1 = require("path");
|
||||||
|
var fs_1 = require("fs");
|
||||||
|
var helpers_1 = require("./helpers");
|
||||||
|
var write_markdown_constants_1 = require("./write-markdown.constants");
|
||||||
|
var string_format_1 = __importDefault(require("string-format"));
|
||||||
|
var chalk_1 = __importDefault(require("chalk"));
|
||||||
|
function writeMarkdown() {
|
||||||
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
|
var args, markdownPath, markdownFileContent, usageGuides, modifiedFileContent, action, contentMatch, relativePath;
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
switch (_a.label) {
|
||||||
|
case 0:
|
||||||
|
args = parse_1.parse(write_markdown_constants_1.argumentConfig, write_markdown_constants_1.parseOptions);
|
||||||
|
markdownPath = path_1.resolve(args.markdownPath);
|
||||||
|
console.log("Loading existing file from '" + chalk_1.default.blue(markdownPath) + "'");
|
||||||
|
markdownFileContent = fs_1.readFileSync(markdownPath).toString();
|
||||||
|
usageGuides = helpers_1.generateUsageGuides(args);
|
||||||
|
modifiedFileContent = markdownFileContent;
|
||||||
|
if (usageGuides != null) {
|
||||||
|
modifiedFileContent = helpers_1.addContent(markdownFileContent, usageGuides, args);
|
||||||
|
if (!args.skipFooter) {
|
||||||
|
modifiedFileContent = helpers_1.addCommandLineArgsFooter(modifiedFileContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [4 /*yield*/, helpers_1.insertCode({ fileContent: modifiedFileContent, filePath: markdownPath }, args)];
|
||||||
|
case 1:
|
||||||
|
modifiedFileContent = _a.sent();
|
||||||
|
action = args.verify === true ? "verify" : "write";
|
||||||
|
contentMatch = markdownFileContent === modifiedFileContent ? "match" : "nonMatch";
|
||||||
|
relativePath = path_1.relative(process.cwd(), markdownPath);
|
||||||
|
switch (action + "_" + contentMatch) {
|
||||||
|
case 'verify_match':
|
||||||
|
console.log(chalk_1.default.green("'" + relativePath + "' content as expected. No update required."));
|
||||||
|
break;
|
||||||
|
case 'verify_nonMatch':
|
||||||
|
console.warn(chalk_1.default.yellow(string_format_1.default(args.verifyMessage || "'" + relativePath + "' file out of date. Rerun write-markdown to update.", {
|
||||||
|
fileName: relativePath,
|
||||||
|
})));
|
||||||
|
return [2 /*return*/, process.exit(1)];
|
||||||
|
case 'write_match':
|
||||||
|
console.log(chalk_1.default.blue("'" + relativePath + "' content not modified, not writing to file."));
|
||||||
|
break;
|
||||||
|
case 'write_nonMatch':
|
||||||
|
console.log("Writing modified file to '" + chalk_1.default.blue(relativePath) + "'");
|
||||||
|
fs_1.writeFileSync(relativePath, modifiedFileContent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return [2 /*return*/];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
writeMarkdown();
|
||||||
2229
node_modules/.package-lock.json
generated
vendored
2229
node_modules/.package-lock.json
generated
vendored
File diff suppressed because it is too large
Load diff
179
node_modules/@noble/hashes/README.md
generated
vendored
179
node_modules/@noble/hashes/README.md
generated
vendored
|
|
@ -1,12 +1,14 @@
|
||||||
# noble-hashes
|
# noble-hashes  [](https://github.com/prettier/prettier)
|
||||||
|
|
||||||
Audited & minimal JS implementation of SHA2, SHA3, RIPEMD, BLAKE2/3, HMAC, HKDF, PBKDF2 & Scrypt.
|
Audited & minimal JS implementation of SHA2, SHA3, RIPEMD, BLAKE2/3, HMAC, HKDF, PBKDF2 & Scrypt.
|
||||||
|
|
||||||
- 🔒 [**Audited**](#security) by an independent security firm
|
- **noble** family, zero dependencies
|
||||||
- 🔻 Tree-shaking-friendly: use only what's necessary, other code won't be included
|
- 🔒 [**Audited**](#security) by an independent security firm: no vulnerabilities have been found
|
||||||
- 🏎 Ultra-fast, hand-optimized for caveats of JS engines
|
- 🔻 Tree-shaking-friendly: there is no entry point, which ensures small size of your app
|
||||||
- 🔍 Unique tests ensure correctness: chained tests, sliding window tests, DoS tests, fuzzing
|
|
||||||
- 🔁 No unrolled loops: makes it easier to verify and reduces source code size up to 5x
|
- 🔁 No unrolled loops: makes it easier to verify and reduces source code size up to 5x
|
||||||
|
- 🏎 Ultra-fast, hand-optimized for caveats of JS engines
|
||||||
|
- 🔍 Unique tests ensure correctness: chained tests, sliding window tests, DoS tests
|
||||||
|
- 🧪 Differential fuzzing ensures even more correctness with [cryptofuzz](https://github.com/guidovranken/cryptofuzz)
|
||||||
- 🐢 Scrypt supports `N: 2**22`, while other implementations are limited to `2**20`
|
- 🐢 Scrypt supports `N: 2**22`, while other implementations are limited to `2**20`
|
||||||
- 🦘 SHA3 supports Keccak, TupleHash, KangarooTwelve and MarsupilamiFourteen
|
- 🦘 SHA3 supports Keccak, TupleHash, KangarooTwelve and MarsupilamiFourteen
|
||||||
- 🪶 Just 3.4k lines / 17KB gzipped. SHA256-only is 240 lines / 3KB gzipped
|
- 🪶 Just 3.4k lines / 17KB gzipped. SHA256-only is 240 lines / 3KB gzipped
|
||||||
|
|
@ -17,30 +19,28 @@ The library's initial development was funded by [Ethereum Foundation](https://et
|
||||||
|
|
||||||
> **noble-crypto** — high-security, easily auditable set of contained cryptographic libraries and tools.
|
> **noble-crypto** — high-security, easily auditable set of contained cryptographic libraries and tools.
|
||||||
|
|
||||||
- No dependencies, protection against supply chain attacks
|
- No dependencies, small files
|
||||||
- Auditable TypeScript / JS code
|
- Easily auditable TypeScript/JS code
|
||||||
- Supported on all major platforms
|
- Supported in all major browsers and stable node.js versions
|
||||||
- Releases are signed with PGP keys and built transparently with NPM provenance
|
- All releases are signed with PGP keys
|
||||||
- Check out [homepage](https://paulmillr.com/noble/) & all libraries:
|
- Check out [homepage](https://paulmillr.com/noble/) & all libraries:
|
||||||
[ciphers](https://github.com/paulmillr/noble-ciphers),
|
[curves](https://github.com/paulmillr/noble-curves) ([secp256k1](https://github.com/paulmillr/noble-secp256k1),
|
||||||
[curves](https://github.com/paulmillr/noble-curves),
|
[ed25519](https://github.com/paulmillr/noble-ed25519),
|
||||||
[hashes](https://github.com/paulmillr/noble-hashes),
|
[bls12-381](https://github.com/paulmillr/noble-bls12-381)),
|
||||||
4kb [secp256k1](https://github.com/paulmillr/noble-secp256k1) /
|
[hashes](https://github.com/paulmillr/noble-hashes)
|
||||||
[ed25519](https://github.com/paulmillr/noble-ed25519)
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
Use NPM in node.js / browser, or include single file from
|
||||||
|
[GitHub's releases page](https://github.com/paulmillr/noble-hashes/releases):
|
||||||
|
|
||||||
> npm install @noble/hashes
|
> npm install @noble/hashes
|
||||||
|
|
||||||
We support all major platforms and runtimes.
|
The library does not have an entry point. It allows you to select specific primitives and drop everything else. If you only want to use sha256, just use the library with rollup or other bundlers. This is done to make your bundles tiny.
|
||||||
For [Deno](https://deno.land), ensure to use [npm specifier](https://deno.land/manual@v1.28.0/node/npm_specifiers).
|
|
||||||
For React Native, you may need a [polyfill for getRandomValues](https://github.com/LinusU/react-native-get-random-values).
|
|
||||||
If you don't like NPM, a standalone [noble-hashes.js](https://github.com/paulmillr/noble-hashes/releases) is also available.
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// import * from '@noble/hashes'; // Error: use sub-imports, to ensure small app size
|
// Common.js and ECMAScript Modules (ESM)
|
||||||
import { sha256 } from '@noble/hashes/sha256'; // ECMAScript modules (ESM) and Common.js
|
import { sha256 } from '@noble/hashes/sha256';
|
||||||
// import { sha256 } from 'npm:@noble/hashes@1.3.0/sha256'; // Deno
|
|
||||||
console.log(sha256(new Uint8Array([1, 2, 3]))); // Uint8Array(32) [3, 144, 88, 198, 242...]
|
console.log(sha256(new Uint8Array([1, 2, 3]))); // Uint8Array(32) [3, 144, 88, 198, 242...]
|
||||||
// you could also pass strings that will be UTF8-encoded to Uint8Array
|
// you could also pass strings that will be UTF8-encoded to Uint8Array
|
||||||
console.log(sha256('abc')); // == sha256(new TextEncoder().encode('abc'))
|
console.log(sha256('abc')); // == sha256(new TextEncoder().encode('abc'))
|
||||||
|
|
@ -160,8 +160,7 @@ const h4b = sha384
|
||||||
.digest();
|
.digest();
|
||||||
```
|
```
|
||||||
|
|
||||||
See [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and
|
See [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and [the paper on SHA512/256](https://eprint.iacr.org/2010/548.pdf).
|
||||||
[the paper on SHA512/256](https://eprint.iacr.org/2010/548.pdf).
|
|
||||||
|
|
||||||
##### SHA3 (FIPS, SHAKE, Keccak)
|
##### SHA3 (FIPS, SHAKE, Keccak)
|
||||||
|
|
||||||
|
|
@ -188,8 +187,7 @@ const h7a = shake128('abc', { dkLen: 512 });
|
||||||
const h7b = shake256('abc', { dkLen: 512 });
|
const h7b = shake256('abc', { dkLen: 512 });
|
||||||
```
|
```
|
||||||
|
|
||||||
See [FIPS PUB 202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),
|
See ([FIPS PUB 202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf), [Website](https://keccak.team/keccak.html)).
|
||||||
[Website](https://keccak.team/keccak.html).
|
|
||||||
|
|
||||||
Check out [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub)
|
Check out [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub)
|
||||||
|
|
||||||
|
|
@ -226,12 +224,8 @@ p.feed('test');
|
||||||
const rand1b = p.fetch(1);
|
const rand1b = p.fetch(1);
|
||||||
```
|
```
|
||||||
|
|
||||||
- Full [NIST SP 800-185](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-185.pdf):
|
- Full [NIST SP 800-185](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-185.pdf): cSHAKE, KMAC, TupleHash, ParallelHash + XOF variants
|
||||||
cSHAKE, KMAC, TupleHash, ParallelHash + XOF variants
|
- 🦘 K12 ([KangarooTwelve Paper](https://keccak.team/files/KangarooTwelve.pdf), [RFC Draft](https://www.ietf.org/archive/id/draft-irtf-cfrg-kangarootwelve-06.txt)) and M14 aka MarsupilamiFourteen are basically parallel versions of Keccak with reduced number of rounds (same as Blake3 and ParallelHash).
|
||||||
- 🦘 K12 ([KangarooTwelve Paper](https://keccak.team/files/KangarooTwelve.pdf),
|
|
||||||
[RFC Draft](https://www.ietf.org/archive/id/draft-irtf-cfrg-kangarootwelve-06.txt))
|
|
||||||
and M14 aka MarsupilamiFourteen are basically parallel versions of Keccak with
|
|
||||||
reduced number of rounds (same as Blake3 and ParallelHash).
|
|
||||||
- [KeccakPRG](https://keccak.team/files/CSF-0.1.pdf): Pseudo-random generator based on Keccak
|
- [KeccakPRG](https://keccak.team/files/CSF-0.1.pdf): Pseudo-random generator based on Keccak
|
||||||
|
|
||||||
##### RIPEMD-160
|
##### RIPEMD-160
|
||||||
|
|
@ -246,8 +240,7 @@ const hash9 = ripemd160()
|
||||||
.digest();
|
.digest();
|
||||||
```
|
```
|
||||||
|
|
||||||
See [RFC 2286](https://datatracker.ietf.org/doc/html/rfc2286),
|
See [RFC 2286](https://datatracker.ietf.org/doc/html/rfc2286), [Website](https://homes.esat.kuleuven.be/~bosselae/ripemd160.html)
|
||||||
[Website](https://homes.esat.kuleuven.be/~bosselae/ripemd160.html)
|
|
||||||
|
|
||||||
##### BLAKE2b, BLAKE2s
|
##### BLAKE2b, BLAKE2s
|
||||||
|
|
||||||
|
|
@ -351,32 +344,30 @@ const scr3 = await scryptAsync(Uint8Array.from([1, 2, 3]), Uint8Array.from([4, 5
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
Conforms to [RFC 7914](https://datatracker.ietf.org/doc/html/rfc7914),
|
Matches [RFC 7914](https://datatracker.ietf.org/doc/html/rfc7914), [Website](https://www.tarsnap.com/scrypt.html)
|
||||||
[Website](https://www.tarsnap.com/scrypt.html)
|
|
||||||
|
|
||||||
- `N, r, p` are work factors. To understand them, see [the blog post](https://blog.filippo.io/the-scrypt-parameters/).
|
- `N, r, p` are work factors. To understand them, see [the blog post](https://blog.filippo.io/the-scrypt-parameters/).
|
||||||
- `dkLen` is the length of output bytes
|
- `dkLen` is the length of output bytes
|
||||||
- It is common to use N from `2**10` to `2**22` and `{r: 8, p: 1, dkLen: 32}`
|
- It is common to use N from `2**10` to `2**22` and `{r: 8, p: 1, dkLen: 32}`
|
||||||
- `onProgress` can be used with async version of the function to report progress to a user.
|
- `onProgress` can be used with async version of the function to report progress to a user.
|
||||||
|
|
||||||
Memory usage of scrypt is calculated with the formula `N * r * p * 128 + (128 * r * p)`,
|
Memory usage of scrypt is calculated with the formula `N * r * p * 128 + (128 * r * p)`, which means
|
||||||
which means `{N: 2 ** 22, r: 8, p: 1}` will use 4GB + 1KB of memory. To prevent
|
`{N: 2 ** 22, r: 8, p: 1}` will use 4GB + 1KB of memory. To prevent DoS, we limit scrypt to `1GB + 1KB` of RAM used,
|
||||||
DoS, we limit scrypt to `1GB + 1KB` of RAM used, which corresponds to
|
which corresponds to `{N: 2 ** 20, r: 8, p: 1}`. If you want to use higher values, increase `maxmem` using the formula above.
|
||||||
`{N: 2 ** 20, r: 8, p: 1}`. If you want to use higher values, increase
|
|
||||||
`maxmem` using the formula above.
|
|
||||||
|
|
||||||
_Note:_ noble supports `2**22` (4GB RAM) which is the highest amount amongst JS
|
_Note:_ noble supports `2**22` (4GB RAM) which is the highest amount amongst JS libs. Many other implementations don't support it.
|
||||||
libs. Many other implementations don't support it. We cannot support `2**23`,
|
We cannot support `2**23`, because there is a limitation in JS engines that makes allocating
|
||||||
because there is a limitation in JS engines that makes allocating
|
|
||||||
arrays bigger than 4GB impossible, but we're looking into other possible solutions.
|
arrays bigger than 4GB impossible, but we're looking into other possible solutions.
|
||||||
|
|
||||||
##### Argon2
|
##### Argon2
|
||||||
|
|
||||||
Experimental Argon2 RFC 9106 implementation. It may be removed at any time.
|
There's experimental argon2 RFC 9106 implementation. It may be removed at any time.
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { argon2d, argon2i, argon2id } from '@noble/hashes/argon2';
|
import { argon2d, argon2i, argon2id } from '@noble/hashes/scrypt';
|
||||||
const result = argon2id('password', 'salt', { t: 2, m: 65536, p: 1 });
|
const password = 'password';
|
||||||
|
const salt = 'salt';
|
||||||
|
const result = argon2id(password, salt, { t: 2, m: 65536, p: 1 });
|
||||||
```
|
```
|
||||||
|
|
||||||
##### ESKDF
|
##### ESKDF
|
||||||
|
|
@ -412,7 +403,7 @@ kdf.expire();
|
||||||
##### utils
|
##### utils
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { bytesToHex as toHex, randomBytes } from '@noble/hashes/utils';
|
import { bytesToHex as toHex, randomBytes } from '@noble/hashes/scrypt';
|
||||||
console.log(toHex(randomBytes(32)));
|
console.log(toHex(randomBytes(32)));
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -423,44 +414,17 @@ console.log(toHex(randomBytes(32)));
|
||||||
|
|
||||||
Noble is production-ready.
|
Noble is production-ready.
|
||||||
|
|
||||||
1. The library has been audited in Jan 2022 by an independent security firm
|
1. The library has been audited on Jan 5, 2022 by an independent security firm cure53: [PDF](https://cure53.de/pentest-report_hashing-libs.pdf). No vulnerabilities have been found. The audit has been funded by Ethereum Foundation with help of [Nomic Labs](https://nomiclabs.io). Modules `blake3`, `sha3-addons` and `sha1` have not been audited. See [changes since audit](https://github.com/paulmillr/noble-hashes/compare/1.0.0..main).
|
||||||
cure53: [PDF](https://cure53.de/pentest-report_hashing-libs.pdf).
|
2. The library has been fuzzed by [Guido Vranken's cryptofuzz](https://github.com/guidovranken/cryptofuzz). You can run the fuzzer by yourself to check it.
|
||||||
No vulnerabilities have been found. The audit has been funded by
|
3. [Timing attack](https://en.wikipedia.org/wiki/Timing_attack) considerations: _JIT-compiler_ and _Garbage Collector_ make "constant time" extremely hard to achieve in a scripting language. Which means _any other JS library can't have constant-timeness_. Even statically typed Rust, a language without GC, [makes it harder to achieve constant-time](https://www.chosenplaintext.ca/open-source/rust-timing-shield/security) for some cases. If your goal is absolute security, don't use any JS lib — including bindings to native ones. Use low-level libraries & languages. Nonetheless we're targetting algorithmic constant time.
|
||||||
[Ethereum Foundation](https://ethereum.org/en/) with help of [Nomic Labs](https://nomiclabs.io).
|
4. Memory dump considerations: the library shares state buffers between hash function calls. The buffers are zeroed-out after each call. However, if an attacker can read application memory, you are doomed in any case:
|
||||||
Modules `blake3`, `sha3-addons`, `sha1` and `argon2` have not been audited.
|
- At some point, input will be a string and strings are immutable in JS: there is no way to overwrite them with zeros. For example: deriving key from `scrypt(password, salt)` where password and salt are strings
|
||||||
See [changes since audit](https://github.com/paulmillr/noble-hashes/compare/1.0.0..main).
|
|
||||||
2. The library has been fuzzed by [Guido Vranken's cryptofuzz](https://github.com/guidovranken/cryptofuzz).
|
|
||||||
You can run the fuzzer by yourself to check it.
|
|
||||||
3. [Timing attack](https://en.wikipedia.org/wiki/Timing_attack) considerations:
|
|
||||||
_JIT-compiler_ and _Garbage Collector_ make "constant time" extremely hard to
|
|
||||||
achieve in a scripting language. Which means _any other JS library can't have constant-timeness_.
|
|
||||||
Even statically typed Rust, a language without GC,
|
|
||||||
[makes it harder to achieve constant-time](https://www.chosenplaintext.ca/open-source/rust-timing-shield/security)
|
|
||||||
for some cases. If your goal is absolute security, don't use any JS lib — including
|
|
||||||
bindings to native ones. Use low-level libraries & languages. Nonetheless we're
|
|
||||||
targetting algorithmic constant time.
|
|
||||||
4. Memory dump considerations: the library shares state buffers between hash
|
|
||||||
function calls. The buffers are zeroed-out after each call. However, if an attacker
|
|
||||||
can read application memory, you are doomed in any case:
|
|
||||||
- At some point, input will be a string and strings are immutable in JS:
|
|
||||||
there is no way to overwrite them with zeros. For example: deriving
|
|
||||||
key from `scrypt(password, salt)` where password and salt are strings
|
|
||||||
- Input from a file will stay in file buffers
|
- Input from a file will stay in file buffers
|
||||||
- Input / output will be re-used multiple times in application which means
|
- Input / output will be re-used multiple times in application which means it could stay in memory
|
||||||
it could stay in memory
|
- `await anything()` will always write all internal variables (including numbers) to memory. With async functions / Promises there are no guarantees when the code chunk would be executed. Which means attacker can have plenty of time to read data from memory
|
||||||
- `await anything()` will always write all internal variables (including numbers)
|
- There is no way to guarantee anything about zeroing sensitive data without complex tests-suite which will dump process memory and verify that there is no sensitive data left. For JS it means testing all browsers (incl. mobile), which is complex. And of course it will be useless without using the same test-suite in the actual application that consumes the library
|
||||||
to memory. With async functions / Promises there are no guarantees when the code
|
|
||||||
chunk would be executed. Which means attacker can have plenty of time to read data from memory
|
|
||||||
- There is no way to guarantee anything about zeroing sensitive data without
|
|
||||||
complex tests-suite which will dump process memory and verify that there is
|
|
||||||
no sensitive data left. For JS it means testing all browsers (incl. mobile),
|
|
||||||
which is complex. And of course it will be useless without using the same
|
|
||||||
test-suite in the actual application that consumes the library
|
|
||||||
|
|
||||||
We consider infrastructure attacks like rogue NPM modules very important; that's
|
We consider infrastructure attacks like rogue NPM modules very important; that's why it's crucial to minimize the amount of 3rd-party dependencies & native bindings. If your app uses 500 dependencies, any dep could get hacked and you'll be downloading malware with every `npm install`. Our goal is to minimize this attack vector.
|
||||||
why it's crucial to minimize the amount of 3rd-party dependencies & native bindings.
|
|
||||||
If your app uses 500 dependencies, any dep could get hacked and you'll be downloading
|
|
||||||
malware with every `npm install`. Our goal is to minimize this attack vector.
|
|
||||||
|
|
||||||
## Speed
|
## Speed
|
||||||
|
|
||||||
|
|
@ -469,18 +433,17 @@ Note that PBKDF2 and Scrypt are tested with extremely high work factor.
|
||||||
To run benchmarks, execute `npm run bench:install` and then `npm run bench`
|
To run benchmarks, execute `npm run bench:install` and then `npm run bench`
|
||||||
|
|
||||||
```
|
```
|
||||||
SHA256 32B x 1,219,512 ops/sec @ 820ns/op ± 2.58% (min: 625ns, max: 4ms)
|
SHA256 32B x 1,126,126 ops/sec @ 888ns/op
|
||||||
SHA384 32B x 512,032 ops/sec @ 1μs/op
|
SHA384 32B x 463,606 ops/sec @ 2μs/op
|
||||||
SHA512 32B x 509,943 ops/sec @ 1μs/op
|
SHA512 32B x 467,945 ops/sec @ 2μs/op
|
||||||
SHA3-256, keccak256, shake256 32B x 199,600 ops/sec @ 5μs/op
|
SHA3-256, keccak256, shake256 32B x 192,049 ops/sec @ 5μs/op
|
||||||
Kangaroo12 32B x 336,360 ops/sec @ 2μs/op
|
Kangaroo12 32B x 318,066 ops/sec @ 3μs/op
|
||||||
Marsupilami14 32B x 298,418 ops/sec @ 3μs/op
|
Marsupilami14 32B x 283,929 ops/sec @ 3μs/op
|
||||||
BLAKE2b 32B x 379,794 ops/sec @ 2μs/op
|
BLAKE2b 32B x 352,112 ops/sec @ 2μs/op
|
||||||
BLAKE2s 32B x 515,995 ops/sec @ 1μs/op ± 1.07% (min: 1μs, max: 4ms)
|
BLAKE2s 32B x 511,770 ops/sec @ 1μs/op
|
||||||
BLAKE3 32B x 588,235 ops/sec @ 1μs/op ± 1.36% (min: 1μs, max: 5ms)
|
BLAKE3 32B x 582,072 ops/sec @ 1μs/op
|
||||||
RIPEMD160 32B x 1,140,250 ops/sec @ 877ns/op ± 3.12% (min: 708ns, max: 6ms)
|
RIPEMD160 32B x 1,230,012 ops/sec @ 813ns/op
|
||||||
HMAC-SHA256 32B x 377,358 ops/sec @ 2μs/op
|
HMAC-SHA256 32B x 238,663 ops/sec @ 4μs/op
|
||||||
|
|
||||||
HKDF-SHA256 32B x 108,377 ops/sec @ 9μs/op
|
HKDF-SHA256 32B x 108,377 ops/sec @ 9μs/op
|
||||||
PBKDF2-HMAC-SHA256 262144 x 3 ops/sec @ 326ms/op
|
PBKDF2-HMAC-SHA256 262144 x 3 ops/sec @ 326ms/op
|
||||||
PBKDF2-HMAC-SHA512 262144 x 1 ops/sec @ 970ms/op
|
PBKDF2-HMAC-SHA512 262144 x 1 ops/sec @ 970ms/op
|
||||||
|
|
@ -490,23 +453,23 @@ Scrypt r: 8, p: 1, n: 262144 x 1 ops/sec @ 616ms/op
|
||||||
Compare to native node.js implementation that uses C bindings instead of pure-js code:
|
Compare to native node.js implementation that uses C bindings instead of pure-js code:
|
||||||
|
|
||||||
```
|
```
|
||||||
SHA256 32B node x 1,302,083 ops/sec @ 768ns/op ± 10.54% (min: 416ns, max: 7ms)
|
SHA256 32B native x 1,164,144 ops/sec @ 859ns/op
|
||||||
SHA384 32B node x 975,609 ops/sec @ 1μs/op ± 11.32% (min: 625ns, max: 8ms)
|
SHA384 32B native x 938,086 ops/sec @ 1μs/op
|
||||||
SHA512 32B node x 983,284 ops/sec @ 1μs/op ± 11.24% (min: 625ns, max: 8ms)
|
SHA512 32B native x 946,969 ops/sec @ 1μs/op
|
||||||
SHA3-256 32B node x 910,746 ops/sec @ 1μs/op ± 12.19% (min: 666ns, max: 10ms)
|
SHA3 32B native x 879,507 ops/sec @ 1μs/op
|
||||||
keccak, k12, m14 are not implemented
|
keccak, k12, m14 are not implemented
|
||||||
BLAKE2b 32B node x 967,117 ops/sec @ 1μs/op ± 11.26% (min: 625ns, max: 9ms)
|
BLAKE2b 32B native x 879,507 ops/sec @ 1μs/op
|
||||||
BLAKE2s 32B node x 1,055,966 ops/sec @ 947ns/op ± 11.07% (min: 583ns, max: 7ms)
|
BLAKE2s 32B native x 977,517 ops/sec @ 1μs/op
|
||||||
BLAKE3 is not implemented
|
BLAKE3 is not implemented
|
||||||
RIPEMD160 32B node x 1,002,004 ops/sec @ 998ns/op ± 10.66% (min: 625ns, max: 7ms)
|
RIPEMD160 32B native x 913,242 ops/sec @ 1μs/op
|
||||||
HMAC-SHA256 32B node x 919,963 ops/sec @ 1μs/op ± 6.13% (min: 833ns, max: 5ms)
|
HMAC-SHA256 32B native x 755,287 ops/sec @ 1μs/op
|
||||||
HKDF-SHA256 32 node x 369,276 ops/sec @ 2μs/op ± 13.59% (min: 1μs, max: 9ms)
|
HKDF-SHA256 32B native x 207,856 ops/sec @ 4μs/op
|
||||||
PBKDF2-HMAC-SHA256 262144 node x 25 ops/sec @ 39ms/op
|
PBKDF2-HMAC-SHA256 262144 native x 23 ops/sec @ 42ms/op
|
||||||
PBKDF2-HMAC-SHA512 262144 node x 7 ops/sec @ 132ms/op
|
Scrypt 262144 native x 1 ops/sec @ 564ms/op
|
||||||
Scrypt r: 8, p: 1, n: 262144 node x 1 ops/sec @ 523ms/op
|
Scrypt 262144 scrypt.js x 0 ops/sec @ 1678ms/op
|
||||||
```
|
```
|
||||||
|
|
||||||
It is possible to [make this library 4x+ faster](./benchmark/README.md) by
|
It is possible to [make this library 4x+ faster](./test/benchmark/README.md) by
|
||||||
_doing code generation of full loop unrolls_. We've decided against it. Reasons:
|
_doing code generation of full loop unrolls_. We've decided against it. Reasons:
|
||||||
|
|
||||||
- the library must be auditable, with minimum amount of code, and zero dependencies
|
- the library must be auditable, with minimum amount of code, and zero dependencies
|
||||||
|
|
|
||||||
15
node_modules/@noble/hashes/_assert.d.ts
generated
vendored
15
node_modules/@noble/hashes/_assert.d.ts
generated
vendored
|
|
@ -1,16 +1,15 @@
|
||||||
declare function number(n: number): void;
|
export declare function number(n: number): void;
|
||||||
declare function bool(b: boolean): void;
|
export declare function bool(b: boolean): void;
|
||||||
declare function bytes(b: Uint8Array | undefined, ...lengths: number[]): void;
|
export declare function bytes(b: Uint8Array | undefined, ...lengths: number[]): void;
|
||||||
type Hash = {
|
declare type Hash = {
|
||||||
(data: Uint8Array): Uint8Array;
|
(data: Uint8Array): Uint8Array;
|
||||||
blockLen: number;
|
blockLen: number;
|
||||||
outputLen: number;
|
outputLen: number;
|
||||||
create: any;
|
create: any;
|
||||||
};
|
};
|
||||||
declare function hash(hash: Hash): void;
|
export declare function hash(hash: Hash): void;
|
||||||
declare function exists(instance: any, checkFinished?: boolean): void;
|
export declare function exists(instance: any, checkFinished?: boolean): void;
|
||||||
declare function output(out: any, instance: any): void;
|
export declare function output(out: any, instance: any): void;
|
||||||
export { number, bool, bytes, hash, exists, output };
|
|
||||||
declare const assert: {
|
declare const assert: {
|
||||||
number: typeof number;
|
number: typeof number;
|
||||||
bool: typeof bool;
|
bool: typeof bool;
|
||||||
|
|
|
||||||
13
node_modules/@noble/hashes/_assert.js
generated
vendored
13
node_modules/@noble/hashes/_assert.js
generated
vendored
|
|
@ -13,9 +13,9 @@ function bool(b) {
|
||||||
exports.bool = bool;
|
exports.bool = bool;
|
||||||
function bytes(b, ...lengths) {
|
function bytes(b, ...lengths) {
|
||||||
if (!(b instanceof Uint8Array))
|
if (!(b instanceof Uint8Array))
|
||||||
throw new Error('Expected Uint8Array');
|
throw new TypeError('Expected Uint8Array');
|
||||||
if (lengths.length > 0 && !lengths.includes(b.length))
|
if (lengths.length > 0 && !lengths.includes(b.length))
|
||||||
throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);
|
throw new TypeError(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);
|
||||||
}
|
}
|
||||||
exports.bytes = bytes;
|
exports.bytes = bytes;
|
||||||
function hash(hash) {
|
function hash(hash) {
|
||||||
|
|
@ -40,6 +40,13 @@ function output(out, instance) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.output = output;
|
exports.output = output;
|
||||||
const assert = { number, bool, bytes, hash, exists, output };
|
const assert = {
|
||||||
|
number,
|
||||||
|
bool,
|
||||||
|
bytes,
|
||||||
|
hash,
|
||||||
|
exists,
|
||||||
|
output,
|
||||||
|
};
|
||||||
exports.default = assert;
|
exports.default = assert;
|
||||||
//# sourceMappingURL=_assert.js.map
|
//# sourceMappingURL=_assert.js.map
|
||||||
2
node_modules/@noble/hashes/_assert.js.map
generated
vendored
2
node_modules/@noble/hashes/_assert.js.map
generated
vendored
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"_assert.js","sourceRoot":"","sources":["src/_assert.ts"],"names":[],"mappings":";;;AAAA,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;AACzF,CAAC;AAqCQ,wBAAM;AAnCf,SAAS,IAAI,CAAC,CAAU;IACtB,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AAiCgB,oBAAI;AA/BrB,SAAS,KAAK,CAAC,CAAyB,EAAE,GAAG,OAAiB;IAC5D,IAAI,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,mBAAmB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3F,CAAC;AA2BsB,sBAAK;AAnB5B,SAAS,IAAI,CAAC,IAAU;IACtB,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU;QACjE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC;AAc6B,oBAAI;AAZlC,SAAS,MAAM,CAAC,QAAa,EAAE,aAAa,GAAG,IAAI;IACjD,IAAI,QAAQ,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,IAAI,aAAa,IAAI,QAAQ,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACnG,CAAC;AASmC,wBAAM;AAR1C,SAAS,MAAM,CAAC,GAAQ,EAAE,QAAa;IACrC,KAAK,CAAC,GAAG,CAAC,CAAC;IACX,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,yDAAyD,GAAG,EAAE,CAAC,CAAC;KACjF;AACH,CAAC;AAE2C,wBAAM;AAElD,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC7D,kBAAe,MAAM,CAAC"}
|
{"version":3,"file":"_assert.js","sourceRoot":"","sources":["src/_assert.ts"],"names":[],"mappings":";;;AAAA,SAAgB,MAAM,CAAC,CAAS;IAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;AACzF,CAAC;AAFD,wBAEC;AAED,SAAgB,IAAI,CAAC,CAAU;IAC7B,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AAFD,oBAEC;AAED,SAAgB,KAAK,CAAC,CAAyB,EAAE,GAAG,OAAiB;IACnE,IAAI,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACnD,MAAM,IAAI,SAAS,CAAC,iCAAiC,OAAO,mBAAmB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/F,CAAC;AAJD,sBAIC;AAQD,SAAgB,IAAI,CAAC,IAAU;IAC7B,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU;QACjE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC;AALD,oBAKC;AAED,SAAgB,MAAM,CAAC,QAAa,EAAE,aAAa,GAAG,IAAI;IACxD,IAAI,QAAQ,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,IAAI,aAAa,IAAI,QAAQ,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACnG,CAAC;AAHD,wBAGC;AACD,SAAgB,MAAM,CAAC,GAAQ,EAAE,QAAa;IAC5C,KAAK,CAAC,GAAG,CAAC,CAAC;IACX,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,yDAAyD,GAAG,EAAE,CAAC,CAAC;KACjF;AACH,CAAC;AAND,wBAMC;AAED,MAAM,MAAM,GAAG;IACb,MAAM;IACN,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,MAAM;IACN,MAAM;CACP,CAAC;AAEF,kBAAe,MAAM,CAAC"}
|
||||||
2
node_modules/@noble/hashes/_blake2.d.ts
generated
vendored
2
node_modules/@noble/hashes/_blake2.d.ts
generated
vendored
|
|
@ -1,6 +1,6 @@
|
||||||
import { Hash, Input } from './utils.js';
|
import { Hash, Input } from './utils.js';
|
||||||
export declare const SIGMA: Uint8Array;
|
export declare const SIGMA: Uint8Array;
|
||||||
export type BlakeOpts = {
|
export declare type BlakeOpts = {
|
||||||
dkLen?: number;
|
dkLen?: number;
|
||||||
key?: Input;
|
key?: Input;
|
||||||
salt?: Input;
|
salt?: Input;
|
||||||
|
|
|
||||||
29
node_modules/@noble/hashes/_blake2.js
generated
vendored
29
node_modules/@noble/hashes/_blake2.js
generated
vendored
|
|
@ -3,8 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.BLAKE2 = exports.SIGMA = void 0;
|
exports.BLAKE2 = exports.SIGMA = void 0;
|
||||||
const _assert_js_1 = require("./_assert.js");
|
const _assert_js_1 = require("./_assert.js");
|
||||||
const utils_js_1 = require("./utils.js");
|
const utils_js_1 = require("./utils.js");
|
||||||
// Blake is based on ChaCha permutation.
|
|
||||||
// For BLAKE2b, the two extra permutations for rounds 10 and 11 are SIGMA[10..11] = SIGMA[0..1].
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
exports.SIGMA = new Uint8Array([
|
exports.SIGMA = new Uint8Array([
|
||||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
|
|
@ -17,6 +15,7 @@ exports.SIGMA = new Uint8Array([
|
||||||
13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,
|
13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,
|
||||||
6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,
|
6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,
|
||||||
10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,
|
10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,
|
||||||
|
// For BLAKE2b, the two extra permutations for rounds 10 and 11 are SIGMA[10..11] = SIGMA[0..1].
|
||||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
|
14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,
|
||||||
]);
|
]);
|
||||||
|
|
@ -29,21 +28,21 @@ class BLAKE2 extends utils_js_1.Hash {
|
||||||
this.pos = 0;
|
this.pos = 0;
|
||||||
this.finished = false;
|
this.finished = false;
|
||||||
this.destroyed = false;
|
this.destroyed = false;
|
||||||
(0, _assert_js_1.number)(blockLen);
|
_assert_js_1.default.number(blockLen);
|
||||||
(0, _assert_js_1.number)(outputLen);
|
_assert_js_1.default.number(outputLen);
|
||||||
(0, _assert_js_1.number)(keyLen);
|
_assert_js_1.default.number(keyLen);
|
||||||
if (outputLen < 0 || outputLen > keyLen)
|
if (outputLen < 0 || outputLen > keyLen)
|
||||||
throw new Error('outputLen bigger than keyLen');
|
throw new Error('Blake2: outputLen bigger than keyLen');
|
||||||
if (opts.key !== undefined && (opts.key.length < 1 || opts.key.length > keyLen))
|
if (opts.key !== undefined && (opts.key.length < 1 || opts.key.length > keyLen))
|
||||||
throw new Error(`key must be up 1..${keyLen} byte long or undefined`);
|
throw new Error(`Key should be up 1..${keyLen} byte long or undefined`);
|
||||||
if (opts.salt !== undefined && opts.salt.length !== saltLen)
|
if (opts.salt !== undefined && opts.salt.length !== saltLen)
|
||||||
throw new Error(`salt must be ${saltLen} byte long or undefined`);
|
throw new Error(`Salt should be ${saltLen} byte long or undefined`);
|
||||||
if (opts.personalization !== undefined && opts.personalization.length !== persLen)
|
if (opts.personalization !== undefined && opts.personalization.length !== persLen)
|
||||||
throw new Error(`personalization must be ${persLen} byte long or undefined`);
|
throw new Error(`Personalization should be ${persLen} byte long or undefined`);
|
||||||
this.buffer32 = (0, utils_js_1.u32)((this.buffer = new Uint8Array(blockLen)));
|
this.buffer32 = (0, utils_js_1.u32)((this.buffer = new Uint8Array(blockLen)));
|
||||||
}
|
}
|
||||||
update(data) {
|
update(data) {
|
||||||
(0, _assert_js_1.exists)(this);
|
_assert_js_1.default.exists(this);
|
||||||
// Main difference with other hashes: there is flag for last block,
|
// Main difference with other hashes: there is flag for last block,
|
||||||
// so we cannot process current block before we know that there
|
// so we cannot process current block before we know that there
|
||||||
// is the next one. This significantly complicates logic and reduces ability
|
// is the next one. This significantly complicates logic and reduces ability
|
||||||
|
|
@ -51,8 +50,6 @@ class BLAKE2 extends utils_js_1.Hash {
|
||||||
const { blockLen, buffer, buffer32 } = this;
|
const { blockLen, buffer, buffer32 } = this;
|
||||||
data = (0, utils_js_1.toBytes)(data);
|
data = (0, utils_js_1.toBytes)(data);
|
||||||
const len = data.length;
|
const len = data.length;
|
||||||
const offset = data.byteOffset;
|
|
||||||
const buf = data.buffer;
|
|
||||||
for (let pos = 0; pos < len;) {
|
for (let pos = 0; pos < len;) {
|
||||||
// If buffer is full and we still have input (don't process last block, same as blake2s)
|
// If buffer is full and we still have input (don't process last block, same as blake2s)
|
||||||
if (this.pos === blockLen) {
|
if (this.pos === blockLen) {
|
||||||
|
|
@ -60,10 +57,10 @@ class BLAKE2 extends utils_js_1.Hash {
|
||||||
this.pos = 0;
|
this.pos = 0;
|
||||||
}
|
}
|
||||||
const take = Math.min(blockLen - this.pos, len - pos);
|
const take = Math.min(blockLen - this.pos, len - pos);
|
||||||
const dataOffset = offset + pos;
|
const dataOffset = data.byteOffset + pos;
|
||||||
// full block && aligned to 4 bytes && not last in input
|
// full block && aligned to 4 bytes && not last in input
|
||||||
if (take === blockLen && !(dataOffset % 4) && pos + take < len) {
|
if (take === blockLen && !(dataOffset % 4) && pos + take < len) {
|
||||||
const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));
|
const data32 = new Uint32Array(data.buffer, dataOffset, Math.floor((len - pos) / 4));
|
||||||
for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {
|
for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {
|
||||||
this.length += blockLen;
|
this.length += blockLen;
|
||||||
this.compress(data32, pos32, false);
|
this.compress(data32, pos32, false);
|
||||||
|
|
@ -78,8 +75,8 @@ class BLAKE2 extends utils_js_1.Hash {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
digestInto(out) {
|
digestInto(out) {
|
||||||
(0, _assert_js_1.exists)(this);
|
_assert_js_1.default.exists(this);
|
||||||
(0, _assert_js_1.output)(out, this);
|
_assert_js_1.default.output(out, this);
|
||||||
const { pos, buffer32 } = this;
|
const { pos, buffer32 } = this;
|
||||||
this.finished = true;
|
this.finished = true;
|
||||||
// Padding
|
// Padding
|
||||||
|
|
|
||||||
2
node_modules/@noble/hashes/_blake2.js.map
generated
vendored
2
node_modules/@noble/hashes/_blake2.js.map
generated
vendored
File diff suppressed because one or more lines are too long
6
node_modules/@noble/hashes/_sha2.js
generated
vendored
6
node_modules/@noble/hashes/_sha2.js
generated
vendored
|
|
@ -32,7 +32,7 @@ class SHA2 extends utils_js_1.Hash {
|
||||||
this.view = (0, utils_js_1.createView)(this.buffer);
|
this.view = (0, utils_js_1.createView)(this.buffer);
|
||||||
}
|
}
|
||||||
update(data) {
|
update(data) {
|
||||||
(0, _assert_js_1.exists)(this);
|
_assert_js_1.default.exists(this);
|
||||||
const { view, buffer, blockLen } = this;
|
const { view, buffer, blockLen } = this;
|
||||||
data = (0, utils_js_1.toBytes)(data);
|
data = (0, utils_js_1.toBytes)(data);
|
||||||
const len = data.length;
|
const len = data.length;
|
||||||
|
|
@ -58,8 +58,8 @@ class SHA2 extends utils_js_1.Hash {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
digestInto(out) {
|
digestInto(out) {
|
||||||
(0, _assert_js_1.exists)(this);
|
_assert_js_1.default.exists(this);
|
||||||
(0, _assert_js_1.output)(out, this);
|
_assert_js_1.default.output(out, this);
|
||||||
this.finished = true;
|
this.finished = true;
|
||||||
// Padding
|
// Padding
|
||||||
// We can avoid allocation of buffer for padding completely if it
|
// We can avoid allocation of buffer for padding completely if it
|
||||||
|
|
|
||||||
2
node_modules/@noble/hashes/_sha2.js.map
generated
vendored
2
node_modules/@noble/hashes/_sha2.js.map
generated
vendored
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"_sha2.js","sourceRoot":"","sources":["src/_sha2.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAC9C,yCAA8D;AAE9D,yBAAyB;AACzB,SAAS,YAAY,CAAC,IAAc,EAAE,UAAkB,EAAE,KAAa,EAAE,IAAa;IACpF,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,6BAA6B;AAC7B,MAAsB,IAAwB,SAAQ,eAAO;IAc3D,YACW,QAAgB,EAClB,SAAiB,EACf,SAAiB,EACjB,IAAa;QAEtB,KAAK,EAAE,CAAC;QALC,aAAQ,GAAR,QAAQ,CAAQ;QAClB,cAAS,GAAT,SAAS,CAAQ;QACf,cAAS,GAAT,SAAS,CAAQ;QACjB,SAAI,GAAJ,IAAI,CAAS;QATd,aAAQ,GAAG,KAAK,CAAC;QACjB,WAAM,GAAG,CAAC,CAAC;QACX,QAAG,GAAG,CAAC,CAAC;QACR,cAAS,GAAG,KAAK,CAAC;QAS1B,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAA,qBAAU,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,CAAC,IAAW;QAChB,IAAA,mBAAM,EAAC,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACxC,IAAI,GAAG,IAAA,kBAAO,EAAC,IAAI,CAAC,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAI;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;YACtD,8EAA8E;YAC9E,IAAI,IAAI,KAAK,QAAQ,EAAE;gBACrB,MAAM,QAAQ,GAAG,IAAA,qBAAU,EAAC,IAAI,CAAC,CAAC;gBAClC,OAAO,QAAQ,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,QAAQ;oBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC3E,SAAS;aACV;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;YACjB,GAAG,IAAI,IAAI,CAAC;YACZ,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;aACd;SACF;QACD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,UAAU,CAAC,GAAe;QACxB,IAAA,mBAAM,EAAC,IAAI,CAAC,CAAC;QACb,IAAA,mBAAM,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,UAAU;QACV,iEAAiE;QACjE,sEAAsE;QACtE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAC9C,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACnB,oCAAoC;QACpC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,sHAAsH;QACtH,IAAI,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,GAAG,EAAE;YACnC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtB,GAAG,GAAG,CAAC,CAAC;SACT;QACD,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,gGAAgG;QAChG,oFAAoF;QACpF,iDAAiD;QACjD,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,IAAA,qBAAU,EAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,yFAAyF;QACzF,IAAI,GAAG,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM;QACJ,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;IACD,UAAU,CAAC,EAAM;QACf,EAAE,KAAF,EAAE,GAAK,IAAK,IAAI,CAAC,WAAmB,EAAO,EAAC;QAC5C,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACtB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACpE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;QACnB,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;QACb,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACvB,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;QACzB,IAAI,MAAM,GAAG,QAAQ;YAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AApGD,oBAoGC"}
|
{"version":3,"file":"_sha2.js","sourceRoot":"","sources":["src/_sha2.ts"],"names":[],"mappings":";;;AAAA,6CAAkC;AAClC,yCAA8D;AAE9D,yBAAyB;AACzB,SAAS,YAAY,CAAC,IAAc,EAAE,UAAkB,EAAE,KAAa,EAAE,IAAa;IACpF,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,6BAA6B;AAC7B,MAAsB,IAAwB,SAAQ,eAAO;IAc3D,YACW,QAAgB,EAClB,SAAiB,EACf,SAAiB,EACjB,IAAa;QAEtB,KAAK,EAAE,CAAC;QALC,aAAQ,GAAR,QAAQ,CAAQ;QAClB,cAAS,GAAT,SAAS,CAAQ;QACf,cAAS,GAAT,SAAS,CAAQ;QACjB,SAAI,GAAJ,IAAI,CAAS;QATd,aAAQ,GAAG,KAAK,CAAC;QACjB,WAAM,GAAG,CAAC,CAAC;QACX,QAAG,GAAG,CAAC,CAAC;QACR,cAAS,GAAG,KAAK,CAAC;QAS1B,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAA,qBAAU,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,CAAC,IAAW;QAChB,oBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACxC,IAAI,GAAG,IAAA,kBAAO,EAAC,IAAI,CAAC,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAI;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;YACtD,8EAA8E;YAC9E,IAAI,IAAI,KAAK,QAAQ,EAAE;gBACrB,MAAM,QAAQ,GAAG,IAAA,qBAAU,EAAC,IAAI,CAAC,CAAC;gBAClC,OAAO,QAAQ,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,QAAQ;oBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC3E,SAAS;aACV;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;YACjB,GAAG,IAAI,IAAI,CAAC;YACZ,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;aACd;SACF;QACD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,UAAU,CAAC,GAAe;QACxB,oBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,oBAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,UAAU;QACV,iEAAiE;QACjE,sEAAsE;QACtE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAC9C,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACnB,oCAAoC;QACpC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,sHAAsH;QACtH,IAAI,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,GAAG,EAAE;YACnC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtB,GAAG,GAAG,CAAC,CAAC;SACT;QACD,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,gGAAgG;QAChG,oFAAoF;QACpF,iDAAiD;QACjD,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,IAAA,qBAAU,EAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,yFAAyF;QACzF,IAAI,GAAG,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM;QACJ,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;IACD,UAAU,CAAC,EAAM;QACf,EAAE,KAAF,EAAE,GAAK,IAAK,IAAI,CAAC,WAAmB,EAAO,EAAC;QAC5C,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACtB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACpE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;QACnB,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;QACb,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACvB,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;QACzB,IAAI,MAAM,GAAG,QAAQ;YAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AApGD,oBAoGC"}
|
||||||
33
node_modules/@noble/hashes/_u64.d.ts
generated
vendored
33
node_modules/@noble/hashes/_u64.d.ts
generated
vendored
|
|
@ -1,44 +1,25 @@
|
||||||
declare function fromBig(n: bigint, le?: boolean): {
|
export declare function fromBig(n: bigint, le?: boolean): {
|
||||||
h: number;
|
h: number;
|
||||||
l: number;
|
l: number;
|
||||||
};
|
};
|
||||||
declare function split(lst: bigint[], le?: boolean): Uint32Array[];
|
export declare function split(lst: bigint[], le?: boolean): Uint32Array[];
|
||||||
declare const toBig: (h: number, l: number) => bigint;
|
export declare const toBig: (h: number, l: number) => bigint;
|
||||||
declare const shrSH: (h: number, _l: number, s: number) => number;
|
export declare function add(Ah: number, Al: number, Bh: number, Bl: number): {
|
||||||
declare const shrSL: (h: number, l: number, s: number) => number;
|
|
||||||
declare const rotrSH: (h: number, l: number, s: number) => number;
|
|
||||||
declare const rotrSL: (h: number, l: number, s: number) => number;
|
|
||||||
declare const rotrBH: (h: number, l: number, s: number) => number;
|
|
||||||
declare const rotrBL: (h: number, l: number, s: number) => number;
|
|
||||||
declare const rotr32H: (_h: number, l: number) => number;
|
|
||||||
declare const rotr32L: (h: number, _l: number) => number;
|
|
||||||
declare const rotlSH: (h: number, l: number, s: number) => number;
|
|
||||||
declare const rotlSL: (h: number, l: number, s: number) => number;
|
|
||||||
declare const rotlBH: (h: number, l: number, s: number) => number;
|
|
||||||
declare const rotlBL: (h: number, l: number, s: number) => number;
|
|
||||||
declare function add(Ah: number, Al: number, Bh: number, Bl: number): {
|
|
||||||
h: number;
|
h: number;
|
||||||
l: number;
|
l: number;
|
||||||
};
|
};
|
||||||
declare const add3L: (Al: number, Bl: number, Cl: number) => number;
|
|
||||||
declare const add3H: (low: number, Ah: number, Bh: number, Ch: number) => number;
|
|
||||||
declare const add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number;
|
|
||||||
declare const add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number;
|
|
||||||
declare const add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number;
|
|
||||||
declare const add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number;
|
|
||||||
export { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };
|
|
||||||
declare const u64: {
|
declare const u64: {
|
||||||
fromBig: typeof fromBig;
|
fromBig: typeof fromBig;
|
||||||
split: typeof split;
|
split: typeof split;
|
||||||
toBig: (h: number, l: number) => bigint;
|
toBig: (h: number, l: number) => bigint;
|
||||||
shrSH: (h: number, _l: number, s: number) => number;
|
shrSH: (h: number, l: number, s: number) => number;
|
||||||
shrSL: (h: number, l: number, s: number) => number;
|
shrSL: (h: number, l: number, s: number) => number;
|
||||||
rotrSH: (h: number, l: number, s: number) => number;
|
rotrSH: (h: number, l: number, s: number) => number;
|
||||||
rotrSL: (h: number, l: number, s: number) => number;
|
rotrSL: (h: number, l: number, s: number) => number;
|
||||||
rotrBH: (h: number, l: number, s: number) => number;
|
rotrBH: (h: number, l: number, s: number) => number;
|
||||||
rotrBL: (h: number, l: number, s: number) => number;
|
rotrBL: (h: number, l: number, s: number) => number;
|
||||||
rotr32H: (_h: number, l: number) => number;
|
rotr32H: (h: number, l: number) => number;
|
||||||
rotr32L: (h: number, _l: number) => number;
|
rotr32L: (h: number, l: number) => number;
|
||||||
rotlSH: (h: number, l: number, s: number) => number;
|
rotlSH: (h: number, l: number, s: number) => number;
|
||||||
rotlSL: (h: number, l: number, s: number) => number;
|
rotlSL: (h: number, l: number, s: number) => number;
|
||||||
rotlBH: (h: number, l: number, s: number) => number;
|
rotlBH: (h: number, l: number, s: number) => number;
|
||||||
|
|
|
||||||
33
node_modules/@noble/hashes/_u64.js
generated
vendored
33
node_modules/@noble/hashes/_u64.js
generated
vendored
|
|
@ -1,8 +1,8 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.add5L = exports.add5H = exports.add4H = exports.add4L = exports.add3H = exports.add3L = exports.add = exports.rotlBL = exports.rotlBH = exports.rotlSL = exports.rotlSH = exports.rotr32L = exports.rotr32H = exports.rotrBL = exports.rotrBH = exports.rotrSL = exports.rotrSH = exports.shrSL = exports.shrSH = exports.toBig = exports.split = exports.fromBig = void 0;
|
exports.add = exports.toBig = exports.split = exports.fromBig = void 0;
|
||||||
const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);
|
const U32_MASK64 = BigInt(2 ** 32 - 1);
|
||||||
const _32n = /* @__PURE__ */ BigInt(32);
|
const _32n = BigInt(32);
|
||||||
// We are not using BigUint64Array, because they are extremely slow as per 2022
|
// We are not using BigUint64Array, because they are extremely slow as per 2022
|
||||||
function fromBig(n, le = false) {
|
function fromBig(n, le = false) {
|
||||||
if (le)
|
if (le)
|
||||||
|
|
@ -23,37 +23,26 @@ exports.split = split;
|
||||||
const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);
|
const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);
|
||||||
exports.toBig = toBig;
|
exports.toBig = toBig;
|
||||||
// for Shift in [0, 32)
|
// for Shift in [0, 32)
|
||||||
const shrSH = (h, _l, s) => h >>> s;
|
const shrSH = (h, l, s) => h >>> s;
|
||||||
exports.shrSH = shrSH;
|
|
||||||
const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
|
const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
|
||||||
exports.shrSL = shrSL;
|
|
||||||
// Right rotate for Shift in [1, 32)
|
// Right rotate for Shift in [1, 32)
|
||||||
const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));
|
const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));
|
||||||
exports.rotrSH = rotrSH;
|
|
||||||
const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
|
const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
|
||||||
exports.rotrSL = rotrSL;
|
|
||||||
// Right rotate for Shift in (32, 64), NOTE: 32 is special case.
|
// Right rotate for Shift in (32, 64), NOTE: 32 is special case.
|
||||||
const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));
|
const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));
|
||||||
exports.rotrBH = rotrBH;
|
|
||||||
const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));
|
const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));
|
||||||
exports.rotrBL = rotrBL;
|
|
||||||
// Right rotate for shift===32 (just swaps l&h)
|
// Right rotate for shift===32 (just swaps l&h)
|
||||||
const rotr32H = (_h, l) => l;
|
const rotr32H = (h, l) => l;
|
||||||
exports.rotr32H = rotr32H;
|
const rotr32L = (h, l) => h;
|
||||||
const rotr32L = (h, _l) => h;
|
|
||||||
exports.rotr32L = rotr32L;
|
|
||||||
// Left rotate for Shift in [1, 32)
|
// Left rotate for Shift in [1, 32)
|
||||||
const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));
|
const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));
|
||||||
exports.rotlSH = rotlSH;
|
|
||||||
const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));
|
const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));
|
||||||
exports.rotlSL = rotlSL;
|
|
||||||
// Left rotate for Shift in (32, 64), NOTE: 32 is special case.
|
// Left rotate for Shift in (32, 64), NOTE: 32 is special case.
|
||||||
const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));
|
const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));
|
||||||
exports.rotlBH = rotlBH;
|
|
||||||
const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));
|
const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));
|
||||||
exports.rotlBL = rotlBL;
|
|
||||||
// JS uses 32-bit signed integers for bitwise operations which means we cannot
|
// JS uses 32-bit signed integers for bitwise operations which means we cannot
|
||||||
// simple take carry out of low bit sum by shift, we need to use division.
|
// simple take carry out of low bit sum by shift, we need to use division.
|
||||||
|
// Removing "export" has 5% perf penalty -_-
|
||||||
function add(Ah, Al, Bh, Bl) {
|
function add(Ah, Al, Bh, Bl) {
|
||||||
const l = (Al >>> 0) + (Bl >>> 0);
|
const l = (Al >>> 0) + (Bl >>> 0);
|
||||||
return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };
|
return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };
|
||||||
|
|
@ -61,20 +50,14 @@ function add(Ah, Al, Bh, Bl) {
|
||||||
exports.add = add;
|
exports.add = add;
|
||||||
// Addition with more than 2 elements
|
// Addition with more than 2 elements
|
||||||
const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);
|
const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);
|
||||||
exports.add3L = add3L;
|
|
||||||
const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;
|
const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;
|
||||||
exports.add3H = add3H;
|
|
||||||
const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);
|
const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);
|
||||||
exports.add4L = add4L;
|
|
||||||
const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;
|
const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;
|
||||||
exports.add4H = add4H;
|
|
||||||
const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);
|
const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);
|
||||||
exports.add5L = add5L;
|
|
||||||
const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;
|
const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;
|
||||||
exports.add5H = add5H;
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const u64 = {
|
const u64 = {
|
||||||
fromBig, split, toBig,
|
fromBig, split, toBig: exports.toBig,
|
||||||
shrSH, shrSL,
|
shrSH, shrSL,
|
||||||
rotrSH, rotrSL, rotrBH, rotrBL,
|
rotrSH, rotrSL, rotrBH, rotrBL,
|
||||||
rotr32H, rotr32L,
|
rotr32H, rotr32L,
|
||||||
|
|
|
||||||
2
node_modules/@noble/hashes/_u64.js.map
generated
vendored
2
node_modules/@noble/hashes/_u64.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/@noble/hashes/argon2.d.ts
generated
vendored
2
node_modules/@noble/hashes/argon2.d.ts
generated
vendored
|
|
@ -1,5 +1,5 @@
|
||||||
import { Input } from './utils.js';
|
import { Input } from './utils.js';
|
||||||
export type ArgonOpts = {
|
export declare type ArgonOpts = {
|
||||||
t: number;
|
t: number;
|
||||||
m: number;
|
m: number;
|
||||||
p: number;
|
p: number;
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue