@mikeyt23/node-cli-utils 2.0.17 → 2.0.18

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 (44) hide show
  1. package/README.md +4 -48
  2. package/dist/cjs/DependencyChecker.d.ts +1 -0
  3. package/dist/cjs/DependencyChecker.d.ts.map +1 -1
  4. package/dist/cjs/DependencyChecker.js +16 -9
  5. package/dist/cjs/NugetUtility.d.ts +67 -0
  6. package/dist/cjs/NugetUtility.d.ts.map +1 -0
  7. package/dist/cjs/NugetUtility.js +256 -0
  8. package/dist/cjs/TarballUtility.d.ts +1 -1
  9. package/dist/cjs/TarballUtility.js +1 -1
  10. package/dist/cjs/dotnetUtils.d.ts +1 -0
  11. package/dist/cjs/dotnetUtils.d.ts.map +1 -1
  12. package/dist/cjs/dotnetUtils.js +4 -2
  13. package/dist/cjs/generalUtils.d.ts +11 -1
  14. package/dist/cjs/generalUtils.d.ts.map +1 -1
  15. package/dist/cjs/generalUtils.js +44 -13
  16. package/dist/cjs/generalUtilsInternal.d.ts +6 -0
  17. package/dist/cjs/generalUtilsInternal.d.ts.map +1 -1
  18. package/dist/cjs/generalUtilsInternal.js +33 -2
  19. package/dist/cjs/runWhileParentAlive.js +2 -2
  20. package/dist/esm/DependencyChecker.d.ts +1 -0
  21. package/dist/esm/DependencyChecker.d.ts.map +1 -1
  22. package/dist/esm/DependencyChecker.js +14 -8
  23. package/dist/esm/NugetUtility.d.ts +67 -0
  24. package/dist/esm/NugetUtility.d.ts.map +1 -0
  25. package/dist/esm/NugetUtility.js +254 -0
  26. package/dist/esm/TarballUtility.d.ts +1 -1
  27. package/dist/esm/TarballUtility.js +1 -1
  28. package/dist/esm/dotnetUtils.d.ts +1 -0
  29. package/dist/esm/dotnetUtils.d.ts.map +1 -1
  30. package/dist/esm/dotnetUtils.js +2 -1
  31. package/dist/esm/generalUtils.d.ts +11 -1
  32. package/dist/esm/generalUtils.d.ts.map +1 -1
  33. package/dist/esm/generalUtils.js +41 -12
  34. package/dist/esm/generalUtilsInternal.d.ts +6 -0
  35. package/dist/esm/generalUtilsInternal.d.ts.map +1 -1
  36. package/dist/esm/generalUtilsInternal.js +30 -1
  37. package/dist/esm/runWhileParentAlive.js +2 -2
  38. package/package.json +1 -11
  39. package/dist/cjs/dbMigrationUtils.d.ts +0 -39
  40. package/dist/cjs/dbMigrationUtils.d.ts.map +0 -1
  41. package/dist/cjs/dbMigrationUtils.js +0 -203
  42. package/dist/esm/dbMigrationUtils.d.ts +0 -39
  43. package/dist/esm/dbMigrationUtils.d.ts.map +0 -1
  44. package/dist/esm/dbMigrationUtils.js +0 -191
