@nx/devkit 24.0.0-beta.3 → 24.0.0-beta.4
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.
package/dist/internal.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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';
|
|
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
4
|
export { determineArtifactNameAndDirectoryOptions, getRelativeCwd, type FileExtensionType, } from './src/generators/artifact-name-and-directory-utils';
|
|
@@ -27,6 +27,7 @@ export { hasIgnoreServerInputsDirective } from './src/utils/ignore-server-inputs
|
|
|
27
27
|
export { logShowProjectCommand } from './src/utils/log-show-project-command';
|
|
28
28
|
export { eachValueFrom } from './src/utils/rxjs-for-await';
|
|
29
29
|
export { checkAndCleanWithSemver } from './src/utils/semver';
|
|
30
|
+
export { splitShellArgs } from './src/utils/split-shell-args';
|
|
30
31
|
export { camelize, capitalize, classify, dasherize, } from './src/utils/string-utils';
|
|
31
32
|
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';
|
|
32
33
|
export type { AfterAllProjectsVersioned } from 'nx/release';
|
package/dist/internal.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.
|
|
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;
|
|
3
|
+
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.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.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.splitShellArgs = 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 = exports.getDeclaredPackageVersion = void 0;
|
|
5
|
+
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 = exports.connectToNxCloud = exports.combineGlobPatterns = void 0;
|
|
6
|
+
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 = exports.getOutputs = exports.getNxRequirePaths = 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 = exports.registerTsConfigPaths = exports.readProjectAndTargetFromTargetString = 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; } });
|
|
@@ -33,6 +33,7 @@ Object.defineProperty(exports, "getAppliedDaemonClientEnv", { enumerable: true,
|
|
|
33
33
|
Object.defineProperty(exports, "applyDaemonEnvFromClient", { enumerable: true, get: function () { return devkit_internals_1.applyDaemonEnvFromClient; } });
|
|
34
34
|
Object.defineProperty(exports, "getGraphTimeDotEnvForTask", { enumerable: true, get: function () { return devkit_internals_1.getGraphTimeDotEnvForTask; } });
|
|
35
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; } });
|
|
36
37
|
// Formatter detection and setup. `@nx/js` needs these to write and detect a
|
|
37
38
|
// workspace's formatter config, and it depends on `@nx/devkit` rather than on
|
|
38
39
|
// `nx`, so this is its declared route to them. Against an older nx they arrive
|
|
@@ -119,6 +120,8 @@ var rxjs_for_await_1 = require("./src/utils/rxjs-for-await");
|
|
|
119
120
|
Object.defineProperty(exports, "eachValueFrom", { enumerable: true, get: function () { return rxjs_for_await_1.eachValueFrom; } });
|
|
120
121
|
var semver_1 = require("./src/utils/semver");
|
|
121
122
|
Object.defineProperty(exports, "checkAndCleanWithSemver", { enumerable: true, get: function () { return semver_1.checkAndCleanWithSemver; } });
|
|
123
|
+
var split_shell_args_1 = require("./src/utils/split-shell-args");
|
|
124
|
+
Object.defineProperty(exports, "splitShellArgs", { enumerable: true, get: function () { return split_shell_args_1.splitShellArgs; } });
|
|
122
125
|
var string_utils_1 = require("./src/utils/string-utils");
|
|
123
126
|
Object.defineProperty(exports, "camelize", { enumerable: true, get: function () { return string_utils_1.camelize; } });
|
|
124
127
|
Object.defineProperty(exports, "capitalize", { enumerable: true, get: function () { return string_utils_1.capitalize; } });
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Splits a string into the words a command gets when a shell runs it, as
|
|
3
|
+
* run-commands does: with POSIX sh rules, or on Windows with cmd.exe and the C
|
|
4
|
+
* runtime's argv rules. Variables expand from `process.env`; command
|
|
5
|
+
* substitution and globs stay literal.
|
|
6
|
+
*/
|
|
7
|
+
export declare function splitShellArgs(value: string): string[];
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.splitShellArgs = splitShellArgs;
|
|
4
|
+
/**
|
|
5
|
+
* Splits a string into the words a command gets when a shell runs it, as
|
|
6
|
+
* run-commands does: with POSIX sh rules, or on Windows with cmd.exe and the C
|
|
7
|
+
* runtime's argv rules. Variables expand from `process.env`; command
|
|
8
|
+
* substitution and globs stay literal.
|
|
9
|
+
*/
|
|
10
|
+
function splitShellArgs(value) {
|
|
11
|
+
return process.platform === 'win32'
|
|
12
|
+
? splitWindowsArgs(applyCmdRules(value))
|
|
13
|
+
: splitPosixArgs(value);
|
|
14
|
+
}
|
|
15
|
+
function splitPosixArgs(value) {
|
|
16
|
+
const words = [];
|
|
17
|
+
let word;
|
|
18
|
+
let quote;
|
|
19
|
+
// An unquoted expansion splits into words on whitespace
|
|
20
|
+
const appendUnquoted = (text) => text.split(/[ \t\n]+/).forEach((part, index) => {
|
|
21
|
+
if (index > 0 && word !== undefined) {
|
|
22
|
+
words.push(word);
|
|
23
|
+
word = undefined;
|
|
24
|
+
}
|
|
25
|
+
if (part)
|
|
26
|
+
word = (word ?? '') + part;
|
|
27
|
+
});
|
|
28
|
+
for (let i = 0; i < value.length; i++) {
|
|
29
|
+
const char = value[i];
|
|
30
|
+
if (quote === "'") {
|
|
31
|
+
if (char === "'")
|
|
32
|
+
quote = undefined;
|
|
33
|
+
else
|
|
34
|
+
word += char;
|
|
35
|
+
}
|
|
36
|
+
else if (char === '\\' && value[i + 1] === '\n') {
|
|
37
|
+
i++;
|
|
38
|
+
}
|
|
39
|
+
else if (char === '$' && expandPosixVariable(value, i)) {
|
|
40
|
+
const expansion = expandPosixVariable(value, i);
|
|
41
|
+
if (quote)
|
|
42
|
+
word += expansion.value;
|
|
43
|
+
else
|
|
44
|
+
appendUnquoted(expansion.value);
|
|
45
|
+
i = expansion.end;
|
|
46
|
+
}
|
|
47
|
+
else if (quote === '"') {
|
|
48
|
+
if (char === '"') {
|
|
49
|
+
quote = undefined;
|
|
50
|
+
}
|
|
51
|
+
else if (char === '\\' && '"\\$`'.includes(value[i + 1])) {
|
|
52
|
+
word += value[++i];
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
word += char;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (/[ \t\n]/.test(char)) {
|
|
59
|
+
if (word !== undefined)
|
|
60
|
+
words.push(word);
|
|
61
|
+
word = undefined;
|
|
62
|
+
}
|
|
63
|
+
else if (char === '"' || char === "'") {
|
|
64
|
+
quote = char;
|
|
65
|
+
word ??= '';
|
|
66
|
+
}
|
|
67
|
+
else if (char === '\\' && i + 1 < value.length) {
|
|
68
|
+
word = (word ?? '') + value[++i];
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
word = (word ?? '') + char;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (word !== undefined)
|
|
75
|
+
words.push(word);
|
|
76
|
+
return words;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Expands `$NAME`, `${NAME}`, `${NAME-default}` and `${NAME:-default}` at
|
|
80
|
+
* `start`, returning the value and the index of its last character. Returns
|
|
81
|
+
* undefined for anything else, which stays literal.
|
|
82
|
+
*/
|
|
83
|
+
function expandPosixVariable(value, start) {
|
|
84
|
+
const name = value.slice(start + 1).match(/^[A-Za-z_][A-Za-z0-9_]*/)?.[0];
|
|
85
|
+
if (name) {
|
|
86
|
+
return { value: process.env[name] ?? '', end: start + name.length };
|
|
87
|
+
}
|
|
88
|
+
if (value[start + 1] !== '{')
|
|
89
|
+
return undefined;
|
|
90
|
+
let depth = 0;
|
|
91
|
+
for (let i = start + 1; i < value.length; i++) {
|
|
92
|
+
if (value[i] === '{')
|
|
93
|
+
depth++;
|
|
94
|
+
else if (value[i] === '}' && --depth === 0) {
|
|
95
|
+
const match = value
|
|
96
|
+
.slice(start + 2, i)
|
|
97
|
+
.match(/^([A-Za-z_][A-Za-z0-9_]*)(?:(:?)-(.*))?$/s);
|
|
98
|
+
if (!match)
|
|
99
|
+
return undefined;
|
|
100
|
+
const [, braced, colon, fallback] = match;
|
|
101
|
+
const env = process.env[braced];
|
|
102
|
+
const useFallback = fallback !== undefined && (colon ? !env : env === undefined);
|
|
103
|
+
return {
|
|
104
|
+
value: useFallback ? expandPosixText(fallback) : (env ?? ''),
|
|
105
|
+
end: i,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
function expandPosixText(text) {
|
|
112
|
+
let result = '';
|
|
113
|
+
for (let i = 0; i < text.length; i++) {
|
|
114
|
+
const expansion = text[i] === '$' && expandPosixVariable(text, i);
|
|
115
|
+
if (expansion) {
|
|
116
|
+
result += expansion.value;
|
|
117
|
+
i = expansion.end;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
result += text[i];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
// cmd.exe expands defined %NAME% variables, then drops each ^ outside double
|
|
126
|
+
// quotes and keeps the character after it
|
|
127
|
+
function applyCmdRules(value) {
|
|
128
|
+
const expanded = value.replace(/%([^%\s]+)%/g, (match, name) => process.env[name] ?? match);
|
|
129
|
+
let result = '';
|
|
130
|
+
let quoted = false;
|
|
131
|
+
for (let i = 0; i < expanded.length; i++) {
|
|
132
|
+
const char = expanded[i];
|
|
133
|
+
if (char === '^' && !quoted && i + 1 < expanded.length) {
|
|
134
|
+
result += expanded[++i];
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
if (char === '"')
|
|
138
|
+
quoted = !quoted;
|
|
139
|
+
result += char;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
// Backslashes are literal unless they precede a double quote, and single
|
|
145
|
+
// quotes are literal
|
|
146
|
+
function splitWindowsArgs(value) {
|
|
147
|
+
const words = [];
|
|
148
|
+
let word;
|
|
149
|
+
let quoted = false;
|
|
150
|
+
for (let i = 0; i < value.length; i++) {
|
|
151
|
+
const char = value[i];
|
|
152
|
+
if (char === '\\') {
|
|
153
|
+
let count = 1;
|
|
154
|
+
while (value[i + count] === '\\')
|
|
155
|
+
count++;
|
|
156
|
+
i += count - 1;
|
|
157
|
+
if (value[i + 1] === '"') {
|
|
158
|
+
word = (word ?? '') + '\\'.repeat(Math.floor(count / 2));
|
|
159
|
+
if (count % 2 === 1) {
|
|
160
|
+
word += '"';
|
|
161
|
+
i++;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
word = (word ?? '') + '\\'.repeat(count);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else if (char === '"') {
|
|
169
|
+
if (quoted && value[i + 1] === '"') {
|
|
170
|
+
word += '"';
|
|
171
|
+
i++;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
quoted = !quoted;
|
|
175
|
+
word ??= '';
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else if (!quoted && (char === ' ' || char === '\t')) {
|
|
179
|
+
if (word !== undefined)
|
|
180
|
+
words.push(word);
|
|
181
|
+
word = undefined;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
word = (word ?? '') + char;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (word !== undefined)
|
|
188
|
+
words.push(word);
|
|
189
|
+
return words;
|
|
190
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nx/devkit",
|
|
3
|
-
"version": "24.0.0-beta.
|
|
3
|
+
"version": "24.0.0-beta.4",
|
|
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.
|
|
70
|
+
"nx": "24.0.0-beta.4"
|
|
71
71
|
},
|
|
72
72
|
"peerDependencies": {
|
|
73
73
|
"nx": ">= 23 <= 25 || ^24.0.0-0"
|