@nx-dotnet/core
Version:
- Have an existing nx workspace. For creating this, see [nrwl's documentation](https://nx.dev/latest/angular/getting-started/nx-setup). - .NET SDK is installed, and `dotnet` is available on the path. For help on this, see [Microsoft's documentation](https
152 lines • 6.25 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createNodes = exports.createNodesV2 = exports.registerProjectTargets = exports.projectFilePatterns = void 0;
exports.parseName = parseName;
exports.createProjectDefinition = createProjectDefinition;
exports.isFileIgnored = isFileIgnored;
const devkit_1 = require("@nx/devkit");
const fs_1 = require("fs");
const path_1 = require("path");
const utils_1 = require("@nx-dotnet/utils");
const minimatch = require("minimatch");
const models_1 = require("../models");
const generate_project_1 = require("../generators/utils/generate-project");
const get_scope_1 = require("../generators/utils/get-scope");
const try_read_json_1 = require("../generators/utils/try-read-json");
exports.projectFilePatterns = (0, utils_1.readConfig)().inferProjects
? ['*.csproj', '*.fsproj', '*.vbproj']
: [];
function parseName(projectFile, nxJson, rootPackageJson) {
const workspaceScope = (0, get_scope_1.getWorkspaceScope)(nxJson, rootPackageJson);
const namespaceName = (0, path_1.basename)(projectFile, (0, path_1.extname)(projectFile)).replace(new RegExp(`^${workspaceScope}.`, 'i'), '');
const parentDirectories = (0, path_1.dirname)(projectFile)
// eslint-disable-next-line no-useless-escape
.split(/[\/\\]/g)
.reverse();
const maybeProjectNameParts = [];
for (const part of parentDirectories) {
maybeProjectNameParts.unshift(part);
const maybeProjectName = maybeProjectNameParts.join('.');
if (maybeProjectName === namespaceName) {
return {
name: namespaceName,
scheme: 'dotnet',
};
}
if (generate_project_1.FILTERED_PATH_PARTS.has(part) || part === workspaceScope) {
maybeProjectNameParts.shift();
if (maybeProjectNameParts.some((part) => part.includes('.'))) {
return {
name: maybeProjectNameParts.map(titlecase).join('.'),
scheme: 'dotnet',
};
}
return {
name: maybeProjectNameParts.map((s) => s.toLocaleLowerCase()).join('-'),
scheme: 'nx',
};
}
}
return {
name: maybeProjectNameParts.map((s) => s.toLocaleLowerCase()).join('-'),
scheme: 'nx',
};
}
function createProjectDefinition(projectFile, projectFileContents, nxDotnetConfig, nxJson, rootPackageJson) {
const root = (0, path_1.dirname)(projectFile);
const name = parseName(projectFile, nxJson, rootPackageJson).name;
const targets = {};
const { inferredTargets } = nxDotnetConfig;
if (inferredTargets === false) {
return null;
}
if (projectFileContents.includes('Microsoft.NET.Test.Sdk') &&
inferredTargets.test) {
const { targetName, ...extraOptions } = typeof inferredTargets.test === 'string'
? { targetName: inferredTargets.test }
: inferredTargets.test;
targets[targetName] = {
...(0, models_1.GetTestExecutorConfig)(),
...extraOptions,
};
}
if (inferredTargets.build) {
const { targetName, ...extraOptions } = typeof inferredTargets.build === 'string'
? { targetName: inferredTargets.build }
: inferredTargets.build;
targets[targetName] = {
...(0, models_1.GetBuildExecutorConfiguration)((0, path_1.dirname)(projectFile)),
...extraOptions,
};
}
if (inferredTargets.lint) {
const { targetName, ...extraOptions } = typeof inferredTargets.lint === 'string'
? { targetName: inferredTargets.lint }
: inferredTargets.lint;
targets[targetName] = {
...(0, models_1.GetLintExecutorConfiguration)(),
...extraOptions,
};
}
if (inferredTargets.serve) {
const { targetName, ...extraOptions } = typeof inferredTargets.serve === 'string'
? { targetName: inferredTargets.serve }
: inferredTargets.serve;
targets[targetName] = {
...(0, models_1.GetServeExecutorConfig)(),
...extraOptions,
};
}
return {
name,
root,
targets,
tags: nxDotnetConfig.tags,
};
}
const registerProjectTargets = (projectFile, opts = (0, utils_1.readConfig)()) => {
const project = createProjectDefinition(projectFile, (0, fs_1.readFileSync)((0, path_1.join)(devkit_1.workspaceRoot, projectFile), 'utf-8'), opts, (0, try_read_json_1.tryReadJsonFile)('nx.json') ?? {}, (0, try_read_json_1.tryReadJsonFile)('package.json'));
return project?.targets ?? {};
};
exports.registerProjectTargets = registerProjectTargets;
function isFileIgnored(file, options) {
return (!options.inferProjects ||
(options.ignorePaths?.some((p) => minimatch(file, p, {
dot: true,
})) ??
false));
}
exports.createNodesV2 = [
`**/{${exports.projectFilePatterns.join(',')}}`,
(files,
// We read the config in the function to ensure it's always up to date / compatible.
opts, maybeCtx) => {
return (0, devkit_1.createNodesFromFiles)(exports.createNodes[1], files, opts, maybeCtx);
},
];
// Used in Nx 16.8+
exports.createNodes = [
`**/{${exports.projectFilePatterns.join(',')}}`,
(file,
// We read the config in the function to ensure it's always up to date / compatible.
ctxOrOpts, maybeCtx) => {
const options = (0, utils_1.readConfig)();
const context = maybeCtx ?? ctxOrOpts;
if (isFileIgnored(file, options)) {
return {};
}
const project = createProjectDefinition(file, (0, fs_1.readFileSync)((0, path_1.join)(context.workspaceRoot, file), 'utf-8'), options, context.nxJsonConfiguration, (0, try_read_json_1.tryReadJsonFile)((0, path_1.join)(context.workspaceRoot, 'package.json')));
if (!project) {
return {};
}
return {
projects: {
[project.root]: project,
},
};
},
];
function titlecase(value) {
return value.charAt(0).toUpperCase() + value.slice(1);
}
//# sourceMappingURL=create-nodes.js.map
;