feat(nx): implement global nx cli to remove the need to use yarn nx

This commit is contained in:
Victor Savkin 2019-07-10 11:13:37 -04:00
parent 518d91d0ad
commit c16f250136
24 changed files with 244 additions and 228 deletions

View File

@ -13,7 +13,7 @@ can see, for each package its dependencies.
| @nrwl/node | @nrwl/jest | @nrwl/workspace |
| @nrwl/react | @nrwl/cypress, @nrwl/jest, @nrwl/web | @nrwl/workspace |
| @nrwl/web | @nrwl/cypress, @nrwl/jest | @nrwl/workspace |
| @nrwl/workspace | | |
| @nrwl/workspace | @nrwl/cli | |
## Angular

View File

@ -76,7 +76,7 @@
"fs-extra": "7.0.1",
"graphviz": "^0.0.8",
"html-webpack-plugin": "^3.2.0",
"husky": "^1.0.0-rc.13",
"husky": "^3.0.0",
"identity-obj-proxy": "3.0.0",
"ignore": "^5.0.4",
"jasmine-core": "~2.99.1",

View File

@ -7,12 +7,11 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"Angular",
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"Angular",
"Jest",
"Cypress",
"CLI"
],
"main": "bundles/nrwl-angular.umd.js",
"types": "nrwl-angular.d.ts",

49
packages/cli/bin/nx.ts Normal file
View File

@ -0,0 +1,49 @@
#!/usr/bin/env node
import { statSync } from 'fs';
import * as path from 'path';
function isLocalProject(dir: string): boolean {
if (path.dirname(dir) === dir) return false;
const configPath = path.join(dir, 'angular.json');
if (fileExists(configPath)) {
return true;
} else {
return isLocalProject(path.dirname(dir));
}
}
function findLocalNx(dir: string): string {
if (path.dirname(dir) === dir) return null;
const nxPath = path.join(dir, 'node_modules', '.bin', 'nx');
if (fileExists(nxPath)) {
return nxPath;
} else {
return findLocalNx(path.dirname(dir));
}
}
function fileExists(filePath: string): boolean {
try {
return statSync(filePath).isFile();
} catch (err) {
return false;
}
}
const inLocal = isLocalProject(__dirname);
if (inLocal) {
/**
* The commandsObject is a Yargs object declared in `nx-commands.ts`,
* It is exposed and bootstrapped here to provide CLI features.
*/
const w = require('@nrwl/workspace');
if (w.supportedNxCommands.includes(process.argv[2])) {
// The commandsObject is a Yargs object declared in `nx-commands.ts`,
// It is exposed and bootstrapped here to provide CLI features.
w.commandsObject.argv;
} else {
require(w.closestCli(__dirname));
}
} else {
require(findLocalNx(process.cwd()));
}

34
packages/cli/package.json Normal file
View File

@ -0,0 +1,34 @@
{
"name": "@nrwl/cli",
"version": "0.0.2",
"description": "",
"repository": {
"type": "git",
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"Monorepo",
"Angular",
"React",
"Web",
"Node",
"Nest",
"Jest",
"Cypress",
"CLI"
],
"bin": {
"nx": "./bin/nx.js"
},
"author": "Victor Savkin",
"license": "MIT",
"bugs": {
"url": "https://github.com/nrwl/nx/issues"
},
"homepage": "https://nx.dev",
"dependencies": {
"tmp": "0.0.33",
"yargs-parser": "10.0.0",
"yargs": "^11.0.0"
}
}

View File

@ -102,3 +102,18 @@ execSync(
stdio: [0, 1, 2]
}
);
try {
execSync('nx --version');
} catch (e) {
// no nx found
console.log('-----------------------------------------------------------');
console.log(`It looks like you don't have the Nx CLI installed globally.`);
console.log(
`This means that you might have to use "yarn nx" or "npm nx" to execute commands in your workspace.`
);
console.log(
`If you want to execute the nx command directly, run "yarn global add @nrwl/cli" or "npm install -g @nrwl/cli"`
);
console.log('-----------------------------------------------------------');
}

View File

@ -7,12 +7,15 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"RxJS",
"Monorepo",
"Angular",
"Workspace",
"NgRx",
"Schematics",
"Angular CLI"
"React",
"Web",
"Node",
"Nest",
"Jest",
"Cypress",
"CLI"
],
"bin": {
"create-nx-workspace": "./bin/create-nx-workspace.js"

View File

@ -7,13 +7,15 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"Cypress",
"E2E Testing",
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"Angular",
"React",
"Web",
"Node",
"Nest",
"Jest",
"Cypress",
"CLI"
],
"main": "index.js",
"types": "index.d.ts",

