@mikeyt23/node-cli-utils 2.0.19 → 2.0.21

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.
Files changed (69) hide show
  1. package/dist/cjs/DependencyChecker.d.ts +3 -0
  2. package/dist/cjs/DependencyChecker.d.ts.map +1 -1
  3. package/dist/cjs/DependencyChecker.js +5 -2
  4. package/dist/cjs/DotnetSdkUtility.d.ts +18 -0
  5. package/dist/cjs/DotnetSdkUtility.d.ts.map +1 -0
  6. package/dist/cjs/DotnetSdkUtility.js +56 -0
  7. package/dist/cjs/DotnetVersion.d.ts +14 -0
  8. package/dist/cjs/DotnetVersion.d.ts.map +1 -0
  9. package/dist/cjs/DotnetVersion.js +40 -0
  10. package/dist/cjs/GitUtility.js +1 -1
  11. package/dist/cjs/NixUtil.js +1 -1
  12. package/dist/cjs/NugetUtility.d.ts +39 -12
  13. package/dist/cjs/NugetUtility.d.ts.map +1 -1
  14. package/dist/cjs/NugetUtility.js +111 -57
  15. package/dist/cjs/TarballUtility.d.ts +1 -0
  16. package/dist/cjs/TarballUtility.d.ts.map +1 -1
  17. package/dist/cjs/TarballUtility.js +1 -1
  18. package/dist/cjs/certUtils.js +1 -1
  19. package/dist/cjs/dockerUtils.js +2 -2
  20. package/dist/cjs/dotnetUtils.d.ts +99 -7
  21. package/dist/cjs/dotnetUtils.d.ts.map +1 -1
  22. package/dist/cjs/dotnetUtils.js +328 -23
  23. package/dist/cjs/generalUtils.d.ts +19 -5
  24. package/dist/cjs/generalUtils.d.ts.map +1 -1
  25. package/dist/cjs/generalUtils.js +22 -10
  26. package/dist/cjs/generalUtilsInternal.d.ts +2 -2
  27. package/dist/cjs/generalUtilsInternal.d.ts.map +1 -1
  28. package/dist/cjs/generalUtilsInternal.js +10 -8
  29. package/dist/cjs/hostFileUtils.js +1 -1
  30. package/dist/cjs/parallel.js +2 -2
  31. package/dist/cjs/runWhileParentAlive.js +1 -1
  32. package/dist/cjs/testUtils.d.ts +1 -0
  33. package/dist/cjs/testUtils.d.ts.map +1 -1
  34. package/dist/cjs/testUtils.js +8 -2
  35. package/dist/esm/DependencyChecker.d.ts +3 -0
  36. package/dist/esm/DependencyChecker.d.ts.map +1 -1
  37. package/dist/esm/DependencyChecker.js +5 -2
  38. package/dist/esm/DotnetSdkUtility.d.ts +18 -0
  39. package/dist/esm/DotnetSdkUtility.d.ts.map +1 -0
  40. package/dist/esm/DotnetSdkUtility.js +53 -0
  41. package/dist/esm/DotnetVersion.d.ts +14 -0
  42. package/dist/esm/DotnetVersion.d.ts.map +1 -0
  43. package/dist/esm/DotnetVersion.js +41 -0
  44. package/dist/esm/GitUtility.js +1 -1
  45. package/dist/esm/NixUtil.js +1 -1
  46. package/dist/esm/NugetUtility.d.ts +39 -12
  47. package/dist/esm/NugetUtility.d.ts.map +1 -1
  48. package/dist/esm/NugetUtility.js +112 -58
  49. package/dist/esm/TarballUtility.d.ts +1 -0
  50. package/dist/esm/TarballUtility.d.ts.map +1 -1
  51. package/dist/esm/TarballUtility.js +1 -1
  52. package/dist/esm/certUtils.js +1 -1
  53. package/dist/esm/dockerUtils.js +2 -2
  54. package/dist/esm/dotnetUtils.d.ts +99 -7
  55. package/dist/esm/dotnetUtils.d.ts.map +1 -1
  56. package/dist/esm/dotnetUtils.js +311 -19
  57. package/dist/esm/generalUtils.d.ts +19 -5
  58. package/dist/esm/generalUtils.d.ts.map +1 -1
  59. package/dist/esm/generalUtils.js +22 -10
  60. package/dist/esm/generalUtilsInternal.d.ts +2 -2
  61. package/dist/esm/generalUtilsInternal.d.ts.map +1 -1
  62. package/dist/esm/generalUtilsInternal.js +10 -8
  63. package/dist/esm/hostFileUtils.js +1 -1
  64. package/dist/esm/parallel.js +2 -2
  65. package/dist/esm/runWhileParentAlive.js +1 -1
  66. package/dist/esm/testUtils.d.ts +1 -0
  67. package/dist/esm/testUtils.d.ts.map +1 -1
  68. package/dist/esm/testUtils.js +6 -1
  69. package/package.json +14 -10
@@ -1,4 +1,5 @@
1
- export { getLatestNugetPackageVersion } from './NugetUtility.js';
1
+ export { getInstalledSdkVersions, isSdkMajorVersionInstalled, isSdkMajorVersionOrGreaterInstalled } from './DotnetSdkUtility.js';
2
+ export { getLatestNugetPackageVersion, getLatestMajorNugetPackageVersion } from './NugetUtility.js';
2
3
  /**
3
4
  * Runs dotnet build on the specified project.
4
5
  * @param projectPath Path to project file (like .csproj) or directory of project to build
@@ -13,20 +14,111 @@ export declare function dotnetBuild(projectPath: string): Promise<void>;
13
14
  * @param cwd Optionally run the command from another current working directory
14
15
  */
