@nxrocks/nx-ktor
Version:
Nx plugin to generate, run, package, build (and more) Ktor projects inside your Nx workspace
76 lines • 3.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFAULT_KTOR_INITIALIZR_URL = void 0;
exports.runKtorPluginCommand = runKtorPluginCommand;
exports.buildKtorDownloadUrl = buildKtorDownloadUrl;
exports.isKtorProject = isKtorProject;
exports.fetchKtorFeatures = fetchKtorFeatures;
const index_1 = require("../index");
const common_jvm_1 = require("@nxrocks/common-jvm");
const constants_1 = require("../core/constants");
const node_fetch_1 = require("node-fetch");
const getBuilder = (cwd) => {
if ((0, common_jvm_1.hasMavenProject)(cwd))
return constants_1.MAVEN_BUILDER;
if ((0, common_jvm_1.hasGradleProject)(cwd))
return constants_1.GRADLE_BUILDER;
throw new Error(`Cannot determine the build system. No 'pom.xml' nor 'build.gradle' file found under '${cwd}'`);
};
exports.DEFAULT_KTOR_INITIALIZR_URL = 'https://start.ktor.io';
function runKtorPluginCommand(commandAlias, params, options = {
cwd: process.cwd(),
ignoreWrapper: false,
useLegacyWrapper: true,
runFromParentModule: false,
}) {
//force use legacy wrapper for all executors
options = { ...options, useLegacyWrapper: true };
return (0, common_jvm_1.runBuilderCommand)(commandAlias, getBuilder, params, options);
}
function buildKtorDownloadUrl(options) {
const url = `${options.ktorInitializrUrl}/project/generate`;
const params = {
settings: {
project_name: `${options.groupId}.${options.artifactId}`,
company_website: options.groupId,
ktor_version: options.ktorVersion,
kotlin_version: options.kotlinVersion,
build_system: options.buildSystem,
engine: options.engine,
},
features: options.projectFeatures,
configurationOption: options.configurationLocation,
addDefaultRoutes: !options.skipCodeSamples,
addWrapper: true,
};
return { url, params };
}
function isKtorProject(project) {
if ((0, common_jvm_1.hasMultiModuleMavenProject)(project.root) ||
(0, common_jvm_1.hasMultiModuleGradleProject)(project.root))
return true;
if ((0, common_jvm_1.isMavenProject)(project)) {
return (0, common_jvm_1.checkProjectBuildFileContains)(project, {
fragments: ['<version>${ktor_version}</version>'],
});
}
if ((0, common_jvm_1.isGradleProject)(project)) {
return (0, common_jvm_1.checkProjectBuildFileContains)(project, {
fragments: ["id 'io.ktor.plugin'", 'id("io.ktor.plugin")'],
});
}
return false;
}
async function fetchKtorFeatures(options) {
const version = options.ktorVersion ?? 'main';
const url = `https://raw.githubusercontent.com/ktorio/ktor/${version}/settings.gradle.kts`;
const response = await (0, node_fetch_1.default)(url, (0, common_jvm_1.getCommonHttpHeaders)(index_1.NX_KTOR_PKG, url, options.proxyUrl));
const pluginLine = 'include(":ktor-server:ktor-server-plugins:ktor-server-';
return ((await response.text())
?.split(/\r\n|\r|\n/)
.filter((line) => line.trim().startsWith(pluginLine))
.map((plugin) => ({
name: plugin.replace(pluginLine, '').replace('")', ''),
})) ?? []);
}
//# sourceMappingURL=ktor-utils.js.map