73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import {
|
|
formatFiles,
|
|
GeneratorCallback,
|
|
names,
|
|
runTasksInSerial,
|
|
Tree,
|
|
updateJson,
|
|
} from '@nx/devkit';
|
|
import { Linter } from '@nx/eslint';
|
|
import { PackageJson } from 'nx/src/utils/package-json';
|
|
import { pluginGenerator } from '../plugin/plugin';
|
|
import { PresetGeneratorSchema } from './schema';
|
|
import createPackageGenerator from '../create-package/create-package';
|
|
|
|
export default async function (tree: Tree, options: PresetGeneratorSchema) {
|
|
const tasks: GeneratorCallback[] = [];
|
|
const pluginProjectName = names(
|
|
options.pluginName.includes('/')
|
|
? options.pluginName.split('/')[1]
|
|
: options.pluginName
|
|
).fileName;
|
|
options.createPackageName =
|
|
options.createPackageName === 'false' // for command line in e2e, it is passed as a string
|
|
? undefined
|
|
: options.createPackageName;
|
|
const pluginTask = await pluginGenerator(tree, {
|
|
compiler: 'tsc',
|
|
linter: Linter.EsLint,
|
|
name: pluginProjectName,
|
|
skipFormat: true,
|
|
unitTestRunner: 'jest',
|
|
importPath: options.pluginName,
|
|
e2eTestRunner: 'jest',
|
|
publishable: true,
|
|
// when creating a CLI package, the plugin will be in the packages folder
|
|
directory:
|
|
options.createPackageName && options.createPackageName !== 'false'
|
|
? 'packages'
|
|
: undefined,
|
|
rootProject: options.createPackageName ? false : true,
|
|
});
|
|
tasks.push(pluginTask);
|
|
|
|
moveNxPluginToDevDeps(tree);
|
|
|
|
if (options.createPackageName) {
|
|
const e2eProject = `${options.pluginName}-e2e`;
|
|
const cliTask = await createPackageGenerator(tree, {
|
|
directory: 'packages',
|
|
name: options.createPackageName,
|
|
e2eProject: e2eProject,
|
|
project: options.pluginName,
|
|
skipFormat: true,
|
|
unitTestRunner: 'jest',
|
|
linter: Linter.EsLint,
|
|
compiler: 'tsc',
|
|
});
|
|
tasks.push(cliTask);
|
|
}
|
|
|
|
await formatFiles(tree);
|
|
|
|
return runTasksInSerial(...tasks);
|
|
}
|
|
function moveNxPluginToDevDeps(tree: Tree) {
|
|
updateJson<PackageJson>(tree, 'package.json', (json) => {
|
|
const nxPluginEntry = json.dependencies['@nx/plugin'];
|
|
delete json.dependencies['@nx/plugin'];
|
|
json.devDependencies['@nx/plugin'] = nxPluginEntry;
|
|
return json;
|
|
});
|
|
}
|