@nx/devkit 24.0.0-beta.2 → 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,11 +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';
24
25
  export { applyTestFileDirectives } from './src/utils/test-file-directives';
25
- export { hasUltracacheImportsDirective } from './src/utils/ultracache-directive';
26
+ export { hasIgnoreServerInputsDirective } from './src/utils/ignore-server-inputs-directive';
26
27
  export { logShowProjectCommand } from './src/utils/log-show-project-command';
27
28
  export { eachValueFrom } from './src/utils/rxjs-for-await';
28
29
  export { checkAndCleanWithSemver } from './src/utils/semver';
29
30
  export { camelize, capitalize, classify, dasherize, } from './src/utils/string-utils';
30
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';
31
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.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.hasUltracacheImportsDirective = exports.applyTestFileDirectives = 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.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 = exports.createNxCloudOnboardingURLForWelcomeApp = exports.createNxCloudOnboardingURL = void 0;
6
- 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 = exports.getSourceDirOfDependentProjects = exports.getSerializedArgsForTask = 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 = 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,10 +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; } });
109
112
  var test_file_directives_1 = require("./src/utils/test-file-directives");
110
113
  Object.defineProperty(exports, "applyTestFileDirectives", { enumerable: true, get: function () { return test_file_directives_1.applyTestFileDirectives; } });
111
- var ultracache_directive_1 = require("./src/utils/ultracache-directive");
112
- Object.defineProperty(exports, "hasUltracacheImportsDirective", { enumerable: true, get: function () { return ultracache_directive_1.hasUltracacheImportsDirective; } });
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; } });
113
116
  var log_show_project_command_1 = require("./src/utils/log-show-project-command");
114
117
  Object.defineProperty(exports, "logShowProjectCommand", { enumerable: true, get: function () { return log_show_project_command_1.logShowProjectCommand; } });
115
118
  var rxjs_for_await_1 = require("./src/utils/rxjs-for-await");
