From 150047fa6d015acf06998430de6a18b32c326dec Mon Sep 17 00:00:00 2001 From: FrozenPandaz Date: Tue, 21 Feb 2023 17:25:56 -0500 Subject: [PATCH] fix(core): disable js code analysis when typescript is not installed --- ...ypescript-and-package-json-dependencies.ts | 12 ++++++++-- .../vite/src/utils/vite-config-edit-utils.ts | 22 +++++++++++-------- .../new/__snapshots__/new.spec.ts.snap | 3 --- .../package.json__tmpl__ | 1 - .../new/files-root-app/package.json__tmpl__ | 3 +-- .../new/generate-workspace-files.ts | 2 -- 6 files changed, 24 insertions(+), 19 deletions(-) diff --git a/packages/nx/src/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.ts b/packages/nx/src/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.ts index 287d15fc82bb9f..2d76a886f5cc54 100644 --- a/packages/nx/src/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.ts +++ b/packages/nx/src/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.ts @@ -18,9 +18,17 @@ export function buildExplicitTypescriptAndPackageJsonDependencies( filesToProcess: ProjectFileMap ) { let res: ExplicitDependency[] = []; + + let typescriptExists = false; + + try { + require.resolve('typescript'); + typescriptExists = true; + } catch {} if ( - jsPluginConfig.analyzeSourceFiles === undefined || - jsPluginConfig.analyzeSourceFiles === true + typescriptExists && + (jsPluginConfig.analyzeSourceFiles === undefined || + jsPluginConfig.analyzeSourceFiles === true) ) { res = res.concat( buildExplicitTypeScriptDependencies(projectGraph, filesToProcess) diff --git a/packages/vite/src/utils/vite-config-edit-utils.ts b/packages/vite/src/utils/vite-config-edit-utils.ts index 0d38b3e33c0938..e21e15ce072031 100644 --- a/packages/vite/src/utils/vite-config-edit-utils.ts +++ b/packages/vite/src/utils/vite-config-edit-utils.ts @@ -1,8 +1,7 @@ import { applyChangesToString, ChangeType, Tree } from '@nrwl/devkit'; import { findNodes } from 'nx/src/utils/typescript'; -import ts = require('typescript'); -import { tsquery } from '@phenomnomnominal/tsquery'; import { TargetFlags } from './generator-utils'; +import type { Node, ReturnStatement } from 'typescript'; export function ensureViteConfigIsCorrect( tree: Tree, @@ -66,6 +65,7 @@ function handleBuildOrTestNode( configContentObject: {}, name: 'build' | 'test' ): string | undefined { + const { tsquery } = require('@phenomnomnominal/tsquery'); const buildNode = tsquery.query( updatedFileContent, `PropertyAssignment:has(Identifier[name="${name}"])` @@ -75,7 +75,7 @@ function handleBuildOrTestNode( return tsquery.replace( updatedFileContent, `PropertyAssignment:has(Identifier[name="${name}"])`, - (node: ts.Node) => { + (node: Node) => { const found = tsquery.query(node, 'ObjectLiteralExpression'); return `${name}: { ...${found?.[0].getText()}, @@ -159,13 +159,14 @@ function handleBuildOrTestNode( function transformCurrentBuildObject( index: number, - returnStatements: ts.ReturnStatement[], + returnStatements: ReturnStatement[], appFileContent: string, buildConfigObject: {} ): string | undefined { if (!returnStatements?.[index]) { return undefined; } + const { tsquery } = require('@phenomnomnominal/tsquery'); const currentBuildObject = tsquery .query(returnStatements[index], 'ObjectLiteralExpression')?.[0] .getText(); @@ -176,7 +177,7 @@ function transformCurrentBuildObject( const newReturnObject = tsquery.replace( returnStatements[index].getText(), 'ObjectLiteralExpression', - (_node: ts.Node) => { + (_node: Node) => { return `{ ...${currentBuildObject}, ...${JSON.stringify(buildConfigObject)} @@ -201,10 +202,11 @@ function transformCurrentBuildObject( } function transformConditionalConfig( - conditionalConfig: ts.Node[], + conditionalConfig: Node[], appFileContent: string, buildConfigObject: {} ): string | undefined { + const { tsquery } = require('@phenomnomnominal/tsquery'); const functionBlock = tsquery.query(conditionalConfig[0], 'Block'); const ifStatement = tsquery.query(functionBlock?.[0], 'IfStatement'); @@ -225,9 +227,9 @@ function transformConditionalConfig( const elseKeywordExists = findNodes( ifStatement?.[0], - ts.SyntaxKind.ElseKeyword + require('typescript').SyntaxKind.ElseKeyword ); - const returnStatements: ts.ReturnStatement[] = tsquery.query( + const returnStatements: ReturnStatement[] = tsquery.query( ifStatement[0], 'ReturnStatement' ); @@ -282,6 +284,7 @@ function handlePluginNode( dtsImportLine: string, pluginOption: string ): string | undefined { + const { tsquery } = require('@phenomnomnominal/tsquery'); const file = tsquery.ast(appFileContent); const pluginsNode = tsquery.query( file, @@ -294,7 +297,7 @@ function handlePluginNode( appFileContent = tsquery.replace( file.getText(), 'PropertyAssignment:has(Identifier[name="plugins"])', - (node: ts.Node) => { + (node: Node) => { const found = tsquery.query(node, 'ArrayLiteralExpression'); return `plugins: [ ...${found?.[0].getText()}, @@ -382,6 +385,7 @@ function handlePluginNode( } function handleCacheDirNode(appFileContent: string, cacheDir: string): string { + const { tsquery } = require('@phenomnomnominal/tsquery'); const file = tsquery.ast(appFileContent); const cacheDirNode = tsquery.query( file, diff --git a/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap b/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap index 0be84be4907ef9..22f6c802c62d8d 100644 --- a/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap +++ b/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap @@ -9,7 +9,6 @@ Object { "@nrwl/workspace": "0.0.1", "nx": "0.0.1", "prettier": "^2.6.2", - "typescript": "~4.9.5", }, "license": "MIT", "name": "my-workspace", @@ -26,7 +25,6 @@ Object { "@nrwl/workspace": "0.0.1", "nx": "0.0.1", "prettier": "^2.6.2", - "typescript": "~4.9.5", }, "license": "MIT", "name": "my-workspace", @@ -44,7 +42,6 @@ Object { "@nrwl/workspace": "0.0.1", "nx": "0.0.1", "prettier": "^2.6.2", - "typescript": "~4.9.5", }, "license": "MIT", "name": "my-workspace", diff --git a/packages/workspace/src/generators/new/files-integrated-repo/package.json__tmpl__ b/packages/workspace/src/generators/new/files-integrated-repo/package.json__tmpl__ index 2d8496b0bd0c74..35be3530247aa6 100644 --- a/packages/workspace/src/generators/new/files-integrated-repo/package.json__tmpl__ +++ b/packages/workspace/src/generators/new/files-integrated-repo/package.json__tmpl__ @@ -10,7 +10,6 @@ "devDependencies": { "nx": "<%= nxVersion %>", "@nrwl/workspace": "<%= nxVersion %>", - "typescript": "<%= typescriptVersion %>", "prettier": "<%= prettierVersion %>" } } diff --git a/packages/workspace/src/generators/new/files-root-app/package.json__tmpl__ b/packages/workspace/src/generators/new/files-root-app/package.json__tmpl__ index 8a64a50fdfe1ab..592e9f5150fa60 100644 --- a/packages/workspace/src/generators/new/files-root-app/package.json__tmpl__ +++ b/packages/workspace/src/generators/new/files-root-app/package.json__tmpl__ @@ -10,7 +10,6 @@ "devDependencies": { "@nrwl/workspace": "<%= nxVersion %>", "nx": "<%= nxVersion %>", - "prettier": "<%= prettierVersion %>", - "typescript": "<%= typescriptVersion %>" + "prettier": "<%= prettierVersion %>" } } diff --git a/packages/workspace/src/generators/new/generate-workspace-files.ts b/packages/workspace/src/generators/new/generate-workspace-files.ts index 52f9f3824a9b06..f8c31fd8c47a8c 100644 --- a/packages/workspace/src/generators/new/generate-workspace-files.ts +++ b/packages/workspace/src/generators/new/generate-workspace-files.ts @@ -13,7 +13,6 @@ import { angularCliVersion, nxVersion, prettierVersion, - typescriptVersion, } from '../../utils/versions'; import { join, join as pathJoin } from 'path'; import { Preset } from '../utils/presets'; @@ -147,7 +146,6 @@ function createFiles(tree: Tree, options: NormalizedSchema) { tmpl: '', cliCommand: options.preset === Preset.AngularMonorepo ? 'ng' : 'nx', nxCli: false, - typescriptVersion, prettierVersion, // angular cli is used only when workspace schematics is added to angular cli angularCliVersion,