@nx/devkit 24.0.0-canary.20261016-5ef7804 → 24.0.0-canary.20261020-e7ffd79

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,6 +1,7 @@
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, resolveStartupHost, } 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
+ export { addReadyWhenSignalToTargets, readApplicableTargetDefaults, } from './src/generators/add-ready-when-signal';
4
5
  export { determineArtifactNameAndDirectoryOptions, getRelativeCwd, type FileExtensionType, } from './src/generators/artifact-name-and-directory-utils';
5
6
  export { getE2EWebServerInfo, type E2EWebServerDetails, } from './src/generators/e2e-web-server-info-utils';
6
7
  export { forEachExecutorOptions } from './src/generators/executor-options-utils';
@@ -22,11 +23,13 @@ export { isRequireEsmRaceError, retryOnRequireEsmRace, } from './src/utils/requi
22
23
  export { findPluginForConfigFile } from './src/utils/find-plugin-for-config-file';
23
24
  export { getNamedInputs } from './src/utils/get-named-inputs';
24
25
  export { parseNxDirectives } from './src/utils/nx-directives';
26
+ export { getForwardedArgs, getListeningUrl, getReadyCheckReadyWhen, getServerAddress, parseCacArgs, parseCommanderArgs, runReadyCheck, type ServerAddress, } from './src/utils/readiness';
25
27
  export { applyTestFileDirectives } from './src/utils/test-file-directives';
26
- export { hasUltracacheImportsDirective } from './src/utils/ultracache-directive';
28
+ export { hasIgnoreServerInputsDirective } from './src/utils/ignore-server-inputs-directive';
27
29
  export { logShowProjectCommand } from './src/utils/log-show-project-command';
28
30
  export { eachValueFrom } from './src/utils/rxjs-for-await';
29
31
  export { checkAndCleanWithSemver } from './src/utils/semver';
30
32
  export { camelize, capitalize, classify, dasherize, } from './src/utils/string-utils';
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';
33
+ 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, resolveNxTokensInOptions, runNxSync, safeExecFileSync, safeSpawn, selectPrompt, setWorkspaceRoot, setupAiAgentsGenerator, setupWorkspaceContext, shouldStreamOutput, toNewFormat, toOldFormat, transformLegacyOutputs, textPrompt, unparse, validateOutputs, warnUnshippableLocalPathSpec, workspaceDataDirectory, workspaceRootInner, } from 'nx/src/devkit-internals';
32
34
  export type { AfterAllProjectsVersioned } from 'nx/release';
