Browse Source

Auto-generate command documentation markdown (#432)

remotes/origin/add-with-shims
Gal Schlezinger 4 years ago committed by GitHub
parent
commit
f9ee0ecd50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      .ci/prepare-version.js
  2. 152
      .ci/print-command-docs.js
  3. 84
      .github/workflows/rust.yml
  4. 72
      README.md
  5. 402
      docs/commands.md
  6. 4
      package.json
  7. 2
      src/cli.rs
  8. 26
      src/config.rs
  9. 94
      yarn.lock

3
.ci/prepare-version.js

@ -23,6 +23,7 @@ const command = cmd.command({ @@ -23,6 +23,7 @@ const command = cmd.command({
exec("git pull --ff-only");
const nextVersion = updateCargoToml(versionType);
exec("cargo build --release");
exec("yarn generate-command-docs --binary-path=./target/release/fnm");
exec("./docs/record_screen.sh");
exec(`yarn changelog ${nextVersion}`);
},
@ -62,7 +63,7 @@ function updateCargoToml(versionType) { @@ -62,7 +63,7 @@ function updateCargoToml(versionType) {
function exec(command, env) {
console.log(`$ ${command}`);
return cp.execSync(command, {
cwd: path.join(__dirname, '..'), // root of repo
cwd: path.join(__dirname, ".."), // root of repo
stdio: "inherit",
env: { ...process.env, ...env },
});

152
.ci/print-command-docs.js

@ -0,0 +1,152 @@ @@ -0,0 +1,152 @@
#!/usr/bin/env node
/// @ts-check
const execa = require("execa");
const path = require("path");
const fs = require("fs");
const cmd = require("cmd-ts");
const cmdFs = require("cmd-ts/dist/cjs/batteries/fs");
const FnmBinaryPath = {
...cmdFs.ExistingPath,
defaultValue() {
const target = path.join(__dirname, "../target/debug/fnm");
if (!fs.existsSync(target)) {
throw new Error(
"Can't find debug target, please run `cargo build` or provide a specific binary path"
);
}
return target;
},
};
const command = cmd.command({
name: "print-command-docs",
description: "prints the docs/command.md file with updated contents",
args: {
checkForDirty: cmd.flag({
long: "check",
description: `Check that file was not changed`,
}),
fnmPath: cmd.option({
long: "binary-path",
description: "the fnm binary path",
type: FnmBinaryPath,
}),
},
async handler({ checkForDirty, fnmPath }) {
const targetFile = path.join(__dirname, "../docs/commands.md");
await main(targetFile, fnmPath);
if (checkForDirty) {
const gitStatus = await checkGitStatus(targetFile);
if (gitStatus.state === "dirty") {
process.exitCode = 1;
console.error(
"The file has changed. Please re-run `yarn generate-command-docs`."
);
console.error(`hint: The following diff was found:`);
console.error();
console.error(gitStatus.diff);
}
}
},
});
cmd.run(cmd.binary(command), process.argv).catch((err) => {
console.error(err);
process.exitCode = process.exitCode || 1;
});
/**
* @param {string} targetFile
* @param {string} fnmPath
* @returns {Promise<void>}
*/
async function main(targetFile, fnmPath) {
const stream = fs.createWriteStream(targetFile);
const { subcommands, text: mainText } = await getCommandHelp(fnmPath);
await write(stream, line(`fnm`, mainText));
for (const subcommand of subcommands) {
const { text: subcommandText } = await getCommandHelp(fnmPath, subcommand);
await write(stream, "\n" + line(`fnm ${subcommand}`, subcommandText));
}
stream.close();
await execa(`yarn`, ["prettier", "--write", targetFile]);
}
/**
* @param {import('stream').Writable} stream
* @param {string} content
* @returns {Promise<void>}
*/
function write(stream, content) {
return new Promise((resolve, reject) => {
stream.write(content, (err) => (err ? reject(err) : resolve()));
});
}
function line(cmd, text) {
const cmdCode = "`" + cmd + "`";
const textCode = "```\n" + text + "\n```";
return `# ${cmdCode}\n${textCode}`;
}
/**
* @param {string} fnmPath
* @param {string} [command]
* @returns {Promise<{ subcommands: string[], text: string }>}
*/
async function getCommandHelp(fnmPath, command) {
const cmdArg = command ? [command] : [];
const result = await run(fnmPath, [...cmdArg, "--help"]);
const text = result.stdout;
const rows = text.split("\n");
const headerIndex = rows.findIndex((x) => x.includes("SUBCOMMANDS"));
/** @type {string[]} */
const subcommands = [];
for (const row of rows.slice(headerIndex + 1)) {
const matched = row.match(/^\s{4}(\w+)/);
if (!matched) break;
subcommands.push(matched[1]);
}
return {
subcommands,
text,
};
}
/**
* @param {string[]} args
* @returns {import('execa').ExecaChildProcess<string>}
*/
function run(fnmPath, args) {
return execa(fnmPath, args, {
reject: false,
stdout: "pipe",
stderr: "pipe",
});
}
/**
* @param {string} targetFile
* @returns {Promise<{ state: "dirty", diff: string } | { state: "clean" }>}
*/
async function checkGitStatus(targetFile) {
const { stdout, exitCode } = await execa(
`git`,
["diff", "--color", "--exit-code", targetFile],
{
reject: false,
}
);
if (exitCode === 0) {
return { state: "clean" };
}
return { state: "dirty", diff: stdout };
}

84
.github/workflows/rust.yml

@ -165,65 +165,25 @@ jobs: @@ -165,65 +165,25 @@ jobs:
name: fnm-${{ matrix.arch }}
path: target/${{ env.RUST_TARGET }}/release/fnm
# benchmark_on_linux:
# name: Performance Benchmarks (Linux)
# needs: [build_static_linux_binary]
# runs-on: ubuntu-latest
# steps:
# - uses: octokit/request-action@v2.x
# id: get_master_workflows
# with:
# route: GET /repos/:repository/actions/runs
# repository: ${{ github.repository }}
# branch: master
# status: completed
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - uses: octokit/request-action@v2.x
# id: get_latest_artifacts
# with:
# route: GET /repos/:repository/actions/runs/:workflow_id/artifacts
# repository: ${{ github.repository }}
# workflow_id: ${{ fromJson(steps.get_master_workflows.outputs.data).workflow_runs[0].id }}
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - name: "Take the output"
# run: |
# URL=$(echo '${{ steps.get_latest_artifacts.outputs.data }}' | jq -r '.artifacts | map(select(.name == "fnm-linux")) | .[0].archive_download_url')
# curl -L $URL -H 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' > /tmp/fnm-latest.zip
# mkdir ~/.fnm-latest
# unzip -d ~/.fnm-latest /tmp/fnm-latest.zip
# ls -lah ~/.fnm-latest
# - uses: actions/checkout@v2
# - name: Install Hyperfine
# run: |
# wget https://github.com/sharkdp/hyperfine/releases/download/v1.10.0/hyperfine_1.10.0_amd64.deb
# sudo dpkg -i hyperfine_1.10.0_amd64.deb
# - name: Install fnm-reason for Linux
# run: curl -fsSL https://github.com/Schniz/fnm/raw/master/.ci/install.sh | bash -s -- --skip-shell
# - name: Install nvm
# run: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
# - uses: actions/download-artifact@v2
# with:
# name: fnm-linux
# path: target/release/
# - name: "Run benchmarks"
# run: bash benchmarks/run
# - name: Read basic.md for the generated report
# id: basic_result
# uses: juliangruber/read-file-action@v1
# with:
# path: benchmarks/results/basic.md
# - uses: octokit/request-action@v2.x
# id: get_latest_release
# with:
# route: POST /repos/:repository/commits/:commit_sha/comments
# repository: ${{ github.repository }}
# commit_sha: ${{ github.sha }}
# body: |
# |
# ${{ steps.basic_result.outputs.content }}
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ensure_commands_markdown_is_up_to_date:
runs-on: ubuntu-latest
name: Ensure command docs are up-to-date
needs: [build_static_linux_binary]
steps:
- uses: actions/checkout@v2
- name: Download a single artifact
uses: actions/download-artifact@v2
with:
name: fnm-linux
- name: Make the binary runnable
run: |
sudo install fnm /bin
fnm --version
- name: Print fnm version
run: fnm --version
- run: fnm install
- name: Install Node deps
run: fnm exec -- yarn
- name: Generate command markdown
run: |
fnm exec -- yarn generate-command-docs --check --binary-path=$(which fnm)

72
README.md

@ -163,77 +163,9 @@ fnm is also supported but is not entirely covered. [You can set up a startup scr @@ -163,77 +163,9 @@ fnm is also supported but is not entirely covered. [You can set up a startup scr
FOR /f "tokens=*" %i IN ('fnm env --use-on-cd') DO CALL %i
```
## Usage
## [Usage](./docs/commands.md)
### Global Options
```sh
fnm [--shell=fish|bash|zsh] [--node-dist-mirror=URI] [--fnm-dir=DIR] [--log-level=quiet|error|info] [--arch=ARCH] <command>
```
- Providing `--shell=fish` will output the Fish-compliant version. Omit it and `fnm` will try to infer the current shell based on the process tree
- Providing `--node-dist-mirror="https://npm.taobao.org/dist"` will use the Chinese mirror of Node.js
- Providing `--fnm-dir="/tmp/fnm"` will install and use versions in `/tmp/fnm` directory
- Providing `--arch=x64` will install Node binaries with `x86-64` architecture. Omit it and `fnm` will default to your computer's architecture.
You can always use `fnm --help` to read the docs:
#### Apple Silicon
Until [upstream support for darwin-arm64](https://github.com/nodejs/node/issues/37309) is complete, `fnm` defaults to installing the `darwin-x64` architecture for your selected version to be run with Rosetta 2.
Enable Rosetta 2 via terminal command:
```sh
softwareupdate --install-rosetta
```
The `--arch` option overrides this default.
### `fnm install [VERSION]`
Installs `[VERSION]`. If no version provided, it will install the version specified in the `.node-version` or `.nvmrc` files located in the current working directory.
### `fnm install --lts`
Installs the latest LTS version of Node
### `fnm use [VERSION]`
Activates `[VERSION]` as the current Node version. If no version provided, it will activate the version specified in the `.node-version` or `.nvmrc` file located in the current working directory.
#### Flags
- `--install-if-missing` — installs the version if it isn't installed yet
### `fnm current`
Display currently activated Node version.
### `fnm list`
Lists the installed Node versions.
### `fnm list-remote`
Lists the Node versions available to download remotely.
### `fnm uninstall [VERSION]`
Uninstalls the node version specified in `[VERSION]`.
### `fnm alias [VERSION] [NAME]`
Aliases a Node version to a given name.
### `fnm default [VERSION]`
Aliases a Node version as default. Uses `fnm alias` underneath.
### `fnm env`
Prints the required shell commands in order to configure your shell, Bash compliant if can't infer the shell. This command is highly influenced by [the global options](#global-options)
#### Options:
- `--use-on-cd` will also output a script that will automatically change the node version if a `.node-version`/`.nvmrc` file is found
[See the available commands for an extended usage documentation](./docs/commands.md)
## Contributing

402
docs/commands.md

@ -0,0 +1,402 @@ @@ -0,0 +1,402 @@
# `fnm`
```
fnm 1.24.0
A fast and simple Node.js manager
USAGE:
fnm [OPTIONS] <SUBCOMMAND>
FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir>
The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level>
The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
SUBCOMMANDS:
alias Alias a version to a common name
completions Print shell completions to stdout
current Print the current Node.js version
default Set a version as the default version
env Print and set up required environment variables for fnm
exec Run a command within fnm context
help Prints this message or the help of the given subcommand(s)
install Install a new Node.js version
list List all locally installed Node.js versions [aliases: ls]
list-remote List all remote Node.js versions [aliases: ls-remote]
uninstall Uninstall a Node.js version
use Change Node.js version
```
# `fnm alias`
```
fnm-alias 1.24.0
Alias a version to a common name
USAGE:
fnm alias [OPTIONS] <to-version> <name>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir> The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level> The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
ARGS:
<to-version>
<name>
```
# `fnm completions`
```
fnm-completions 1.24.0
Print shell completions to stdout
USAGE:
fnm completions [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir> The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level> The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
--shell <shell>
The shell syntax to use. Infers when missing [possible values: zsh, bash, fish, powershell, elvish]
```
# `fnm current`
```
fnm-current 1.24.0
Print the current Node.js version
USAGE:
fnm current [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir> The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level> The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
```
# `fnm default`
```
fnm-default 1.24.0
Set a version as the default version
This is a shorthand for `fnm alias VERSION default`
USAGE:
fnm default [OPTIONS] <version>
FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir>
The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level>
The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
ARGS:
<version>
```
# `fnm env`
```
fnm-env 1.24.0
Print and set up required environment variables for fnm
This command generates a series of shell commands that should be evaluated by your shell to create a fnm-ready
environment.
Each shell has its own syntax of evaluating a dynamic expression. For example, evaluating fnm on Bash and Zsh would look
like `eval "$(fnm env)"`. In Fish, evaluating would look like `fnm env | source`
USAGE:
fnm env [FLAGS] [OPTIONS]
FLAGS:
-h, --help
Prints help information
--use-on-cd
Print the script to change Node versions every directory change
-V, --version
Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir>
The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level>
The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
--shell <shell>
The shell syntax to use. Infers when missing [possible values: bash, zsh, fish, powershell]
```
# `fnm exec`
```
fnm-exec 1.24.0
Run a command within fnm context
Example:
--------
fnm exec --using=v12.0.0 node --version
=> v12.0.0
USAGE:
fnm exec [OPTIONS] [arguments]...
FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir>
The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level>
The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
--using <version>
Either an explicit version, or a filename with the version written in it
ARGS:
<arguments>...
The command to run
```
# `fnm help`
```
```
# `fnm install`
```
fnm-install 1.24.0
Install a new Node.js version
USAGE:
fnm install [FLAGS] [OPTIONS] [version]
FLAGS:
-h, --help Prints help information
--lts Install latest LTS
-V, --version Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir> The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level> The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
ARGS:
<version> A version string. Can be a partial semver or a LTS version name by the format lts/NAME
```
# `fnm list`
```
fnm-list 1.24.0
List all locally installed Node.js versions
USAGE:
fnm list [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir> The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level> The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
```
# `fnm list`
```
fnm-list 1.24.0
List all locally installed Node.js versions
USAGE:
fnm list [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir> The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level> The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
```
# `fnm uninstall`
```
fnm-uninstall 1.24.0
Uninstall a Node.js version
> Warning: when providing an alias, it will remove the Node version the alias is pointing to, along with the other
aliases that point to the same version.
USAGE:
fnm uninstall [OPTIONS] [version]
FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir>
The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level>
The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
ARGS:
<version>
```
# `fnm use`
```
fnm-use 1.24.0
Change Node.js version
USAGE:
fnm use [FLAGS] [OPTIONS] [version]
FLAGS:
-h, --help Prints help information
--install-if-missing Install the version if it isn't installed yet
-V, --version Prints version information
OPTIONS:
--arch <arch>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary [env: FNM_ARCH]
[default: x64]
--fnm-dir <base-dir> The root directory of fnm installations [env: FNM_DIR]
--log-level <log-level> The log level of fnm commands [env: FNM_LOGLEVEL] [default: info]
--node-dist-mirror <node-dist-mirror>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default: https://nodejs.org/dist]
ARGS:
<version>
```

4
package.json

@ -7,7 +7,8 @@ @@ -7,7 +7,8 @@
"license": "GPLv3",
"scripts": {
"changelog": "./.ci/generate-changelog.sh",
"version:prepare": "./.ci/prepare-version.js"
"version:prepare": "./.ci/prepare-version.js",
"generate-command-docs": "./.ci/print-command-docs.js"
},
"changelog": {
"repo": "Schniz/fnm",
@ -20,6 +21,7 @@ @@ -20,6 +21,7 @@
},
"devDependencies": {
"cmd-ts": "0.6.8",
"execa": "^5.0.0",
"lerna-changelog": "1.0.1",
"prettier": "2.2.1",
"toml": "3.0.0"

2
src/cli.rs

@ -56,7 +56,7 @@ pub enum SubCommand { @@ -56,7 +56,7 @@ pub enum SubCommand {
/// --------
/// fnm exec --using=v12.0.0 node --version
/// => v12.0.0
#[structopt(name = "exec")]
#[structopt(name = "exec", verbatim_doc_comment)]
Exec(commands::exec::Exec),
/// Uninstall a Node.js version

26
src/config.rs

@ -11,12 +11,18 @@ pub struct FnmConfig { @@ -11,12 +11,18 @@ pub struct FnmConfig {
long,
env = "FNM_NODE_DIST_MIRROR",
default_value = "https://nodejs.org/dist",
global = true
global = true,
hide_env_values = true
)]
pub node_dist_mirror: reqwest::Url,
/// The root directory of fnm installations.
#[structopt(long = "fnm-dir", env = "FNM_DIR", global = true)]
#[structopt(
long = "fnm-dir",
env = "FNM_DIR",
global = true,
hide_env_values = true
)]
pub base_dir: Option<std::path::PathBuf>,
/// Where the current node version link is stored.
@ -31,12 +37,24 @@ pub struct FnmConfig { @@ -31,12 +37,24 @@ pub struct FnmConfig {
multishell_path: Option<std::path::PathBuf>,
/// The log level of fnm commands
#[structopt(long, env = "FNM_LOGLEVEL", default_value = "info", global = true)]
#[structopt(
long,
env = "FNM_LOGLEVEL",
default_value = "info",
global = true,
hide_env_values = true
)]
log_level: LogLevel,
/// Override the architecture of the installed Node binary.
/// Defaults to arch of fnm binary.
#[structopt(long, env = "FNM_ARCH", default_value, global = true)]
#[structopt(
long,
env = "FNM_ARCH",
default_value,
global = true,
hide_env_values = true
)]
pub arch: arch::Arch,
}

94
yarn.lock

@ -245,6 +245,15 @@ cross-spawn@^6.0.0: @@ -245,6 +245,15 @@ cross-spawn@^6.0.0:
shebang-command "^1.2.0"
which "^1.2.9"
cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
which "^2.0.1"
debug@4, debug@^4.1.0, debug@^4.1.1:
version "4.2.0"
resolved "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
@ -326,6 +335,21 @@ execa@^1.0.0: @@ -326,6 +335,21 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
execa@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376"
integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==
dependencies:
cross-spawn "^7.0.3"
get-stream "^6.0.0"
human-signals "^2.1.0"
is-stream "^2.0.0"
merge-stream "^2.0.0"
npm-run-path "^4.0.1"
onetime "^5.1.2"
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
figgy-pudding@^3.5.1:
version "3.5.2"
resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
@ -380,6 +404,11 @@ get-stream@^4.0.0: @@ -380,6 +404,11 @@ get-stream@^4.0.0:
dependencies:
pump "^3.0.0"
get-stream@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718"
integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==
glob@^7.1.3, glob@^7.1.4:
version "7.1.6"
resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
@ -433,6 +462,11 @@ https-proxy-agent@^4.0.0: @@ -433,6 +462,11 @@ https-proxy-agent@^4.0.0:
agent-base "5"
debug "4"
human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
humanize-ms@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
@ -505,6 +539,11 @@ is-stream@^1.1.0: @@ -505,6 +539,11 @@ is-stream@^1.1.0:
resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
is-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@ -572,6 +611,16 @@ make-fetch-happen@^7.1.1: @@ -572,6 +611,16 @@ make-fetch-happen@^7.1.1:
socks-proxy-agent "^4.0.0"
ssri "^7.0.1"
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@ -693,6 +742,13 @@ npm-run-path@^2.0.0: @@ -693,6 +742,13 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
dependencies:
path-key "^3.0.0"
object-assign@^4.0.1:
version "4.1.1"
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@ -705,6 +761,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: @@ -705,6 +761,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
dependencies:
mimic-fn "^2.1.0"
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@ -775,6 +838,11 @@ path-key@^2.0.0, path-key@^2.0.1: @@ -775,6 +838,11 @@ path-key@^2.0.0, path-key@^2.0.1:
resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
prettier@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
@ -880,12 +948,24 @@ shebang-command@^1.2.0: @@ -880,12 +948,24 @@ shebang-command@^1.2.0:
dependencies:
shebang-regex "^1.0.0"
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
dependencies:
shebang-regex "^3.0.0"
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
signal-exit@^3.0.0:
shebang-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
signal-exit@^3.0.0, signal-exit@^3.0.3:
version "3.0.3"
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
@ -963,6 +1043,11 @@ strip-eof@^1.0.0: @@ -963,6 +1043,11 @@ strip-eof@^1.0.0:
resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
strip-final-newline@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@ -1039,6 +1124,13 @@ which@^1.2.9: @@ -1039,6 +1124,13 @@ which@^1.2.9:
dependencies:
isexe "^2.0.0"
which@^2.0.1:
version "2.0.2"
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
isexe "^2.0.0"
wrap-ansi@^5.1.0:
version "5.1.0"
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"

Loading…
Cancel
Save