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..9fcc5cb7e03ac0 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,17 +65,20 @@ function handleBuildOrTestNode( configContentObject: {}, name: 'build' | 'test' ): string | undefined { - const buildNode = tsquery.query( + const buildNode = require('@phenomnomnominal/tsquery').query( updatedFileContent, `PropertyAssignment:has(Identifier[name="${name}"])` ); if (buildNode.length) { - return tsquery.replace( + return require('@phenomnomnominal/tsquery').replace( updatedFileContent, `PropertyAssignment:has(Identifier[name="${name}"])`, - (node: ts.Node) => { - const found = tsquery.query(node, 'ObjectLiteralExpression'); + (node: Node) => { + const found = require('@phenomnomnominal/tsquery').query( + node, + 'ObjectLiteralExpression' + ); return `${name}: { ...${found?.[0].getText()}, ...${JSON.stringify(configContentObject)} @@ -84,13 +86,13 @@ function handleBuildOrTestNode( } ); } else { - const foundDefineConfig = tsquery.query( + const foundDefineConfig = require('@phenomnomnominal/tsquery').query( updatedFileContent, 'CallExpression:has(Identifier[name="defineConfig"])' ); if (foundDefineConfig.length) { - const conditionalConfig = tsquery.query( + const conditionalConfig = require('@phenomnomnominal/tsquery').query( foundDefineConfig[0], 'ArrowFunction' ); @@ -107,7 +109,7 @@ function handleBuildOrTestNode( return updatedFileContent; } } else { - const propertyAssignments = tsquery.query( + const propertyAssignments = require('@phenomnomnominal/tsquery').query( foundDefineConfig[0], 'PropertyAssignment' ); @@ -134,11 +136,11 @@ function handleBuildOrTestNode( // build config does not exist and defineConfig is not used // could also potentially be invalid syntax, so try-catch try { - const defaultExport = tsquery.query( + const defaultExport = require('@phenomnomnominal/tsquery').query( updatedFileContent, 'ExportAssignment' ); - const found = tsquery.query( + const found = require('@phenomnomnominal/tsquery').query( defaultExport?.[0], 'ObjectLiteralExpression' ); @@ -159,24 +161,24 @@ function handleBuildOrTestNode( function transformCurrentBuildObject( index: number, - returnStatements: ts.ReturnStatement[], + returnStatements: ReturnStatement[], appFileContent: string, buildConfigObject: {} ): string | undefined { if (!returnStatements?.[index]) { return undefined; } - const currentBuildObject = tsquery + const currentBuildObject = require('@phenomnomnominal/tsquery') .query(returnStatements[index], 'ObjectLiteralExpression')?.[0] .getText(); const currentBuildObjectStart = returnStatements[index].getStart(); const currentBuildObjectEnd = returnStatements[index].getEnd(); - const newReturnObject = tsquery.replace( + const newReturnObject = require('@phenomnomnominal/tsquery').replace( returnStatements[index].getText(), 'ObjectLiteralExpression', - (_node: ts.Node) => { + (_node: Node) => { return `{ ...${currentBuildObject}, ...${JSON.stringify(buildConfigObject)} @@ -201,15 +203,24 @@ function transformCurrentBuildObject( } function transformConditionalConfig( - conditionalConfig: ts.Node[], + conditionalConfig: Node[], appFileContent: string, buildConfigObject: {} ): string | undefined { - const functionBlock = tsquery.query(conditionalConfig[0], 'Block'); + const functionBlock = require('@phenomnomnominal/tsquery').query( + conditionalConfig[0], + 'Block' + ); - const ifStatement = tsquery.query(functionBlock?.[0], 'IfStatement'); + const ifStatement = require('@phenomnomnominal/tsquery').query( + functionBlock?.[0], + 'IfStatement' + ); - const binaryExpressions = tsquery.query(ifStatement?.[0], 'BinaryExpression'); + const binaryExpressions = require('@phenomnomnominal/tsquery').query( + ifStatement?.[0], + 'BinaryExpression' + ); const buildExists = binaryExpressions?.find( (binaryExpression) => binaryExpression.getText() === `command === 'build'` @@ -225,12 +236,13 @@ function transformConditionalConfig( const elseKeywordExists = findNodes( ifStatement?.[0], - ts.SyntaxKind.ElseKeyword - ); - const returnStatements: ts.ReturnStatement[] = tsquery.query( - ifStatement[0], - 'ReturnStatement' + require('typescript').SyntaxKind.ElseKeyword ); + const returnStatements: ReturnStatement[] = + require('@phenomnomnominal/tsquery').query( + ifStatement[0], + 'ReturnStatement' + ); if (!buildExists) { if (serveExists && elseKeywordExists) { @@ -282,8 +294,8 @@ function handlePluginNode( dtsImportLine: string, pluginOption: string ): string | undefined { - const file = tsquery.ast(appFileContent); - const pluginsNode = tsquery.query( + const file = require('@phenomnomnominal/tsquery').ast(appFileContent); + const pluginsNode = require('@phenomnomnominal/tsquery').query( file, 'PropertyAssignment:has(Identifier[name="plugins"])' ); @@ -291,11 +303,14 @@ function handlePluginNode( let writeFile = false; if (pluginsNode.length) { - appFileContent = tsquery.replace( + appFileContent = require('@phenomnomnominal/tsquery').replace( file.getText(), 'PropertyAssignment:has(Identifier[name="plugins"])', - (node: ts.Node) => { - const found = tsquery.query(node, 'ArrayLiteralExpression'); + (node: Node) => { + const found = require('@phenomnomnominal/tsquery').query( + node, + 'ArrayLiteralExpression' + ); return `plugins: [ ...${found?.[0].getText()}, ${dtsPlugin} @@ -307,13 +322,13 @@ function handlePluginNode( // Plugins node does not exist yet // So make one from scratch - const foundDefineConfig = tsquery.query( + const foundDefineConfig = require('@phenomnomnominal/tsquery').query( file, 'CallExpression:has(Identifier[name="defineConfig"])' ); if (foundDefineConfig.length) { - const conditionalConfig = tsquery.query( + const conditionalConfig = require('@phenomnomnominal/tsquery').query( foundDefineConfig[0], 'ArrowFunction' ); @@ -323,7 +338,7 @@ function handlePluginNode( // with plugins writeFile = false; } else { - const propertyAssignments = tsquery.query( + const propertyAssignments = require('@phenomnomnominal/tsquery').query( foundDefineConfig[0], 'PropertyAssignment' ); @@ -352,8 +367,11 @@ function handlePluginNode( // Plugins option does not exist and defineConfig is not used // could also potentially be invalid syntax, so try-catch try { - const defaultExport = tsquery.query(file, 'ExportAssignment'); - const found = tsquery?.query( + const defaultExport = require('@phenomnomnominal/tsquery').query( + file, + 'ExportAssignment' + ); + const found = require('@phenomnomnominal/tsquery')?.query( defaultExport?.[0], 'ObjectLiteralExpression' ); @@ -382,8 +400,8 @@ function handlePluginNode( } function handleCacheDirNode(appFileContent: string, cacheDir: string): string { - const file = tsquery.ast(appFileContent); - const cacheDirNode = tsquery.query( + const file = require('@phenomnomnominal/tsquery').ast(appFileContent); + const cacheDirNode = require('@phenomnomnominal/tsquery').query( file, 'PropertyAssignment:has(Identifier[name="cacheDir"])' ); @@ -392,13 +410,13 @@ function handleCacheDirNode(appFileContent: string, cacheDir: string): string { // cacheDir node does not exist yet // So make one from scratch - const foundDefineConfig = tsquery.query( + const foundDefineConfig = require('@phenomnomnominal/tsquery').query( file, 'CallExpression:has(Identifier[name="defineConfig"])' ); if (foundDefineConfig.length) { - const conditionalConfig = tsquery.query( + const conditionalConfig = require('@phenomnomnominal/tsquery').query( foundDefineConfig[0], 'ArrowFunction' ); @@ -407,7 +425,7 @@ function handleCacheDirNode(appFileContent: string, cacheDir: string): string { // We are NOT transforming the conditional config // with cacheDir } else { - const propertyAssignments = tsquery.query( + const propertyAssignments = require('@phenomnomnominal/tsquery').query( foundDefineConfig[0], 'PropertyAssignment' ); @@ -434,8 +452,11 @@ function handleCacheDirNode(appFileContent: string, cacheDir: string): string { // cacheDir option does not exist and defineConfig is not used // could also potentially be invalid syntax, so try-catch try { - const defaultExport = tsquery.query(file, 'ExportAssignment'); - const found = tsquery?.query( + const defaultExport = require('@phenomnomnominal/tsquery').query( + file, + 'ExportAssignment' + ); + const found = require('@phenomnomnominal/tsquery')?.query( defaultExport?.[0], 'ObjectLiteralExpression' ); 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 %>" } }