View File

@ -7,13 +7,12 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"Monorepo",
"Node",
"Express",
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"Jest",
"Cypress",
"CLI"
],
"main": "index.js",
"types": "index.d.ts",

View File

@ -7,13 +7,15 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"Monorepo",
"Angular",
"React",
"Web",
"Node",
"Nest",
"Jest",
"Unit Testing",
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"CLI"
],
"main": "index.js",
"types": "index.d.ts",

View File

@ -7,12 +7,12 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"Nest",
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"Node",
"Nest",
"Jest",
"Cypress",
"CLI"
],
"main": "index.js",
"types": "index.d.ts",

View File

@ -7,12 +7,12 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"node",
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"Node",
"Nest",
"Jest",
"Cypress",
"CLI"
],
"main": "index.js",
"types": "index.d.ts",

View File

@ -7,12 +7,12 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"React",
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"React",
"Web",
"Jest",
"Cypress",
"CLI"
],
"main": "index.js",
"types": "index.d.ts",

View File

@ -7,12 +7,15 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"RxJS",
"Monorepo",
"Angular",
"Workspace",
"NgRx",
"Schematics",
"Angular CLI"
"React",
"Web",
"Node",
"Nest",
"Jest",
"Cypress",
"CLI"
],
"main": "index.js",
"types": "index.d.js",

View File

@ -7,12 +7,11 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"Web",
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"Web",
"Jest",
"Cypress",
"CLI"
],
"main": "index.js",
"types": "index.d.ts",

View File

@ -1,104 +0,0 @@
#!/usr/bin/env node
import { execSync } from 'child_process';
import { dirSync } from 'tmp';
import { writeFileSync } from 'fs';
import * as path from 'path';
import * as yargsParser from 'yargs-parser';
const parsedArgs = yargsParser(process.argv, {
string: ['directory'],
boolean: ['help']
});
if (parsedArgs.help) {
console.log(`
Usage: create-nx-workspace <directory> [options] [ng new options]
Create a new Nx workspace
Options:
directory path to the workspace root directory
[ng new options] any 'ng new' options
run 'ng new --help' for more information
`);
process.exit(0);
}
const nxTool = {
name: 'Nx Workspace',
packageName: '@nrwl/workspace'
};
let packageManager: string;
try {
packageManager = execSync('ng config -g cli.packageManager', {
stdio: ['ignore', 'pipe', 'ignore']
})
.toString()
.trim();
} catch (e) {
packageManager = 'yarn';
}
try {
execSync(`${packageManager} --version`, {
stdio: ['ignore', 'ignore', 'ignore']
});
} catch (e) {
packageManager = 'npm';
}
const projectName = parsedArgs._[2];
// check that the workspace name is passed in
if (!projectName) {
console.error(
'Please provide a project name (e.g., create-nx-workspace nrwl-proj)'
);
process.exit(1);
}
// creating the sandbox
console.log(`Creating a sandbox with Nx...`);
const tmpDir = dirSync().name;
const nxVersion = 'NX_VERSION';
const cliVersion = 'ANGULAR_CLI_VERSION';
const typescriptVersion = 'TYPESCRIPT_VERSION';
writeFileSync(
path.join(tmpDir, 'package.json'),
JSON.stringify({
dependencies: {
[nxTool.packageName]: nxVersion,
'@angular/cli': cliVersion,
typescript: typescriptVersion
},
license: 'MIT'
})
);
execSync(`${packageManager} install --silent`, {
cwd: tmpDir,
stdio: [0, 1, 2]
});
// creating the app itself
const args = process.argv
.slice(2)
.map(a => `"${a}"`)
.join(' ');
console.log(`ng new ${args} --collection=${nxTool.packageName}`);
execSync(
`"${path.join(
tmpDir,
'node_modules',
'.bin',
'ng'
)}" new ${args} --collection=${nxTool.packageName}`,
{
stdio: [0, 1, 2]
}
);

View File

