@jnxplus/nx-maven
Version:
[](https://badge.fury.io/js/@jnxplus%2Fnx-maven)
217 lines • 11.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const tslib_1 = require("tslib");
const common_1 = require("@jnxplus/common");
const devkit_1 = require("@nx/devkit");
const path = require("path");
const utils_1 = require("../../utils");
function default_1(tree, options) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
yield applicationGenerator(tree, options);
});
}
function normalizeOptions(tree, options) {
const simpleProjectName = (0, common_1.generateSimpleProjectName)({
name: options.name,
});
const projectName = (0, common_1.generateProjectName)(simpleProjectName, {
name: options.name,
simpleName: options.simpleName,
directory: options.directory,
});
const projectDirectory = (0, common_1.generateProjectDirectory)(simpleProjectName, {
directory: options.directory,
});
const mavenRootDirectory = (0, utils_1.getMavenRootDirectory)();
const projectRoot = (0, common_1.generateProjectRoot)(mavenRootDirectory, projectDirectory);
const parsedTags = (0, common_1.parseTags)(options.tags);
const appClassName = (0, common_1.generateAppClassName)(projectName, {
framework: options.framework,
});
const packageName = (0, common_1.generatePackageName)(simpleProjectName, {
simplePackageName: options.simplePackageName,
groupId: options.groupId,
directory: options.directory,
});
const packageDirectory = (0, common_1.generatePackageDirectory)(packageName);
const [relativePath, parentProjectName, parentGroupId, parentProjectVersion] = (0, utils_1.getParentProjectValues)(tree, mavenRootDirectory, projectRoot, options.parentProject);
const isCustomPort = (0, common_1.isCustomPortFunction)({ port: options.port });
const basePackage = (0, common_1.generateBasePackage)(options.groupId);
const plugin = (0, utils_1.getPlugin)();
const buildTargetName = (0, common_1.getBuildTargetName)(plugin);
const buildImageTargetName = (0, common_1.getBuildImageTargetName)(plugin);
const serveTargetName = (0, common_1.getServeTargetName)(plugin);
const testTargetName = (0, common_1.getTestTargetName)(plugin);
const integrationTestTargetName = (0, common_1.getIntegrationTestTargetName)(plugin);
const aggregatorProjectRoot = (0, utils_1.getAggregatorProjectRoot)(tree, options.aggregatorProject, mavenRootDirectory);
return Object.assign(Object.assign({}, options), { quarkusVersion: common_1.quarkusVersion,
projectName,
projectRoot,
projectDirectory,
parsedTags,
appClassName,
packageName,
packageDirectory,
parentGroupId,
parentProjectName,
parentProjectVersion,
relativePath,
isCustomPort,
mavenRootDirectory,
basePackage,
buildTargetName,
buildImageTargetName,
serveTargetName,
testTargetName,
integrationTestTargetName,
aggregatorProjectRoot });
}
function addNoneFiles(d, tree, options, templateOptions) {
(0, devkit_1.generateFiles)(tree, path.join(d, 'files', 'none', options.language), options.projectRoot, templateOptions);
const fileExtension = options.language === 'java' ? 'java' : 'kt';
if (options.minimal) {
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/main/${options.language}/${options.packageDirectory}/App.${fileExtension}`));
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/test/${options.language}/${options.packageDirectory}/AppTest.${fileExtension}`));
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/test/resources/application${options.configFormat}`));
}
}
function addSpringBootFiles(d, tree, options, templateOptions) {
(0, devkit_1.generateFiles)(tree, path.join(d, 'files', 'spring-boot', options.language), options.projectRoot, templateOptions);
const fileExtension = options.language === 'java' ? 'java' : 'kt';
if (options.packaging === 'jar') {
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/main/${options.language}/${options.packageDirectory}/ServletInitializer.${fileExtension}`));
}
if (options.minimal) {
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/main/${options.language}/${options.packageDirectory}/HelloController.${fileExtension}`));
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/test/${options.language}/${options.packageDirectory}/HelloControllerTests.${fileExtension}`));
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/test/resources/application${options.configFormat}`));
if (options.language === 'kotlin') {
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, '/src/test/resources/junit-platform.properties'));
}
}
}
function addQuarkusFiles(d, tree, options, templateOptions) {
(0, devkit_1.generateFiles)(tree, path.join(d, 'files', 'quarkus', options.language), options.projectRoot, templateOptions);
if (options.minimal) {
const fileExtension = options.language === 'java' ? 'java' : 'kt';
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/main/${options.language}/${options.packageDirectory}/GreetingResource.${fileExtension}`));
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/test/${options.language}/${options.packageDirectory}/GreetingResourceTest.${fileExtension}`));
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/native-test/${options.language}/${options.packageDirectory}/GreetingResourceIT.${fileExtension}`));
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/main/resources/META-INF/resources/index.html`));
}
}
function addMicronautFiles(d, tree, options, templateOptions) {
(0, devkit_1.generateFiles)(tree, path.join(d, 'files', 'micronaut', options.language), options.projectRoot, templateOptions);
(0, devkit_1.generateFiles)(tree, path.join(d, 'files', 'micronaut', 'shared'), options.projectRoot, templateOptions);
if (options.minimal) {
const fileExtension = options.language === 'java' ? 'java' : 'kt';
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/main/${options.language}/${options.packageDirectory}/HelloController.${fileExtension}`));
tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `/src/test/${options.language}/${options.packageDirectory}/HelloControllerTest.${fileExtension}`));
}
}
function addFiles(tree, options) {
const templateOptions = Object.assign(Object.assign(Object.assign({}, options), (0, devkit_1.names)(options.name)), { offsetFromRoot: (0, devkit_1.offsetFromRoot)(options.projectRoot), template: '' });
if (options.framework === 'spring-boot') {
addSpringBootFiles(__dirname, tree, options, templateOptions);
}
if (options.framework === 'quarkus') {
addQuarkusFiles(__dirname, tree, options, templateOptions);
}
if (options.framework === 'micronaut') {
addMicronautFiles(__dirname, tree, options, templateOptions);
}
if (options.framework === 'none') {
addNoneFiles(__dirname, tree, options, templateOptions);
}
}
function applicationGenerator(tree, options) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a;
const normalizedOptions = normalizeOptions(tree, options);
const projectConfiguration = {
root: normalizedOptions.projectRoot,
projectType: 'application',
sourceRoot: `./${normalizedOptions.projectRoot}/src`,
targets: {
[normalizedOptions.buildTargetName]: {
executor: '@jnxplus/nx-maven:run-task',
outputs: ['{projectRoot}/target'],
options: {
task: 'compile -DskipTests=true',
},
},
[normalizedOptions.buildImageTargetName]: {},
[normalizedOptions.serveTargetName]: {
executor: '@jnxplus/nx-maven:run-task',
options: {
task: 'exec:java',
},
dependsOn: [`${normalizedOptions.buildTargetName}`],
},
[normalizedOptions.testTargetName]: {
executor: '@jnxplus/nx-maven:run-task',
options: {
task: 'test',
},
dependsOn: [`^${normalizedOptions.buildTargetName}`],
},
[normalizedOptions.integrationTestTargetName]: {},
},
tags: normalizedOptions.parsedTags,
};
const targets = (_a = projectConfiguration.targets) !== null && _a !== void 0 ? _a : {};
if (options.framework === 'spring-boot') {
targets[`${normalizedOptions.buildTargetName}`].options = Object.assign(Object.assign({}, targets[`${normalizedOptions.buildTargetName}`].options), { task: 'package spring-boot:repackage -DskipTests=true' });
targets[`${normalizedOptions.buildImageTargetName}`] = {
executor: '@jnxplus/nx-maven:run-task',
options: {
task: 'spring-boot:build-image',
},
};
targets[`${normalizedOptions.serveTargetName}`].options = Object.assign(Object.assign({}, targets[`${normalizedOptions.serveTargetName}`].options), { task: 'spring-boot:run' });
targets[`${normalizedOptions.serveTargetName}`].dependsOn = [
`^${normalizedOptions.buildTargetName}`,
];
}
if (options.framework === 'quarkus') {
targets[`${normalizedOptions.buildImageTargetName}`] = {
executor: '@jnxplus/nx-maven:quarkus-build-image',
};
targets[`${normalizedOptions.serveTargetName}`].options = Object.assign(Object.assign({}, targets[`${normalizedOptions.serveTargetName}`].options), { task: 'quarkus:dev' });
targets[`${normalizedOptions.serveTargetName}`].dependsOn = [
`^${normalizedOptions.buildTargetName}`,
];
targets[`${normalizedOptions.integrationTestTargetName}`] = {
executor: '@jnxplus/nx-maven:run-task',
options: {
task: 'integration-test',
},
};
}
if (options.framework === 'micronaut') {
targets[`${normalizedOptions.buildImageTargetName}`] = {
executor: '@jnxplus/nx-maven:run-task',
options: {
task: 'package -Dpackaging=docker',
},
};
targets[`${normalizedOptions.serveTargetName}`].options = Object.assign(Object.assign({}, targets[`${normalizedOptions.serveTargetName}`].options), { task: 'mn:run' });
targets[`${normalizedOptions.serveTargetName}`].dependsOn = [
`^${normalizedOptions.buildTargetName}`,
];
}
(0, common_1.clearEmpties)(targets);
(0, devkit_1.addProjectConfiguration)(tree, normalizedOptions.projectName, projectConfiguration);
addFiles(tree, normalizedOptions);
(0, utils_1.addProjectToAggregator)(tree, {
projectRoot: normalizedOptions.projectRoot,
aggregatorProjectRoot: normalizedOptions.aggregatorProjectRoot,
mavenRootDirectory: normalizedOptions.mavenRootDirectory,
});
if (!options.skipFormat) {
yield (0, devkit_1.formatFiles)(tree);
}
});
}
//# sourceMappingURL=generator.js.map