nx/packages/nest/src/generators/application/lib/normalize-options.ts

55 lines
1.8 KiB
TypeScript

import { extractLayoutDirectory, Tree } from '@nx/devkit';
import { getWorkspaceLayout, joinPathFragments, names } from '@nx/devkit';
import { Linter } from '@nx/linter';
import type { Schema as NodeApplicationGeneratorOptions } from '@nx/node/src/generators/application/schema';
import type { ApplicationGeneratorOptions, NormalizedOptions } from '../schema';
export function normalizeOptions(
tree: Tree,
options: ApplicationGeneratorOptions
): NormalizedOptions {
const { layoutDirectory, projectDirectory } = extractLayoutDirectory(
options.directory
);
const appDirectory = projectDirectory
? `${names(projectDirectory).fileName}/${names(options.name).fileName}`
: names(options.name).fileName;
const appProjectRoot = options.rootProject
? '.'
: joinPathFragments(
layoutDirectory ?? getWorkspaceLayout(tree).appsDir,
appDirectory
);
return {
...options,
appProjectRoot,
linter: options.linter ?? Linter.EsLint,
unitTestRunner: options.unitTestRunner ?? 'jest',
e2eTestRunner: options.e2eTestRunner ?? 'jest',
};
}
export function toNodeApplicationGeneratorOptions(
options: NormalizedOptions
): NodeApplicationGeneratorOptions {
return {
name: options.name,
directory: options.directory,
frontendProject: options.frontendProject,
linter: options.linter,
skipFormat: true,
skipPackageJson: options.skipPackageJson,
standaloneConfig: options.standaloneConfig,
tags: options.tags,
unitTestRunner: options.unitTestRunner,
e2eTestRunner: options.e2eTestRunner,
setParserOptionsProject: options.setParserOptionsProject,
rootProject: options.rootProject,
bundler: 'webpack', // Some features require webpack plugins such as TS transformers
isNest: true,
};
}