15
16
  export declare function dotnetPublish(projectPath?: string, configuration?: string, outputDir?: string, cwd?: string): Promise<void>;
17
+ export interface EnsureDotnetToolOptions {
18
+ /** Defaults to `false`. */
19
+ global: boolean;
20
+ /** Optionally specify a dotnet version instead of using the latest installed version. */
21
+ dotnetMajorVersion?: number;
22
+ /**
23
+ * Current working directory to run the commands. Defaults to process current working directory.
24
+ *
25
+ * **Note:** this option is only relevant if the `global` option is `false`.
26
+ * */
27
+ cwd: string;
28
+ }
16
29
  /**
17
- * Install or update a global dotnet tool.
18
- * @param toolName The name of the dotnet global tool
30
+ * Installs or updates a dotnet CLI tool. Only supports dotnet 5+. Runs a combination of `dotnet --list-sdks`, `dotnet new tool-manifest`,
31
+ * `dotnet tool uninstall` and `dotnet tool install`. Nuget.org will be queried to determine the latest compatible version of the tool for your
32
+ * latest installed dotnet SDK version, or the dotnet SDK version specified in options (the version passed in options must also be installed).
33
+ *
34
+ * Defaults that can be overridden with options ({@link EnsureDotnetToolOptions}):
35
+ * - Local install
36
+ * - Uses latest installed dotnet SDK version
37
+ * - Runs in the current working directory
38
+ *
39
+ * For local installs, a new tool manifest will be created with the command `dotnet new tool-manifest` if it doesn't already exist. Note that dotnet
40
+ * searches up the directory tree until it finds a tool manifest.
41
+ *
42
+ * If the tool is already installed and the version installed is newer (because an older dotnet version was specified in the options), the installed
43
+ * version will be overwritten with the latest compatible version for the dotnet version specified in the options rather than trying to simply run the
44
+ * `dotnet tool update` command, which would throw an error in this scenario.
45
+ *
46
+ * Docs for dotnet tools: https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools
47
+ *
48
+ * Docs for `dotnet tool install`: https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-tool-install
19
49
  */
20
- export declare function installOrUpdateDotnetGlobalTool(toolName: string): Promise<void>;
50
+ export declare function ensureDotnetTool(toolName: string, options?: Partial<EnsureDotnetToolOptions>): Promise<void>;
21
51
  /**
22
- * Spawns a process that runs the necessary commands to install or update the dotnet-ef tool globally on the system.
52
+ * Runs `dotnet new tool-manifest` if `./.config/dotnet-tools.json` does not exist. Uses the current working directory.
53
+ *
54
+ * The tool manifest is required when installing local dotnet tools. Note that dotnet searches up the directory tree
55
+ * for a tool manifest, so tools can be installed in a solution root directory and be picked up by dotnet when run
56
+ * in subdirectories.
23
57
  */
24
- export declare function installOrUpdateDotnetEfTool(): Promise<void>;
25
- export declare function installOrUpdateReportGeneratorTool(): Promise<void>;
58
+ export declare function ensureDotnetToolManifest(cwd?: string): Promise<void>;
59
+ /**
60
+ * Ensures the latest version of `dotnet-reportgenerator-globaltool` is installed as a "dotnet local tool" in the current
61
+ * working directory with the latest version that is compatible with the latest dotnet SDK version currently installed.
62
+ *
63
+ * This package is used to convert code coverage data into a human-readable report: https://github.com/danielpalme/ReportGenerator
64
+ *
65
+ * Unsure why the name of the tool has "global" in it - it is neither local nor global (can be installed as either).
66
+ *
67
+ * Use {@link ensureDotnetTool} directly for different options.
68
+ */
69
+ export declare function ensureReportGeneratorTool(): Promise<void>;
26
70
  /**
27
71
  * Spawns a process that runs the following commands to clean and re-install the dotnet dev certs:
28
72
  * - dotnet dev-certs https --clean
29
73
  * - dotnet dev-certs https -t
30
74
  */
31
75
  export declare function configureDotnetDevCerts(): Promise<void>;