@@ -269,3 +272,5 @@ Object.defineProperty(exports, "validateOutputs", { enumerable: true, get: funct
269
272
  Object.defineProperty(exports, "warnUnshippableLocalPathSpec", { enumerable: true, get: function () { return devkit_internals_3.warnUnshippableLocalPathSpec; } });
270
273
  Object.defineProperty(exports, "workspaceDataDirectory", { enumerable: true, get: function () { return devkit_internals_3.workspaceDataDirectory; } });
271
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
+ }
@@ -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[]>;
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseNxDirectives = parseNxDirectives;
4
- const DIRECTIVE = /^@nx-([\w-]+):(.*)$/;
4
+ const DIRECTIVE = /^@nx-([\w-]+)(?::(.*))?$/;
5
5
  /**
6
6
  * The `@nx-<name>: <value>` directives in the comment block that opens a file,
7
- * by name, with their trimmed values in order. Reading stops at the first line
7
+ * by name, with their trimmed values in order. A bare `@nx-<name>` has the
8
+ * value `''`. Reading stops at the first line
8
9
  * that is not blank, a shebang or a comment.
9
10
  */
10
11
  function parseNxDirectives(content) {
@@ -45,7 +46,7 @@ function parseNxDirectives(content) {
45
46
  }
46
47
  const match = line.trim().match(DIRECTIVE);
47
48
  if (match) {
48
- const [, name, value] = match;
49
+ const [, name, value = ''] = match;
49
50
  const values = directives.get(name);
50
51
  if (values) {
51
52
  values.push(value.trim());
@@ -1,12 +1,10 @@
1
1
  import type { TargetConfiguration } from 'nx/src/devkit-exports';
2
- declare const TEST_FILE_DIRECTIVES: readonly ['depends-on', 'ultracache'];
3
- /** An `@nx-<name>` directive a plugin can apply to a test file's target. */
4
- type TestFileDirective = (typeof TEST_FILE_DIRECTIVES)[number];
5
2
  /**
6
- * `target` with the `@nx-*` directives of a workspace-relative test file
7
- * applied, for the directives in `supported`. A directive that is not
8
- * supported, has an unsupported value or lists no projects is skipped with a
9
- * warning.
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.
10
7
  */
11
- export declare function applyTestFileDirectives(target: TargetConfiguration, workspaceRoot: string, file: string, supported: readonly TestFileDirective[]): TargetConfiguration;
12
- export {};
8
+ export declare function applyTestFileDirectives(target: TargetConfiguration, workspaceRoot: string, file: string, options: {
9
+ ignoreServerInputs: boolean;
10
+ }): TargetConfiguration;
@@ -6,54 +6,37 @@ const node_path_1 = require("node:path");
6
6
  const devkit_internals_1 = require("nx/src/devkit-internals");
7
7
  const nx_directives_1 = require("./nx-directives");
8
8
  const test_file_depends_on_1 = require("./test-file-depends-on");
9
- const ultracache_directive_1 = require("./ultracache-directive");
10
9
  const without_server_inputs_1 = require("./without-server-inputs");
11
- const TEST_FILE_DIRECTIVES = ['depends-on', 'ultracache'];
12
10
  /**
13
- * `target` with the `@nx-*` directives of a workspace-relative test file
14
- * applied, for the directives in `supported`. A directive that is not
15
- * supported, has an unsupported value or lists no projects is skipped with a
16
- * warning.
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.
17
15
  */
18
- function applyTestFileDirectives(target, workspaceRoot, file, supported) {
16
+ function applyTestFileDirectives(target, workspaceRoot, file, options) {
19
17
  const directives = (0, nx_directives_1.parseNxDirectives)((0, node_fs_1.readFileSync)((0, node_path_1.join)(workspaceRoot, file), 'utf-8'));
20
18
  let result = target;
21
- for (const directive of TEST_FILE_DIRECTIVES) {
22
- const values = directives.get(directive);
23
- if (values === undefined) {
24
- continue;
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.`);
25
24
  }
26
- if (!supported.includes(directive)) {
27
- (0, devkit_internals_1.emitPluginWorkerLog)('warn', `${file}: "@nx-${directive}" is not supported in this test file, so Nx ignores it.`);
28
- continue;
25
+ else {
26
+ result = (0, test_file_depends_on_1.scopeTestTargetToProjects)(result, projects);
29
27
  }
30
- result = applyDirective(result, directive, values, file);
31
28
  }
32
- return result;
33
- }
34
- function applyDirective(target, directive, values, file) {
35
- switch (directive) {
36
- case 'depends-on': {
37
- const projects = (0, test_file_depends_on_1.dependsOnProjects)(values);
38
- if (projects.length === 0) {
39
- (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.`);
40
- return target;
41
- }
42
- return (0, test_file_depends_on_1.scopeTestTargetToProjects)(target, projects);
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.`);
43
33
  }
44
- case 'ultracache': {
45
- const unsupported = (0, ultracache_directive_1.findUnsupportedUltracacheValue)(values);
46
- if (unsupported !== undefined) {
47
- (0, devkit_internals_1.emitPluginWorkerLog)('warn', `${file}: "@nx-ultracache:${unsupported && ` ${unsupported}`}" is not supported, so Nx ignores "@nx-ultracache" in this file. Use "@nx-ultracache: imports".`);
48
- return target;
49
- }
50
- return target.dependsOn
51
- ? { ...target, dependsOn: (0, without_server_inputs_1.withoutServerInputs)(target.dependsOn) }
52
- : target;
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.`);
53
36
  }
54
- default: {
55
- const unhandled = directive;
56
- throw new Error(`Unhandled test file directive: ${unhandled}`);
37
+ else if (result.dependsOn) {
38
+ result = { ...result, dependsOn: (0, without_server_inputs_1.withoutServerInputs)(result.dependsOn) };
57
39
  }
58
40
  }
41
+ return result;
59
42
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/devkit",
3
- "version": "24.0.0-beta.2",
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.2"
70
+ "nx": "24.0.0-beta.3"
71
71
  },
72
72
  "peerDependencies": {
73
73
  "nx": ">= 23 <= 25 || ^24.0.0-0"
@@ -1,8 +0,0 @@
1
- /**
2
- * Whether the comment block that opens `content` has an
3
- * `@nx-ultracache: imports` directive. False when any `@nx-ultracache` value
4
- * there is unsupported.
5
- */
6
- export declare function hasUltracacheImportsDirective(content: string): boolean;
7
- /** The first of the `@nx-ultracache` values that is not supported. */
8
- export declare function findUnsupportedUltracacheValue(values: string[]): string | undefined;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasUltracacheImportsDirective = hasUltracacheImportsDirective;
4
- exports.findUnsupportedUltracacheValue = findUnsupportedUltracacheValue;
5
- const nx_directives_1 = require("./nx-directives");
6
- const IMPORTS = 'imports';
7
- /**
8
- * Whether the comment block that opens `content` has an
9
- * `@nx-ultracache: imports` directive. False when any `@nx-ultracache` value
10
- * there is unsupported.
11
- */
12
- function hasUltracacheImportsDirective(content) {
13
- const values = (0, nx_directives_1.parseNxDirectives)(content).get('ultracache');
14
- return (values !== undefined && findUnsupportedUltracacheValue(values) === undefined);
15
- }
16
- /** The first of the `@nx-ultracache` values that is not supported. */
17
- function findUnsupportedUltracacheValue(values) {
18
- return values.find((value) => value !== IMPORTS);
19
- }