UNPKG

@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
"use strict"; 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