96 lines
2.6 KiB
TypeScript
96 lines
2.6 KiB
TypeScript
import {
|
|
addDependenciesToPackageJson,
|
|
GeneratorCallback,
|
|
joinPathFragments,
|
|
readProjectConfiguration,
|
|
runTasksInSerial,
|
|
Tree,
|
|
} from '@nx/devkit';
|
|
import { Linter, lintProjectGenerator } from '@nx/eslint';
|
|
import { javaScriptOverride } from '@nx/eslint/src/generators/init/global-eslint-config';
|
|
import { eslintPluginPlaywrightVersion } from './versions';
|
|
import {
|
|
addExtendsToLintConfig,
|
|
addOverrideToLintConfig,
|
|
addPluginsToLintConfig,
|
|
findEslintFile,
|
|
isEslintConfigSupported,
|
|
} from '@nx/eslint/src/generators/utils/eslint-file';
|
|
|
|
export interface PlaywrightLinterOptions {
|
|
project: string;
|
|
linter: Linter;
|
|
setParserOptionsProject: boolean;
|
|
skipPackageJson: boolean;
|
|
rootProject: boolean;
|
|
js?: boolean;
|
|
/**
|
|
* Directory from the project root, where the playwright files will be located.
|
|
**/
|
|
directory: string;
|
|
}
|
|
|
|
export async function addLinterToPlaywrightProject(
|
|
tree: Tree,
|
|
options: PlaywrightLinterOptions
|
|
): Promise<GeneratorCallback> {
|
|
if (options.linter === Linter.None) {
|
|
return () => {};
|
|
}
|
|
|
|
const tasks: GeneratorCallback[] = [];
|
|
const projectConfig = readProjectConfiguration(tree, options.project);
|
|
|
|
const eslintFile = findEslintFile(tree, projectConfig.root);
|
|
if (!eslintFile) {
|
|
tasks.push(
|
|
await lintProjectGenerator(tree, {
|
|
project: options.project,
|
|
linter: options.linter,
|
|
skipFormat: true,
|
|
tsConfigPaths: [joinPathFragments(projectConfig.root, 'tsconfig.json')],
|
|
setParserOptionsProject: options.setParserOptionsProject,
|
|
skipPackageJson: options.skipPackageJson,
|
|
rootProject: options.rootProject,
|
|
})
|
|
);
|
|
}
|
|
|
|
if (!options.linter || options.linter !== Linter.EsLint) {
|
|
return runTasksInSerial(...tasks);
|
|
}
|
|
|
|
tasks.push(
|
|
!options.skipPackageJson
|
|
? addDependenciesToPackageJson(
|
|
tree,
|
|
{},
|
|
{ 'eslint-plugin-playwright': eslintPluginPlaywrightVersion }
|
|
)
|
|
: () => {}
|
|
);
|
|
|
|
if (isEslintConfigSupported(tree)) {
|
|
addExtendsToLintConfig(
|
|
tree,
|
|
projectConfig.root,
|
|
'plugin:playwright/recommended'
|
|
);
|
|
if (options.rootProject) {
|
|
addPluginsToLintConfig(tree, projectConfig.root, '@nx');
|
|
addOverrideToLintConfig(tree, projectConfig.root, javaScriptOverride);
|
|
}
|
|
addOverrideToLintConfig(tree, projectConfig.root, {
|
|
files: [`${options.directory}/**/*.{ts,js,tsx,jsx}`],
|
|
parserOptions: !options.setParserOptionsProject
|
|
? undefined
|
|
: {
|
|
project: `${projectConfig.root}/tsconfig.*?.json`,
|
|
},
|
|
rules: {},
|
|
});
|
|
}
|
|
|
|
return runTasksInSerial(...tasks);
|
|
}
|