Skip to content

Commit

Permalink
cleanup(js): improve the tsc executor batch implementation (nrwl#17503)
Browse files Browse the repository at this point in the history
  • Loading branch information
leosvelperez authored Jun 21, 2023
1 parent f35a4ac commit d31eb50
Show file tree
Hide file tree
Showing 19 changed files with 1,086 additions and 521 deletions.
6 changes: 3 additions & 3 deletions docs/generated/devkit/nx_devkit.md
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,7 @@ A change to be made to a string

### TaskGraphExecutor

Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../devkit/documents/nx_devkit#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/nx_devkit#executorcontext)) => `Promise`<`Record`<`string`, `ExecutorTaskResult`\> \| `AsyncIterableIterator`<`Record`<`string`, `ExecutorTaskResult`\>\>\>
Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../devkit/documents/nx_devkit#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/nx_devkit#executorcontext)) => `Promise`<`BatchExecutorResult` \| `AsyncIterableIterator`<`BatchExecutorTaskResult`\>\>

#### Type parameters

Expand All @@ -716,7 +716,7 @@ A change to be made to a string

#### Type declaration

▸ (`taskGraph`, `options`, `overrides`, `context`): `Promise`<`Record`<`string`, `ExecutorTaskResult`\> \| `AsyncIterableIterator`<`Record`<`string`, `ExecutorTaskResult`\>\>\>
▸ (`taskGraph`, `options`, `overrides`, `context`): `Promise`<`BatchExecutorResult` \| `AsyncIterableIterator`<`BatchExecutorTaskResult`\>\>

Implementation of a target of a project that handles multiple projects to be batched

Expand All @@ -731,7 +731,7 @@ Implementation of a target of a project that handles multiple projects to be bat

##### Returns

`Promise`<`Record`<`string`, `ExecutorTaskResult`\> \| `AsyncIterableIterator`<`Record`<`string`, `ExecutorTaskResult`\>\>\>
`Promise`<`BatchExecutorResult` \| `AsyncIterableIterator`<`BatchExecutorTaskResult`\>\>

---

Expand Down
6 changes: 3 additions & 3 deletions docs/generated/packages/devkit/documents/nx_devkit.md
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,7 @@ A change to be made to a string

### TaskGraphExecutor

Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../devkit/documents/nx_devkit#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/nx_devkit#executorcontext)) => `Promise`<`Record`<`string`, `ExecutorTaskResult`\> \| `AsyncIterableIterator`<`Record`<`string`, `ExecutorTaskResult`\>\>\>
Ƭ **TaskGraphExecutor**<`T`\>: (`taskGraph`: [`TaskGraph`](../../devkit/documents/nx_devkit#taskgraph), `options`: `Record`<`string`, `T`\>, `overrides`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/nx_devkit#executorcontext)) => `Promise`<`BatchExecutorResult` \| `AsyncIterableIterator`<`BatchExecutorTaskResult`\>\>

#### Type parameters

Expand All @@ -716,7 +716,7 @@ A change to be made to a string

#### Type declaration

▸ (`taskGraph`, `options`, `overrides`, `context`): `Promise`<`Record`<`string`, `ExecutorTaskResult`\> \| `AsyncIterableIterator`<`Record`<`string`, `ExecutorTaskResult`\>\>\>
▸ (`taskGraph`, `options`, `overrides`, `context`): `Promise`<`BatchExecutorResult` \| `AsyncIterableIterator`<`BatchExecutorTaskResult`\>\>

Implementation of a target of a project that handles multiple projects to be batched

Expand All @@ -731,7 +731,7 @@ Implementation of a target of a project that handles multiple projects to be bat

##### Returns

`Promise`<`Record`<`string`, `ExecutorTaskResult`\> \| `AsyncIterableIterator`<`Record`<`string`, `ExecutorTaskResult`\>\>\>
`Promise`<`BatchExecutorResult` \| `AsyncIterableIterator`<`BatchExecutorTaskResult`\>\>

---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,61 +1,80 @@
import type { ExecutorContext } from '@nx/devkit';
import { parseTargetString } from '@nx/devkit';
import { join, relative } from 'path';
import { CopyAssetsHandler } from '../../../../utils/assets/copy-assets-handler';
import { calculateProjectDependencies } from '../../../../utils/buildable-libs-utils';
import type { NormalizedExecutorOptions } from '../../../../utils/schema';
import { generateTempTsConfig } from './generate-temp-tsconfig';
import { getTaskOptions } from './get-task-options';
import { getTaskWithTscExecutorOptions } from '../get-task-options';
import type { TypescriptInMemoryTsConfig } from '../typescript-compilation';
import type { TaskInfo } from './types';

const taskTsConfigCache = new Set<string>();

export function buildTaskInfoPerTsConfigMap(
export function createTaskInfoPerTsConfigMap(
tasksOptions: Record<string, NormalizedExecutorOptions>,
context: ExecutorContext,
tasks: string[],
taskInMemoryTsConfigMap: Record<string, TypescriptInMemoryTsConfig>
): Record<string, TaskInfo> {
const tsConfigTaskInfoMap: Record<string, TaskInfo> = {};

processTasksAndPopulateTsConfigTaskInfoMap(
tsConfigTaskInfoMap,
tasksOptions,
context,
tasks,
taskInMemoryTsConfigMap
);

return tsConfigTaskInfoMap;
}

function processTasksAndPopulateTsConfigTaskInfoMap(
tsConfigTaskInfoMap: Record<string, TaskInfo>,
tasksOptions: Record<string, NormalizedExecutorOptions>,
context: ExecutorContext,
tasks: string[],
shouldWatch: boolean
taskInMemoryTsConfigMap: Record<string, TypescriptInMemoryTsConfig>
): void {
for (const taskName of tasks) {
if (taskTsConfigCache.has(taskName)) {
continue;
}

let taskOptions = tasksOptions[taskName];
// task is in the batch (it's meant to be processed), create TaskInfo
if (taskOptions) {
const taskInfo = createTaskInfo(taskName, taskOptions, context);
const tsConfig = taskInMemoryTsConfigMap[taskName];
if (!tsConfig) {
continue;
}

const tsConfigPath = generateTempTsConfig(
tasksOptions,
taskName,
taskOptions,
context
let taskOptions =
tasksOptions[taskName] ??
getTaskWithTscExecutorOptions(taskName, context);
if (taskOptions) {
const taskInfo = createTaskInfo(taskName, taskOptions, context, tsConfig);
const tsConfigPath = join(
context.root,
relative(context.root, taskOptions.tsConfig)
);

tsConfigTaskInfoMap[tsConfigPath] = taskInfo;
taskTsConfigCache.add(taskName);
} else {
// if it's not included in the provided map, it could be a cached task and
// we need to pull the options from the relevant project graph node
taskOptions = getTaskOptions(taskName, context);
generateTempTsConfig(tasksOptions, taskName, taskOptions, context);
}

buildTaskInfoPerTsConfigMap(
processTasksAndPopulateTsConfigTaskInfoMap(
tsConfigTaskInfoMap,
tasksOptions,
context,
context.taskGraph.dependencies[taskName],
shouldWatch
taskInMemoryTsConfigMap
);
}
}

function createTaskInfo(
taskName: string,
taskOptions: NormalizedExecutorOptions,
context: ExecutorContext
context: ExecutorContext,
tsConfig: TypescriptInMemoryTsConfig
): TaskInfo {
const target = parseTargetString(taskName, context.projectGraph);

Expand Down Expand Up @@ -93,5 +112,7 @@ function createTaskInfo(
assetsHandler,
buildableProjectNodeDependencies,
projectGraphNode,
tsConfig,
terminalOutput: '',
};
}
75 changes: 0 additions & 75 deletions packages/js/src/executors/tsc/lib/batch/generate-temp-tsconfig.ts

This file was deleted.

43 changes: 0 additions & 43 deletions packages/js/src/executors/tsc/lib/batch/get-task-options.ts

This file was deleted.

4 changes: 0 additions & 4 deletions packages/js/src/executors/tsc/lib/batch/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
export * from './build-task-info-per-tsconfig-map';
export * from './generate-temp-tsconfig';
export * from './get-task-options';
export * from './normalize-tasks-options';
export * from './types';
export * from './typescript-compilation';
export * from './typescript-diagnostic-reporters';
export * from './watch';
5 changes: 5 additions & 0 deletions packages/js/src/executors/tsc/lib/batch/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { ExecutorContext, ProjectGraphProjectNode } from '@nx/devkit';
import type { CopyAssetsHandler } from '../../../../utils/assets/copy-assets-handler';
import type { DependentBuildableProjectNode } from '../../../../utils/buildable-libs-utils';
import type { NormalizedExecutorOptions } from '../../../../utils/schema';
import type { TypescriptInMemoryTsConfig } from '../typescript-compilation';

export interface TaskInfo {
task: string;
Expand All @@ -10,4 +11,8 @@ export interface TaskInfo {
assetsHandler: CopyAssetsHandler;
buildableProjectNodeDependencies: DependentBuildableProjectNode[];
projectGraphNode: ProjectGraphProjectNode;
tsConfig: TypescriptInMemoryTsConfig;
startTime?: number;
endTime?: number;
terminalOutput: string;
}
Loading

0 comments on commit d31eb50

Please sign in to comment.