@nrwl/workspace
Advanced tools
Comparing version 8.12.1-beta.1 to 8.12.1
{ | ||
"name": "@nrwl/workspace", | ||
"version": "8.12.1-beta.1", | ||
"version": "8.12.1", | ||
"description": "Extensible Dev Tools for Monorepos", | ||
@@ -68,4 +68,4 @@ "repository": { | ||
"chalk": "2.4.2", | ||
"@nrwl/cli": "8.12.1-beta.1" | ||
"@nrwl/cli": "8.12.1" | ||
} | ||
} |
@@ -16,3 +16,2 @@ "use strict"; | ||
const { nxArgs, overrides } = utils_1.splitArgsIntoNxArgsAndOverrides(parsedArgs); | ||
const env = file_utils_1.readEnvironment(nxArgs.target); | ||
const projectGraph = project_graph_1.createProjectGraph(); | ||
@@ -25,5 +24,7 @@ let affectedGraph = nxArgs.all | ||
} | ||
const affectedProjects = Object.values(parsedArgs.all ? projectGraph.nodes : affectedGraph.nodes) | ||
const projects = parsedArgs.all ? projectGraph.nodes : affectedGraph.nodes; | ||
const env = file_utils_1.readEnvironment(nxArgs.target, projects); | ||
const affectedProjects = Object.values(projects) | ||
.filter(n => !parsedArgs.exclude.includes(n.name)) | ||
.filter(n => !parsedArgs.onlyFailed || !env.workspace.getResult(n.name)); | ||
.filter(n => !parsedArgs.onlyFailed || !env.workspaceResults.getResult(n.name)); | ||
try { | ||
@@ -30,0 +31,0 @@ switch (command) { |
@@ -12,5 +12,9 @@ "use strict"; | ||
const { nxArgs, overrides } = utils_1.splitArgsIntoNxArgsAndOverrides(parsedArgs); | ||
const env = file_utils_1.readEnvironment(nxArgs.target); | ||
const projectGraph = project_graph_1.createProjectGraph(); | ||
const projects = projectsToRun(nxArgs, projectGraph); | ||
const projectMap = {}; | ||
projects.forEach(proj => { | ||
projectMap[proj.name] = proj; | ||
}); | ||
const env = file_utils_1.readEnvironment(nxArgs.target, projectMap); | ||
run_command_1.runCommand(projects, projectGraph, env, nxArgs, overrides, new default_reporter_1.DefaultReporter()); | ||
@@ -17,0 +21,0 @@ } |
@@ -8,7 +8,9 @@ "use strict"; | ||
function runOne(opts) { | ||
const env = file_utils_1.readEnvironment(opts.target); | ||
const projectGraph = project_graph_1.createProjectGraph(); | ||
const projects = [projectGraph.nodes[opts.project]]; | ||
const env = file_utils_1.readEnvironment(opts.target, { | ||
[opts.project]: projectGraph.nodes[opts.project] | ||
}); | ||
run_command_1.runCommand(projects, projectGraph, env, opts, opts.overrides, new empty_reporter_1.EmptyReporter()); | ||
} | ||
exports.runOne = runOne; |
@@ -0,3 +1,5 @@ | ||
import { ProjectGraphNode } from '../core/project-graph'; | ||
export declare class WorkspaceResults { | ||
private command; | ||
private projects; | ||
startedWithFailedProjects: boolean; | ||
@@ -7,6 +9,7 @@ private commandResults; | ||
readonly hasFailure: boolean; | ||
constructor(command: string); | ||
constructor(command: string, projects: Record<string, ProjectGraphNode>); | ||
getResult(projectName: string): boolean; | ||
saveResults(): void; | ||
setResult(projectName: string, result: boolean): void; | ||
private invalidateOldResults; | ||
} |
@@ -8,4 +8,5 @@ "use strict"; | ||
class WorkspaceResults { | ||
constructor(command) { | ||
constructor(command, projects) { | ||
this.command = command; | ||
this.projects = projects; | ||
this.commandResults = { | ||
@@ -23,2 +24,3 @@ command: this.command, | ||
this.commandResults = commandResults; | ||
this.invalidateOldResults(); | ||
} | ||
@@ -57,3 +59,10 @@ } | ||
} | ||
invalidateOldResults() { | ||
Object.keys(this.commandResults.results).forEach(projectName => { | ||
if (!this.projects[projectName]) { | ||
delete this.commandResults.results[projectName]; | ||
} | ||
}); | ||
} | ||
} | ||
exports.WorkspaceResults = WorkspaceResults; |
@@ -6,6 +6,15 @@ "use strict"; | ||
const fileutils_1 = require("../utils/fileutils"); | ||
const project_graph_1 = require("..//core/project-graph"); | ||
describe('WorkspacesResults', () => { | ||
let results; | ||
beforeEach(() => { | ||
results = new workspace_results_1.WorkspaceResults('test'); | ||
results = new workspace_results_1.WorkspaceResults('test', { | ||
proj: { | ||
name: 'proj', | ||
type: project_graph_1.ProjectType.app, | ||
data: { | ||
files: [] | ||
} | ||
} | ||
}); | ||
}); | ||
@@ -61,3 +70,11 @@ it('should be instantiable', () => { | ||
})); | ||
results = new workspace_results_1.WorkspaceResults('test'); | ||
results = new workspace_results_1.WorkspaceResults('test', { | ||
proj: { | ||
name: 'proj', | ||
type: project_graph_1.ProjectType.app, | ||
data: { | ||
files: [] | ||
} | ||
} | ||
}); | ||
expect(fs.readFileSync).toHaveBeenCalledWith('dist/.nx-results', 'utf-8'); | ||
@@ -69,3 +86,11 @@ expect(results.getResult('proj')).toBe(false); | ||
const runTests = () => { | ||
results = new workspace_results_1.WorkspaceResults('test'); | ||
results = new workspace_results_1.WorkspaceResults('test', { | ||
proj: { | ||
name: 'proj', | ||
type: project_graph_1.ProjectType.app, | ||
data: { | ||
files: [] | ||
} | ||
} | ||
}); | ||
}; | ||
@@ -82,6 +107,33 @@ expect(runTests).not.toThrow(); | ||
})); | ||
results = new workspace_results_1.WorkspaceResults('build'); | ||
results = new workspace_results_1.WorkspaceResults('build', { | ||
proj: { | ||
name: 'proj', | ||
type: project_graph_1.ProjectType.app, | ||
data: { | ||
files: [] | ||
} | ||
} | ||
}); | ||
expect(results.getResult('proj')).toBeUndefined(); | ||
}); | ||
it('should invalidate existing results when the project is not run', () => { | ||
spyOn(fs, 'readFileSync').and.returnValue(fileutils_1.serializeJson({ | ||
command: 'test', | ||
results: { | ||
proj: true, | ||
proj2: false | ||
} | ||
})); | ||
results = new workspace_results_1.WorkspaceResults('build', { | ||
proj: { | ||
name: 'proj', | ||
type: project_graph_1.ProjectType.app, | ||
data: { | ||
files: [] | ||
} | ||
} | ||
}); | ||
expect(results.hasFailure).toEqual(false); | ||
}); | ||
}); | ||
}); |
@@ -1,1 +0,1 @@ | ||
export declare function workspaceSchematic(args: string[]): 1 | 0; | ||
export declare function workspaceSchematic(args: string[]): 0 | 1; |
@@ -29,3 +29,3 @@ import { Environment, NxJson } from './shared-interfaces'; | ||
export declare function readWorkspaceFiles(): FileData[]; | ||
export declare function readEnvironment(target: string): Environment; | ||
export declare function readEnvironment(target: string, projects: Record<string, ProjectGraphNode>): Environment; | ||
/** | ||
@@ -32,0 +32,0 @@ * Returns the time when file was last modified |
@@ -167,7 +167,7 @@ "use strict"; | ||
exports.readWorkspaceFiles = readWorkspaceFiles; | ||
function readEnvironment(target) { | ||
function readEnvironment(target, projects) { | ||
const nxJson = readNxJson(); | ||
const workspaceJson = readWorkspaceJson(); | ||
const workspace = new workspace_results_1.WorkspaceResults(target); | ||
return { nxJson, workspaceJson, workspace }; | ||
const workspaceResults = new workspace_results_1.WorkspaceResults(target, projects); | ||
return { nxJson, workspaceJson, workspaceResults }; | ||
} | ||
@@ -174,0 +174,0 @@ exports.readEnvironment = readEnvironment; |
@@ -0,1 +1,2 @@ | ||
import { WorkspaceResults } from '@nrwl/workspace/src/command-line/workspace-results'; | ||
export declare type ImplicitDependencyEntry<T = '*' | string[]> = { | ||
@@ -27,3 +28,3 @@ [key: string]: T | ImplicitJsonSubsetDependency<T>; | ||
workspaceJson: any; | ||
workspace: any; | ||
workspaceResults: WorkspaceResults; | ||
} |
@@ -7,5 +7,12 @@ { | ||
"type": "object", | ||
"examples": [ | ||
{ | ||
"command": "g @nrwl/workspace:move --project my-feature-lib shared/my-feature-lib", | ||
"description": "Move libs/my-feature-lib to libs/shared/my-feature-lib" | ||
} | ||
], | ||
"properties": { | ||
"projectName": { | ||
"type": "string", | ||
"alias": "project", | ||
"description": "The name of the project to move" | ||
@@ -15,3 +22,7 @@ }, | ||
"type": "string", | ||
"description": "The folder to move the project into" | ||
"description": "The folder to move the project into", | ||
"$default": { | ||
"$source": "argv", | ||
"index": 0 | ||
} | ||
} | ||
@@ -18,0 +29,0 @@ }, |
@@ -8,3 +8,3 @@ import { Task, TasksRunner } from './tasks-runner'; | ||
declare type RunArgs = yargs.Arguments & ReporterArgs; | ||
export declare function runCommand<T extends RunArgs>(projectsToRun: ProjectGraphNode[], projectGraph: ProjectGraph, { nxJson, workspace }: Environment, nxArgs: NxArgs, overrides: any, reporter: any): Promise<void>; | ||
export declare function runCommand<T extends RunArgs>(projectsToRun: ProjectGraphNode[], projectGraph: ProjectGraph, { nxJson, workspaceResults }: Environment, nxArgs: NxArgs, overrides: any, reporter: any): Promise<void>; | ||
export interface TaskParams { | ||
@@ -11,0 +11,0 @@ project: ProjectGraphNode; |
@@ -16,3 +16,3 @@ "use strict"; | ||
const hasher_1 = require("./hasher"); | ||
function runCommand(projectsToRun, projectGraph, { nxJson, workspace }, nxArgs, overrides, reporter) { | ||
function runCommand(projectsToRun, projectGraph, { nxJson, workspaceResults }, nxArgs, overrides, reporter) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
@@ -42,7 +42,7 @@ reporter.beforeRun(projectsToRun.map(p => p.name), nxArgs, overrides); | ||
case tasks_runner_1.AffectedEventType.TaskComplete: { | ||
workspace.setResult(event.task.target.project, event.success); | ||
workspaceResults.setResult(event.task.target.project, event.success); | ||
break; | ||
} | ||
case tasks_runner_1.AffectedEventType.TaskCacheRead: { | ||
workspace.setResult(event.task.target.project, event.success); | ||
workspaceResults.setResult(event.task.target.project, event.success); | ||
cached.push(event.task.target.project); | ||
@@ -58,5 +58,5 @@ break; | ||
process.stdin.unref(); | ||
workspace.saveResults(); | ||
reporter.printResults(nxArgs, workspace.failedProjects, workspace.startedWithFailedProjects, cached); | ||
if (workspace.hasFailure) { | ||
workspaceResults.saveResults(); | ||
reporter.printResults(nxArgs, workspaceResults.failedProjects, workspaceResults.startedWithFailedProjects, cached); | ||
if (workspaceResults.hasFailure) { | ||
process.exit(1); | ||
@@ -63,0 +63,0 @@ } |
@@ -90,3 +90,2 @@ "use strict"; | ||
tasks.forEach(t => { | ||
this.options.lifeCycle.startTask(t.task); | ||
output_1.output.note({ title: `Cached Output:` }); | ||
@@ -96,3 +95,2 @@ process.stdout.write(t.cachedResult.terminalOutput); | ||
this.cache.copyFilesFromCache(t.cachedResult, outputs); | ||
this.options.lifeCycle.endTask(t.task, 0); | ||
}); | ||
@@ -113,3 +111,2 @@ return tasks.reduce((m, c) => { | ||
try { | ||
this.options.lifeCycle.startTask(task); | ||
const env = Object.assign({}, process.env); | ||
@@ -126,3 +123,2 @@ if (outputPath) { | ||
this.cache.put(task, outputPath, taskOutputs).then(() => { | ||
this.options.lifeCycle.endTask(task, code); | ||
res(code); | ||
@@ -132,3 +128,2 @@ }); | ||
else { | ||
this.options.lifeCycle.endTask(task, code); | ||
res(code); | ||
@@ -135,0 +130,0 @@ } |
@@ -1,2 +0,2 @@ | ||
import { Task, TasksRunner } from './tasks-runner'; | ||
import { TasksRunner } from './tasks-runner'; | ||
export interface RemoteCache { | ||
@@ -6,6 +6,2 @@ retrieve: (hash: string, cacheDirectory: string) => Promise<boolean>; | ||
} | ||
export interface LifeCycle { | ||
startTask(task: Task): void; | ||
endTask(task: Task, code: number): void; | ||
} | ||
export interface DefaultTasksRunnerOptions { | ||
@@ -17,5 +13,4 @@ parallel?: boolean; | ||
remoteCache?: RemoteCache; | ||
lifeCycle?: LifeCycle; | ||
} | ||
export declare const tasksRunnerV2: TasksRunner<DefaultTasksRunnerOptions>; | ||
export default tasksRunnerV2; |
@@ -15,10 +15,3 @@ "use strict"; | ||
const task_orchestrator_1 = require("./task-orchestrator"); | ||
class EmptyLifeCycle { | ||
startTask(task) { } | ||
endTask(task) { } | ||
} | ||
exports.tasksRunnerV2 = (tasks, options, context) => { | ||
if (!options.lifeCycle) { | ||
options.lifeCycle = new EmptyLifeCycle(); | ||
} | ||
return new rxjs_1.Observable(subscriber => { | ||
@@ -25,0 +18,0 @@ runAllTasks(tasks, options, context) |
@@ -106,2 +106,11 @@ /** | ||
export declare function readWorkspace(host: Tree): any; | ||
/** | ||
* Updates the package.json given the passed deps and/or devDeps. Only updates | ||
* if the packages are not yet present | ||
* | ||
* @param host the schematic tree | ||
* @param deps the package.json dependencies to add | ||
* @param devDeps the package.json devDependencies to add | ||
* @param addInstall default `true`; set to false to avoid installs | ||
*/ | ||
export declare function addDepsToPackageJson(deps: any, devDeps: any, addInstall?: boolean): Rule; | ||
@@ -108,0 +117,0 @@ export declare function updatePackageJsonDependencies(deps: any, devDeps: any, addInstall?: boolean): Rule; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
/** | ||
* @license | ||
* Copyright Google Inc. All Rights Reserved. | ||
* | ||
* Use of this source code is governed by an MIT- style license that can be | ||
* found in the LICENSE file at https://angular.io/license | ||
*/ | ||
const schematics_1 = require("@angular-devkit/schematics"); | ||
const ts = require("typescript"); | ||
@@ -388,13 +396,47 @@ const stripJsonComments = require("strip-json-comments"); | ||
exports.readWorkspace = readWorkspace; | ||
/** | ||
* verifies whether the given packageJson dependencies require an update | ||
* given the deps & devDeps passed in | ||
*/ | ||
function requiresAddingOfPackages(packageJsonFile, deps, devDeps) { | ||
let needsDepsUpdate = false; | ||
let needsDevDepsUpdate = false; | ||
packageJsonFile.dependencies = packageJsonFile.dependencies || {}; | ||
packageJsonFile.devDependencies = packageJsonFile.devDependencies || {}; | ||
if (Object.keys(deps).length > 0) { | ||
needsDepsUpdate = !Object.keys(deps).find(entry => packageJsonFile.dependencies[entry]); | ||
} | ||
if (Object.keys(devDeps).length > 0) { | ||
needsDevDepsUpdate = !Object.keys(devDeps).find(entry => packageJsonFile.devDependencies[entry]); | ||
} | ||
return needsDepsUpdate || needsDevDepsUpdate; | ||
} | ||
let installAdded = false; | ||
/** | ||
* Updates the package.json given the passed deps and/or devDeps. Only updates | ||
* if the packages are not yet present | ||
* | ||
* @param host the schematic tree | ||
* @param deps the package.json dependencies to add | ||
* @param devDeps the package.json devDependencies to add | ||
* @param addInstall default `true`; set to false to avoid installs | ||
*/ | ||
function addDepsToPackageJson(deps, devDeps, addInstall = true) { | ||
return updateJsonInTree('package.json', (json, context) => { | ||
json.dependencies = Object.assign({}, (json.dependencies || {}), deps, (json.dependencies || {})); | ||
json.devDependencies = Object.assign({}, (json.devDependencies || {}), devDeps, (json.devDependencies || {})); | ||
if (addInstall && !installAdded) { | ||
context.addTask(new tasks_1.NodePackageInstallTask()); | ||
installAdded = true; | ||
return (host, context) => { | ||
const currentPackageJson = readJsonInTree(host, 'package.json'); | ||
if (requiresAddingOfPackages(currentPackageJson, deps, devDeps)) { | ||
return updateJsonInTree('package.json', (json, context) => { | ||
json.dependencies = Object.assign({}, (json.dependencies || {}), deps, (json.dependencies || {})); | ||
json.devDependencies = Object.assign({}, (json.devDependencies || {}), devDeps, (json.devDependencies || {})); | ||
if (addInstall && !installAdded) { | ||
context.addTask(new tasks_1.NodePackageInstallTask()); | ||
installAdded = true; | ||
} | ||
return json; | ||
}); | ||
} | ||
return json; | ||
}); | ||
else { | ||
return schematics_1.noop(); | ||
} | ||
}; | ||
} | ||
@@ -401,0 +443,0 @@ exports.addDepsToPackageJson = addDepsToPackageJson; |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -7,2 +15,3 @@ const ast_utils_1 = require("./ast-utils"); | ||
const fileutils_1 = require("./fileutils"); | ||
const testing_utils_1 = require("./testing-utils"); | ||
describe('readJsonInTree', () => { | ||
@@ -99,1 +108,24 @@ let tree; | ||
}); | ||
describe('addDepsToPackageJson', () => { | ||
let appTree; | ||
beforeEach(() => { | ||
appTree = schematics_1.Tree.empty(); | ||
appTree = testing_utils_1.createEmptyWorkspace(appTree); | ||
}); | ||
it('should not update the package.json if dependencies have already been added', () => __awaiter(this, void 0, void 0, function* () { | ||
const devDeps = { | ||
'@nrwl/jest': '1.2.3' | ||
}; | ||
appTree.overwrite('/package.json', JSON.stringify({ | ||
dependencies: {}, | ||
devDependencies: Object.assign({}, devDeps) | ||
})); | ||
const testRunner = new testing_1.SchematicTestRunner('@nrwl/jest', null); | ||
yield testRunner | ||
.callRule(() => { | ||
return ast_utils_1.addDepsToPackageJson({}, devDeps); | ||
}, appTree) | ||
.toPromise(); | ||
expect(testRunner.tasks.find(x => x.name === 'node-package')).not.toBeDefined(); | ||
})); | ||
}); |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const core_1 = require("@angular-devkit/core"); | ||
const schematics_1 = require("@angular-devkit/schematics"); | ||
const ast_utils_1 = require("./ast-utils"); | ||
@@ -38,42 +39,51 @@ const common_1 = require("./common"); | ||
} | ||
const chainedCommands = []; | ||
if (linter === 'tslint') { | ||
if (!host.exists('/tslint.json')) { | ||
host.create('/tslint.json', globalTsLint); | ||
} | ||
if (!options.onlyGlobal) { | ||
host.create(core_1.join(projectRoot, `tslint.json`), JSON.stringify({ | ||
extends: `${common_1.offsetFromRoot(projectRoot)}tslint.json`, | ||
rules: {} | ||
})); | ||
} | ||
return; | ||
chainedCommands.push((host) => { | ||
if (!host.exists('/tslint.json')) { | ||
host.create('/tslint.json', globalTsLint); | ||
} | ||
if (!options.onlyGlobal) { | ||
host.create(core_1.join(projectRoot, `tslint.json`), JSON.stringify({ | ||
extends: `${common_1.offsetFromRoot(projectRoot)}tslint.json`, | ||
rules: {} | ||
})); | ||
} | ||
}); | ||
return schematics_1.chain(chainedCommands); | ||
} | ||
debugger; | ||
if (linter === 'eslint') { | ||
if (!host.exists('/.eslintrc')) { | ||
host.create('/.eslintrc', globalESLint); | ||
ast_utils_1.addDepsToPackageJson(Object.assign({}, (options.extraPackageDeps | ||
? options.extraPackageDeps.dependencies | ||
: {})), Object.assign({ '@nrwl/eslint-plugin-nx': versions_1.nxVersion, '@typescript-eslint/parser': versions_1.typescriptESLintVersion, '@typescript-eslint/eslint-plugin': versions_1.typescriptESLintVersion, eslint: versions_1.eslintVersion, 'eslint-config-prettier': versions_1.eslintConfigPrettierVersion }, (options.extraPackageDeps | ||
? options.extraPackageDeps.devDependencies | ||
: {})))(host, context); | ||
chainedCommands.push((host) => { | ||
host.create('/.eslintrc', globalESLint); | ||
return ast_utils_1.addDepsToPackageJson(Object.assign({}, (options.extraPackageDeps | ||
? options.extraPackageDeps.dependencies | ||
: {})), Object.assign({ '@nrwl/eslint-plugin-nx': versions_1.nxVersion, '@typescript-eslint/parser': versions_1.typescriptESLintVersion, '@typescript-eslint/eslint-plugin': versions_1.typescriptESLintVersion, eslint: versions_1.eslintVersion, 'eslint-config-prettier': versions_1.eslintConfigPrettierVersion }, (options.extraPackageDeps | ||
? options.extraPackageDeps.devDependencies | ||
: {}))); | ||
}); | ||
} | ||
if (!options.onlyGlobal) { | ||
let configJson; | ||
const rootConfig = `${common_1.offsetFromRoot(projectRoot)}.eslintrc`; | ||
if (options.localConfig) { | ||
const extendsOption = options.localConfig.extends | ||
? Array.isArray(options.localConfig.extends) | ||
? options.localConfig.extends | ||
: [options.localConfig.extends] | ||
: []; | ||
configJson = Object.assign({}, options.localConfig, { extends: [...extendsOption, rootConfig] }); | ||
} | ||
else { | ||
configJson = { | ||
extends: rootConfig, | ||
rules: {} | ||
}; | ||
} | ||
host.create(core_1.join(projectRoot, `.eslintrc`), JSON.stringify(configJson)); | ||
chainedCommands.push((host) => { | ||
let configJson; | ||
const rootConfig = `${common_1.offsetFromRoot(projectRoot)}.eslintrc`; | ||
if (options.localConfig) { | ||
const extendsOption = options.localConfig.extends | ||
? Array.isArray(options.localConfig.extends) | ||
? options.localConfig.extends | ||
: [options.localConfig.extends] | ||
: []; | ||
configJson = Object.assign({}, options.localConfig, { extends: [...extendsOption, rootConfig] }); | ||
} | ||
else { | ||
configJson = { | ||
extends: rootConfig, | ||
rules: {} | ||
}; | ||
} | ||
host.create(core_1.join(projectRoot, `.eslintrc`), JSON.stringify(configJson)); | ||
}); | ||
} | ||
return schematics_1.chain(chainedCommands); | ||
} | ||
@@ -80,0 +90,0 @@ }; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.nxVersion = '8.12.1-beta.1'; | ||
exports.nxVersion = '8.12.1'; | ||
exports.angularCliVersion = '8.3.14'; | ||
@@ -5,0 +5,0 @@ exports.typescriptVersion = '~3.5.3'; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
631025
15381
0
+ Added@nrwl/cli@8.12.1(transitive)
+ Added@nrwl/tao@8.12.1(transitive)
- Removed@nrwl/cli@8.12.1-beta.1(transitive)
- Removed@nrwl/tao@8.12.1-beta.1(transitive)
Updated@nrwl/cli@8.12.1