76
+ declare const targetFrameworkMonikersImmutable: readonly ["netcoreapp1.0", "netcoreapp1.1", "netcoreapp2.0", "netcoreapp2.1", "netcoreapp2.2", "netcoreapp3.0", "netcoreapp3.1", "net5.0", "net6.0", "net7.0", "net8.0", "netstandard1.0", "netstandard1.1", "netstandard1.2", "netstandard1.3", "netstandard1.4", "netstandard1.5", "netstandard1.6", "netstandard2.0", "netstandard2.1", "net11", "net20", "net35", "net40", "net403", "net45", "net451", "net452", "net46", "net461", "net462", "net47", "net471", "net472", "net48", "netcore", "netcore45", "netcore451", "netmf", "sl4", "sl5", "wp", "wp7", "wp75", "wp8", "wp81", "wpa81", "uap", "uap10.0", "net5.0-windows", "net6.0-android", "net6.0-ios", "net6.0-maccatalyst", "net6.0-macos", "net6.0-tvos", "net6.0-windows", "net7.0-android", "net7.0-ios", "net7.0-maccatalyst", "net7.0-macos", "net7.0-tvos", "net7.0-windows", "net8.0", "net8.0-android", "net8.0-browser", "net8.0-ios", "net8.0-maccatalyst", "net8.0-macos", "net8.0-tvos", "net8.0-windows"];
77
+ /**
78
+ * Type guard for valid .net framework TFMs (target framework moniker).
79
+ *
80
+ * See https://learn.microsoft.com/en-us/dotnet/standard/frameworks
81
+ */
82
+ export type TargetFrameworkMoniker = typeof targetFrameworkMonikersImmutable[number];
83
+ /**
84
+ * Scraped from https://learn.microsoft.com/en-us/dotnet/standard/frameworks.
85
+ * No intention to actually support operations for all of these, but having a list allows checking if a string
86
+ * is a valid TFM (target framework moniker) - see type guard: {@link TargetFrameworkMoniker}.
87
+ *
88
+ * @example
89
+ * ```
90
+ * const isValidTfm = targetFrameworkMonikers.includes(someStringVar)
91
+ * ```
92
+ */
93
+ export declare const targetFrameworkMonikers: string[];
94
+ export declare function isValidTargetFrameworkMoniker(targetFrameworkMoniker: string): boolean;
95
+ declare const dotnetCoreTargetFrameworkMonikersImmutable: readonly ["net5.0", "net6.0", "net7.0", "net8.0"];
96
+ /**
97
+ * Type guard for {@link dotnetCoreTargetFrameworkMonikers}.
98
+ */
99
+ export type DotnetCoreTargetFrameworkMoniker = typeof dotnetCoreTargetFrameworkMonikersImmutable[number];
100
+ /**
101
+ * Subset of {@link targetFrameworkMonikers} with modern dotnet core versions.
102
+ *
103
+ * Most of my scripting will only support modern versions of dotnet core, so this will often be used for checks instead of the full list.
104
+ */
105
+ export declare const dotnetCoreTargetFrameworkMonikers: string[];
106
+ /**
107
+ * Check if a string is a valid TFM (Target Framework Moniker) in the form "netX.Y" where X is a number >= 5 and Y is any number.
108
+ * @param targetFrameworkMoniker The dotnet target framework moniker to check.
109
+ * @returns `true` if the string is a properly formatted "netX.Y" TFM, `false` otherwise
110
+ */
111
+ export declare function isTfmNet5Plus(targetFrameworkMoniker: string): boolean;
112
+ /**
113
+ * Simple helper method to convert one of the newer dotnet core TFM's to the major SDK version number in a safe way.
114
+ */
115
+ export declare function netCoreTfmToSdkMajorVersion(tfm: TargetFrameworkMoniker): number;
116
+ /**
117
+ * Get sorted SDK version numbers for dotnet core 5+ (from {@link dotnetCoreTargetFrameworkMonikers}).
118
+ */
119
+ export declare function getDotnetCoreSdkVersions(): number[];
120
+ /**
121
+ * Simple helper method to convert an SDK version to the TFM (target framework moniker). Only supporting new dotnet core versions.
122
+ */
123
+ export declare function sdkVersionToTfm(sdkVersion: number): TargetFrameworkMoniker;
32
124
  //# sourceMappingURL=dotnetUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dotnetUtils.d.ts","sourceRoot":"","sources":["../../src/dotnetUtils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAEhE;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,iBAGpD;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,WAAW,GAAE,MAAa,EAAE,aAAa,GAAE,MAAkB,EAAE,SAAS,GAAE,MAAkB,EAAE,GAAG,CAAC,EAAE,MAAM,iBAY7I;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,iBAYrE;AAED;;GAEG;AACH,wBAAsB,2BAA2B,kBAEhD;AAED,wBAAsB,kCAAkC,kBAEvD;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,kBAG5C"}
