@nx/devkit 24.0.0-beta.1 → 24.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- export { signalToCode, createProjectRootMappingsFromProjectConfigurations, PluginCache, safeWriteFileCache, emitPluginWorkerLog, resolveImplementation, resolveSchema, ImplementationResolutionError, SchemaResolutionError, resolvePrompt, PromptResolutionError, acknowledgeBuildScripts, createCliOptions, createOverrides, isAiAgent, getCatalogManager, getDaemonClientEnvGeneration, getAppliedDaemonClientEnv, applyDaemonEnvFromClient, getGraphTimeDotEnvForTask, hashDaemonClientEnv, } from 'nx/src/devkit-internals';
1
+ export { signalToCode, createProjectRootMappingsFromProjectConfigurations, PluginCache, safeWriteFileCache, emitPluginWorkerLog, resolveImplementation, resolveSchema, ImplementationResolutionError, SchemaResolutionError, resolvePrompt, PromptResolutionError, acknowledgeBuildScripts, acknowledgeDeclaredBuildScripts, createCliOptions, createOverrides, isAiAgent, getCatalogManager, getDaemonClientEnvGeneration, getAppliedDaemonClientEnv, applyDaemonEnvFromClient, getGraphTimeDotEnvForTask, hashDaemonClientEnv, } from 'nx/src/devkit-internals';
2
2
  export { detectFormatterInTree, prettierConfigFiles, oxfmtConfigFiles, } from 'nx/src/devkit-internals';
3
3
  export type { FormatterType } from 'nx/src/devkit-internals';
4
4
  export { determineArtifactNameAndDirectoryOptions, getRelativeCwd, type FileExtensionType, } from './src/generators/artifact-name-and-directory-utils';
@@ -21,9 +21,13 @@ export { loadConfigFile, clearRequireCache } from './src/utils/config-utils';
21
21
  export { isRequireEsmRaceError, retryOnRequireEsmRace, } from './src/utils/require-esm-race';
22
22
  export { findPluginForConfigFile } from './src/utils/find-plugin-for-config-file';
23
23
  export { getNamedInputs } from './src/utils/get-named-inputs';
24
+ export { parseNxDirectives } from './src/utils/nx-directives';
25
+ export { applyTestFileDirectives } from './src/utils/test-file-directives';
26
+ export { hasIgnoreServerInputsDirective } from './src/utils/ignore-server-inputs-directive';
24
27
  export { logShowProjectCommand } from './src/utils/log-show-project-command';
25
28
  export { eachValueFrom } from './src/utils/rxjs-for-await';
26
29
  export { checkAndCleanWithSemver } from './src/utils/semver';
27
30
  export { camelize, capitalize, classify, dasherize, } from './src/utils/string-utils';
28
31
  export { runCommandsExecutor, type TaskResult, type Agent, type BatchExecutorTaskResult, BatchFunctionRunner, type BatchResults, type CLIErrorMessageConfig, type CLINoteMessageConfig, type CLISuccessMessageConfig, type CLIWarnMessageConfig, Cache, type CachedResult, type Change, type ChangedFile, CompositeLifeCycle, DeletedFileChange, confirmationPrompt, type FileChange, type FileDataDependency, type FileMapCache, type FinalConfigForProject, FsTree, type GeneratorInformation, type InputDefinition, type JsonInput, LARGE_BUFFER, type LifeCycle, LockFileChange, NX_PREFIX, type NormalizedTargetDependencyConfig, type NxCloudOnBoardingStatus, type NxReleaseVersionConfiguration, type PackageJson, type PackageJsonDependencySection, type PackageManagerCommands, type ProjectRootMappings, RemoteCacheV2, type RunCommandsOptions, SyncError, type SyncGeneratorResult, TEN_MEGABYTES, TargetProjectLocator, type TaskMetadata, type TaskStatus, type TaskWithCachedResult, type TasksRunner, type UnregisterCallback, WholeFileChange, buildPackageJsonPatterns, buildPackageJsonWorkspacesMatcher, buildProjectGraphAndSourceMapsWithoutDaemon, calculateFileChanges, calculateReverseDeps, codeFrameColumns, combineGlobPatterns, connectToNxCloud, createDirectory, createLockFile, createNxCloudOnboardingURL, createNxCloudOnboardingURLForWelcomeApp, createPackageJson, createProjectGraphAndSourceMapsAsync, createProjectRootMappings, createRunManyDynamicOutputRenderer, createTargetDefaultsResults, createTaskId, daemonClient, deduceDefaultBase, defaultFileRead, deriveGroupNameFromTarget, directoryExists, dropEmptyPeerDependencySections, expandDependencyConfigSyntaxSugar, expandInitiatingTasksThroughNoop, expandWildcardTargetConfiguration, fileDataDepTarget, fileDataDepType, fileExists, filterUsingGlobPatterns, findAllProjectNodeDependencies, findInstalledPlugins, findMatchingConfigFiles, findMatchingProjects, findMatchingTargetNames, findProjectForPath, findProjectsNpmDependencies, forceRegisterEsmLoader, generatePrunedDeployOutput, getCliPath, getCustomHasher, getDependencyConfigs, getEnvFilesForTask, getEnvPathsForTask, getExecutorForTask, getExecutorInformation, getExecutorNameForTask, getFilesInDirectoryUsingContext, getGeneratorInformation, getGlobPatternsFromPackageManagerWorkspaces, getLastValueFromAsyncIterableIterator, getLatestCommitSha, getLockFileName, getNxCloudAppOnBoardingUrl, getNxCloudUrl, getNxRequirePaths, getOutputs, getPrintableCommandArgsForTask, getRelativeProjectJsonSchemaPath, getSerializedArgsForTask, getSourceDirOfDependentProjects, getTargetConfigurationForTask, getTargetInputs, getUnparsedOverrideArgs, getWorkspacePackagesFromGraph, globWithWorkspaceContext, handleImport, handleProjectGraphError, hashFile, hashObject, hashWithWorkspaceContext, interpolate, isBuiltinModuleImport, isCI, isCacheableTask, isDeletedFileChange, isLockFileChange, isNpmProject, isNxCloudUsed, isProjectGraphExternalNode, isProjectGraphProjectNode, isRelativePath, isWholeFileChange, killChildOnHostExit, killProcessTreeGraceful, loadTsFile, mergeTargetConfigurations, movePeerDependencyToDependencies, multiselectPrompt, normalizeDependencyConfigDefinition, normalizeDependencyConfigProjects, normalizeTargetDependencyWithStringProjects, nxVersion, orange, parseExecutor, parseVersionFromPackageManagerField, preventRecursionInGraphConstruction, quoteShellArg, readCachedProjectConfiguration, readFileIfExisting, readFileMapCache, readModulePackageJson, readNxJsonFromDisk, readNxMigrateConfig, readPackageJson, readProjectAndTargetFromTargetString, registerTsConfigPaths, registerTsProject, relocatePrunedLocalPathSpec, removeTasksFromTaskGraph, requireWithTsconfigFallback, resetWorkspaceContext, resolveCommandSyntacticSugar, runNxSync, safeExecFileSync, safeSpawn, selectPrompt, setWorkspaceRoot, setupAiAgentsGenerator, setupWorkspaceContext, shouldStreamOutput, toNewFormat, toOldFormat, transformLegacyOutputs, textPrompt, unparse, validateOutputs, warnUnshippableLocalPathSpec, workspaceDataDirectory, workspaceRootInner, } from 'nx/src/devkit-internals';
