nx/packages/devkit/src/executors/read-target-options.ts
Craigory Coppola 206247f9ad
feat(core): make createNodes async (#20195)
Co-authored-by: Jonathan Cammisuli <jon@cammisuli.ca>
2023-11-13 16:57:20 -05:00

73 lines
2.3 KiB
TypeScript

import type { Target } from 'nx/src/command-line/run/run';
import type { ExecutorContext } from 'nx/src/config/misc-interfaces';
import { requireNx } from '../../nx';
import { relative } from 'path';
let {
Workspaces,
getExecutorInformation,
calculateDefaultProjectName,
combineOptionsForExecutor,
} = requireNx();
// TODO: Remove this in Nx 18 when Nx 16.7.0 is no longer supported
combineOptionsForExecutor =
combineOptionsForExecutor ??
require('nx/src/utils/params').combineOptionsForExecutor;
/**
* Reads and combines options for a given target.
*
* Works as if you invoked the target yourself without passing any command lint overrides.
*/
export function readTargetOptions<T = any>(
{ project, target, configuration }: Target,
context: ExecutorContext
): T {
const projectConfiguration = (
context.workspace || context.projectsConfigurations
).projects[project];
if (!projectConfiguration) {
throw new Error(`Unable to find project ${project}`);
}
const targetConfiguration = projectConfiguration.targets[target];
// TODO(v18): remove Workspaces.
const ws = new Workspaces(context.root);
const [nodeModule, executorName] = targetConfiguration.executor.split(':');
const { schema } = getExecutorInformation
? getExecutorInformation(
nodeModule,
executorName,
context.root,
context.projectsConfigurations?.projects ?? context.workspace.projects
)
: // TODO(v18): remove readExecutor. This is to be backwards compatible with Nx 16.5 and below.
(ws as any).readExecutor(nodeModule, executorName);
const defaultProject = calculateDefaultProjectName
? calculateDefaultProjectName(
context.cwd,
context.root,
{ version: 2, projects: context.projectsConfigurations.projects },
context.nxJsonConfiguration
)
: // TODO(v18): remove calculateDefaultProjectName. This is to be backwards compatible with Nx 16.5 and below.
(ws as any).calculateDefaultProjectName(
context.cwd,
{ version: 2, projects: context.projectsConfigurations.projects },
context.nxJsonConfiguration
);
return combineOptionsForExecutor(
{},
configuration ?? targetConfiguration.defaultConfiguration ?? '',
targetConfiguration,
schema,
defaultProject,
relative(context.root, context.cwd)
) as T;
}