1
+ {"version":3,"file":"dotnetUtils.d.ts","sourceRoot":"","sources":["../../src/dotnetUtils.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,mCAAmC,EAAE,MAAM,uBAAuB,CAAA;AAChI,OAAO,EAAE,4BAA4B,EAAE,iCAAiC,EAAE,MAAM,mBAAmB,CAAA;AAEnG;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,iBAGpD;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,WAAW,GAAE,MAAa,EAAE,aAAa,GAAE,MAAkB,EAAE,SAAS,GAAE,MAAkB,EAAE,GAAG,CAAC,EAAE,MAAM,iBAY7I;AAED,MAAM,WAAW,uBAAuB;IACtC,2BAA2B;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;SAIK;IACL,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,iBA8ElG;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,GAAE,MAAsB,iBAYzE;AA6DD;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,kBAE9C;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,kBAG5C;AAID,QAAA,MAAM,gCAAgC,y7BAuE5B,CAAA;AAEV;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,gCAAgC,CAAC,MAAM,CAAC,CAAA;AAEpF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAA0C,CAAA;AAEtF,wBAAgB,6BAA6B,CAAC,sBAAsB,EAAE,MAAM,WAE3E;AAED,QAAA,MAAM,0CAA0C,mDAKtC,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,gCAAgC,GAAG,OAAO,0CAA0C,CAAC,MAAM,CAAC,CAAA;AAExG;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAAM,EAAoD,CAAA;AAE1G;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,sBAAsB,EAAE,MAAM,WAI3D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,sBAAsB,UAQtE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,aAWvC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,CAK1E"}
@@ -1,5 +1,11 @@
1
- import { log, requireString, requireValidPath, spawnAsync, trace, which } from './generalUtils.js';
2
- export { getLatestNugetPackageVersion } from './NugetUtility.js';
1
+ import fs from 'fs';
2
+ import path from 'node:path';
3
+ import { getInstalledSdkVersions } from './DotnetSdkUtility.js';
4
+ import { getLatestNugetPackageVersion, validatePackageName } from './NugetUtility.js';
5
+ import { Emoji, log, requireString, requireValidPath, simpleSpawnAsync, spawnAsync, trace } from './generalUtils.js';
6
+ const toolManifestPartialPath = '.config/dotnet-tools.json';
7
+ export { getInstalledSdkVersions, isSdkMajorVersionInstalled, isSdkMajorVersionOrGreaterInstalled } from './DotnetSdkUtility.js';
8
+ export { getLatestNugetPackageVersion, getLatestMajorNugetPackageVersion } from './NugetUtility.js';
3
9
  /**
4
10
  * Runs dotnet build on the specified project.
5
11
  * @param projectPath Path to project file (like .csproj) or directory of project to build
@@ -30,31 +36,171 @@ export async function dotnetPublish(projectPath = './', configuration = 'Release
30
36
  await spawnAsync('dotnet', args, { cwd: cwd });
31
37
  }
32
38
  /**
33
- * Install or update a global dotnet tool.
34
- * @param toolName The name of the dotnet global tool
39
+ * Installs or updates a dotnet CLI tool. Only supports dotnet 5+. Runs a combination of `dotnet --list-sdks`, `dotnet new tool-manifest`,
40
+ * `dotnet tool uninstall` and `dotnet tool install`. Nuget.org will be queried to determine the latest compatible version of the tool for your
41
+ * latest installed dotnet SDK version, or the dotnet SDK version specified in options (the version passed in options must also be installed).
42
+ *
43
+ * Defaults that can be overridden with options ({@link EnsureDotnetToolOptions}):
44
+ * - Local install
45
+ * - Uses latest installed dotnet SDK version
46
+ * - Runs in the current working directory
47
+ *
48
+ * For local installs, a new tool manifest will be created with the command `dotnet new tool-manifest` if it doesn't already exist. Note that dotnet
49
+ * searches up the directory tree until it finds a tool manifest.
50
+ *
51
+ * If the tool is already installed and the version installed is newer (because an older dotnet version was specified in the options), the installed
52
+ * version will be overwritten with the latest compatible version for the dotnet version specified in the options rather than trying to simply run the
53
+ * `dotnet tool update` command, which would throw an error in this scenario.
54
+ *
55
+ * Docs for dotnet tools: https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools
56
+ *
57
+ * Docs for `dotnet tool install`: https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-tool-install
35
58
  */
36
- export async function installOrUpdateDotnetGlobalTool(toolName) {
37
- if (!(await which('dotnet')).location) {
38
- throw new Error('"dotnet" is not installed');
59
+ export async function ensureDotnetTool(toolName, options) {
60
+ validatePackageName(toolName);
61
+ const globalInstall = options?.global ?? false;
62
+ let cwd;
63
+ if (options?.cwd) {
64
+ cwd = options.cwd;
65
+ requireValidPath('options.cwd', cwd);
39
66
  }
40
- const installed = (await which(toolName)).location;
41
- if (installed) {
42
- log(`${toolName} tool already installed, updating...`);
67
+ else {
68
+ cwd = process.cwd();
69
+ }
70
+ const dotnetVersions = await getInstalledSdkVersions();
71
+ if (dotnetVersions.length === 0) {
72
+ throw new Error('dotnet is not installed');
73
+ }
74
+ let dotnetVersion;
75
+ if (options?.dotnetMajorVersion) {
76
+ // Use dotnet version specified in options
77
+ dotnetVersion = options.dotnetMajorVersion;
78
+ if (!dotnetVersions.some(v => v.major === dotnetVersion)) {
79
+ throw new Error(`Cannot install tool with options specified - dotnet version ${dotnetVersion} is not installed`);
80
+ }
43
81
  }
44
82
  else {
45
- log(`${toolName} tool not installed, installing...`);
83
+ // Or, latest installed version
84
+ dotnetVersion = [...dotnetVersions].sort((a, b) => b.major - a.major)[0].major;
85
+ }
86
+ if (dotnetVersion < 5) {
87
+ throw new Error('Only dotnet 5 and above is supported for this utility method');
88
+ }
89
+ const tfm = sdkVersionToTfm(dotnetVersion);
90
+ log(`using dotnet version ${dotnetVersion} (TFM: ${tfm})`);
91
+ log(`ensuring dotnet tool "${toolName}" is installed ${globalInstall ? 'global' : 'local'}ly with the latest compatible version for dotnet ${dotnetVersion}`);
92
+ log(`looking up latest compatible version in Nuget repository for tool "${toolName}"`);
93
+ const latestToolVersion = await getLatestNugetPackageVersion(toolName, tfm);
94
+ if (latestToolVersion === null) {
95
+ throw new Error(`No compatible version of ${toolName} was found for TFM ${tfm}`);
96
+ }
97
+ log(`found compatible tool version: ${latestToolVersion}`);
98
+ log(`checking if ${globalInstall ? 'global' : 'local'} dotnet tool is installed`);
99
+ const installedVersion = await getDotnetToolInstalledVersion(toolName, globalInstall, cwd);
100
+ const commandLocalitySwitch = globalInstall ? '--global' : '--local';
101
+ if (installedVersion === null) {
102
+ log(`dotnet tool is not installed, attempting to install`);
103
+ if (!globalInstall) {
104
+ await ensureDotnetToolManifest(cwd);
105
+ }
106
+ const command = `dotnet tool install ${toolName} ${commandLocalitySwitch} --version ${latestToolVersion}`;
107
+ log(`installing with command: ${command}`);
108
+ await spawnAsync('dotnet', command.split(' '), { throwOnNonZero: true, cwd: cwd });
109
+ log(`finished tool install`);
110
+ }
111
+ else {
112
+ log(`found installed dotnet tool "${toolName}" version ${installedVersion}`);
113
+ if (installedVersion === latestToolVersion) {
114
+ log(`the most recent version of the tool is already installed - finished`);
115
+ return;
116
+ }
117
+ log(`latest version and installed version do not match - uninstalling the existing version before re-installing`);
118
+ if (!globalInstall) {
119
+ await ensureDotnetToolManifest();
120
+ }
121
+ const uninstallCommand = `dotnet tool uninstall ${toolName} ${commandLocalitySwitch}`;
122
+ log(`uninstalling with command: ${uninstallCommand}`);
123
+ await spawnAsync('dotnet', uninstallCommand.split(' '), { throwOnNonZero: true, cwd: cwd });
124
+ const command = `dotnet tool install ${toolName} ${commandLocalitySwitch} --version ${latestToolVersion}`;
125
+ log(`installing with command: ${command}`);
126
+ await spawnAsync('dotnet', command.split(' '), { throwOnNonZero: true, cwd: cwd });
127
+ log(`finished tool install`);
46
128
  }
47
- const args = ['tool', installed ? 'update' : 'install', '--global', toolName];
48
- await spawnAsync('dotnet', args);
49
129
  }
50
130
  /**
51
- * Spawns a process that runs the necessary commands to install or update the dotnet-ef tool globally on the system.
131
+ * Runs `dotnet new tool-manifest` if `./.config/dotnet-tools.json` does not exist. Uses the current working directory.
132
+ *
133
+ * The tool manifest is required when installing local dotnet tools. Note that dotnet searches up the directory tree
134
+ * for a tool manifest, so tools can be installed in a solution root directory and be picked up by dotnet when run
135
+ * in subdirectories.
52
136
  */
53
- export async function installOrUpdateDotnetEfTool() {
54
- await installOrUpdateDotnetGlobalTool('dotnet-ef');
137
+ export async function ensureDotnetToolManifest(cwd = process.cwd()) {
138
+ requireValidPath('cwd', cwd);
139
+ const toolsManifestPath = path.join(cwd, toolManifestPartialPath);
140
+ log(`checking if tool manifest exists at ${toolsManifestPath}`);
141
+ const toolManifestExists = fs.existsSync(toolsManifestPath);
142
+ if (toolManifestExists) {
143
+ log(`tool manifest already exists`);
144
+ }
145
+ else {
146
+ log(`tool manifest does not exist, attempting to create with command: dotnet new tool-manifest`);
147
+ await spawnAsync('dotnet', ['new', 'tool-manifest'], { throwOnNonZero: true, cwd });
148
+ log(`created tool manifest at ${toolsManifestPath}`);
149
+ }
55
150
  }
56
- export async function installOrUpdateReportGeneratorTool() {
57
- await installOrUpdateDotnetGlobalTool('dotnet-reportgenerator-globaltool');
151
+ async function getDotnetToolInstalledVersion(toolName, globalInstall, cwd) {
152
+ validatePackageName(toolName);
153
+ requireValidPath('cwd', cwd);
154
+ const result = await simpleSpawnAsync('dotnet', ['tool', 'list', globalInstall ? '--global' : '--local'], { cwd: cwd });
155
+ const lines = result.stdoutLines;
156
+ if (!lines[0].startsWith('Package Id') || !lines[1].startsWith('-')) {
157
+ throw new Error(`Unexpected output for command "dotnet tool list": ${JSON.stringify(lines)}`);
158
+ }
159
+ if (lines.length < 3) {
160
+ return null;
161
+ }
162
+ const versionColumnIndex = lines[0].indexOf('Version');
163
+ const commandsColumnIndex = lines[0].indexOf('Commands');
164
+ const manifestColumnIndex = lines[0].indexOf('Manifest');
165
+ if (versionColumnIndex === -1) {
166
+ throw new Error(`Unexpectedly missing "Version" header in "dotnet tool list" output: ${JSON.stringify(lines)}`);
167
+ }
168
+ const tools = [];
169
+ for (let i = 2; i < lines.length; i++) {
170
+ const packageId = lines[i].substring(0, versionColumnIndex).trim();
171
+ const version = lines[i].substring(versionColumnIndex, commandsColumnIndex !== -1 ? commandsColumnIndex : lines[i].length - 1).trim();
172
+ const commands = commandsColumnIndex !== -1 ? lines[i].substring(commandsColumnIndex, manifestColumnIndex !== -1 ? manifestColumnIndex : lines[i].length - 1).trim() : undefined;
173
+ const manifest = manifestColumnIndex !== -1 ? lines[i].substring(manifestColumnIndex).trim() : undefined;
174
+ tools.push({
175
+ packageId,
176
+ version,
177
+ commands,
178
+ manifest
179
+ });
180
+ }
181
+ const match = tools.find(t => t.packageId === toolName);
182
+ if (match === undefined) {
183
+ return null;
184
+ }
185
+ // For a local install, dotnet will search up in the directory tree until it finds a ".config" directory with a tool manifest, but
186
+ // that might not be obvious to the caller, so log a warning with the path to the manifest that was used if it's not int the cwd.
187
+ if (!globalInstall && !fs.existsSync(path.join(cwd, toolManifestPartialPath))) {
188
+ log(`${Emoji.Warning} local tool install is not in the current working directory - it is listed as ${match.manifest}`);
189
+ }
190
+ return match.version;
191
+ }
192
+ /**
193
+ * Ensures the latest version of `dotnet-reportgenerator-globaltool` is installed as a "dotnet local tool" in the current
194
+ * working directory with the latest version that is compatible with the latest dotnet SDK version currently installed.
195
+ *
196
+ * This package is used to convert code coverage data into a human-readable report: https://github.com/danielpalme/ReportGenerator
197
+ *
198
+ * Unsure why the name of the tool has "global" in it - it is neither local nor global (can be installed as either).
199
+ *
200
+ * Use {@link ensureDotnetTool} directly for different options.
201
+ */
202
+ export async function ensureReportGeneratorTool() {
203
+ await ensureDotnetTool('dotnet-reportgenerator-globaltool');
58
204
  }
59
205
  /**
60
206
  * Spawns a process that runs the following commands to clean and re-install the dotnet dev certs:
@@ -65,4 +211,150 @@ export async function configureDotnetDevCerts() {
65
211
  await spawnAsync('dotnet', ['dev-certs', 'https', '--clean']);
66
212
  await spawnAsync('dotnet', ['dev-certs', 'https', '-t']);
67
213
  }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG90bmV0VXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQU1sRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVoRTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsV0FBbUI7SUFDbkQsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxjQUFzQixJQUFJLEVBQUUsZ0JBQXdCLFNBQVMsRUFBRSxZQUFvQixTQUFTLEVBQUUsR0FBWTtJQUM1SSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDNUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNyQyxhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLElBQUksR0FBRyxFQUFFO1FBQ1AsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0tBQzdCO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7SUFDdkQsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDbkQsS0FBSyxDQUFDLEdBQUcsWUFBWSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUE7SUFDMUMsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBQ2hELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLCtCQUErQixDQUFDLFFBQWdCO0lBQ3BFLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtLQUM3QztJQUNELE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUE7SUFDbEQsSUFBSSxTQUFTLEVBQUU7UUFDYixHQUFHLENBQUMsR0FBRyxRQUFRLHNDQUFzQyxDQUFDLENBQUE7S0FDdkQ7U0FBTTtRQUNMLEdBQUcsQ0FBQyxHQUFHLFFBQVEsb0NBQW9DLENBQUMsQ0FBQTtLQUNyRDtJQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzdFLE1BQU0sVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDJCQUEyQjtJQUMvQyxNQUFNLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGtDQUFrQztJQUN0RCxNQUFNLCtCQUErQixDQUFDLG1DQUFtQyxDQUFDLENBQUE7QUFDNUUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQzFELENBQUMifQ==
214
+ // This immutable const is used for the type guard.
215
+ // There is also a non-immutable array to allow something like: const isValidTfm = targetFrameworkMonikers.includes(someStringVar)
216
+ const targetFrameworkMonikersImmutable = [
217
+ 'netcoreapp1.0',
218
+ 'netcoreapp1.1',
219
+ 'netcoreapp2.0',
220
+ 'netcoreapp2.1',
221
+ 'netcoreapp2.2',
222
+ 'netcoreapp3.0',
223
+ 'netcoreapp3.1',
224
+ 'net5.0',
225
+ 'net6.0',
226
+ 'net7.0',
227
+ 'net8.0',
228
+ 'netstandard1.0',
229
+ 'netstandard1.1',
230
+ 'netstandard1.2',
231
+ 'netstandard1.3',
232
+ 'netstandard1.4',
233
+ 'netstandard1.5',
234
+ 'netstandard1.6',
235
+ 'netstandard2.0',
236
+ 'netstandard2.1',
237
+ 'net11',
238
+ 'net20',
239
+ 'net35',
240
+ 'net40',
241
+ 'net403',
242
+ 'net45',
243
+ 'net451',
244
+ 'net452',
245
+ 'net46',
246
+ 'net461',
247
+ 'net462',
248
+ 'net47',
249
+ 'net471',
250
+ 'net472',
251
+ 'net48',
252
+ 'netcore',
253
+ 'netcore45',
254
+ 'netcore451',
255
+ 'netmf',
256
+ 'sl4',
257
+ 'sl5',
258
+ 'wp',
259
+ 'wp7',
260
+ 'wp75',
261
+ 'wp8',
262
+ 'wp81',
263
+ 'wpa81',
264
+ 'uap',
265
+ 'uap10.0',
266
+ 'net5.0-windows',
267
+ 'net6.0-android',
268
+ 'net6.0-ios',
269
+ 'net6.0-maccatalyst',
270
+ 'net6.0-macos',
271
+ 'net6.0-tvos',
272
+ 'net6.0-windows',
273
+ 'net7.0-android',
274
+ 'net7.0-ios',
275
+ 'net7.0-maccatalyst',
276
+ 'net7.0-macos',
277
+ 'net7.0-tvos',
278
+ 'net7.0-windows',
279
+ 'net8.0',
280
+ 'net8.0-android',
281
+ 'net8.0-browser',
282
+ 'net8.0-ios',
283
+ 'net8.0-maccatalyst',
284
+ 'net8.0-macos',
285
+ 'net8.0-tvos',
286
+ 'net8.0-windows'
287
+ ];
288
+ /**
289
+ * Scraped from https://learn.microsoft.com/en-us/dotnet/standard/frameworks.
290
+ * No intention to actually support operations for all of these, but having a list allows checking if a string
291
+ * is a valid TFM (target framework moniker) - see type guard: {@link TargetFrameworkMoniker}.
292
+ *
293
+ * @example
294
+ * ```
295
+ * const isValidTfm = targetFrameworkMonikers.includes(someStringVar)
296
+ * ```
297
+ */
298
+ export const targetFrameworkMonikers = [...targetFrameworkMonikersImmutable];
299
+ export function isValidTargetFrameworkMoniker(targetFrameworkMoniker) {
300
+ return targetFrameworkMonikers.includes(targetFrameworkMoniker);
301
+ }
302
+ const dotnetCoreTargetFrameworkMonikersImmutable = [
303
+ 'net5.0',
304
+ 'net6.0',
305
+ 'net7.0',
306
+ 'net8.0'
307
+ ];
308
+ /**
309
+ * Subset of {@link targetFrameworkMonikers} with modern dotnet core versions.
310
+ *
311
+ * Most of my scripting will only support modern versions of dotnet core, so this will often be used for checks instead of the full list.
312
+ */
313
+ export const dotnetCoreTargetFrameworkMonikers = [...dotnetCoreTargetFrameworkMonikersImmutable];
314
+ /**
315
+ * Check if a string is a valid TFM (Target Framework Moniker) in the form "netX.Y" where X is a number >= 5 and Y is any number.
316
+ * @param targetFrameworkMoniker The dotnet target framework moniker to check.
317
+ * @returns `true` if the string is a properly formatted "netX.Y" TFM, `false` otherwise
318
+ */
319
+ export function isTfmNet5Plus(targetFrameworkMoniker) {
320
+ requireString('targetFrameworkMoniker', targetFrameworkMoniker);
321
+ const netFormatPattern = /^net([5-9]|\d{2,})\.\d+$/;
322
+ return netFormatPattern.test(targetFrameworkMoniker);
323
+ }
324
+ /**
325
+ * Simple helper method to convert one of the newer dotnet core TFM's to the major SDK version number in a safe way.
326
+ */
327
+ export function netCoreTfmToSdkMajorVersion(tfm) {
328
+ if (!targetFrameworkMonikers.includes(tfm)) {
329
+ throw new Error(`Invalid TFM: ${tfm}`);
330
+ }
331
+ if (!dotnetCoreTargetFrameworkMonikers.includes(tfm)) {
332
+ throw new Error(`TFM "${tfm}" is not supported - this method only allows newer dotnet core versions: ${dotnetCoreTargetFrameworkMonikers.join(', ')}`);
333
+ }
334
+ return parseInt(tfm[3], 10);
335
+ }
336
+ /**
337
+ * Get sorted SDK version numbers for dotnet core 5+ (from {@link dotnetCoreTargetFrameworkMonikers}).
338
+ */
339
+ export function getDotnetCoreSdkVersions() {
340
+ const versions = [];
341
+ for (const tfm of dotnetCoreTargetFrameworkMonikers) {
342
+ const dotIndex = tfm.indexOf('.');
343
+ if (dotIndex === -1 || !tfm.startsWith('net')) {
344
+ continue;
345
+ }
346
+ const numString = tfm.substring(3, dotIndex);
347
+ versions.push(parseInt(numString, 10));
348
+ }
349
+ return [...versions].sort((a, b) => a - b);
350
+ }
351
+ /**
352
+ * Simple helper method to convert an SDK version to the TFM (target framework moniker). Only supporting new dotnet core versions.
353
+ */
354
+ export function sdkVersionToTfm(sdkVersion) {
355
+ if (typeof sdkVersion !== 'number' || sdkVersion < 5 || sdkVersion > 8) {
356
+ throw new Error(`Invalid SDK version: ${sdkVersion} (only supports version >= 5 and <= 8)`);
357
+ }
358
+ return `net${sdkVersion}.0`;
359
+ }
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG90bmV0VXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ25CLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNyRixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXBILE1BQU0sdUJBQXVCLEdBQUcsMkJBQTJCLENBQUE7QUFNM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDaEksT0FBTyxFQUFFLDRCQUE0QixFQUFFLGlDQUFpQyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbkc7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLFdBQW1CO0lBQ25ELGdCQUFnQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUM5RSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsY0FBc0IsSUFBSSxFQUFFLGdCQUF3QixTQUFTLEVBQUUsWUFBb0IsU0FBUyxFQUFFLEdBQVk7SUFDNUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lB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
@@ -92,11 +92,21 @@ export interface WhichResult {
92
92
  export declare function sleep(ms: number): Promise<void>;
93
93
  /**
94
94
  * An extension of the built-in SpawnOptions with an extra option to specify whether a non-zero exit code should throw an error.
95
+ * Used with method {@link spawnAsync}.
95
96
  */
96
97
  export interface SpawnOptionsWithThrow extends SpawnOptions {
97
98
  throwOnNonZero: boolean;
98
99
  simpleErrorMsg?: string;
99
100
  }
101
+ /**
102
+ * Options interface for methods {@link simpleSpawnSync}, {@link simpleSpawnAsync}, {@link simpleCmdSync} and {@link simpleCmdAsync}.
103
+ */
104
+ export interface SimpleSpawnOptions {
105
+ /** Defaults to `true`. Note that this is the opposite of the default for {@link spawnAsync}. */
106
+ throwOnNonZero: boolean;
107
+ /** Optional current working directory. Defaults to `process.cwd()`. */
108
+ cwd: string;
109
+ }
100
110
  /**
101
111
  * This is a wrapper function for NodeJS spawn. Defaults stdio to inherit so that output is visible in the console,
102
112
  * but note that this means stdout and stderr will not be available in the returned SpawnResult. To hide the output
@@ -199,10 +209,11 @@ export declare function stringToLines(str: string): string[];
199
209
  * See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
200
210
  * @param command Command to run
201
211
  * @param args Arguments to pass to the command
212
+ * @param options Optional {@link SimpleSpawnOptions} options
202
213
  * @returns An object with the status code, stdout, stderr, and error (if any)
203
214
  * @throws {@link SimpleSpawnError} if the command fails and throwOnNonZero is true
204
215
  */
205
- export declare function simpleCmdSync(command: string, args?: string[], throwOnNonZero?: boolean): SimpleSpawnResult;
216
+ export declare function simpleCmdSync(command: string, args?: string[], options?: Partial<SimpleSpawnOptions>): SimpleSpawnResult;
206
217
  /**
207
218
  * Runs the requested command using {@link spawnAsync} wrapped in an outer Windows CMD.exe command and returns the result with stdout split into lines.
208
219
  *
@@ -215,10 +226,11 @@ export declare function simpleCmdSync(command: string, args?: string[], throwOnN
215
226
  * See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
216
227
  * @param command Command to run
217
228
  * @param args Arguments to pass to the command
229
+ * @param options Optional {@link SimpleSpawnOptions} options
218
230
  * @returns An object with the status code, stdout, stderr, and error (if any)
219
231
  * @throws {@link SimpleSpawnError} if the command fails and throwOnNonZero is true
220
232
  */
221
- export declare function simpleCmdAsync(command: string, args?: string[], throwOnNonZero?: boolean): Promise<SimpleSpawnResult>;
233
+ export declare function simpleCmdAsync(command: string, args?: string[], options?: Partial<SimpleSpawnOptions>): Promise<SimpleSpawnResult>;
222
234
  /**
223
235
  * Runs the requested command using NodeJS spawnSync and returns the result with stdout split into lines.
224
236
  *
@@ -231,12 +243,13 @@ export declare function simpleCmdAsync(command: string, args?: string[], throwOn
231
243
  * See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
232
244
  * @param command Command to run
233
245
  * @param args Arguments to pass to the command
246
+ * @param options Optional {@link SimpleSpawnOptions} options
234
247
  * @returns An object with the status code, stdout, stderr, and error (if any)
235
248
  * @throws {@link SimpleSpawnError} if the command fails and throwOnNonZero is true
236
249
  */
237
- export declare function simpleSpawnSync(command: string, args?: string[], throwOnNonZero?: boolean): SimpleSpawnResult;
250
+ export declare function simpleSpawnSync(command: string, args?: string[], options?: Partial<SimpleSpawnOptions>): SimpleSpawnResult;
238
251
  /**
239
- * Runs the requested command using {@link spawnAsync} and returns the result with stdout split into lines.
252
+ * Runs the requested command using {@link spawnAsync} and returns the result with stdout split into non-empty lines.
240
253
  *
241
254
  * Use this for simple quick commands that don't require a lot of control.
242
255
  *
@@ -247,10 +260,11 @@ export declare function simpleSpawnSync(command: string, args?: string[], throwO
247
260
  * See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
248
261
  * @param command Command to run
249
262
  * @param args Arguments to pass to the command
263
+ * @param options Optional {@link SimpleSpawnOptions} options
250
264
  * @returns An object with the status code, stdout, stderr, and error (if any)
251
265
  * @throws {@link SimpleSpawnError} if the command fails and throwOnNonZero is true
252
266
  */
253
- export declare function simpleSpawnAsync(command: string, args?: string[], throwOnNonZero?: boolean): Promise<SimpleSpawnResult>;
267
+ export declare function simpleSpawnAsync(command: string, args?: string[], options?: Partial<SimpleSpawnOptions>): Promise<SimpleSpawnResult>;
254
268
  /**
255
269
  * @returns `true` if platform() is 'win32', `false` otherwise
256
270
  */
@@ -1 +1 @@
1
- {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/generalUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/generalUtils.ts"],"names":[],"mappings":"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"}