package/README.md CHANGED
@@ -6,11 +6,11 @@ I primarily use this library with [swig-cli](https://github.com/mikey-t/swig) to
6
6
 
7
7
  ## Documentation
8
8
 
9
- Auto-generated TypeDoc documentation: [https://mikey-t.github.io/node-cli-utils-docs/](https://mikey-t.github.io/node-cli-utils-docs/).
9
+ Auto-generated [TypeDoc](https://github.com/TypeStrong/typedoc) documentation:
10
10
 
11
- Generated with [TypeDoc](https://github.com/TypeStrong/typedoc).
11
+ [https://mikey-t.github.io/node-cli-utils-docs/](https://mikey-t.github.io/node-cli-utils-docs/)
12
12
 
13
- ## Install
13
+ ## Install as Dev Dependency
14
14
 
15
15
  ```
16
16
  npm i -D @mikeyt23/node-cli-utils
@@ -24,54 +24,10 @@ Utility functions are grouped into the following sub-modules:
24
24
  |--------|-------------|
25
25
  | @mikeyt23/node-cli-utils | General utils |
26
26
  | @mikeyt23/node-cli-utils/dockerUtils | Docker utils |
27
- | @mikeyt23/node-cli-utils/dbMigrationUtils | DB migration utils (see [db-migrations-dotnet](https://github.com/mikey-t/db-migrations-dotnet)) |
28
27
  | @mikeyt23/node-cli-utils/dotnetUtils | Dotnet utils |
29
28
  | @mikeyt23/node-cli-utils/certUtils | Cert utils |
30
- | @mikeyt23/node-cli-utils/colors | Utils methods to add color to CLI output |
29
+ | @mikeyt23/node-cli-utils/colors | Util methods to add color to CLI output |
31
30
  | @mikeyt23/node-cli-utils/DependencyChecker | Util class for checking system dependencies |
32
31
  | @mikeyt23/node-cli-utils/hostFileUtils | Host file utils |
33
32
  | @mikeyt23/node-cli-utils/parallel | A runParallel method and a ParallelExecutor class |
34
33
  | @mikeyt23/node-cli-utils/testUtils | Helper methods for use with the NodeJS test runner |
35
-
36
- ## Reasoning
37
-
38
- NodeJS projects are out-of-control with the depth of their dependency trees. Rather than giving in to that trend, I'm attempting to maintain a collection of utilities using only built-in NodeJS functionality whenever possible, and only importing things when I simply can't easily reproduce the functionality myself. And when I do import a dependency, it will preferably be one with a shallow dependency tree.
39
-
40
- In some ways this is bad because I'm obviously re-inventing the wheel and there's other libraries that do some of this stuff way better. But here's what I'm getting by doing it this way:
41
-
42
- - Significantly less work to keep things up to date - I don't have to audit dozens or hundreds or thousands of dependency and transitive dependency updates on a regular basis
43
- - Significantly less (or zero) risk of NPM supply chain attacks
44
- - Getting more hands-on XP with the fundamentals of NodeJS Typescript development
45
- - Control. Do I know who to talk to for bug fixes or feature improvements? Of course I know him - he's me!
46
-
47
- Originally I made an exception to this rule for [node-tar](https://github.com/isaacs/node-tar). However, I replaced this with a system call to the OS built-in `tar` utility since even Windows has this built-in since 2018.
48
-
49
- Also - just my personal opinion - every serious developer should create and maintain libraries like this. It's not always about reinventing the wheel or not. Sometimes it's about learning about different types of wheels by creating some yourself.
50
-
51
- Why one big package instead of smaller targeted packages? Smaller more focused packages would indeed be better, but only if I actually had time to maintain them all, which I don't. That decision will inevitably make this package a poor choice for most people for many reasons, but the benefit drastically outweighs the cost, in my opinion.
52
-
53
- ## Semver
54
-
55
- I won't be adhering to strict semver. I chose to group a large number of unrelated things into a single project so that I don't have to spend all my time maintaining many small projects. As a result, I probably won't be able to realistically bump minor/major versions every time there is a method signature change in a single function, for example.
56
-
57
- However, I plan on keeping the project well-documented and I also plan on continuing to increase unit test coverage, so hopefully the downsides of my approach will be somewhat mitigated.
58
-
59
- ## Noteworthy Features
60
-
61
- ### Process Spawning Cross-Platform Workarounds
62
-
63
- Dev automation tasks in all my projects make heavy use of spawning child processes, but unfortunately there's a lot of issues that cause this to be inconsistent across platforms. I've attempted to normalize some of the more annoying edge cases.
64
-
65
- For example, sometimes the only way to get a command to work how you want on windows is to pass the `shell: true` option. One case where this is useful is for running commands for a long running process that you want to be able to terminate with `ctrl+c` when you're done with it. These are commands like `docker compose up`, or running a dev web server, or anything that runs until you stop it. But on windows when you use `ctrl+c` to terminate a process spawned without the `shell: true` option, it immediately kills all the processes in the tree without warning or signaling, which is bad if those processes need to shut down gracefully before exiting. For example, on windows if you use `ctrl+c` on `docker compose up` spawned by Node, you'll notice that the containers are still running even after the attached command exits. But if you do the same thing on a nix machine, docker is given the `SIGINT` signal and it gracefully stops the containers before shutting down.
66
-
67
- But this issue is of the whack-a-mole variety, because if you do go ahead and pass the `shell: true` option, then unexpected termination of the parent process will simply orphan your child process tree, forcing you to kill it yourself manually, or with some other scripting.
68
-
69
- So normally you can do one of a couple things so that your process spawning code works well on windows in addition to nix machines:
70
-
71
- - Use another library where someone claims to have solved this completely in a cross-platform way (`press x to doubt`), and accept a non-trivial number of dependencies into your project
72
- - Use the non-shell option and just deal with some commands terminating non-gracefully
73
- - Use the shell option and just deal with long running processes sometimes getting orphaned
74
-
75
- Instead I've chosen to create a couple of different wrapper methods for Node's spawn method. One calls spawn fairly normally (`spawnAsync` in [./src/generalUtils.ts](./src/generalUtils.ts)), with an additional option to get the exec-like functionality of throwing on non-zero return code if you want. And another wrapper that is used for long running processes that uses the shell option, but if you're on windows does a nifty little hack to spawn a "middle" watchdog process that polls for whether the parent is alive or not and kills the child process tree if it becomes orphaned (`spawnAsyncLongRunning` in [./src/generalUtils.ts](./src/generalUtils.ts)).
76
-
77
- In the future I may go research how others have solved cross-platform process spawning, but for now this little hack works fine.
@@ -24,4 +24,5 @@ export declare abstract class DependencyChecker {
24
24
  private getPlatform;
25
25
  }
26
26
  export declare function hasDotnetSdkGreaterThanOrEqualTo(minimumMajorVersion: number): Promise<boolean>;
27
+ export declare function winHasElevatedPerms(): Promise<boolean>;
27
28
  //# sourceMappingURL=DependencyChecker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../src/DependencyChecker.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,CAAA;AAClD,MAAM,MAAM,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAC7D,MAAM,MAAM,eAAe,GAAG,eAAe,EAAE,CAAA;AAE/C,8BAAsB,iBAAiB;IACrC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAA;;IAMpC,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAE9C,kBAAkB,CAAC,kBAAkB,EAAE,eAAe,GAAG,OAAO;IAOhE,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;cA0BnF,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC;cAY1C,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;cASvC,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;cAQzC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;cAI1B,gCAAgC,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAI/E,6BAA6B,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cA6B5E,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;cAI7B,eAAe;cAIf,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;cAmB9B,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAczD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB/D,OAAO,CAAC,WAAW;CAYpB;AAED,wBAAsB,gCAAgC,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBpG"}
1
+ {"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../src/DependencyChecker.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,CAAA;AAClD,MAAM,MAAM,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAC7D,MAAM,MAAM,eAAe,GAAG,eAAe,EAAE,CAAA;AAE/C,8BAAsB,iBAAiB;IACrC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAA;;IAMpC,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAE9C,kBAAkB,CAAC,kBAAkB,EAAE,eAAe,GAAG,OAAO;IAOhE,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;cA0BnF,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC;cAY1C,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;cAIvC,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;cAQzC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;cAI1B,gCAAgC,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAI/E,6BAA6B,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cA6B5E,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;cAI7B,eAAe;cAIf,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;cAmB9B,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAczD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB/D,OAAO,CAAC,WAAW;CAYpB;AAED,wBAAsB,gCAAgC,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBpG;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU5D"}
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.hasDotnetSdkGreaterThanOrEqualTo = exports.DependencyChecker = void 0;
29
+ exports.winHasElevatedPerms = exports.hasDotnetSdkGreaterThanOrEqualTo = exports.DependencyChecker = void 0;
30
30
  const chalk_1 = __importDefault(require("chalk"));
31
31
  const net = __importStar(require("net"));
32
32
  const node_child_process_1 = require("node:child_process");
@@ -72,13 +72,7 @@ class DependencyChecker {
72
72
  return false;
73
73
  }
74
74
  async winHasElevatedPerms() {
75
- try {
76
- await (0, generalUtils_js_1.spawnAsync)('net', ['session'], { throwOnNonZero: true, stdio: 'ignore' });
77
- return true;
78
- }
79
- catch (_a) {
80
- return false;
81
- }
75
+ return await winHasElevatedPerms();
82
76
  }
83
77
  async linuxHasElevatedPerms() {
84
78
  if (!process.getuid) {
@@ -207,4 +201,17 @@ async function hasDotnetSdkGreaterThanOrEqualTo(minimumMajorVersion) {
207
201
  return latestMajorVersion >= minimumMajorVersion;
208
202
  }
209
203
  exports.hasDotnetSdkGreaterThanOrEqualTo = hasDotnetSdkGreaterThanOrEqualTo;
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeUNoZWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRGVwZW5kZW5jeUNoZWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBeUI7QUFDekIseUNBQTBCO0FBQzFCLDJEQUE4QztBQUM5QywrQ0FBNEQ7QUFDNUQscURBQWtEO0FBQ2xELHVEQUE0STtBQU01SSxNQUFzQixpQkFBaUI7SUFHckM7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUN4QyxDQUFDO0lBSUQsa0JBQWtCLENBQUMsa0JBQW1DO1FBQ3BELElBQUksa0JBQWtCLEtBQUssSUFBSSxFQUFFO1lBQy9CLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFDRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBdUIsRUFBRSxlQUF5QixFQUFFLFFBQW1CO1FBQ3hGLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQTtRQUU5QixNQUFNLGNBQWMsR0FBb0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQTtRQUVSLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDL0IsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFDaEQsV0FBVyxDQUFDLE1BQU0sQ0FDbkIs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
204
+ async function winHasElevatedPerms() {
205
+ if (!(0, generalUtils_js_1.isPlatformWindows)()) {
206
+ throw new Error(`This method can only check for elevated permissions on Windows`);
207
+ }
208
+ try {
209
+ await (0, generalUtils_js_1.spawnAsync)('net', ['session'], { throwOnNonZero: true, stdio: 'ignore' });
210
+ return true;
211
+ }
212
+ catch (_a) {
213
+ return false;
214
+ }
215
+ }
216
+ exports.winHasElevatedPerms = winHasElevatedPerms;
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeUNoZWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRGVwZW5kZW5jeUNoZWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBeUI7QUFDekIseUNBQTBCO0FBQzFCLDJEQUE4QztBQUM5QywrQ0FBNEQ7QUFDNUQscURBQWtEO0FBQ2xELHVEQUE0STtBQU01SSxNQUFzQixpQkFBaUI7SUFHckM7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUN4QyxDQUFDO0lBSUQsa0JBQWtCLENBQUMsa0JBQW1DO1FBQ3BELElBQUksa0JBQWtCLEtBQUssSUFBSSxFQUFFO1lBQy9CLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFDRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBdUIsRUFBRSxlQUF5QixFQUFFLFFBQW1CO1FBQ3hGLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQTtRQUU5QixNQUFNLGNBQWMsR0FBb0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQTtRQUVSLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDL0IsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFDaEQsV0FBVyxDQUFDLE1BQU0sQ0FDbkIs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
@@ -0,0 +1,67 @@
1
+ export interface NugetUtilityDependencies {
2
+ nugetAccessor: NugetAccessor;
3
+ }
4
+ export declare class NugetUtility {
5
+ private readonly genericParsingErrorMessage;
6
+ private readonly htmlClassFrameworksTable;
7
+ private readonly htmlClassDirectCompatibility;
8
+ private readonly htmlClassComputedCompatibility;
9
+ private nugetAccessor;
10
+ constructor(dependencies?: Partial<NugetUtilityDependencies>);
11
+ static getNugetLandingPageUrl(packageName: string, packageVersion: string): string;
12
+ static getVersionsJsonUrl(packageName: string): string;
13
+ /**
14
+ * Get the newest version number for the nuget package that is compatible with the specified .net version.
15
+ * @param packageName The nuget package name to evaluate.
16
+ * @param frameworkVersionMoniker The .net framework version, for example "net6.0" or "net8.0"
17
+ * @returns A version string for the latest nuget package that is compatible with the specified .net framework, or `null` if there wasn't a compatible version found.
18
+ * @throws If the package does not exist.
19
+ * @throws If the nuget API is unreachable.
20
+ * @throws If the nuget.org package landing page is unreachable or it's html format for compatible .net frameworks changes.
21
+ */
22
+ getLatestNugetPackageVersion: (packageName: string, frameworkVersionMoniker: string) => Promise<string | null>;
23
+ private validatePackageName;
24
+ private validateFrameworkVersion;
25
+ private extractCompatibleFrameworks;
26
+ private extractCompatibleFrameworksFromHtmlTableString;
27
+ private getGenericParsingError;
28
+ private getLatestMajorVersions;
29
+ private getAllNugetVersionsFromJson;
30
+ }
31
+ /**
32
+ * A `false` `isDirect` property denotes computed compatibility.
33
+ */
34
+ export interface NugetFrameworkCompatibility {
35
+ isDirect: boolean;
36
+ targetFrameworkMoniker: string;
37
+ }
38
+ /**
39
+ * Use this class to convert a package name and version string into an object.
40
+ */
41
+ export declare class NugetVersion {
42
+ packageName: string;
43
+ raw: string;
44
+ major: number;
45
+ minor: number;
46
+ patch: number;
47
+ suffix: string | undefined;
48
+ constructor(packageName: string, version: string);
49
+ /**
50
+ * **Important:** no pre-release version support (no suffix evaluation).
51
+ */
52
+ isMoreRecentThan: (otherVersion: NugetVersion) => boolean;
53
+ private getNumOrThrow;
54
+ private throwGenericError;
55
+ }
56
+ export interface INugetAccessor {
57
+ getAllVersionsJson(packageName: string): Promise<string>;
58
+ getPackageLandingPageHtml(packageName: string, packageVersion: string): Promise<string>;
59
+ getNuspec(packageName: string, versionString: string): Promise<string>;
60
+ }
61
+ export declare class NugetAccessor implements INugetAccessor {
62
+ getAllVersionsJson: (packageName: string) => Promise<string>;
63
+ getPackageLandingPageHtml(packageName: string, packageVersion: string): Promise<string>;
64
+ getNuspec(packageName: string, versionString: string): Promise<string>;
65
+ }
66
+ export declare const getLatestNugetPackageVersion: (packageName: string, frameworkVersionMoniker: string) => Promise<string | null>;
67
+ //# sourceMappingURL=NugetUtility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NugetUtility.d.ts","sourceRoot":"","sources":["../../src/NugetUtility.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,aAAa,CAAA;CAC7B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAsE;IACjH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA+B;IACxE,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAA0B;IACvE,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAA6B;IAE5E,OAAO,CAAC,aAAa,CAAgB;gBAEzB,YAAY,GAAE,OAAO,CAAC,wBAAwB,CAAM;IAIhE,MAAM,CAAC,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;IAIlF,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE,MAAM;IAI7C;;;;;;;;OAQG;IACH,4BAA4B,gBAAuB,MAAM,2BAA2B,MAAM,KAAG,QAAQ,MAAM,GAAG,IAAI,CAAC,CAmBlH;IAED,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,2BAA2B;IAwBnC,OAAO,CAAC,8CAA8C;IAgDtD,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,2BAA2B;CAiBpC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,OAAO,CAAA;IACjB,sBAAsB,EAAE,MAAM,CAAA;CAC/B;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;gBAEd,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IA8BhD;;OAEG;IACH,gBAAgB,iBAAkB,YAAY,aAW7C;IAED,OAAO,CAAC,aAAa,CAMpB;IAED,OAAO,CAAC,iBAAiB,CAGxB;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACxD,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvF,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACvE;AAGD,qBAAa,aAAc,YAAW,cAAc;IAGlD,kBAAkB,gBAAuB,MAAM,KAAG,QAAQ,MAAM,CAAC,CAQhE;IAKK,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYvF,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAS7E;AAID,eAAO,MAAM,4BAA4B,gBA3RY,MAAM,2BAA2B,MAAM,KAAG,QAAQ,MAAM,GAAG,IAAI,CA2RxB,CAAA"}
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLatestNugetPackageVersion = exports.NugetAccessor = exports.NugetVersion = exports.NugetUtility = void 0;
4
+ const generalUtils_js_1 = require("./generalUtils.js");
5
+ const generalUtilsInternal_js_1 = require("./generalUtilsInternal.js");
6
+ class NugetUtility {
7
+ constructor(dependencies = {}) {
8
+ var _a;
9
+ this.genericParsingErrorMessage = `Unexpected nuget.org html format (enable trace for more detail): `;
10
+ this.htmlClassFrameworksTable = 'framework-table-frameworks';
11
+ this.htmlClassDirectCompatibility = 'framework-badge-asset';
12
+ this.htmlClassComputedCompatibility = 'framework-badge-computed';
13
+ /**
14
+ * Get the newest version number for the nuget package that is compatible with the specified .net version.
15
+ * @param packageName The nuget package name to evaluate.
16
+ * @param frameworkVersionMoniker The .net framework version, for example "net6.0" or "net8.0"
17
+ * @returns A version string for the latest nuget package that is compatible with the specified .net framework, or `null` if there wasn't a compatible version found.
18
+ * @throws If the package does not exist.
19
+ * @throws If the nuget API is unreachable.
20
+ * @throws If the nuget.org package landing page is unreachable or it's html format for compatible .net frameworks changes.
21
+ */
22
+ this.getLatestNugetPackageVersion = async (packageName, frameworkVersionMoniker) => {
23
+ this.validatePackageName(packageName);
24
+ this.validateFrameworkVersion(frameworkVersionMoniker);
25
+ const allVersionsJson = await this.nugetAccessor.getAllVersionsJson(packageName);
26
+ const allNugetVersions = this.getAllNugetVersionsFromJson(packageName, allVersionsJson);
27
+ const mostRecentMajorVersions = this.getLatestMajorVersions(allNugetVersions);
28
+ const sortedVersions = [...mostRecentMajorVersions].sort((a, b) => b.major - a.major);
29
+ for (const majorVersion of sortedVersions) {
30
+ const landingPageUrl = NugetUtility.getNugetLandingPageUrl(packageName, majorVersion.raw);
31
+ const landingPageHtml = await this.nugetAccessor.getPackageLandingPageHtml(packageName, majorVersion.raw);
32
+ const compatibleFrameworks = this.extractCompatibleFrameworks(landingPageHtml, landingPageUrl);
33
+ if (compatibleFrameworks.some(f => f.targetFrameworkMoniker === frameworkVersionMoniker)) {
34
+ return majorVersion.raw;
35
+ }
36
+ }
37
+ return null;
38
+ };
39
+ this.nugetAccessor = (_a = dependencies.nugetAccessor) !== null && _a !== void 0 ? _a : new NugetAccessor();
40
+ }
41
+ static getNugetLandingPageUrl(packageName, packageVersion) {
42
+ return `https://www.nuget.org/packages/${packageName}/${packageVersion}`;
43
+ }
44
+ static getVersionsJsonUrl(packageName) {
45
+ return `https://api.nuget.org/v3-flatcontainer/${packageName}/index.json`.toLowerCase();
46
+ }
47
+ validatePackageName(packageName) {
48
+ (0, generalUtils_js_1.requireString)('packageName', packageName);
49
+ const validNugetPattern = /^[a-zA-Z0-9_.-]+$/;
50
+ if (!validNugetPattern.test(packageName)) {
51
+ throw new Error(`Package name has invalid characters (must consist of only numbers, letters, underscores, dots and dashes): ${packageName}`);
52
+ }
53
+ }
54
+ validateFrameworkVersion(frameworkVersionMoniker) {
55
+ (0, generalUtils_js_1.requireString)('frameworkVersionMoniker', frameworkVersionMoniker);
56
+ const netFormatPattern = /^net([5-9]|\d{2,})\.\d+$/;
57
+ if (!netFormatPattern.test(frameworkVersionMoniker)) {
58
+ throw new Error(`Invalid frameworkVersionMoniker (currently only supports "net5.0" and above): ${frameworkVersionMoniker}`);
59
+ }
60
+ }
61
+ extractCompatibleFrameworks(nugetLandingPageHtml, urlForErrorMessage) {
62
+ const tableIndexes = (0, generalUtils_js_1.findAllIndexes)(nugetLandingPageHtml, this.htmlClassFrameworksTable);
63
+ if (tableIndexes.length === 0) {
64
+ (0, generalUtils_js_1.trace)(`no tables with class ${this.htmlClassFrameworksTable}`);
65
+ throw new Error(this.getGenericParsingError(urlForErrorMessage));
66
+ }
67
+ const compatibleFrameworks = [];
68
+ for (const tableStartIndex of tableIndexes) {
69
+ const endIndex = nugetLandingPageHtml.indexOf('</td>', tableStartIndex);
70
+ if (endIndex === -1) {
71
+ (0, generalUtils_js_1.trace)(`could not find "</td>" in html after tableStartIndex: ${tableStartIndex}`);
72
+ throw new Error(this.getGenericParsingError(urlForErrorMessage));
73
+ }
74
+ const frameworkTableHtml = nugetLandingPageHtml.substring(tableStartIndex, endIndex);
75
+ compatibleFrameworks.push(...this.extractCompatibleFrameworksFromHtmlTableString(frameworkTableHtml, urlForErrorMessage));
76
+ }
77
+ return compatibleFrameworks;
78
+ }
79
+ extractCompatibleFrameworksFromHtmlTableString(htmlTable, urlForErrorMessages) {
80
+ const lines = htmlTable.replaceAll('\n', '').replaceAll('\r', '').split("<span").map(line => line.trim());
81
+ const compatibleFrameworks = [];
82
+ for (const line of lines) {
83
+ const isDirectCompatibility = line.includes(this.htmlClassDirectCompatibility);
84
+ const isComputedCompatibility = line.includes(this.htmlClassComputedCompatibility);
85
+ if (!isDirectCompatibility && !isComputedCompatibility) {
86
+ continue;
87
+ }
88
+ const spanOpeningTagEndBracketIndex = line.indexOf('>');
89
+ if (spanOpeningTagEndBracketIndex === 0) {
90
+ (0, generalUtils_js_1.trace)(`could not find ">" in html compatibility table on line: ${line}`);
91
+ throw new Error(this.getGenericParsingError(urlForErrorMessages));
92
+ }
93
+ if (spanOpeningTagEndBracketIndex === (line.length - 1)) {
94
+ (0, generalUtils_js_1.trace)(`the ">" was the last character in the html compatibility table on line: ${line}`);
95
+ throw new Error(this.getGenericParsingError(urlForErrorMessages));
96
+ }
97
+ const endIndex = line.indexOf('<', spanOpeningTagEndBracketIndex);
98
+ if (endIndex === -1) {
99
+ (0, generalUtils_js_1.trace)(`could not find "<" in html compatibility table on line: ${line}`);
100
+ throw new Error(this.getGenericParsingError(urlForErrorMessages));
101
+ }
102
+ const startIndex = spanOpeningTagEndBracketIndex + 1;
103
+ if (startIndex === endIndex) {
104
+ (0, generalUtils_js_1.trace)(`the span value was empty for line (startIndex === endIndex): ${line}`);
105
+ throw new Error(this.getGenericParsingError(urlForErrorMessages));
106
+ }
107
+ const val = line.substring(startIndex, endIndex).trim();
108
+ if (!val) {
109
+ (0, generalUtils_js_1.trace)(`the span value was empty for line: ${line}`);
110
+ throw new Error(this.getGenericParsingError(urlForErrorMessages));
111
+ }
112
+ compatibleFrameworks.push({ targetFrameworkMoniker: val, isDirect: isDirectCompatibility });
113
+ }
114
+ return compatibleFrameworks;
115
+ }
116
+ getGenericParsingError(url) {
117
+ return `${this.genericParsingErrorMessage}${url}`;
118
+ }
119
+ // Does not currently support pre-release versions (they will be ignored)
120
+ getLatestMajorVersions(versions) {
121
+ const dict = {};
122
+ (0, generalUtils_js_1.trace)('**************');
123
+ (0, generalUtils_js_1.trace)(`versions: `, versions);
124
+ (0, generalUtils_js_1.trace)('**************');
125
+ for (const v of versions) {
126
+ if (v.suffix !== undefined) {
127
+ continue; // Skip all pre-release package versions for now
128
+ }
129
+ if (!dict[v.major]) {
130
+ dict[v.major] = v;
131
+ continue;
132
+ }
133
+ if (v.isMoreRecentThan(dict[v.major])) {
134
+ dict[v.major] = v;
135
+ }
136
+ }
137
+ return Object.values(dict);
138
+ }
139
+ getAllNugetVersionsFromJson(packageName, jsonString) {
140
+ let parsedJson;
141
+ try {
142
+ parsedJson = JSON.parse(jsonString);
143
+ }
144
+ catch (error) {
145
+ throw new Error('Could not parse Nuget response - invalid JSON string');
146
+ }
147
+ if (!Array.isArray(parsedJson.versions)) {
148
+ throw new Error('Could not parse Nuget response - the versions property is not an array');
149
+ }
150
+ const versionStrings = parsedJson.versions;
151
+ return (versionStrings).map(v => new NugetVersion(packageName, v));
152
+ }
153
+ }
154
+ exports.NugetUtility = NugetUtility;
155
+ /**
156
+ * Use this class to convert a package name and version string into an object.
157
+ */
158
+ class NugetVersion {
159
+ constructor(packageName, version) {
160
+ /**
161
+ * **Important:** no pre-release version support (no suffix evaluation).
162
+ */
163
+ this.isMoreRecentThan = (otherVersion) => {
164
+ if (this.suffix !== undefined || otherVersion.suffix !== undefined) {
165
+ throw new Error('No support for pre-release versions');
166
+ }
167
+ if (this.major !== otherVersion.major) {
168
+ return this.major > otherVersion.major;
169
+ }
170
+ if (this.minor !== otherVersion.minor) {
171
+ return this.minor > otherVersion.minor;
172
+ }
173
+ return this.patch > otherVersion.patch;
174
+ };
175
+ this.getNumOrThrow = (part) => {
176
+ const parsed = parseInt(part, 10);
177
+ if (isNaN(parsed)) {
178
+ this.throwGenericError(`"${part}" is not a number`);
179
+ }
180
+ return parsed;
181
+ };
182
+ this.throwGenericError = (reason) => {
183
+ const reasonPart = reason ? ` (${reason})` : '';
184
+ throw new Error(`Invalid nuget version string${reasonPart}: ${this.raw}`);
185
+ };
186
+ if (version === undefined || typeof version !== 'string' || version.trim() !== version || version === '' || version.includes(' ')) {
187
+ this.throwGenericError();
188
+ }
189
+ if (!packageName || packageName.trim() !== packageName || packageName === '') {
190
+ this.throwGenericError(`invalid package name: ${packageName}`);
191
+ }
192
+ const urlEncodedPackageName = encodeURIComponent(packageName);
193
+ if (urlEncodedPackageName !== packageName) {
194
+ this.throwGenericError(`url encoded package name is does not match the packageName: ${packageName}`);
195
+ }
196
+ this.packageName = urlEncodedPackageName;
197
+ this.raw = version;
198
+ const firstDashIndex = version.indexOf('-');
199
+ const hasSuffix = firstDashIndex !== -1;
200
+ if (hasSuffix) {
201
+ if (firstDashIndex === version.length - 1) {
202
+ this.throwGenericError('ends with dash symbol');
203
+ }
204
+ this.suffix = version.substring(firstDashIndex + 1);
205
+ }
206
+ const versionWithoutSuffix = hasSuffix ? version.substring(0, firstDashIndex) : version;
207
+ const parts = versionWithoutSuffix.split('.');
208
+ this.major = this.getNumOrThrow(parts[0]);
209
+ this.minor = parts.length > 1 ? this.getNumOrThrow(parts[1]) : 0;
210
+ this.patch = parts.length > 2 ? this.getNumOrThrow(parts[2]) : 0;
211
+ }
212
+ }
213
+ exports.NugetVersion = NugetVersion;
214
+ // Important: at one point the API calls were working with PascalCase package ids, but it seems to have been changed to require all lowercase package ids now
215
+ class NugetAccessor {
216
+ constructor() {
217
+ // Template URL: https://api.nuget.org/v3-flatcontainer/{package_id}/index.json
218
+ // Example for EF package: https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.design/index.json
219
+ this.getAllVersionsJson = async (packageName) => {
220
+ const nugetVersionsUrl = NugetUtility.getVersionsJsonUrl(packageName);
221
+ (0, generalUtils_js_1.trace)(`getting all package versions json from url: ${nugetVersionsUrl}`);
222
+ const response = await (0, generalUtilsInternal_js_1.httpGet)(nugetVersionsUrl);
223
+ if (!response.ok) {
224
+ throw new Error(`HTTP error code attempting to retrieve all package versions: ${response.status}`);
225
+ }
226
+ return response.body;
227
+ };
228
+ }
229
+ // The code to calculate computed framework compatibility is quite complicated and there isn't an API endpoint. Instead of writing an entire app that
230
+ // pulls in the NuGet.Client SDK, I'm just going to grab the html from the nuget.org landing page for the package. For reference, here is the code that computes
231
+ // this for the nuget.org site: https://github.com/NuGet/NuGetGallery/blob/e6a38a882007374b320420645f63cc30f2a93e4d/src/NuGetGallery.Core/Services/AssetFrameworkHelper.cs
232
+ async getPackageLandingPageHtml(packageName, packageVersion) {
233
+ const nugetPackageUrl = NugetUtility.getNugetLandingPageUrl(packageName, packageVersion);
234
+ (0, generalUtils_js_1.trace)(`getting nuget.org landing page html from url: ${nugetPackageUrl}`);
235
+ const response = await (0, generalUtilsInternal_js_1.httpGet)(nugetPackageUrl);
236
+ if (!response.ok) {
237
+ throw new Error(`HTTP error code for accessing ${nugetPackageUrl}: ${response.status}`);
238
+ }
239
+ return response.body;
240
+ }
241
+ // Template URL: https://api.nuget.org/v3-flatcontainer/{package_id}/{version}/{package_id}.nuspec
242
+ // Example for EF package version 7.0.14: https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.design/7.0.14/microsoft.entityframeworkcore.design.nuspec
243
+ async getNuspec(packageName, versionString) {
244
+ const nugetNuspecUrl = `https://api.nuget.org/v3-flatcontainer/${packageName}/${versionString}/${packageName}.nuspec`.toLocaleLowerCase();
245
+ (0, generalUtils_js_1.trace)(`getting nuspec file from url: ${nugetNuspecUrl}`);
246
+ const response = await (0, generalUtilsInternal_js_1.httpGet)(nugetNuspecUrl);
247
+ if (!response.ok) {
248
+ throw new Error(`HTTP error code attempting to get package nuspec for package "${packageName}" version "${versionString}": ${response.status}`);
249
+ }
250
+ return response.body;
251
+ }
252
+ }
253
+ exports.NugetAccessor = NugetAccessor;
254
+ const defaultNugetUtility = new NugetUtility();
255
+ exports.getLatestNugetPackageVersion = defaultNugetUtility.getLatestNugetPackageVersion;
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVnZXRVdGlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL051Z2V0VXRpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBd0U7QUFDeEUsdUVBQW1EO0FBTW5ELE1BQWEsWUFBWTtJQVF2QixZQUFZLGVBQWtELEVBQUU7O1FBUC9DLCtCQUEwQixHQUFHLG1FQUFtRSxDQUFBO1FBQ2hHLDZCQUF3QixHQUFHLDRCQUE0QixDQUFBO1FBQ3ZELGlDQUE0QixHQUFHLHVCQUF1QixDQUFBO1FBQ3RELG1DQUE4QixHQUFHLDBCQUEwQixDQUFBO1FBZ0I1RTs7Ozs7Ozs7V0FRRztRQUNILGlDQUE0QixHQUFHLEtBQUssRUFBRSxXQUFtQixFQUFFLHVCQUErQixFQUEwQixFQUFFO1lBQ3BILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtZQUV0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1lBQ3ZGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDN0UsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7WUFFckYsS0FBSyxNQUFNLFlBQVksSUFBSSxjQUFjLEVBQUU7Z0JBQ3pDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUs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
@@ -19,7 +19,7 @@ export interface TarballUtilityDependencies {
19
19
  mkdirpFn: typeof mkdirp;
20
20
  }
21
21
  /**
22
- * This utility class exists so we can mock the `which` dependency in unit tests without resorting to libraries that hack the import system.
22
+ * This utility class accepts dependencies in constructor params in order to allow mocking of functions like `which` in unit tests without resorting to hacking the import system.
23
23
  */
24
24
  export declare class TarballUtility {
25
25
  private whichSyncFn;
@@ -9,7 +9,7 @@ const node_path_1 = __importDefault(require("node:path"));
9
9
  const generalUtils_js_1 = require("./generalUtils.js");
10
10
  const NodeCliUtilsConfig_js_1 = require("./NodeCliUtilsConfig.js");
11
11
  /**
12
- * This utility class exists so we can mock the `which` dependency in unit tests without resorting to libraries that hack the import system.
12
+ * This utility class accepts dependencies in constructor params in order to allow mocking of functions like `which` in unit tests without resorting to hacking the import system.
13
13
  */
14
14
  class TarballUtility {
15
15
  constructor(dependencies = {}) {
@@ -1,3 +1,4 @@
1
+ export { getLatestNugetPackageVersion } from './NugetUtility.js';
1
2
  /**
2
3
  * Runs dotnet build on the specified project.
3
4
  * @param projectPath Path to project file (like .csproj) or directory of project to build
@@ -1 +1 @@
1
- {"version":3,"file":"dotnetUtils.d.ts","sourceRoot":"","sources":["../../src/dotnetUtils.ts"],"names":[],"mappings":"AAMA;;;;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":"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,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.configureDotnetDevCerts = exports.installOrUpdateReportGeneratorTool = exports.installOrUpdateDotnetEfTool = exports.installOrUpdateDotnetGlobalTool = exports.dotnetPublish = exports.dotnetBuild = void 0;
3
+ exports.configureDotnetDevCerts = exports.installOrUpdateReportGeneratorTool = exports.installOrUpdateDotnetEfTool = exports.installOrUpdateDotnetGlobalTool = exports.dotnetPublish = exports.dotnetBuild = exports.getLatestNugetPackageVersion = void 0;
4
4
  const generalUtils_js_1 = require("./generalUtils.js");
5
+ var NugetUtility_js_1 = require("./NugetUtility.js");
6
+ Object.defineProperty(exports, "getLatestNugetPackageVersion", { enumerable: true, get: function () { return NugetUtility_js_1.getLatestNugetPackageVersion; } });
5
7
  /**
6
8
  * Runs dotnet build on the specified project.
7
9
  * @param projectPath Path to project file (like .csproj) or directory of project to build
@@ -73,4 +75,4 @@ async function configureDotnetDevCerts() {
73
75
  await (0, generalUtils_js_1.spawnAsync)('dotnet', ['dev-certs', 'https', '-t']);
74
76
  }
75
77
  exports.configureDotnetDevCerts = configureDotnetDevCerts;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG90bmV0VXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWtHO0FBTWxHOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUFDLFdBQW1CO0lBQ25ELElBQUEsa0NBQWdCLEVBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sSUFBQSw0QkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFIRCxrQ0FHQztBQUVEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxhQUFhLENBQUMsY0FBc0IsSUFBSSxFQUFFLGdCQUF3QixTQUFTLEVBQUUsWUFBb0IsU0FBUyxFQUFFLEdBQVk7SUFDNUksSUFBQSxrQ0FBZ0IsRUFBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDNUMsSUFBQSwrQkFBYSxFQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNyQyxJQUFBLCtCQUFhLEVBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLElBQUksR0FBRyxFQUFFO1FBQ1AsSUFBQSxrQ0FBZ0IsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7S0FDN0I7SUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDM0UsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtJQUN2RCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNuRCxJQUFBLHVCQUFLLEVBQUMsR0FBRyxZQUFZLEdBQUcsZUFBZSxFQUFFLENBQUMsQ0FBQTtJQUMxQyxNQUFNLElBQUEsNEJBQVUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7QUFDaEQsQ0FBQztBQVpELHNDQVlDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLCtCQUErQixDQUFDLFFBQWdCO0lBQ3BFLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBQSx1QkFBSyxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtLQUM3QztJQUNELE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxJQUFBLHVCQUFLLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUE7SUFDbEQsSUFBSSxTQUFTLEVBQUU7UUFDYixJQUFBLHFCQUFHLEVBQUMsR0FBRyxRQUFRLHNDQUFzQyxDQUFDLENBQUE7S0FDdkQ7U0FBTTtRQUNMLElBQUEscUJBQUcsRUFBQyxHQUFHLFFBQVEsb0NBQW9DLENBQUMsQ0FBQTtLQUNyRDtJQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzdFLE1BQU0sSUFBQSw0QkFBVSxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBWkQsMEVBWUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSwyQkFBMkI7SUFDL0MsTUFBTSwrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRkQsa0VBRUM7QUFFTSxLQUFLLFVBQVUsa0NBQWtDO0lBQ3RELE1BQU0sK0JBQStCLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtBQUM1RSxDQUFDO0FBRkQsZ0ZBRUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxNQUFNLElBQUEsNEJBQVUsRUFBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsTUFBTSxJQUFBLDRCQUFVLEVBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQzFELENBQUM7QUFIRCwwREFHQyJ9
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG90bmV0VXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWtHO0FBTWxHLHFEQUFnRTtBQUF2RCwrSEFBQSw0QkFBNEIsT0FBQTtBQUVyQzs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLFdBQVcsQ0FBQyxXQUFtQjtJQUNuRCxJQUFBLGtDQUFnQixFQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUM1QyxNQUFNLElBQUEsNEJBQVUsRUFBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUM5RSxDQUFDO0FBSEQsa0NBR0M7QUFFRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxDQUFDLGNBQXNCLElBQUksRUFBRSxnQkFBd0IsU0FBUyxFQUFFLFlBQW9CLFNBQVMsRUFBRSxHQUFZO0lBQzVJLElBQUEsa0NBQWdCLEVBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLElBQUEsK0JBQWEsRUFBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDckMsSUFBQSwrQkFBYSxFQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUM3QyxJQUFJLEdBQUcsRUFBRTtRQUNQLElBQUEsa0NBQWdCLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0tBQzdCO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7SUFDdkQsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDbkQsSUFBQSx1QkFBSyxFQUFDLEdBQUcsWUFBWSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUE7SUFDMUMsTUFBTSxJQUFBLDRCQUFVLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBQ2hELENBQUM7QUFaRCxzQ0FZQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSwrQkFBK0IsQ0FBQyxRQUFnQjtJQUNwRSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUEsdUJBQUssRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7S0FDN0M7SUFDRCxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sSUFBQSx1QkFBSyxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBO0lBQ2xELElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBQSxxQkFBRyxFQUFDLEdBQUcsUUFBUSxzQ0FBc0MsQ0FBQyxDQUFBO0tBQ3ZEO1NBQU07UUFDTCxJQUFBLHFCQUFHLEVBQUMsR0FBRyxRQUFRLG9DQUFvQyxDQUFDLENBQUE7S0FDckQ7SUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM3RSxNQUFNLElBQUEsNEJBQVUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQVpELDBFQVlDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsMkJBQTJCO0lBQy9DLE1BQU0sK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDcEQsQ0FBQztBQUZELGtFQUVDO0FBRU0sS0FBSyxVQUFVLGtDQUFrQztJQUN0RCxNQUFNLCtCQUErQixDQUFDLG1DQUFtQyxDQUFDLENBQUE7QUFDNUUsQ0FBQztBQUZELGdGQUVDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSx1QkFBdUI7SUFDM0MsTUFBTSxJQUFBLDRCQUFVLEVBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQzdELE1BQU0sSUFBQSw0QkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUMxRCxDQUFDO0FBSEQsMERBR0MifQ==
@@ -351,7 +351,7 @@ export declare function sortDictionaryByKeyAsc(dict: StringKeyedDictionary): Str
351
351
  export declare function deleteEnvIfExists(envPath: string): Promise<void>;
352
352
  export interface FindFilesOptions {
353
353
  maxDepth: number;
354
- excludeDirectoryNames: string[];
354
+ directoryNamesToSkip: string[];
355
355
  returnForwardSlashRelativePaths: boolean;
356
356
  }
357
357
  /**
@@ -612,5 +612,15 @@ export declare function getRandomIntInclusive(min: number, max: number): number;
612
612
  * @returns `true` if the `child` path is a descendant of `parentDir`
613
613
  */
614
614
  export declare function isChildPath(parentDir: string, child: string, requireChildExists?: boolean): boolean;
615
+ /**
616
+ * Returns `true` if `value` is a string that contains only digits (regex used: `/^\d+$/`).
617
+ */
618
+ export declare function hasOnlyDigits(value: string): boolean;
619
+ /**
620
+ * @param input A string to search.
621
+ * @param substring The substring to find indexes for.
622
+ * @returns An array of numbers representing the indexes for the substring within the input string.
623
+ */
624
+ export declare function findAllIndexes(input: string, substring: string): number[];
615
625
  export {};
616
626
  //# sourceMappingURL=generalUtils.d.ts.map