@ -19,7 +19,10 @@ export {
ExistingPrettierConfig,
resolveUserExistingPrettierConfig
} from './src/utils/common';
export { commandsObject } from './src/command-line/nx-commands';
export {
commandsObject,
supportedNxCommands
} from './src/command-line/nx-commands';
export { readAngularJson, readNxJson, NxJson } from './src/command-line/shared';
export {
readJsonInTree,
@ -48,6 +51,7 @@ export {
export { getWorkspace, updateWorkspace } from './src/utils/workspace';
export { closestCli } from './src/utils/app-root';
export { formatFiles } from './src/utils/rules/format-files';
export { deleteFile } from './src/utils/rules/deleteFile';
export * from './src/utils/rules/ng-add';

View File

@ -7,11 +7,15 @@
"url": "git+https://github.com/nrwl/nx.git"
},
"keywords": [
"Workspace",
"Monorepo",
"Schematics",
"Nx",
"Angular CLI"
"Angular",
"React",
"Web",
"Node",
"Nest",
"Jest",
"Cypress",
"CLI"
],
"main": "index.js",
"types": "index.d.ts",
@ -20,10 +24,6 @@
"bugs": {
"url": "https://github.com/nrwl/nx/issues"
},
"bin": {
"create-nx-workspace": "./bin/create-nx-workspace.js",
"nx": "./src/command-line/nx.js"
},
"homepage": "https://nx.dev",
"schematics": "./collection.json",
"builders": "./builders.json",
@ -57,6 +57,7 @@
"viz.js": "^1.8.1",
"yargs-parser": "10.0.0",
"yargs": "^11.0.0",
"prettier": "1.16.4"
"prettier": "1.16.4",
"@nrwl/cli": "*"
}
}

View File