29
32
  export type { AfterAllProjectsVersioned } from 'nx/release';
33
+ export { migrateRemovedExecutors } from './src/generators/plugin-migrations/remove-executors';
package/dist/internal.js CHANGED
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getInstalledPackageVersion = exports.getDeclaredPackageVersion = exports.addPlugin = exports.upsertTargetDefault = exports.updateTargetDefault = exports.readTargetDefaultsForTarget = exports.findTargetDefault = exports.addE2eCiTargetDefaults = exports.addBuildTargetDefaults = exports.isInteractive = exports.resolveImportPath = exports.ensureRootProjectName = exports.determineProjectNameAndRootOptions = exports.toProjectRelativePath = exports.deleteMatchingProperties = exports.processTargetOutputs = exports.NoTargetsToMigrateError = exports.migrateProjectExecutorsToPluginV1 = exports.migrateProjectExecutorsToPlugin = exports.openBatchConversionSession = exports.finalizeBatchConversion = exports.AggregatedLog = exports.forEachExecutorOptions = exports.getE2EWebServerInfo = exports.getRelativeCwd = exports.determineArtifactNameAndDirectoryOptions = exports.oxfmtConfigFiles = exports.prettierConfigFiles = exports.detectFormatterInTree = exports.hashDaemonClientEnv = exports.getGraphTimeDotEnvForTask = exports.applyDaemonEnvFromClient = exports.getAppliedDaemonClientEnv = exports.getDaemonClientEnvGeneration = exports.getCatalogManager = exports.isAiAgent = exports.createOverrides = exports.createCliOptions = exports.acknowledgeBuildScripts = exports.PromptResolutionError = exports.resolvePrompt = exports.SchemaResolutionError = exports.ImplementationResolutionError = exports.resolveSchema = exports.resolveImplementation = exports.emitPluginWorkerLog = exports.safeWriteFileCache = exports.PluginCache = exports.createProjectRootMappingsFromProjectConfigurations = exports.signalToCode = void 0;
4
- exports.createNxCloudOnboardingURLForWelcomeApp = exports.createNxCloudOnboardingURL = exports.createLockFile = exports.createDirectory = exports.connectToNxCloud = exports.combineGlobPatterns = exports.codeFrameColumns = exports.calculateReverseDeps = exports.calculateFileChanges = exports.buildProjectGraphAndSourceMapsWithoutDaemon = exports.buildPackageJsonWorkspacesMatcher = exports.buildPackageJsonPatterns = exports.WholeFileChange = exports.TargetProjectLocator = exports.TEN_MEGABYTES = exports.SyncError = exports.RemoteCacheV2 = exports.NX_PREFIX = exports.LockFileChange = exports.LARGE_BUFFER = exports.FsTree = exports.confirmationPrompt = exports.DeletedFileChange = exports.CompositeLifeCycle = exports.Cache = exports.BatchFunctionRunner = exports.runCommandsExecutor = exports.dasherize = exports.classify = exports.capitalize = exports.camelize = exports.checkAndCleanWithSemver = exports.eachValueFrom = exports.logShowProjectCommand = exports.getNamedInputs = exports.findPluginForConfigFile = exports.retryOnRequireEsmRace = exports.isRequireEsmRaceError = exports.clearRequireCache = exports.loadConfigFile = exports.calculateHashesForCreateNodes = exports.calculateHashForCreateNodes = exports.mapAsyncIterable = exports.combineAsyncIterables = exports.createAsyncIterable = exports.getSatisfyingInstalledPackageVersion = exports.getResolvedPackageVersion = exports.assertSupportedPackageVersion = exports.assertSupportedInstalledPackageVersion = exports.getInstalledPackageVersionFromTree = void 0;
5
- exports.getSourceDirOfDependentProjects = exports.getSerializedArgsForTask = exports.getRelativeProjectJsonSchemaPath = exports.getPrintableCommandArgsForTask = exports.getOutputs = exports.getNxRequirePaths = exports.getNxCloudUrl = exports.getNxCloudAppOnBoardingUrl = exports.getLockFileName = exports.getLatestCommitSha = exports.getLastValueFromAsyncIterableIterator = exports.getGlobPatternsFromPackageManagerWorkspaces = exports.getGeneratorInformation = exports.getFilesInDirectoryUsingContext = exports.getExecutorNameForTask = exports.getExecutorInformation = exports.getExecutorForTask = exports.getEnvPathsForTask = exports.getEnvFilesForTask = exports.getDependencyConfigs = exports.getCustomHasher = exports.getCliPath = exports.generatePrunedDeployOutput = exports.forceRegisterEsmLoader = exports.findProjectsNpmDependencies = exports.findProjectForPath = exports.findMatchingTargetNames = exports.findMatchingProjects = exports.findMatchingConfigFiles = exports.findInstalledPlugins = exports.findAllProjectNodeDependencies = exports.filterUsingGlobPatterns = exports.fileExists = exports.fileDataDepType = exports.fileDataDepTarget = exports.expandWildcardTargetConfiguration = exports.expandInitiatingTasksThroughNoop = exports.expandDependencyConfigSyntaxSugar = exports.dropEmptyPeerDependencySections = exports.directoryExists = exports.deriveGroupNameFromTarget = exports.defaultFileRead = exports.deduceDefaultBase = exports.daemonClient = exports.createTaskId = exports.createTargetDefaultsResults = exports.createRunManyDynamicOutputRenderer = exports.createProjectRootMappings = exports.createProjectGraphAndSourceMapsAsync = exports.createPackageJson = void 0;
6
- exports.requireWithTsconfigFallback = exports.removeTasksFromTaskGraph = exports.relocatePrunedLocalPathSpec = exports.registerTsProject = exports.registerTsConfigPaths = exports.readProjectAndTargetFromTargetString = exports.readPackageJson = exports.readNxMigrateConfig = exports.readNxJsonFromDisk = exports.readModulePackageJson = exports.readFileMapCache = exports.readFileIfExisting = exports.readCachedProjectConfiguration = exports.quoteShellArg = exports.preventRecursionInGraphConstruction = exports.parseVersionFromPackageManagerField = exports.parseExecutor = exports.orange = exports.nxVersion = exports.normalizeTargetDependencyWithStringProjects = exports.normalizeDependencyConfigProjects = exports.normalizeDependencyConfigDefinition = exports.multiselectPrompt = exports.movePeerDependencyToDependencies = exports.mergeTargetConfigurations = exports.loadTsFile = exports.killProcessTreeGraceful = exports.killChildOnHostExit = exports.isWholeFileChange = exports.isRelativePath = exports.isProjectGraphProjectNode = exports.isProjectGraphExternalNode = exports.isNxCloudUsed = exports.isNpmProject = exports.isLockFileChange = exports.isDeletedFileChange = exports.isCacheableTask = exports.isCI = exports.isBuiltinModuleImport = exports.interpolate = exports.hashWithWorkspaceContext = exports.hashObject = exports.hashFile = exports.handleProjectGraphError = exports.handleImport = exports.globWithWorkspaceContext = exports.getWorkspacePackagesFromGraph = exports.getUnparsedOverrideArgs = exports.getTargetInputs = exports.getTargetConfigurationForTask = void 0;
7
- exports.workspaceRootInner = exports.workspaceDataDirectory = exports.warnUnshippableLocalPathSpec = exports.validateOutputs = exports.unparse = exports.textPrompt = exports.transformLegacyOutputs = exports.toOldFormat = exports.toNewFormat = exports.shouldStreamOutput = exports.setupWorkspaceContext = exports.setupAiAgentsGenerator = exports.setWorkspaceRoot = exports.selectPrompt = exports.safeSpawn = exports.safeExecFileSync = exports.runNxSync = exports.resolveCommandSyntacticSugar = exports.resetWorkspaceContext = void 0;
3
+ exports.getDeclaredPackageVersion = exports.addPlugin = exports.upsertTargetDefault = exports.updateTargetDefault = exports.readTargetDefaultsForTarget = exports.findTargetDefault = exports.addE2eCiTargetDefaults = exports.addBuildTargetDefaults = exports.isInteractive = exports.resolveImportPath = exports.ensureRootProjectName = exports.determineProjectNameAndRootOptions = exports.toProjectRelativePath = exports.deleteMatchingProperties = exports.processTargetOutputs = exports.NoTargetsToMigrateError = exports.migrateProjectExecutorsToPluginV1 = exports.migrateProjectExecutorsToPlugin = exports.openBatchConversionSession = exports.finalizeBatchConversion = exports.AggregatedLog = exports.forEachExecutorOptions = exports.getE2EWebServerInfo = exports.getRelativeCwd = exports.determineArtifactNameAndDirectoryOptions = exports.oxfmtConfigFiles = exports.prettierConfigFiles = exports.detectFormatterInTree = exports.hashDaemonClientEnv = exports.getGraphTimeDotEnvForTask = exports.applyDaemonEnvFromClient = exports.getAppliedDaemonClientEnv = exports.getDaemonClientEnvGeneration = exports.getCatalogManager = exports.isAiAgent = exports.createOverrides = exports.createCliOptions = exports.acknowledgeDeclaredBuildScripts = exports.acknowledgeBuildScripts = exports.PromptResolutionError = exports.resolvePrompt = exports.SchemaResolutionError = exports.ImplementationResolutionError = exports.resolveSchema = exports.resolveImplementation = exports.emitPluginWorkerLog = exports.safeWriteFileCache = exports.PluginCache = exports.createProjectRootMappingsFromProjectConfigurations = exports.signalToCode = void 0;
4
+ exports.connectToNxCloud = exports.combineGlobPatterns = exports.codeFrameColumns = exports.calculateReverseDeps = exports.calculateFileChanges = exports.buildProjectGraphAndSourceMapsWithoutDaemon = exports.buildPackageJsonWorkspacesMatcher = exports.buildPackageJsonPatterns = exports.WholeFileChange = exports.TargetProjectLocator = exports.TEN_MEGABYTES = exports.SyncError = exports.RemoteCacheV2 = exports.NX_PREFIX = exports.LockFileChange = exports.LARGE_BUFFER = exports.FsTree = exports.confirmationPrompt = exports.DeletedFileChange = exports.CompositeLifeCycle = exports.Cache = exports.BatchFunctionRunner = exports.runCommandsExecutor = exports.dasherize = exports.classify = exports.capitalize = exports.camelize = exports.checkAndCleanWithSemver = exports.eachValueFrom = exports.logShowProjectCommand = exports.hasIgnoreServerInputsDirective = exports.applyTestFileDirectives = exports.parseNxDirectives = exports.getNamedInputs = exports.findPluginForConfigFile = exports.retryOnRequireEsmRace = exports.isRequireEsmRaceError = exports.clearRequireCache = exports.loadConfigFile = exports.calculateHashesForCreateNodes = exports.calculateHashForCreateNodes = exports.mapAsyncIterable = exports.combineAsyncIterables = exports.createAsyncIterable = exports.getSatisfyingInstalledPackageVersion = exports.getResolvedPackageVersion = exports.assertSupportedPackageVersion = exports.assertSupportedInstalledPackageVersion = exports.getInstalledPackageVersionFromTree = exports.getInstalledPackageVersion = void 0;
5
+ exports.getOutputs = exports.getNxRequirePaths = exports.getNxCloudUrl = exports.getNxCloudAppOnBoardingUrl = exports.getLockFileName = exports.getLatestCommitSha = exports.getLastValueFromAsyncIterableIterator = exports.getGlobPatternsFromPackageManagerWorkspaces = exports.getGeneratorInformation = exports.getFilesInDirectoryUsingContext = exports.getExecutorNameForTask = exports.getExecutorInformation = exports.getExecutorForTask = exports.getEnvPathsForTask = exports.getEnvFilesForTask = exports.getDependencyConfigs = exports.getCustomHasher = exports.getCliPath = exports.generatePrunedDeployOutput = exports.forceRegisterEsmLoader = exports.findProjectsNpmDependencies = exports.findProjectForPath = exports.findMatchingTargetNames = exports.findMatchingProjects = exports.findMatchingConfigFiles = exports.findInstalledPlugins = exports.findAllProjectNodeDependencies = exports.filterUsingGlobPatterns = exports.fileExists = exports.fileDataDepType = exports.fileDataDepTarget = exports.expandWildcardTargetConfiguration = exports.expandInitiatingTasksThroughNoop = exports.expandDependencyConfigSyntaxSugar = exports.dropEmptyPeerDependencySections = exports.directoryExists = exports.deriveGroupNameFromTarget = exports.defaultFileRead = exports.deduceDefaultBase = exports.daemonClient = exports.createTaskId = exports.createTargetDefaultsResults = exports.createRunManyDynamicOutputRenderer = exports.createProjectRootMappings = exports.createProjectGraphAndSourceMapsAsync = exports.createPackageJson = exports.createNxCloudOnboardingURLForWelcomeApp = exports.createNxCloudOnboardingURL = exports.createLockFile = exports.createDirectory = void 0;
6
+ exports.registerTsConfigPaths = exports.readProjectAndTargetFromTargetString = exports.readPackageJson = exports.readNxMigrateConfig = exports.readNxJsonFromDisk = exports.readModulePackageJson = exports.readFileMapCache = exports.readFileIfExisting = exports.readCachedProjectConfiguration = exports.quoteShellArg = exports.preventRecursionInGraphConstruction = exports.parseVersionFromPackageManagerField = exports.parseExecutor = exports.orange = exports.nxVersion = exports.normalizeTargetDependencyWithStringProjects = exports.normalizeDependencyConfigProjects = exports.normalizeDependencyConfigDefinition = exports.multiselectPrompt = exports.movePeerDependencyToDependencies = exports.mergeTargetConfigurations = exports.loadTsFile = exports.killProcessTreeGraceful = exports.killChildOnHostExit = exports.isWholeFileChange = exports.isRelativePath = exports.isProjectGraphProjectNode = exports.isProjectGraphExternalNode = exports.isNxCloudUsed = exports.isNpmProject = exports.isLockFileChange = exports.isDeletedFileChange = exports.isCacheableTask = exports.isCI = exports.isBuiltinModuleImport = exports.interpolate = exports.hashWithWorkspaceContext = exports.hashObject = exports.hashFile = exports.handleProjectGraphError = exports.handleImport = exports.globWithWorkspaceContext = exports.getWorkspacePackagesFromGraph = exports.getUnparsedOverrideArgs = exports.getTargetInputs = exports.getTargetConfigurationForTask = exports.getSourceDirOfDependentProjects = exports.getSerializedArgsForTask = exports.getRelativeProjectJsonSchemaPath = exports.getPrintableCommandArgsForTask = void 0;
7
+ exports.migrateRemovedExecutors = exports.workspaceRootInner = exports.workspaceDataDirectory = exports.warnUnshippableLocalPathSpec = exports.validateOutputs = exports.unparse = exports.textPrompt = exports.transformLegacyOutputs = exports.toOldFormat = exports.toNewFormat = exports.shouldStreamOutput = exports.setupWorkspaceContext = exports.setupAiAgentsGenerator = exports.setWorkspaceRoot = exports.selectPrompt = exports.safeSpawn = exports.safeExecFileSync = exports.runNxSync = exports.resolveCommandSyntacticSugar = exports.resetWorkspaceContext = exports.requireWithTsconfigFallback = exports.removeTasksFromTaskGraph = exports.relocatePrunedLocalPathSpec = exports.registerTsProject = void 0;
8
8
  var devkit_internals_1 = require("nx/src/devkit-internals");