35
+ 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.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.hasUltracacheImportsDirective = 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 = void 0;
5
- 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 = exports.createNxCloudOnboardingURLForWelcomeApp = exports.createNxCloudOnboardingURL = exports.createLockFile = void 0;
6
- 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 = exports.getSourceDirOfDependentProjects = exports.getSerializedArgsForTask = exports.getRelativeProjectJsonSchemaPath = 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 = exports.requireWithTsconfigFallback = exports.removeTasksFromTaskGraph = exports.relocatePrunedLocalPathSpec = void 0;
3
+ 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.readApplicableTargetDefaults = exports.addReadyWhenSignalToTargets = exports.oxfmtConfigFiles = exports.prettierConfigFiles = exports.detectFormatterInTree = exports.resolveStartupHost = 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.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.runReadyCheck = exports.parseCommanderArgs = exports.parseCacArgs = exports.getServerAddress = exports.getReadyCheckReadyWhen = exports.getListeningUrl = exports.getForwardedArgs = 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 = exports.getDeclaredPackageVersion = exports.addPlugin = exports.upsertTargetDefault = void 0;
5
+ 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 = exports.connectToNxCloud = exports.combineGlobPatterns = exports.codeFrameColumns = exports.calculateReverseDeps = exports.calculateFileChanges = exports.buildProjectGraphAndSourceMapsWithoutDaemon = exports.buildPackageJsonWorkspacesMatcher = exports.buildPackageJsonPatterns = exports.WholeFileChange = exports.TargetProjectLocator = void 0;
6
+ 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 = exports.getOutputs = exports.getNxRequirePaths = exports.getNxCloudUrl = exports.getNxCloudAppOnBoardingUrl = exports.getLockFileName = exports.getLatestCommitSha = exports.getLastValueFromAsyncIterableIterator = exports.getGlobPatternsFromPackageManagerWorkspaces = exports.getGeneratorInformation = exports.getFilesInDirectoryUsingContext = 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.resolveNxTokensInOptions = exports.resolveCommandSyntacticSugar = exports.resetWorkspaceContext = 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 = 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; } });
@@ -32,6 +33,7 @@ Object.defineProperty(exports, "getAppliedDaemonClientEnv", { enumerable: true,
32
33
  Object.defineProperty(exports, "applyDaemonEnvFromClient", { enumerable: true, get: function () { return devkit_internals_1.applyDaemonEnvFromClient; } });
33
34
  Object.defineProperty(exports, "getGraphTimeDotEnvForTask", { enumerable: true, get: function () { return devkit_internals_1.getGraphTimeDotEnvForTask; } });
34
35
  Object.defineProperty(exports, "hashDaemonClientEnv", { enumerable: true, get: function () { return devkit_internals_1.hashDaemonClientEnv; } });
36
+ Object.defineProperty(exports, "resolveStartupHost", { enumerable: true, get: function () { return devkit_internals_1.resolveStartupHost; } });
35
37
  // Formatter detection and setup. `@nx/js` needs these to write and detect a
36
38
  // workspace's formatter config, and it depends on `@nx/devkit` rather than on
37
39
  // `nx`, so this is its declared route to them. Against an older nx they arrive
@@ -43,6 +45,9 @@ Object.defineProperty(exports, "detectFormatterInTree", { enumerable: true, get:
43
45
  Object.defineProperty(exports, "prettierConfigFiles", { enumerable: true, get: function () { return devkit_internals_2.prettierConfigFiles; } });
44
46
  Object.defineProperty(exports, "oxfmtConfigFiles", { enumerable: true, get: function () { return devkit_internals_2.oxfmtConfigFiles; } });
45
47
  // Generators
48
+ var add_ready_when_signal_1 = require("./src/generators/add-ready-when-signal");
49
+ Object.defineProperty(exports, "addReadyWhenSignalToTargets", { enumerable: true, get: function () { return add_ready_when_signal_1.addReadyWhenSignalToTargets; } });
50
+ Object.defineProperty(exports, "readApplicableTargetDefaults", { enumerable: true, get: function () { return add_ready_when_signal_1.readApplicableTargetDefaults; } });
46
51
  var artifact_name_and_directory_utils_1 = require("./src/generators/artifact-name-and-directory-utils");
47
52
  Object.defineProperty(exports, "determineArtifactNameAndDirectoryOptions", { enumerable: true, get: function () { return artifact_name_and_directory_utils_1.determineArtifactNameAndDirectoryOptions; } });
48
53
  Object.defineProperty(exports, "getRelativeCwd", { enumerable: true, get: function () { return artifact_name_and_directory_utils_1.getRelativeCwd; } });
@@ -108,10 +113,18 @@ var get_named_inputs_1 = require("./src/utils/get-named-inputs");
108
113
  Object.defineProperty(exports, "getNamedInputs", { enumerable: true, get: function () { return get_named_inputs_1.getNamedInputs; } });
109
114
  var nx_directives_1 = require("./src/utils/nx-directives");
110
115
  Object.defineProperty(exports, "parseNxDirectives", { enumerable: true, get: function () { return nx_directives_1.parseNxDirectives; } });
116
+ var readiness_1 = require("./src/utils/readiness");
117
+ Object.defineProperty(exports, "getForwardedArgs", { enumerable: true, get: function () { return readiness_1.getForwardedArgs; } });
118
+ Object.defineProperty(exports, "getListeningUrl", { enumerable: true, get: function () { return readiness_1.getListeningUrl; } });
119
+ Object.defineProperty(exports, "getReadyCheckReadyWhen", { enumerable: true, get: function () { return readiness_1.getReadyCheckReadyWhen; } });
120
+ Object.defineProperty(exports, "getServerAddress", { enumerable: true, get: function () { return readiness_1.getServerAddress; } });
121
+ Object.defineProperty(exports, "parseCacArgs", { enumerable: true, get: function () { return readiness_1.parseCacArgs; } });
122
+ Object.defineProperty(exports, "parseCommanderArgs", { enumerable: true, get: function () { return readiness_1.parseCommanderArgs; } });
123
+ Object.defineProperty(exports, "runReadyCheck", { enumerable: true, get: function () { return readiness_1.runReadyCheck; } });
111
124
  var test_file_directives_1 = require("./src/utils/test-file-directives");
112
125
  Object.defineProperty(exports, "applyTestFileDirectives", { enumerable: true, get: function () { return test_file_directives_1.applyTestFileDirectives; } });
113
- var ultracache_directive_1 = require("./src/utils/ultracache-directive");
114
- Object.defineProperty(exports, "hasUltracacheImportsDirective", { enumerable: true, get: function () { return ultracache_directive_1.hasUltracacheImportsDirective; } });
126
+ var ignore_server_inputs_directive_1 = require("./src/utils/ignore-server-inputs-directive");
127
+ Object.defineProperty(exports, "hasIgnoreServerInputsDirective", { enumerable: true, get: function () { return ignore_server_inputs_directive_1.hasIgnoreServerInputsDirective; } });
115
128
  var log_show_project_command_1 = require("./src/utils/log-show-project-command");
116
129
  Object.defineProperty(exports, "logShowProjectCommand", { enumerable: true, get: function () { return log_show_project_command_1.logShowProjectCommand; } });
117
130
  var rxjs_for_await_1 = require("./src/utils/rxjs-for-await");
@@ -254,6 +267,7 @@ Object.defineProperty(exports, "removeTasksFromTaskGraph", { enumerable: true, g
254
267
  Object.defineProperty(exports, "requireWithTsconfigFallback", { enumerable: true, get: function () { return devkit_internals_3.requireWithTsconfigFallback; } });
255
268
  Object.defineProperty(exports, "resetWorkspaceContext", { enumerable: true, get: function () { return devkit_internals_3.resetWorkspaceContext; } });
256
269
  Object.defineProperty(exports, "resolveCommandSyntacticSugar", { enumerable: true, get: function () { return devkit_internals_3.resolveCommandSyntacticSugar; } });
270
+ Object.defineProperty(exports, "resolveNxTokensInOptions", { enumerable: true, get: function () { return devkit_internals_3.resolveNxTokensInOptions; } });
257
271
  Object.defineProperty(exports, "runNxSync", { enumerable: true, get: function () { return devkit_internals_3.runNxSync; } });
258
272
  Object.defineProperty(exports, "safeExecFileSync", { enumerable: true, get: function () { return devkit_internals_3.safeExecFileSync; } });
259
273
  Object.defineProperty(exports, "safeSpawn", { enumerable: true, get: function () { return devkit_internals_3.safeSpawn; } });
@@ -271,3 +285,5 @@ Object.defineProperty(exports, "validateOutputs", { enumerable: true, get: funct
271
285
  Object.defineProperty(exports, "warnUnshippableLocalPathSpec", { enumerable: true, get: function () { return devkit_internals_3.warnUnshippableLocalPathSpec; } });
272
286
  Object.defineProperty(exports, "workspaceDataDirectory", { enumerable: true, get: function () { return devkit_internals_3.workspaceDataDirectory; } });
273
287
  Object.defineProperty(exports, "workspaceRootInner", { enumerable: true, get: function () { return devkit_internals_3.workspaceRootInner; } });
288
+ var remove_executors_1 = require("./src/generators/plugin-migrations/remove-executors");
289
+ Object.defineProperty(exports, "migrateRemovedExecutors", { enumerable: true, get: function () { return remove_executors_1.migrateRemovedExecutors; } });
@@ -0,0 +1,17 @@
1
+ import { type ProjectGraphProjectNode, type TargetConfiguration, type TargetDefaults, type Tree } from 'nx/src/devkit-exports';
2
+ /**
3
+ * Migration body that sets `readyWhen: { signal: true }` on the targets running
4
+ * one of `executors`. A target is skipped when it, or the `targetDefaults` that
5
+ * apply to it, already set `readyWhen`, or when its own `continuous`, else the
6
+ * one from `targetDefaults`, is `false`. `onAdded` gets each target it sets it
7
+ * on, with the `targetDefaults` that apply to it. Returning `false` from it
8
+ * leaves that target unchanged.
9
+ */
10
+ export declare function addReadyWhenSignalToTargets(tree: Tree, executors: readonly string[], onAdded?: (target: TargetConfiguration, projectName: string, defaults: Partial<TargetConfiguration> | null) => boolean | void): Promise<{
11
+ skipAgentic: true;
12
+ } | void>;
13
+ /**
14
+ * The `targetDefaults` Nx applies to a target, which leaves out the entries
15
+ * that run another executor or a command.
16
+ */
17
+ export declare function readApplicableTargetDefaults(targetName: string, executor: string | undefined, targetDefaults: TargetDefaults | undefined, projectName: string, projectNode: ProjectGraphProjectNode): Partial<TargetConfiguration> | null;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addReadyWhenSignalToTargets = addReadyWhenSignalToTargets;
4
+ exports.readApplicableTargetDefaults = readApplicableTargetDefaults;
5
+ const devkit_exports_1 = require("nx/src/devkit-exports");
6
+ const format_files_1 = require("./format-files");
7
+ const target_defaults_utils_1 = require("./target-defaults-utils");
8
+ /**
9
+ * Migration body that sets `readyWhen: { signal: true }` on the targets running
10
+ * one of `executors`. A target is skipped when it, or the `targetDefaults` that
11
+ * apply to it, already set `readyWhen`, or when its own `continuous`, else the
12
+ * one from `targetDefaults`, is `false`. `onAdded` gets each target it sets it
13
+ * on, with the `targetDefaults` that apply to it. Returning `false` from it
14
+ * leaves that target unchanged.
15
+ */
16
+ async function addReadyWhenSignalToTargets(tree, executors, onAdded) {
17
+ const targetDefaults = (0, devkit_exports_1.readNxJson)(tree)?.targetDefaults;
18
+ let changed = false;
19
+ for (const [projectName, project] of (0, devkit_exports_1.getProjects)(tree)) {
20
+ const projectNode = {
21
+ name: projectName,
22
+ type: 'lib',
23
+ data: { root: project.root, tags: project.tags },
24
+ };
25
+ let projectChanged = false;
26
+ for (const [targetName, target] of Object.entries(project.targets ?? {})) {
27
+ if (target.command || target.readyWhen !== undefined) {
28
+ continue;
29
+ }
30
+ const defaults = readApplicableTargetDefaults(targetName, target.executor, targetDefaults, projectName, projectNode);
31
+ const executor = target.executor ?? (defaults?.command ? undefined : defaults?.executor);
32
+ if (!executor ||
33
+ !executors.includes(executor) ||
34
+ (target.continuous ?? defaults?.continuous) === false ||
35
+ defaults?.readyWhen !== undefined) {
36
+ continue;
37
+ }
38
+ target.readyWhen = { signal: true };
39
+ if (onAdded?.(target, projectName, defaults) === false) {
40
+ delete target.readyWhen;
41
+ continue;
42
+ }
43
+ projectChanged = true;
44
+ }
45
+ if (projectChanged) {
46
+ (0, devkit_exports_1.updateProjectConfiguration)(tree, projectName, project);
47
+ changed = true;
48
+ }
49
+ }
50
+ if (!changed) {
51
+ return { skipAgentic: true };
52
+ }
53
+ await (0, format_files_1.formatFiles)(tree);
54
+ }
55
+ /**
56
+ * The `targetDefaults` Nx applies to a target, which leaves out the entries
57
+ * that run another executor or a command.
58
+ */
59
+ function readApplicableTargetDefaults(targetName, executor, targetDefaults, projectName, projectNode) {
60
+ if (!targetDefaults) {
61
+ return null;
62
+ }
63
+ let compatibleDefaults = targetDefaults;
64
+ if (executor) {
65
+ // Nx selects the key first, then drops the entries that run something else.
66
+ // A dropped entry keeps its filter so that its key still wins over the rest.
67
+ compatibleDefaults = {};
68
+ for (const [key, value] of Object.entries(targetDefaults)) {
69
+ const entries = Array.isArray(value)
70
+ ? value
71
+ : [value];
72
+ compatibleDefaults[key] = entries.map((entry) => entry.command || (entry.executor && entry.executor !== executor)
73
+ ? { filter: entry.filter }
74
+ : entry);
75
+ }
76
+ }
77
+ return (0, target_defaults_utils_1.readTargetDefaultsForTarget)(targetName, compatibleDefaults, executor, {
78
+ projectName,
79
+ projectNode,
80
+ });
81
+ }
@@ -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' ||
@@ -8,6 +8,11 @@ import type { TargetConfiguration } from 'nx/src/devkit-exports';
8
8
  export type PackageJsonIdentitySource = 'script' | 'nxTargets' | 'unparseable';
9
9
  /** A migrated target was left untouched because package.json authors its identity. */
10
10
  export declare function keptPreMigrationTargetWarning(targetName: string, projectName: string, source: PackageJsonIdentitySource): string;
11
+ /** The plugin inferred no target for a migrated project, so it was not converted. */
12
+ export declare function uninferredTargetWarning(targetName: string, projectName: string, root: string, rootInferred: boolean, errors: Array<{
13
+ file: string | null;
14
+ message: string;
15
+ }>): string;
11
16
  /** A target's centralization was skipped before writing anything. */
12
17
  export declare function retainedResidualsWarning(targetNames: string[], reason: string): string;
13
18
  /** Projects whose target identity lives outside the plugin were not hoisted. */
@@ -6,6 +6,7 @@
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.keptPreMigrationTargetWarning = keptPreMigrationTargetWarning;
9
+ exports.uninferredTargetWarning = uninferredTargetWarning;
9
10
  exports.retainedResidualsWarning = retainedResidualsWarning;
10
11
  exports.excludedProjectsWarning = excludedProjectsWarning;
11
12
  exports.revertedTargetsWarning = revertedTargetsWarning;
@@ -26,6 +27,18 @@ function withCauses(errors) {
26
27
  ? ` The verification pass reported errors: ${errors.join('; ')}`
27
28
  : '';
28
29
  }
30
+ /** The plugin inferred no target for a migrated project, so it was not converted. */
31
+ function uninferredTargetWarning(targetName, projectName, root, rootInferred, errors) {
32
+ const cause = rootInferred
33
+ ? `the plugin inferred the project at ${root} without a "${targetName}" target. Check the plugin options`
34
+ : errors.length > 0
35
+ ? `the plugin failed to infer it: ${[
36
+ // Each inference option set reports the same failure again.
37
+ ...new Set(errors.map(({ file, message }) => file ? `${file}: ${message}` : message)),
38
+ ].join('; ')}. Fix the error`
39
+ : `the plugin found no config file it detects in ${root}. Rename the config file to one the plugin detects`;
40
+ return `convert-to-inferred left target "${targetName}" in project "${projectName}" on its executor because ${cause}, then rerun the migration to convert it.`;
41
+ }
29
42
  /** A target's centralization was skipped before writing anything. */
30
43
  function retainedResidualsWarning(targetNames, reason) {
31
44
  return `convert-to-inferred retained full per-project configuration for target(s) ${targetNames.join(', ')} because ${reason}; no configuration was lost, but shared configuration remains duplicated.`;
@@ -227,6 +227,7 @@ export declare function inferOncePerOptionSet<T>(tree: Tree, pluginPath: string,
227
227
  rawMatchedConfigFiles: string[];
228
228
  inferredExecutors: Set<string>;
229
229
  inferredRoots: Set<string>;
230
+ createNodesErrors: CreateNodesFileError[];
230
231
  }>;
231
232
  /**
232
233
  * The set of project roots a generated `include` list scopes to, or `undefined`
@@ -276,4 +277,9 @@ export declare function harvestConfigurationErrors(e: ProjectConfigurationsError
276
277
  * migrated-root sets hold.
277
278
  */
278
279
  export declare function buildOwnerRootByPath(graphRoots: Iterable<string>, inferredRoots: Iterable<string>): Map<string, string>;
280
+ interface CreateNodesFileError {
281
+ /** null when the plugin failed as a whole rather than on one file. */
282
+ file: string | null;
283
+ message: string;
284
+ }
279
285
  export {};
@@ -991,6 +991,7 @@ async function inferOncePerOptionSet(tree, pluginPath, createNodes, createNodesV
991
991
  const inferredRoots = new Set();
992
992
  const erroredConfigFiles = new Set();
993
993
  const inferredExecutors = new Set();
994
+ const createNodesErrors = [];
994
995
  if (scope.optionSetGroups.length === 0) {
995
996
  return {
996
997
  inferredTargetsByOptionSet,
@@ -999,6 +1000,7 @@ async function inferOncePerOptionSet(tree, pluginPath, createNodes, createNodesV
999
1000
  erroredConfigFiles: [],
1000
1001
  inferredExecutors,
1001
1002
  inferredRoots,
1003
+ createNodesErrors,
1002
1004
  };
1003
1005
  }
1004
1006
  global.NX_GRAPH_CREATION = true;
@@ -1006,10 +1008,11 @@ async function inferOncePerOptionSet(tree, pluginPath, createNodes, createNodesV
1006
1008
  for (const group of scope.optionSetGroups) {
1007
1009
  const inferredByRoot = new Map();
1008
1010
  inferredTargetsByOptionSet.set(group.id, inferredByRoot);
1009
- const { result, erroredConfigFiles: groupErroredConfigFiles } = await getCreateNodesResultsForPlugin(tree, { plugin: pluginPath, options: group.options }, pluginPath, createNodes, createNodesV2, nxJson);
1011
+ const { result, erroredConfigFiles: groupErroredConfigFiles, createNodesErrors: groupCreateNodesErrors, } = await getCreateNodesResultsForPlugin(tree, { plugin: pluginPath, options: group.options }, pluginPath, createNodes, createNodesV2, nxJson);
1010
1012
  for (const file of groupErroredConfigFiles) {
1011
1013
  erroredConfigFiles.add(file);
1012
1014
  }
1015
+ createNodesErrors.push(...groupCreateNodesErrors);
1013
1016
  // The plugin's glob pattern is option-independent, so every option set
1014
1017
  // matches the same config files; union defensively.
1015
1018
  for (const file of result?.matchingProjectFiles ?? []) {
@@ -1084,6 +1087,7 @@ async function inferOncePerOptionSet(tree, pluginPath, createNodes, createNodesV
1084
1087
  erroredConfigFiles: [...erroredConfigFiles],
1085
1088
  inferredExecutors,
1086
1089
  inferredRoots,
1090
+ createNodesErrors,
1087
1091
  };
1088
1092
  }
1089
1093
  /**
@@ -1554,7 +1558,11 @@ async function migrateProjects(tree, projectGraph, pluginPath, createNodes, crea
1554
1558
  const projectConfigsByName = (0, devkit_exports_1.getProjects)(tree);
1555
1559
  // Phase 1: Infer (once per distinct option set) for the whole workspace.
1556
1560
  const nxJson = (0, devkit_exports_1.readNxJson)(tree);
1557
- const { inferredTargetsByOptionSet, matchedConfigFiles, erroredConfigFiles: erroredConfigFilesFromInference, rawMatchedConfigFiles, inferredExecutors, inferredRoots, } = await inferOncePerOptionSet(tree, pluginPath, createNodes, createNodesV2, nxJson, scope);
1561
+ const { inferredTargetsByOptionSet, matchedConfigFiles, erroredConfigFiles: erroredConfigFilesFromInference, rawMatchedConfigFiles, inferredExecutors, inferredRoots, createNodesErrors, } = await inferOncePerOptionSet(tree, pluginPath, createNodes, createNodesV2, nxJson, scope);
1562
+ // Single-project mode keeps throwing, like its skip filters do.
1563
+ if (!specificProjectToMigrate) {
1564
+ dropUninferredTargets(scope, projectGraph, inferredTargetsByOptionSet, inferredRoots, createNodesErrors, logger ?? devkit_exports_1.logger);
1565
+ }
1558
1566
  // Phase 2: Per-project residual (in-memory, no re-inference). Also captures
1559
1567
  // `baselineFinal` (the equivalence oracle consumed in Phase 4).
1560
1568
  const residualByProject = await computeResidualByProject(tree, projectGraph, scope, inferredTargetsByOptionSet, nxJson, projectConfigsByName);
@@ -1713,9 +1721,46 @@ rawMatchedConfigFiles) {
1713
1721
  spinner.updateText(`Migrations done`);
1714
1722
  (0, devkit_exports_1.updateNxJson)(tree, nxJson);
1715
1723
  }
1724
+ /**
1725
+ * One project the plugin cannot infer (a config file it does not match or that
1726
+ * fails to load) must not block converting the others. Its targets keep their
1727
+ * executor and are named in a warning.
1728
+ */
1729
+ function dropUninferredTargets(scope, projectGraph, inferredTargetsByOptionSet, inferredRoots, createNodesErrors, log) {
1730
+ const ownerRootByPath = buildOwnerRootByPath(Object.values(projectGraph.nodes).map((node) => node.data.root), inferredRoots);
1731
+ const keptProjects = new Set();
1732
+ for (const executorScope of scope.executorScopes) {
1733
+ for (const [targetName, projectNames] of executorScope.targetAndProjects) {
1734
+ const optionSetId = executorScope.inferenceOptionSetIdsByTarget.get(targetName);
1735
+ for (const projectName of projectNames) {
1736
+ const root = projectGraph.nodes[projectName].data.root;
1737
+ if (inferredTargetsByOptionSet
1738
+ .get(optionSetId)
1739
+ ?.get(root)
1740
+ ?.has(targetName)) {
1741
+ keptProjects.add(projectName);
1742
+ continue;
1743
+ }
1744
+ projectNames.delete(projectName);
1745
+ log.warn((0, conversion_warnings_1.uninferredTargetWarning)(targetName, projectName, root, inferredRoots.has(root), createNodesErrors.filter(({ file }) => file === null ||
1746
+ (0, devkit_internals_1.findProjectForPath)(file, ownerRootByPath) === root)));
1747
+ }
1748
+ if (projectNames.size === 0) {
1749
+ executorScope.targetAndProjects.delete(targetName);
1750
+ }
1751
+ }
1752
+ }
1753
+ scope.executorScopes = scope.executorScopes.filter((executorScope) => executorScope.targetAndProjects.size > 0);
1754
+ for (const projectName of scope.pluginOptionsByProject.keys()) {
1755
+ if (!keptProjects.has(projectName)) {
1756
+ scope.pluginOptionsByProject.delete(projectName);
1757
+ }
1758
+ }
1759
+ }
1716
1760
  async function getCreateNodesResultsForPlugin(tree, pluginConfiguration, pluginPath, createNodes, createNodesV2, nxJson) {
1717
1761
  let projectConfigs;
1718
1762
  let erroredConfigFiles = [];
1763
+ const createNodesErrors = [];
1719
1764
  try {
1720
1765
  const plugin = new devkit_internals_1.LoadedNxPlugin({ createNodes, createNodesV2, name: pluginPath }, pluginConfiguration);
1721
1766
  projectConfigs = await (0, devkit_internals_1.retrieveProjectConfigurations)({ specifiedPlugins: [plugin], defaultPlugins: [] }, tree.root, nxJson);
@@ -1728,10 +1773,20 @@ async function getCreateNodesResultsForPlugin(tree, pluginConfiguration, pluginP
1728
1773
  // sits outside them, so the plugin is never widened to a root it would
1729
1774
  // fail to infer (which the verification pass would otherwise revert).
1730
1775
  erroredConfigFiles = harvestConfigurationErrors(e).erroredConfigFiles;
1776
+ for (const error of e.errors) {
1777
+ if ((0, devkit_internals_1.isAggregateCreateNodesError)(error)) {
1778
+ for (const [file, fileError] of error.errors) {
1779
+ createNodesErrors.push({
1780
+ file,
1781
+ message: fileError?.message ?? String(fileError),
1782
+ });
1783
+ }
1784
+ }
1785
+ }
1731
1786
  }
1732
1787
  else {
1733
1788
  throw e;
1734
1789
  }
1735
1790
  }
1736
- return { result: projectConfigs, erroredConfigFiles };
1791
+ return { result: projectConfigs, erroredConfigFiles, createNodesErrors };
1737
1792
  }
@@ -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
+ }
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * The `@nx-<name>: <value>` directives in the comment block that opens a file,
3
- * by name, with their trimmed values in order. Reading stops at the first line
3
+ * by name, with their trimmed values in order. A bare `@nx-<name>` has the
4
+ * value `''`. Reading stops at the first line
4
5
  * that is not blank, a shebang or a comment.
5
6
  */
6
7
  export declare function parseNxDirectives(content: string): Map<string, string[]>;