@ -19,14 +19,13 @@ import {
printArgsWarning
} from './shared';
import { generateGraph } from './dep-graph';
import { GlobalNxArgs } from './nx';
import { WorkspaceResults } from './workspace-results';
export interface YargsAffectedOptions
extends yargs.Arguments,
AffectedOptions {}
export interface AffectedOptions extends GlobalNxArgs {
export interface AffectedOptions {
target?: string;
parallel?: boolean;
maxParallel?: number;
@ -41,6 +40,9 @@ export interface AffectedOptions extends GlobalNxArgs {
'only-failed'?: boolean;
'max-parallel'?: boolean;
verbose?: boolean;
help?: boolean;
version?: boolean;
quiet?: boolean;
}
// Commands that can do `ng [command]`

View File

@ -1,17 +0,0 @@
#!/usr/bin/env node
import { commandsObject, supportedNxCommands } from './nx-commands';
import { closestCli } from '../utils/app-root';
export interface GlobalNxArgs {
help?: boolean;
version?: boolean;
quiet?: boolean;
}
if (supportedNxCommands.includes(process.argv[2])) {
// The commandsObject is a Yargs object declared in `nx-commands.ts`,
// It is exposed and bootstrapped here to provide CLI features.
commandsObject.argv; // .argv bootstraps the CLI creation;
} else {
require(closestCli(__dirname));
}

View File

@ -14,11 +14,6 @@ echo "Compiling Typescript..."
./node_modules/.bin/tsc
echo "Compiled Typescript"
# rm build/packages/angular/testing/nrwl-angular-testing.metadata.json
# rm build/packages/angular/testing/index.metadata.json
# rm build/packages/workspace/index.metadata.json
# rm build/packages/workspace/testing.metadata.json
#TODO This is a temporary hack until we can publish named umds
sed -i.bak "s/define(\[/define('@nrwl\/angular',\[/" build/packages/angular/bundles/nrwl-angular.umd.js
sed -i.bak "s/define(\[/define('@nrwl\/angular',\[/" build/packages/angular/bundles/nrwl-angular.umd.min.js
@ -34,9 +29,10 @@ rm -rf build/packages/angular/bundles/nrwl-angular-testing.umd.min.js.bak
rsync -a --exclude=*.ts packages/ build/packages
chmod +x build/packages/workspace/bin/create-nx-workspace.js
chmod +x build/packages/create-nx-workspace/bin/create-nx-workspace.js
chmod +x build/packages/workspace/src/command-line/nx.js
chmod +x build/packages/cli/bin/nx.js
rm -rf build/packages/install
rm -rf build/packages/nx/dist
rm -rf build/packages/nx/spec
@ -53,6 +49,7 @@ cp README.md build/packages/react
cp README.md build/packages/angular
cp README.md build/packages/jest
cp README.md build/packages/cypress
cp README.md build/packages/cli
cp LICENSE build/packages/builders
cp LICENSE build/packages/schematics
cp LICENSE build/packages/nx
@ -66,6 +63,7 @@ cp LICENSE build/packages/react
cp LICENSE build/packages/angular
cp LICENSE build/packages/jest
cp LICENSE build/packages/cypress
cp LICENSE build/packages/cli
echo "Nx libraries available at build/packages:"
ls build/packages

View File

@ -160,7 +160,8 @@ const options = {
'build/npm/node/package.json',
'build/npm/express/package.json',
'build/npm/nest/package.json',
'build/npm/workspace/package.json'
'build/npm/workspace/package.json',
'build/npm/cli/package.json'
],
increment: parsedVersion.version,
requireUpstream: false,

View File

@ -42,7 +42,3 @@ if [[ $NX_VERSION == "*" ]]; then
sed -E -i "s/\"@nrwl\/([^\"]+)\": \"\\*\"/\"@nrwl\/\1\": \"file:..\/\1\"/" {schematics,jest,web,react,node,express,nest,cypress,angular,workspace}/package.json
fi
fi
tar -czf nx.tgz nx
tar -czf schematics.tgz schematics
tar -czf create-nx-workspace.tgz create-nx-workspace

View File

@ -4255,14 +4255,14 @@ cosmiconfig@^4.0.0:
parse-json "^4.0.0"
require-from-string "^2.0.1"
cosmiconfig@^5.0.7:
version "5.2.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8"
integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==
cosmiconfig@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
dependencies:
import-fresh "^2.0.0"
is-directory "^0.3.1"
js-yaml "^3.13.0"
js-yaml "^3.13.1"
parse-json "^4.0.0"
cp-file@^6.0.0:
@ -5880,6 +5880,14 @@ find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
find-up@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
dependencies:
locate-path "^5.0.0"
path-exists "^4.0.0"
findup-sync@0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.2.tgz#a8117d0f73124f5a4546839579fe52d7129fb5e5"
@ -6106,10 +6114,10 @@ get-stdin@^4.0.1:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
get-stdin@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
get-stdin@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6"
integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==
get-stream@3.0.0, get-stream@^3.0.0:
version "3.0.0"
@ -6752,21 +6760,21 @@ humanize-ms@^1.2.1:
dependencies:
ms "^2.0.0"
husky@^1.0.0-rc.13:
version "1.3.1"
resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0"
integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==
husky@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.0.tgz#de63821a7049dc412b1afd753c259e2f6e227562"
integrity sha512-lKMEn7bRK+7f5eWPNGclDVciYNQt0GIkAQmhKl+uHP1qFzoN0h92kmH9HZ8PCwyVA2EQPD8KHf0FYWqnTxau+Q==
dependencies:
cosmiconfig "^5.0.7"
cosmiconfig "^5.2.1"
execa "^1.0.0"
find-up "^3.0.0"
get-stdin "^6.0.0"
get-stdin "^7.0.0"
is-ci "^2.0.0"
pkg-dir "^3.0.0"
opencollective-postinstall "^2.0.2"
pkg-dir "^4.2.0"
please-upgrade-node "^3.1.1"
read-pkg "^4.0.1"
read-pkg "^5.1.1"
run-node "^1.0.0"
slash "^2.0.0"
slash "^3.0.0"
iconv-lite@0.4.19:
version "0.4.19"
@ -8021,7 +8029,7 @@ js-tokens@^3.0.2:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.0:
js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.0:
version "3.13.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
@ -8544,6 +8552,13 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
dependencies:
p-locate "^4.1.0"
lodash._reinterpolate@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
@ -9709,7 +9724,7 @@ open@6.2.0:
dependencies:
is-wsl "^1.1.0"
opencollective-postinstall@^2.0.1:
opencollective-postinstall@^2.0.1, opencollective-postinstall@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
@ -9927,6 +9942,13 @@ p-locate@^3.0.0:
dependencies:
p-limit "^2.0.0"
p-locate@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
dependencies:
p-limit "^2.2.0"
p-map@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
@ -10138,6 +10160,11 @@ path-exists@^3.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@ -10246,6 +10273,13 @@ pkg-dir@^3.0.0:
dependencies:
find-up "^3.0.0"
pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
dependencies:
find-up "^4.0.0"
please-upgrade-node@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac"
@ -10780,16 +10814,7 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2"
path-type "^3.0.0"
read-pkg@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237"
integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc=
dependencies:
normalize-package-data "^2.3.2"
parse-json "^4.0.0"
pify "^3.0.0"
read-pkg@^5.0.0:
read-pkg@^5.0.0, read-pkg@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5"
integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==
@ -11751,6 +11776,11 @@ slash@^2.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
slash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
slice-ansi@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"