From ab6f62a9b5186ea96aa409a6dbe73586f550da71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Jona=C5=A1?= Date: Fri, 18 Nov 2022 12:24:53 +0100 Subject: [PATCH] feat(core): move runtime-lint-utils to eslint plugin (#13222) --- packages/angular/plugins/component-testing.ts | 4 +- .../lib/get-component-selector.ts | 2 +- .../utils/storybook-ast/module-info.ts | 2 +- .../utils/storybook-ast/storybook-inputs.ts | 7 ++- .../angular/src/utils/nx-devkit/ast-utils.ts | 2 +- packages/cypress/plugins/cypress-preset.ts | 6 +-- packages/eslint-plugin-nx/.eslintrc.json | 1 - packages/eslint-plugin-nx/package.json | 1 - .../rules/enforce-module-boundaries.spec.ts | 8 ++-- .../src/rules/enforce-module-boundaries.ts | 6 +-- .../src/rules/nx-plugin-checks.ts | 2 +- .../eslint-plugin-nx/src/utils/ast-utils.ts | 2 +- .../src/utils/graph-utils.spec.ts | 0 .../src/utils/graph-utils.ts | 0 .../src/utils/project-graph-utils.ts | 6 +-- .../src/utils/runtime-lint-utils.spec.ts | 0 .../src/utils/runtime-lint-utils.ts | 36 ++------------ .../generators/component/lib/add-import.ts | 2 +- .../build/lib/create-next-config-file.ts | 2 +- .../nx/src/utils/target-project-locator.ts | 47 +++++++++++++++++++ packages/nx/src/utils/typescript.ts | 35 ++++++++++++++ .../generators/component/lib/add-import.ts | 2 +- .../update-13-0-0/webpack5-changes-utils.ts | 2 +- .../update-react-dom-render-for-v18.ts | 2 +- .../react/src/module-federation/ast-utils.ts | 2 +- packages/react/src/utils/ast-utils.ts | 2 +- packages/storybook/src/executors/utils.ts | 6 +-- .../update-12-5-0/install-addon-essentials.ts | 2 +- .../migrate-stories-to-6-2.spec.ts | 2 +- .../migrate-stories-to-6-2.ts | 2 +- packages/storybook/src/utils/utilities.ts | 2 +- packages/workspace/index.ts | 2 +- .../src/generators/move/lib/update-imports.ts | 2 +- packages/workspace/src/utilities/ast-utils.ts | 2 +- .../workspace/src/utilities/typescript.ts | 1 - .../src/utilities/typescript/find-nodes.ts | 36 -------------- packages/workspace/src/utils/ast-utils.ts | 12 ++--- .../src/utils/rules/rename-package-imports.ts | 3 +- 38 files changed, 133 insertions(+), 120 deletions(-) rename packages/{workspace => eslint-plugin-nx}/src/utils/graph-utils.spec.ts (100%) rename packages/{workspace => eslint-plugin-nx}/src/utils/graph-utils.ts (100%) rename packages/{workspace => eslint-plugin-nx}/src/utils/runtime-lint-utils.spec.ts (100%) rename packages/{workspace => eslint-plugin-nx}/src/utils/runtime-lint-utils.ts (93%) delete mode 100644 packages/workspace/src/utilities/typescript/find-nodes.ts diff --git a/packages/angular/plugins/component-testing.ts b/packages/angular/plugins/component-testing.ts index f2ea4541711f4..bce2cbab5bc05 100644 --- a/packages/angular/plugins/component-testing.ts +++ b/packages/angular/plugins/component-testing.ts @@ -21,7 +21,7 @@ import { stripIndents, workspaceRoot, } from '@nrwl/devkit'; -import { mapProjectGraphFiles } from '@nrwl/workspace/src/utils/runtime-lint-utils'; +import { mapProjectGraphFiles } from 'nx/src/utils/target-project-locator'; import { lstatSync, mkdirSync, writeFileSync } from 'fs'; import { dirname, join, relative } from 'path'; import type { BrowserBuilderSchema } from '../src/builders/webpack-browser/webpack-browser.impl'; @@ -74,7 +74,7 @@ ${e.stack ? e.stack : e}` const buildTarget = getBuildableTarget(ctContext); if (!buildTarget.project && !graph.nodes?.[buildTarget.project]?.data) { - throw new Error(stripIndents`Unable to find project configuration for build target. + throw new Error(stripIndents`Unable to find project configuration for build target. Project Name? ${buildTarget.project} Has project config? ${!!graph.nodes?.[buildTarget.project]?.data}`); } diff --git a/packages/angular/src/generators/component-cypress-spec/lib/get-component-selector.ts b/packages/angular/src/generators/component-cypress-spec/lib/get-component-selector.ts index 669b76add19bd..06c94bb9abce2 100644 --- a/packages/angular/src/generators/component-cypress-spec/lib/get-component-selector.ts +++ b/packages/angular/src/generators/component-cypress-spec/lib/get-component-selector.ts @@ -1,5 +1,5 @@ import type { Tree } from '@nrwl/devkit'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript'; +import { findNodes } from 'nx/src/utils/typescript'; import type { PropertyAssignment } from 'typescript'; import { SyntaxKind } from 'typescript'; import { diff --git a/packages/angular/src/generators/utils/storybook-ast/module-info.ts b/packages/angular/src/generators/utils/storybook-ast/module-info.ts index c4abf3d1ef352..9fea560a3ffe2 100644 --- a/packages/angular/src/generators/utils/storybook-ast/module-info.ts +++ b/packages/angular/src/generators/utils/storybook-ast/module-info.ts @@ -5,7 +5,7 @@ import { stripIndents, visitNotIgnoredFiles, } from '@nrwl/devkit'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript'; +import { findNodes } from 'nx/src/utils/typescript'; import { tsquery } from '@phenomnomnominal/tsquery'; import { extname } from 'path'; import type { diff --git a/packages/angular/src/generators/utils/storybook-ast/storybook-inputs.ts b/packages/angular/src/generators/utils/storybook-ast/storybook-inputs.ts index 21198856af922..5c65d8bd996f6 100644 --- a/packages/angular/src/generators/utils/storybook-ast/storybook-inputs.ts +++ b/packages/angular/src/generators/utils/storybook-ast/storybook-inputs.ts @@ -1,8 +1,7 @@ import type { Tree } from '@nrwl/devkit'; -import { - findNodes, - getSourceNodes, -} from '@nrwl/workspace/src/utilities/typescript'; +import { getSourceNodes } from '@nrwl/workspace/src/utilities/typescript'; +import { findNodes } from 'nx/src/utils/typescript'; + import type { PropertyDeclaration } from 'typescript'; import { SyntaxKind } from 'typescript'; import { getTsSourceFile } from '../../../utils/nx-devkit/ast-utils'; diff --git a/packages/angular/src/utils/nx-devkit/ast-utils.ts b/packages/angular/src/utils/nx-devkit/ast-utils.ts index 64bc6bd1bf713..d203031236455 100644 --- a/packages/angular/src/utils/nx-devkit/ast-utils.ts +++ b/packages/angular/src/utils/nx-devkit/ast-utils.ts @@ -1,5 +1,5 @@ import * as ts from 'typescript'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import { getSourceNodes } from '@nrwl/workspace/src/utilities/typescript/get-source-nodes'; import * as path from 'path'; import { names, readProjectConfiguration, Tree } from '@nrwl/devkit'; diff --git a/packages/cypress/plugins/cypress-preset.ts b/packages/cypress/plugins/cypress-preset.ts index 3a687eac20655..22375f866cbef 100644 --- a/packages/cypress/plugins/cypress-preset.ts +++ b/packages/cypress/plugins/cypress-preset.ts @@ -8,8 +8,8 @@ import { TargetConfiguration, workspaceRoot, } from '@nrwl/devkit'; -import { mapProjectGraphFiles } from '@nrwl/workspace/src/utils/runtime-lint-utils'; import { readProjectsConfigurationFromProjectGraph } from 'nx/src/project-graph/project-graph'; +import { mapProjectGraphFiles } from 'nx/src/utils/target-project-locator'; import { dirname, extname, join, relative } from 'path'; import { lstatSync } from 'fs'; @@ -98,8 +98,8 @@ export function getProjectConfigByPath( !graph.nodes[componentTestingProjectName]?.data ) { throw new Error( - stripIndents`Unable to find the project configuration that includes ${normalizedPathFromWorkspaceRoot}. - Found project name? ${componentTestingProjectName}. + stripIndents`Unable to find the project configuration that includes ${normalizedPathFromWorkspaceRoot}. + Found project name? ${componentTestingProjectName}. Graph has data? ${!!graph.nodes[componentTestingProjectName]?.data}` ); } diff --git a/packages/eslint-plugin-nx/.eslintrc.json b/packages/eslint-plugin-nx/.eslintrc.json index ff47ddace4d51..5b07d3871cec9 100644 --- a/packages/eslint-plugin-nx/.eslintrc.json +++ b/packages/eslint-plugin-nx/.eslintrc.json @@ -3,7 +3,6 @@ "rules": { "no-restricted-imports": [ "error", - "@nrwl/workspace", "@angular-devkit/core", "@angular-devkit/architect", "@angular-devkit/schematics" diff --git a/packages/eslint-plugin-nx/package.json b/packages/eslint-plugin-nx/package.json index 353455d687d79..640a701ef8581 100644 --- a/packages/eslint-plugin-nx/package.json +++ b/packages/eslint-plugin-nx/package.json @@ -34,7 +34,6 @@ }, "dependencies": { "@nrwl/devkit": "file:../devkit", - "@nrwl/workspace": "file:../workspace", "@typescript-eslint/utils": "^5.36.1", "chalk": "4.1.0", "confusing-browser-globals": "^1.0.9", diff --git a/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.spec.ts b/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.spec.ts index e482b999c5371..389d6fab160bc 100644 --- a/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.spec.ts +++ b/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.spec.ts @@ -1,13 +1,15 @@ import type { FileData, ProjectGraph } from '@nrwl/devkit'; import { DependencyType } from '@nrwl/devkit'; -import { mapProjectGraphFiles } from '@nrwl/workspace/src/utils/runtime-lint-utils'; import * as parser from '@typescript-eslint/parser'; import { TSESLint } from '@typescript-eslint/utils'; import { vol } from 'memfs'; -import { TargetProjectLocator } from 'nx/src/utils/target-project-locator'; +import { + TargetProjectLocator, + mapProjectGraphFiles, +} from 'nx/src/utils/target-project-locator'; import enforceModuleBoundaries, { RULE_NAME as enforceModuleBoundariesRuleName, -} from '../../src/rules/enforce-module-boundaries'; +} from './enforce-module-boundaries'; jest.mock('fs', () => require('memfs').fs); diff --git a/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.ts b/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.ts index 0d067184a915e..6d1c7af5d57c8 100644 --- a/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.ts +++ b/packages/eslint-plugin-nx/src/rules/enforce-module-boundaries.ts @@ -5,11 +5,11 @@ import { ProjectGraphProjectNode, workspaceRoot, } from '@nrwl/devkit'; -import { isRelativePath } from '@nrwl/workspace/src/utilities/fileutils'; +import { isRelativePath } from 'nx/src/utils/fileutils'; import { checkCircularPath, findFilesInCircularPath, -} from '@nrwl/workspace/src/utils/graph-utils'; +} from '../utils/graph-utils'; import { DepConstraint, findConstraintsFor, @@ -31,7 +31,7 @@ import { matchImportWithWildcard, onlyLoadChildren, stringifyTags, -} from '@nrwl/workspace/src/utils/runtime-lint-utils'; +} from '../utils/runtime-lint-utils'; import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { TargetProjectLocator } from 'nx/src/utils/target-project-locator'; import { basename, dirname, relative } from 'path'; diff --git a/packages/eslint-plugin-nx/src/rules/nx-plugin-checks.ts b/packages/eslint-plugin-nx/src/rules/nx-plugin-checks.ts index f3ce721757e79..a7024277e46d5 100644 --- a/packages/eslint-plugin-nx/src/rules/nx-plugin-checks.ts +++ b/packages/eslint-plugin-nx/src/rules/nx-plugin-checks.ts @@ -9,7 +9,7 @@ import { import { findSourceProject, getSourceFilePath, -} from '@nrwl/workspace/src/utils/runtime-lint-utils'; +} from '../utils/runtime-lint-utils'; import { existsSync } from 'fs'; import { registerTsProject } from 'nx/src/utils/register'; import * as path from 'path'; diff --git a/packages/eslint-plugin-nx/src/utils/ast-utils.ts b/packages/eslint-plugin-nx/src/utils/ast-utils.ts index 9e4b56e5aaf60..222900b09c066 100644 --- a/packages/eslint-plugin-nx/src/utils/ast-utils.ts +++ b/packages/eslint-plugin-nx/src/utils/ast-utils.ts @@ -3,7 +3,7 @@ import { ProjectGraphProjectNode, readJsonFile, } from '@nrwl/devkit'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript'; +import { findNodes } from 'nx/src/utils/typescript'; import { existsSync, readFileSync } from 'fs'; import { dirname } from 'path'; import ts = require('typescript'); diff --git a/packages/workspace/src/utils/graph-utils.spec.ts b/packages/eslint-plugin-nx/src/utils/graph-utils.spec.ts similarity index 100% rename from packages/workspace/src/utils/graph-utils.spec.ts rename to packages/eslint-plugin-nx/src/utils/graph-utils.spec.ts diff --git a/packages/workspace/src/utils/graph-utils.ts b/packages/eslint-plugin-nx/src/utils/graph-utils.ts similarity index 100% rename from packages/workspace/src/utils/graph-utils.ts rename to packages/eslint-plugin-nx/src/utils/graph-utils.ts diff --git a/packages/eslint-plugin-nx/src/utils/project-graph-utils.ts b/packages/eslint-plugin-nx/src/utils/project-graph-utils.ts index 4661ac35a8139..ad7ec951a087c 100644 --- a/packages/eslint-plugin-nx/src/utils/project-graph-utils.ts +++ b/packages/eslint-plugin-nx/src/utils/project-graph-utils.ts @@ -1,9 +1,9 @@ import { readCachedProjectGraph, readNxJson } from '@nrwl/devkit'; import { - isTerminalRun, - MappedProjectGraph, mapProjectGraphFiles, -} from '@nrwl/workspace/src/utils/runtime-lint-utils'; + MappedProjectGraph, +} from 'nx/src/utils/target-project-locator'; +import { isTerminalRun } from './runtime-lint-utils'; import * as chalk from 'chalk'; export function ensureGlobalProjectGraph(ruleName: string) { diff --git a/packages/workspace/src/utils/runtime-lint-utils.spec.ts b/packages/eslint-plugin-nx/src/utils/runtime-lint-utils.spec.ts similarity index 100% rename from packages/workspace/src/utils/runtime-lint-utils.spec.ts rename to packages/eslint-plugin-nx/src/utils/runtime-lint-utils.spec.ts diff --git a/packages/workspace/src/utils/runtime-lint-utils.ts b/packages/eslint-plugin-nx/src/utils/runtime-lint-utils.ts similarity index 93% rename from packages/workspace/src/utils/runtime-lint-utils.ts rename to packages/eslint-plugin-nx/src/utils/runtime-lint-utils.ts index 475108a6d9679..0bcb72f6a1c52 100644 --- a/packages/workspace/src/utils/runtime-lint-utils.ts +++ b/packages/eslint-plugin-nx/src/utils/runtime-lint-utils.ts @@ -14,11 +14,11 @@ import { join } from 'path'; import { getPath, pathExists } from './graph-utils'; import { existsSync } from 'fs'; import { readFileIfExisting } from 'nx/src/project-graph/file-utils'; -import { TargetProjectLocator } from 'nx/src/utils/target-project-locator'; - -export type MappedProjectGraph = ProjectGraph & { - allFiles: Record; -}; +import { + TargetProjectLocator, + MappedProjectGraph, + removeExt, +} from 'nx/src/utils/target-project-locator'; export type Deps = { [projectName: string]: ProjectGraphDependency[] }; export type DepConstraint = { @@ -70,10 +70,6 @@ function hasTag(proj: ProjectGraphProjectNode, tag: string) { return tag === '*' || (proj.data.tags || []).indexOf(tag) > -1; } -export function removeExt(file: string): string { - return file.replace(/(?( - projectGraph: ProjectGraph -): MappedProjectGraph | null { - if (!projectGraph) { - return null; - } - const allFiles: Record = {}; - Object.entries( - projectGraph.nodes as Record - ).forEach(([name, node]) => { - node.data.files.forEach(({ file }) => { - const fileName = removeExt(file); - allFiles[fileName] = name; - }); - }); - - return { - ...projectGraph, - allFiles, - }; -} - const ESLINT_REGEX = /node_modules.*[\/\\]eslint$/; const JEST_REGEX = /node_modules\/.bin\/jest$/; // when we run unit tests in jest const NRWL_CLI_REGEX = /nx[\/\\]bin[\/\\]run-executor\.js$/; diff --git a/packages/expo/src/generators/component/lib/add-import.ts b/packages/expo/src/generators/component/lib/add-import.ts index b151ee22261a0..5e51c4bb21f73 100644 --- a/packages/expo/src/generators/component/lib/add-import.ts +++ b/packages/expo/src/generators/component/lib/add-import.ts @@ -1,4 +1,4 @@ -import { findNodes } from '@nrwl/workspace/src/utilities/typescript'; +import { findNodes } from 'nx/src/utils/typescript'; import * as ts from 'typescript'; import { ChangeType, StringChange } from '@nrwl/devkit'; diff --git a/packages/next/src/executors/build/lib/create-next-config-file.ts b/packages/next/src/executors/build/lib/create-next-config-file.ts index a0fd9bf939bbe..39d13be27882f 100644 --- a/packages/next/src/executors/build/lib/create-next-config-file.ts +++ b/packages/next/src/executors/build/lib/create-next-config-file.ts @@ -11,7 +11,7 @@ import { existsSync, readFileSync, writeFileSync } from 'fs'; import { join } from 'path'; import type { NextBuildBuilderOptions } from '../../../utils/types'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript'; +import { findNodes } from 'nx/src/utils/typescript'; export function createNextConfigFile( options: NextBuildBuilderOptions, diff --git a/packages/nx/src/utils/target-project-locator.ts b/packages/nx/src/utils/target-project-locator.ts index e5693a196f00a..59ded7b6c6988 100644 --- a/packages/nx/src/utils/target-project-locator.ts +++ b/packages/nx/src/utils/target-project-locator.ts @@ -3,6 +3,7 @@ import { isRelativePath, readJsonFile } from './fileutils'; import { dirname, join, posix } from 'path'; import { workspaceRoot } from './workspace-root'; import { + ProjectGraph, ProjectGraphExternalNode, ProjectGraphProjectNode, } from '../config/project-graph'; @@ -198,6 +199,11 @@ function filterRootExternalDependencies( return nodes; } +/** + * Mapps the project root paths to the project name + * @param nodes + * @returns + */ export function createProjectRootMappings( nodes: Record ) { @@ -212,6 +218,47 @@ export function createProjectRootMappings( return projectRootMappings; } +export type MappedProjectGraph = ProjectGraph & { + allFiles: Record; +}; + +/** + * Strips the file extension from the file path + * @param file + * @returns + */ +export function removeExt(file: string): string { + return file.replace(/(?( + projectGraph: ProjectGraph +): MappedProjectGraph | null { + if (!projectGraph) { + return null; + } + const allFiles: Record = {}; + Object.entries( + projectGraph.nodes as Record + ).forEach(([name, node]) => { + node.data.files.forEach(({ file }) => { + const fileName = removeExt(file); + allFiles[fileName] = name; + }); + }); + + return { + ...projectGraph, + allFiles, + }; +} + /** * Locates a project in projectRootMap based on a file within it * @param filePath path that is inside of projectName diff --git a/packages/nx/src/utils/typescript.ts b/packages/nx/src/utils/typescript.ts index c364ccf0bb683..a6e4b98537f53 100644 --- a/packages/nx/src/utils/typescript.ts +++ b/packages/nx/src/utils/typescript.ts @@ -104,3 +104,38 @@ export function getRootTsConfigPath(): string | null { return tsConfigFileName ? join(workspaceRoot, tsConfigFileName) : null; } + +export function findNodes( + node: ts.Node, + kind: ts.SyntaxKind | ts.SyntaxKind[], + max = Infinity +): ts.Node[] { + if (!node || max == 0) { + return []; + } + + const arr: ts.Node[] = []; + const hasMatch = Array.isArray(kind) + ? kind.includes(node.kind) + : node.kind === kind; + if (hasMatch) { + arr.push(node); + max--; + } + if (max > 0) { + for (const child of node.getChildren()) { + findNodes(child, kind, max).forEach((node) => { + if (max > 0) { + arr.push(node); + } + max--; + }); + + if (max <= 0) { + break; + } + } + } + + return arr; +} diff --git a/packages/react-native/src/generators/component/lib/add-import.ts b/packages/react-native/src/generators/component/lib/add-import.ts index b151ee22261a0..5e51c4bb21f73 100644 --- a/packages/react-native/src/generators/component/lib/add-import.ts +++ b/packages/react-native/src/generators/component/lib/add-import.ts @@ -1,4 +1,4 @@ -import { findNodes } from '@nrwl/workspace/src/utilities/typescript'; +import { findNodes } from 'nx/src/utils/typescript'; import * as ts from 'typescript'; import { ChangeType, StringChange } from '@nrwl/devkit'; diff --git a/packages/react/src/migrations/update-13-0-0/webpack5-changes-utils.ts b/packages/react/src/migrations/update-13-0-0/webpack5-changes-utils.ts index ff3d011033b01..d856735cefa59 100644 --- a/packages/react/src/migrations/update-13-0-0/webpack5-changes-utils.ts +++ b/packages/react/src/migrations/update-13-0-0/webpack5-changes-utils.ts @@ -7,7 +7,7 @@ import { } from '@nrwl/devkit'; import ts = require('typescript'); -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; export async function migrateToWebPack5(tree: Tree) { allReactProjectsWithStorybookConfiguration(tree).forEach((project) => { diff --git a/packages/react/src/migrations/update-14-0-0/update-react-dom-render-for-v18.ts b/packages/react/src/migrations/update-14-0-0/update-react-dom-render-for-v18.ts index e8ced25914ec0..ef5e3eb1c7d6a 100644 --- a/packages/react/src/migrations/update-14-0-0/update-react-dom-render-for-v18.ts +++ b/packages/react/src/migrations/update-14-0-0/update-react-dom-render-for-v18.ts @@ -7,7 +7,7 @@ import { Tree, formatFiles, } from '@nrwl/devkit'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import * as ts from 'typescript'; export async function update(tree: Tree) { diff --git a/packages/react/src/module-federation/ast-utils.ts b/packages/react/src/module-federation/ast-utils.ts index 55758ab17ba21..9e25c9767bf1f 100644 --- a/packages/react/src/module-federation/ast-utils.ts +++ b/packages/react/src/module-federation/ast-utils.ts @@ -1,6 +1,6 @@ import * as ts from 'typescript'; import { ChangeType, StringChange } from '@nrwl/devkit'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import { addImport, findClosestOpening, diff --git a/packages/react/src/utils/ast-utils.ts b/packages/react/src/utils/ast-utils.ts index cfd21f5c2cd0b..e0c77ed3f7d6c 100644 --- a/packages/react/src/utils/ast-utils.ts +++ b/packages/react/src/utils/ast-utils.ts @@ -1,5 +1,5 @@ import * as ts from 'typescript'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import { ChangeType, logger, diff --git a/packages/storybook/src/executors/utils.ts b/packages/storybook/src/executors/utils.ts index 5c2fca04f6b6d..7bff48af67d38 100644 --- a/packages/storybook/src/executors/utils.ts +++ b/packages/storybook/src/executors/utils.ts @@ -1,5 +1,5 @@ import { ExecutorContext, joinPathFragments, logger } from '@nrwl/devkit'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import 'dotenv/config'; import { existsSync, readFileSync } from 'fs'; import { join } from 'path'; @@ -58,9 +58,9 @@ function reactWebpack5Check(options: CommonNxStorybookConfig) { It looks like you use Webpack 5 but your Storybook setup is not configured to leverage that and thus falls back to Webpack 4. Make sure you upgrade your Storybook config to use Webpack 5. - + - https://gist.github.com/shilman/8856ea1786dcd247139b47b270912324#upgrade - + `); } } diff --git a/packages/storybook/src/migrations/update-12-5-0/install-addon-essentials.ts b/packages/storybook/src/migrations/update-12-5-0/install-addon-essentials.ts index f1fd549db1736..69da9e3b2c754 100644 --- a/packages/storybook/src/migrations/update-12-5-0/install-addon-essentials.ts +++ b/packages/storybook/src/migrations/update-12-5-0/install-addon-essentials.ts @@ -6,7 +6,7 @@ import { applyChangesToString, ChangeType, } from '@nrwl/devkit'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import { getTsSourceFile } from '../../utils/utilities'; import ts = require('typescript'); diff --git a/packages/storybook/src/migrations/update-14-0-0/migrate-stories-to-6-2/migrate-stories-to-6-2.spec.ts b/packages/storybook/src/migrations/update-14-0-0/migrate-stories-to-6-2/migrate-stories-to-6-2.spec.ts index 1b19a69330360..68d8acd4b287f 100644 --- a/packages/storybook/src/migrations/update-14-0-0/migrate-stories-to-6-2/migrate-stories-to-6-2.spec.ts +++ b/packages/storybook/src/migrations/update-14-0-0/migrate-stories-to-6-2/migrate-stories-to-6-2.spec.ts @@ -6,7 +6,7 @@ import { import { joinPathFragments, writeJson } from '@nrwl/devkit'; import { createTreeWithEmptyV1Workspace } from '@nrwl/devkit/testing'; import { storybookVersion } from '@nrwl/storybook'; -import { findNodes } from '@nrwl/workspace/src/utils/ast-utils'; +import { findNodes } from 'nx/src/utils/typescript'; import * as ts from 'typescript'; import { SyntaxKind } from 'typescript'; import { nxVersion } from '../../../utils/versions'; diff --git a/packages/storybook/src/migrations/update-14-0-0/migrate-stories-to-6-2/migrate-stories-to-6-2.ts b/packages/storybook/src/migrations/update-14-0-0/migrate-stories-to-6-2/migrate-stories-to-6-2.ts index 45d8f0d7e0a72..f907177590385 100644 --- a/packages/storybook/src/migrations/update-14-0-0/migrate-stories-to-6-2/migrate-stories-to-6-2.ts +++ b/packages/storybook/src/migrations/update-14-0-0/migrate-stories-to-6-2/migrate-stories-to-6-2.ts @@ -9,7 +9,7 @@ import { visitNotIgnoredFiles, } from '@nrwl/devkit'; import { fileExists } from '@nrwl/workspace/src/utilities/fileutils'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import { join, normalize } from 'path'; import { SyntaxKind } from 'typescript'; import { getTsSourceFile } from '../../../utils/utilities'; diff --git a/packages/storybook/src/utils/utilities.ts b/packages/storybook/src/utils/utilities.ts index 74659381177f1..97c5e8d053361 100644 --- a/packages/storybook/src/utils/utilities.ts +++ b/packages/storybook/src/utils/utilities.ts @@ -11,7 +11,7 @@ import { StorybookConfig } from '../executors/models'; import { constants, copyFileSync, mkdtempSync, statSync } from 'fs'; import { tmpdir } from 'os'; import { basename, join, sep } from 'path'; -import { findNodes } from '@nrwl/workspace/src/utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import ts = require('typescript'); export const Constants = { diff --git a/packages/workspace/index.ts b/packages/workspace/index.ts index 1eb2794da672c..4120e588e51ac 100644 --- a/packages/workspace/index.ts +++ b/packages/workspace/index.ts @@ -21,6 +21,7 @@ export { readPackageJson, } from 'nx/src/project-graph/file-utils'; export { ProjectGraphCache } from 'nx/src/project-graph/nx-deps-cache'; +export { findNodes } from 'nx/src/utils/typescript'; export { readJsonInTree, updateJsonInTree, @@ -34,7 +35,6 @@ export { getProjectConfig, addParameterToConstructor, createOrUpdate, - findNodes, updatePackageJsonDependencies, readWorkspace, renameSyncInTree, diff --git a/packages/workspace/src/generators/move/lib/update-imports.ts b/packages/workspace/src/generators/move/lib/update-imports.ts index 286a24aace67c..c4ba29ffa4479 100644 --- a/packages/workspace/src/generators/move/lib/update-imports.ts +++ b/packages/workspace/src/generators/move/lib/update-imports.ts @@ -12,7 +12,7 @@ import { import { getImportPath } from 'nx/src/utils/path'; import * as ts from 'typescript'; import { getRootTsConfigPathInTree } from '../../../utilities/typescript'; -import { findNodes } from '../../../utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import { NormalizedSchema } from '../schema'; import { normalizeSlashes } from './utils'; diff --git a/packages/workspace/src/utilities/ast-utils.ts b/packages/workspace/src/utilities/ast-utils.ts index 77a29d53f9c9e..5f94ccdc4dc7d 100644 --- a/packages/workspace/src/utilities/ast-utils.ts +++ b/packages/workspace/src/utilities/ast-utils.ts @@ -1,7 +1,7 @@ import type { Tree } from '@nrwl/devkit'; import * as ts from 'typescript'; import { getSourceNodes } from './typescript'; -import { findNodes } from './typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; function nodesByPosition(first: ts.Node, second: ts.Node): number { return first.getStart() - second.getStart(); diff --git a/packages/workspace/src/utilities/typescript.ts b/packages/workspace/src/utilities/typescript.ts index a01f8ba1c13fb..988450dc88db1 100644 --- a/packages/workspace/src/utilities/typescript.ts +++ b/packages/workspace/src/utilities/typescript.ts @@ -5,7 +5,6 @@ import { dirname, join } from 'path'; import type * as ts from 'typescript'; export { compileTypeScript } from './typescript/compilation'; export type { TypeScriptCompilationOptions } from './typescript/compilation'; -export { findNodes } from './typescript/find-nodes'; export { getSourceNodes } from './typescript/get-source-nodes'; const normalizedAppRoot = workspaceRoot.replace(/\\/g, '/'); diff --git a/packages/workspace/src/utilities/typescript/find-nodes.ts b/packages/workspace/src/utilities/typescript/find-nodes.ts deleted file mode 100644 index ca4369f8014f9..0000000000000 --- a/packages/workspace/src/utilities/typescript/find-nodes.ts +++ /dev/null @@ -1,36 +0,0 @@ -import * as ts from 'typescript'; - -export function findNodes( - node: ts.Node, - kind: ts.SyntaxKind | ts.SyntaxKind[], - max = Infinity -): ts.Node[] { - if (!node || max == 0) { - return []; - } - - const arr: ts.Node[] = []; - const hasMatch = Array.isArray(kind) - ? kind.includes(node.kind) - : node.kind === kind; - if (hasMatch) { - arr.push(node); - max--; - } - if (max > 0) { - for (const child of node.getChildren()) { - findNodes(child, kind, max).forEach((node) => { - if (max > 0) { - arr.push(node); - } - max--; - }); - - if (max <= 0) { - break; - } - } - } - - return arr; -} diff --git a/packages/workspace/src/utils/ast-utils.ts b/packages/workspace/src/utils/ast-utils.ts index e2a87d4775d77..59c774e4ecf25 100644 --- a/packages/workspace/src/utils/ast-utils.ts +++ b/packages/workspace/src/utils/ast-utils.ts @@ -18,17 +18,12 @@ import { Tree, } from '@angular-devkit/schematics'; import * as ts from 'typescript'; -import { - parseJson, - ProjectConfiguration, - serializeJson, - FileData, -} from '@nrwl/devkit'; +import { parseJson, serializeJson, FileData } from '@nrwl/devkit'; import { getWorkspacePath } from './cli-config-utils'; import { extname, join, normalize, Path } from '@angular-devkit/core'; -import type { NxJsonConfiguration, ProjectsConfigurations } from '@nrwl/devkit'; +import type { NxJsonConfiguration } from '@nrwl/devkit'; import { addInstallTask } from './rules/add-install-task'; -import { findNodes } from '../utilities/typescript/find-nodes'; +import { findNodes } from 'nx/src/utils/typescript'; import { getSourceNodes } from '../utilities/typescript/get-source-nodes'; function nodesByPosition(first: ts.Node, second: ts.Node): number { @@ -71,7 +66,6 @@ export function sortObjectByKeys(obj: unknown) { }, {}); } -export { findNodes } from '../utilities/typescript/find-nodes'; export { getSourceNodes } from '../utilities/typescript/get-source-nodes'; export interface Change { diff --git a/packages/workspace/src/utils/rules/rename-package-imports.ts b/packages/workspace/src/utils/rules/rename-package-imports.ts index 283c3d3d730b4..57405a23334b4 100644 --- a/packages/workspace/src/utils/rules/rename-package-imports.ts +++ b/packages/workspace/src/utils/rules/rename-package-imports.ts @@ -7,7 +7,8 @@ import { } from '@angular-devkit/schematics'; import { getWorkspace } from '../workspace'; import { visitNotIgnoredFiles } from './visit-not-ignored-files'; -import { findNodes, insert, ReplaceChange } from '../ast-utils'; +import { insert, ReplaceChange } from '../ast-utils'; +import { findNodes } from 'nx/src/utils/typescript'; import { normalize } from '@angular-devkit/core'; export interface PackageNameMapping {