9
9
  Object.defineProperty(exports, "signalToCode", { enumerable: true, get: function () { return devkit_internals_1.signalToCode; } });
10
10
  Object.defineProperty(exports, "createProjectRootMappingsFromProjectConfigurations", { enumerable: true, get: function () { return devkit_internals_1.createProjectRootMappingsFromProjectConfigurations; } });
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "SchemaResolutionError", { enumerable: true, get:
18
18
  Object.defineProperty(exports, "resolvePrompt", { enumerable: true, get: function () { return devkit_internals_1.resolvePrompt; } });
19
19
  Object.defineProperty(exports, "PromptResolutionError", { enumerable: true, get: function () { return devkit_internals_1.PromptResolutionError; } });
20
20
  Object.defineProperty(exports, "acknowledgeBuildScripts", { enumerable: true, get: function () { return devkit_internals_1.acknowledgeBuildScripts; } });
21
+ Object.defineProperty(exports, "acknowledgeDeclaredBuildScripts", { enumerable: true, get: function () { return devkit_internals_1.acknowledgeDeclaredBuildScripts; } });
21
22
  Object.defineProperty(exports, "createCliOptions", { enumerable: true, get: function () { return devkit_internals_1.createCliOptions; } });
22
23
  Object.defineProperty(exports, "createOverrides", { enumerable: true, get: function () { return devkit_internals_1.createOverrides; } });
23
24
  Object.defineProperty(exports, "isAiAgent", { enumerable: true, get: function () { return devkit_internals_1.isAiAgent; } });
@@ -106,6 +107,12 @@ var find_plugin_for_config_file_1 = require("./src/utils/find-plugin-for-config-
106
107
  Object.defineProperty(exports, "findPluginForConfigFile", { enumerable: true, get: function () { return find_plugin_for_config_file_1.findPluginForConfigFile; } });
107
108
  var get_named_inputs_1 = require("./src/utils/get-named-inputs");
108
109
  Object.defineProperty(exports, "getNamedInputs", { enumerable: true, get: function () { return get_named_inputs_1.getNamedInputs; } });
110
+ var nx_directives_1 = require("./src/utils/nx-directives");
111
+ Object.defineProperty(exports, "parseNxDirectives", { enumerable: true, get: function () { return nx_directives_1.parseNxDirectives; } });
112
+ var test_file_directives_1 = require("./src/utils/test-file-directives");
113
+ Object.defineProperty(exports, "applyTestFileDirectives", { enumerable: true, get: function () { return test_file_directives_1.applyTestFileDirectives; } });
114
+ var ignore_server_inputs_directive_1 = require("./src/utils/ignore-server-inputs-directive");
115
+ Object.defineProperty(exports, "hasIgnoreServerInputsDirective", { enumerable: true, get: function () { return ignore_server_inputs_directive_1.hasIgnoreServerInputsDirective; } });
109
116
  var log_show_project_command_1 = require("./src/utils/log-show-project-command");
110
117
  Object.defineProperty(exports, "logShowProjectCommand", { enumerable: true, get: function () { return log_show_project_command_1.logShowProjectCommand; } });
111
118
  var rxjs_for_await_1 = require("./src/utils/rxjs-for-await");
@@ -265,3 +272,5 @@ Object.defineProperty(exports, "validateOutputs", { enumerable: true, get: funct
265
272
  Object.defineProperty(exports, "warnUnshippableLocalPathSpec", { enumerable: true, get: function () { return devkit_internals_3.warnUnshippableLocalPathSpec; } });
266
273
  Object.defineProperty(exports, "workspaceDataDirectory", { enumerable: true, get: function () { return devkit_internals_3.workspaceDataDirectory; } });
267
274
  Object.defineProperty(exports, "workspaceRootInner", { enumerable: true, get: function () { return devkit_internals_3.workspaceRootInner; } });
275
+ var remove_executors_1 = require("./src/generators/plugin-migrations/remove-executors");
276
+ Object.defineProperty(exports, "migrateRemovedExecutors", { enumerable: true, get: function () { return remove_executors_1.migrateRemovedExecutors; } });
@@ -25,5 +25,5 @@ export interface E2EWebServerDetails {
25
25
  e2eCiBaseUrl: string;
26
26
  e2eDevServerTarget: string;
27
27
  }
28
- export declare function getE2EWebServerInfo(tree: Tree, projectName: string, pluginOptions: E2EWebServerPluginOptions, defaultValues: E2EWebServerDefaultValues, isPluginBeingAdded: boolean): Promise<E2EWebServerDetails>;
28
+ export declare function getE2EWebServerInfo(tree: Tree, projectName: string, pluginOptions: E2EWebServerPluginOptions, defaultValues: E2EWebServerDefaultValues): Promise<E2EWebServerDetails>;
29
29
  export {};
@@ -4,22 +4,8 @@ exports.getE2EWebServerInfo = getE2EWebServerInfo;
4
4
  const devkit_exports_1 = require("nx/src/devkit-exports");
5
5
  const target_defaults_utils_1 = require("./target-defaults-utils");
6
6
  const find_plugin_for_config_file_1 = require("../utils/find-plugin-for-config-file");
7
- async function getE2EWebServerInfo(tree, projectName, pluginOptions, defaultValues, isPluginBeingAdded) {
7
+ async function getE2EWebServerInfo(tree, projectName, pluginOptions, defaultValues) {
8
8
  const pm = (0, devkit_exports_1.getPackageManagerCommand)((0, devkit_exports_1.detectPackageManager)(tree.root));
9
- if (isPluginBeingAdded) {
10
- return await getE2EWebServerInfoForPlugin(tree, projectName, pluginOptions, defaultValues, pm);
11
- }
12
- else {
13
- return {
14
- e2eWebServerAddress: defaultValues.defaultE2EWebServerAddress,
15
- e2eWebServerCommand: `${pm.exec} nx run ${projectName}:${defaultValues.defaultServeTargetName}`,
16
- e2eCiWebServerCommand: `${pm.exec} nx run ${projectName}:${defaultValues.defaultServeStaticTargetName}`,
17
- e2eCiBaseUrl: defaultValues.defaultE2ECiBaseUrl,
18
- e2eDevServerTarget: `${projectName}:${defaultValues.defaultServeTargetName}`,
19
- };
20
- }
21
- }
22
- async function getE2EWebServerInfoForPlugin(tree, projectName, pluginOptions, defaultValues, pm) {
23
9
  const foundPlugin = await (0, find_plugin_for_config_file_1.findPluginForConfigFile)(tree, pluginOptions.plugin, pluginOptions.configFilePath);
24
10
  if (!foundPlugin ||
25
11
  typeof foundPlugin === 'string' ||
@@ -0,0 +1,9 @@
1
+ import { type Tree } from 'nx/src/devkit-exports';
2
+ /** The prompt completes conversions the generator cannot safely automate. */
3
+ export declare function migrateRemovedExecutors(tree: Tree, executors: string[], convert: (tree: Tree, options: {
4
+ skipFormat: boolean;
5
+ }) => Promise<unknown>): Promise<{
6
+ nextSteps?: string[];
7
+ agentContext?: string[];
8
+ skipAgentic?: boolean;
9
+ }>;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.migrateRemovedExecutors = migrateRemovedExecutors;
4
+ const devkit_exports_1 = require("nx/src/devkit-exports");
5
+ const format_files_1 = require("../format-files");
6
+ const executor_to_plugin_migrator_1 = require("./executor-to-plugin-migrator");
7
+ /** The prompt completes conversions the generator cannot safely automate. */
8
+ async function migrateRemovedExecutors(tree, executors, convert) {
9
+ const removed = new Set(executors);
10
+ const defaults = (0, devkit_exports_1.readNxJson)(tree)?.targetDefaults ?? {};
11
+ const relevantDefaults = filterDefaults(defaults, removed);
12
+ const agentContext = [];
13
+ const nextSteps = [];
14
+ let projects;
15
+ try {
16
+ projects = (0, devkit_exports_1.getProjects)(tree);
17
+ }
18
+ catch (error) {
19
+ const message = `Project discovery failed: ${String(error)}. Repair configuration loading, then run convert-to-inferred and complete this migration.`;
20
+ return { nextSteps: [message], agentContext: [message] };
21
+ }
22
+ const affected = [...projects].filter(([, project]) => Object.values(project.targets ?? {}).some((target) => removed.has(target.executor)));
23
+ if (!affected.length && !Object.keys(relevantDefaults).length) {
24
+ return { skipAgentic: true };
25
+ }
26
+ // Capture options before converters remove them, including executor defaults.
27
+ agentContext.push(`Pre-migration targetDefaults: ${JSON.stringify(defaults)}`);
28
+ for (const [name, project] of affected) {
29
+ agentContext.push(`Pre-migration project ${name}: ${JSON.stringify(project)}`);
30
+ }
31
+ if (affected.length) {
32
+ try {
33
+ // Migration runner installs changed dependencies after flushing the Tree.
34
+ // Generator callbacks can install too early here, so leave them to it.
35
+ await convert(tree, { skipFormat: true });
36
+ }
37
+ catch (error) {
38
+ // Thrown when the converter skipped every target; the re-scan below
39
+ // names them.
40
+ if (!(error instanceof executor_to_plugin_migrator_1.NoTargetsToMigrateError)) {
41
+ const message = `Could not convert targets using removed executors: ${String(error)}. Inspect any partial edits before retrying.`;
42
+ devkit_exports_1.logger.warn(message);
43
+ nextSteps.push(message);
44
+ agentContext.push(`Conversion needs repair: ${String(error)}. Inspect any partial edits before retrying.`);
45
+ }
46
+ }
47
+ }
48
+ // Converters skip targets they cannot convert safely, with a warning, and
49
+ // some ignore `@nrwl` aliases. Re-scan so those are named rather than
50
+ // inferred from silence.
51
+ const leftovers = [];
52
+ const usedExecutors = new Set();
53
+ for (const [name, project] of (0, devkit_exports_1.getProjects)(tree)) {
54
+ for (const [targetName, target] of Object.entries(project.targets ?? {})) {
55
+ if (removed.has(target.executor)) {
56
+ leftovers.push(`${name}:${targetName} (${target.executor})`);
57
+ usedExecutors.add(target.executor);
58
+ }
59
+ }
60
+ }
61
+ if (leftovers.length) {
62
+ const message = `These targets still use removed executors: ${leftovers.join(', ')}. Replace each one before running them.`;
63
+ devkit_exports_1.logger.warn(message);
64
+ nextSteps.push(message);
65
+ agentContext.push(`Still using removed executors after conversion: ${leftovers.join(', ')}. Replace each one; the converter could not.`);
66
+ }
67
+ removeDeadExecutorDefaults(tree, removed, usedExecutors);
68
+ // Targets that inherit the executor from targetDefaults declare none
69
+ // themselves, so the scans above cannot see them.
70
+ const defaultNames = Object.keys(filterDefaults((0, devkit_exports_1.readNxJson)(tree)?.targetDefaults ?? {}, removed));
71
+ if (defaultNames.length) {
72
+ const message = `These nx.json targetDefaults still use removed executors: ${defaultNames.join(', ')}. Move the options that still apply to the inferred targets, then remove them.`;
73
+ devkit_exports_1.logger.warn(message);
74
+ nextSteps.push(message);
75
+ agentContext.push(message);
76
+ }
77
+ agentContext.push(`Finish conversion of ${executors.join(', ')} to inference plugins. Inspect remaining executor references, including targetDefaults and package.json targets. Preserve all original options and configurations recorded above. A converter returning successfully does not prove every target was converted.`, 'Before completing this migration, run an uncached project graph and verify migrated targets are inferred. Graph validation is mandatory. Run relevant builds/tests by default; honor the user choosing to skip expensive task validation and report those tasks as unverified.');
78
+ await (0, format_files_1.formatFiles)(tree);
79
+ return nextSteps.length ? { nextSteps, agentContext } : { agentContext };
80
+ }
81
+ // The converters merge an unfiltered executor-keyed default into every target
82
+ // they convert, so the entry is dead once no target resolves to the executor.
83
+ function removeDeadExecutorDefaults(tree, removed, usedExecutors) {
84
+ const nxJson = (0, devkit_exports_1.readNxJson)(tree);
85
+ if (!nxJson?.targetDefaults) {
86
+ return;
87
+ }
88
+ const liveExecutors = new Set(usedExecutors);
89
+ // A target-name default that sets the executor hands it to the targets
90
+ // inheriting from it, which the executor-keyed default still configures.
91
+ for (const value of Object.values(nxJson.targetDefaults)) {
92
+ for (const entry of Array.isArray(value) ? value : [value]) {
93
+ if (entry?.executor) {
94
+ liveExecutors.add(entry.executor);
95
+ }
96
+ }
97
+ }
98
+ const before = JSON.stringify(nxJson.targetDefaults);
99
+ for (const executor of removed) {
100
+ if (!liveExecutors.has(executor)) {
101
+ (0, executor_to_plugin_migrator_1.removeDeadExecutorTargetDefault)(nxJson, executor);
102
+ }
103
+ }
104
+ if (JSON.stringify(nxJson.targetDefaults) !== before) {
105
+ (0, devkit_exports_1.updateNxJson)(tree, nxJson);
106
+ }
107
+ }
108
+ function filterDefaults(defaults, removed) {
109
+ return Object.fromEntries(Object.entries(defaults).filter(([name, value]) => removed.has(name) ||
110
+ (Array.isArray(value) ? value : [value]).some((entry) => removed.has(entry.executor) || removed.has(entry.filter?.executor))));
111
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Whether the comment block that opens `content` has a bare
3
+ * `@nx-ignore-server-inputs` directive. False when one there has a value.
4
+ */
5
+ export declare function hasIgnoreServerInputsDirective(content: string): boolean;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasIgnoreServerInputsDirective = hasIgnoreServerInputsDirective;
4
+ const nx_directives_1 = require("./nx-directives");
5
+ /**
6
+ * Whether the comment block that opens `content` has a bare
7
+ * `@nx-ignore-server-inputs` directive. False when one there has a value.
8
+ */
9
+ function hasIgnoreServerInputsDirective(content) {
10
+ const values = (0, nx_directives_1.parseNxDirectives)(content).get('ignore-server-inputs');
11
+ return values !== undefined && values.every((value) => value === '');
12
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The `@nx-<name>: <value>` directives in the comment block that opens a file,
3
+ * by name, with their trimmed values in order. A bare `@nx-<name>` has the
4
+ * value `''`. Reading stops at the first line
5
+ * that is not blank, a shebang or a comment.
6
+ */
7
+ export declare function parseNxDirectives(content: string): Map<string, string[]>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseNxDirectives = parseNxDirectives;
4
+ const DIRECTIVE = /^@nx-([\w-]+)(?::(.*))?$/;
5
+ /**
6
+ * The `@nx-<name>: <value>` directives in the comment block that opens a file,
7
+ * by name, with their trimmed values in order. A bare `@nx-<name>` has the
8
+ * value `''`. Reading stops at the first line
9
+ * that is not blank, a shebang or a comment.
10
+ */
11
+ function parseNxDirectives(content) {
12
+ const directives = new Map();
13
+ let inBlock = false;
14
+ let start = 0;
15
+ while (start < content.length) {
16
+ const newline = content.indexOf('\n', start);
17
+ const end = newline === -1 ? content.length : newline;
18
+ let line = content.slice(start, end).trim();
19
+ start = end + 1;
20
+ if (!inBlock) {
21
+ if (line === '' || line.startsWith('#!')) {
22
+ continue;
23
+ }
24
+ if (line.startsWith('//')) {
25
+ line = line.slice(2);
26
+ }
27
+ else if (line.startsWith('/*')) {
28
+ inBlock = true;
29
+ line = line.slice(2);
30
+ }
31
+ else {
32
+ break;
33
+ }
34
+ }
35
+ if (inBlock) {
36
+ const blockEnd = line.indexOf('*/');
37
+ if (blockEnd !== -1) {
38
+ inBlock = false;
39
+ // Code after `*/` means the block is not a file header.
40
+ if (line.slice(blockEnd + 2).trim() !== '') {
41
+ break;
42
+ }
43
+ line = line.slice(0, blockEnd);
44
+ }
45
+ line = line.replace(/^\s*\*+/, '');
46
+ }
47
+ const match = line.trim().match(DIRECTIVE);
48
+ if (match) {
49
+ const [, name, value = ''] = match;
50
+ const values = directives.get(name);
51
+ if (values) {
52
+ values.push(value.trim());
53
+ }
54
+ else {
55
+ directives.set(name, [value.trim()]);
56
+ }
57
+ }
58
+ }
59
+ return directives;
60
+ }
@@ -0,0 +1,11 @@
1
+ import type { TargetConfiguration } from 'nx/src/devkit-exports';
2
+ /** The distinct projects the `@nx-depends-on` values name. */
3
+ export declare function dependsOnProjects(values: string[]): string[];
4
+ /**
5
+ * `target` narrowed to the projects a test file names: its dependency inputs
6
+ * (`^…`, `dependencies: true`) become two inputs selecting `projects` and their
7
+ * dependencies, by the first named input among them (else `default`) and kept
8
+ * under ultracache (`always: true`). Its `dependsOn` entries naming projects,
9
+ * the servers the test talks to, get `inputs: false`.
10
+ */
11
+ export declare function scopeTestTargetToProjects(target: TargetConfiguration, projects: string[]): TargetConfiguration;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dependsOnProjects = dependsOnProjects;
4
+ exports.scopeTestTargetToProjects = scopeTestTargetToProjects;
5
+ const without_server_inputs_1 = require("./without-server-inputs");
6
+ /** The distinct projects the `@nx-depends-on` values name. */
7
+ function dependsOnProjects(values) {
8
+ const projects = new Set();
9
+ for (const value of values) {
10
+ for (const project of value.split(',')) {
11
+ const name = project.trim();
12
+ if (name) {
13
+ projects.add(name);
14
+ }
15
+ }
16
+ }
17
+ return [...projects];
18
+ }
19
+ /**
20
+ * `target` narrowed to the projects a test file names: its dependency inputs
21
+ * (`^…`, `dependencies: true`) become two inputs selecting `projects` and their
22
+ * dependencies, by the first named input among them (else `default`) and kept
23
+ * under ultracache (`always: true`). Its `dependsOn` entries naming projects,
24
+ * the servers the test talks to, get `inputs: false`.
25
+ */
26
+ function scopeTestTargetToProjects(target, projects) {
27
+ return {
28
+ ...target,
29
+ inputs: scopeDependencyInputs(target.inputs, projects),
30
+ ...(target.dependsOn && {
31
+ dependsOn: (0, without_server_inputs_1.withoutServerInputs)(target.dependsOn),
32
+ }),
33
+ };
34
+ }
35
+ function scopeDependencyInputs(inputs, projects) {
36
+ let namedInput;
37
+ let position;
38
+ const own = [];
39
+ for (const input of inputs ?? []) {
40
+ const dependency = typeof input === 'string'
41
+ ? input.startsWith('^')
42
+ : 'dependencies' in input && input.dependencies === true;
43
+ if (!dependency) {
44
+ own.push(input);
45
+ continue;
46
+ }
47
+ position ??= own.length;
48
+ if (namedInput === undefined) {
49
+ if (typeof input === 'string' && !input.startsWith('^{')) {
50
+ namedInput = input.slice(1);
51
+ }
52
+ else if (typeof input !== 'string' && 'input' in input) {
53
+ namedInput = input.input;
54
+ }
55
+ }
56
+ }
57
+ const input = namedInput ?? 'default';
58
+ own.splice(position ?? own.length, 0, { input, projects, always: true }, { input, projects, dependencies: true, always: true });
59
+ return own;
60
+ }
@@ -0,0 +1,10 @@
1
+ import type { TargetConfiguration } from 'nx/src/devkit-exports';
2
+ /**
3
+ * `target` with the `@nx-depends-on` and `@nx-ignore-server-inputs`
4
+ * directives of a workspace-relative test file applied. A directive that lists
5
+ * no projects, has a value it does not take, or is not supported
6
+ * (`ignoreServerInputs: false`) is skipped with a warning.
7
+ */
8
+ export declare function applyTestFileDirectives(target: TargetConfiguration, workspaceRoot: string, file: string, options: {
9
+ ignoreServerInputs: boolean;
10
+ }): TargetConfiguration;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyTestFileDirectives = applyTestFileDirectives;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const devkit_internals_1 = require("nx/src/devkit-internals");
7
+ const nx_directives_1 = require("./nx-directives");
8
+ const test_file_depends_on_1 = require("./test-file-depends-on");
9
+ const without_server_inputs_1 = require("./without-server-inputs");
10
+ /**
11
+ * `target` with the `@nx-depends-on` and `@nx-ignore-server-inputs`
12
+ * directives of a workspace-relative test file applied. A directive that lists
13
+ * no projects, has a value it does not take, or is not supported
14
+ * (`ignoreServerInputs: false`) is skipped with a warning.
15
+ */
16
+ function applyTestFileDirectives(target, workspaceRoot, file, options) {
17
+ const directives = (0, nx_directives_1.parseNxDirectives)((0, node_fs_1.readFileSync)((0, node_path_1.join)(workspaceRoot, file), 'utf-8'));
18
+ let result = target;
19
+ const dependsOn = directives.get('depends-on');
20
+ if (dependsOn !== undefined) {
21
+ const projects = (0, test_file_depends_on_1.dependsOnProjects)(dependsOn);
22
+ if (projects.length === 0) {
23
+ (0, devkit_internals_1.emitPluginWorkerLog)('warn', `${file}: "@nx-depends-on:" lists no projects, so Nx ignores it. List the projects the test depends on, separated by commas.`);
24
+ }
25
+ else {
26
+ result = (0, test_file_depends_on_1.scopeTestTargetToProjects)(result, projects);
27
+ }
28
+ }
29
+ const ignoreServerInputs = directives.get('ignore-server-inputs');
30
+ if (ignoreServerInputs !== undefined) {
31
+ if (!options.ignoreServerInputs) {
32
+ (0, devkit_internals_1.emitPluginWorkerLog)('warn', `${file}: "@nx-ignore-server-inputs" is not supported in this test file, so Nx ignores it.`);
33
+ }
34
+ else if (ignoreServerInputs.some((value) => value !== '')) {
35
+ (0, devkit_internals_1.emitPluginWorkerLog)('warn', `${file}: "@nx-ignore-server-inputs" takes no value, so Nx ignores it. Write "// @nx-ignore-server-inputs" alone.`);
36
+ }
37
+ else if (result.dependsOn) {
38
+ result = { ...result, dependsOn: (0, without_server_inputs_1.withoutServerInputs)(result.dependsOn) };
39
+ }
40
+ }
41
+ return result;
42
+ }
@@ -0,0 +1,6 @@
1
+ import type { TargetDependencyConfig } from 'nx/src/devkit-exports';
2
+ /**
3
+ * `dependsOn` with `inputs: false` on the entries that name projects: the
4
+ * servers a test talks to, not its readiness gate.
5
+ */
6
+ export declare function withoutServerInputs(dependsOn: (string | TargetDependencyConfig)[]): (string | TargetDependencyConfig)[];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withoutServerInputs = withoutServerInputs;
4
+ /**
5
+ * `dependsOn` with `inputs: false` on the entries that name projects: the
6
+ * servers a test talks to, not its readiness gate.
7
+ */
8
+ function withoutServerInputs(dependsOn) {
9
+ return dependsOn.map((dependency) => typeof dependency !== 'string' && dependency.projects
10
+ ? { ...dependency, inputs: false }
11
+ : dependency);
12
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/devkit",
3
- "version": "24.0.0-beta.1",
3
+ "version": "24.0.0-beta.3",
4
4
  "private": false,
5
5
  "type": "commonjs",
6
6
  "files": [
@@ -67,7 +67,7 @@
67
67
  },
68
68
  "devDependencies": {
69
69
  "jest": "30.3.0",
70
- "nx": "24.0.0-beta.1"
70
+ "nx": "24.0.0-beta.3"
71
71
  },
72
72
  "peerDependencies": {
73
73
  "nx": ">= 23 <= 25 || ^24.0.0-0"