@rushstack/rush-http-build-cache-plugin 5.97.1-pr3481.18 → 5.98.0

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 (60) hide show
  1. package/.heft/build-cache/jest-cache/haste-map-bae913f9b9aa720eb4deeae0a60a4b27-22ae7f4ce9de4306889d8c05e5cc39b9-f6b1af01a3130057bdfe3d86807211f9 +0 -0
  2. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{42/Import_42731f0220476b7d949a2d8f3a6f3333 → 12/Import_12af6d2ca109ffba883fc5079062e0e8} +157 -14
  3. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{c7/commons_c77bee95093c1098b4a591f2dadf398d → 2e/commons_2e52897dfe4222d991674613f5b35882} +1007 -2581
  4. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{26/package_263c59db6933ba9581588638fb19da5c → 2f/package_2f923ac6ad9bbd4966f8472750ef7770} +2 -2
  5. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/34/PrefixProxyTerminalProvider_34b4603b9c4455de1c3cc05820149fdd +65 -0
  6. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{58/index_58c57a8f2a96bf6fdf5db35a2e44baa7 → 46/index_46761981528d09d1a0e438f06cd2c548} +7 -2
  7. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{06/ConfigurationFile_06d7f35feb0bd944d9b9a2a4d9e112c8 → 57/ConfigurationFile_57c950e8ef4673e11bff94304a50823c} +10 -4
  8. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{fa/rushlib_fa830331d24a41292b5cb91040384188 → 69/rushlib_695f6e29167e91482e2906a8d09b3a5a} +17 -28
  9. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893 +116 -0
  10. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893.map +1 -0
  11. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be +1551 -0
  12. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be.map +1 -0
  13. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{c2/Async_c2ea5cc2edc0a460dcf394ef8277e88e → b4/Async_b43c9d64ab6a035dbce65b9f1a28e166} +78 -2
  14. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ba/TerminalWritable_ba71b4b7bfe6a26c85f4fd0245057a0a +54 -0
  15. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ce/index_ce3464019fb882539ee9a6f3e36e615a +2 -2
  16. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ce/index_ce3464019fb882539ee9a6f3e36e615a.map +1 -1
  17. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{5d/Text_5da85b5db9a2f06bbe29cdcd91e6fbca → df/Text_df57ddd200e4237e617fc183dcb5fe67} +7 -1
  18. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941 → ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4} +1210 -909
  19. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4.map +1 -0
  20. package/.heft/build-cache/jest-cache/perf-cache-bae913f9b9aa720eb4deeae0a60a4b27-da39a3ee5e6b4b0d3255bfef95601890 +1 -1
  21. package/.rush/temp/operation/_phase_build/state.json +1 -1
  22. package/.rush/temp/operation/_phase_test/all.log +29 -0
  23. package/.rush/temp/operation/_phase_test/state.json +1 -1
  24. package/.rush/temp/package-deps__phase_build.json +5 -5
  25. package/.rush/temp/package-deps__phase_test.json +5 -5
  26. package/.rush/temp/rushstack+rush-http-build-cache-plugin-_phase_build-08118e08afc6d454e5623f20498fd64b5e3e9051.log +10 -0
  27. package/.rush/temp/shrinkwrap-deps.json +10 -10
  28. package/lib/HttpBuildCacheProvider.d.ts +2 -0
  29. package/lib/HttpBuildCacheProvider.d.ts.map +1 -1
  30. package/lib/HttpBuildCacheProvider.js +26 -7
  31. package/lib/HttpBuildCacheProvider.js.map +1 -1
  32. package/lib/RushHttpBuildCachePlugin.d.ts.map +1 -1
  33. package/lib/RushHttpBuildCachePlugin.js +28 -4
  34. package/lib/RushHttpBuildCachePlugin.js.map +1 -1
  35. package/lib/test/HttpBuildCacheProvider.test.d.ts.map +1 -0
  36. package/lib/{HttpBuildCacheProvider.test.js → test/HttpBuildCacheProvider.test.js} +46 -3
  37. package/lib/test/HttpBuildCacheProvider.test.js.map +1 -0
  38. package/package.json +6 -6
  39. package/rush-logs/rush-http-build-cache-plugin._phase_build.log +4 -23
  40. package/rush-logs/rush-http-build-cache-plugin._phase_test.log +16 -16
  41. package/src/HttpBuildCacheProvider.ts +36 -7
  42. package/src/RushHttpBuildCachePlugin.ts +23 -28
  43. package/src/test/HttpBuildCacheProvider.test.ts +115 -0
  44. package/temp/coverage/clover.xml +117 -109
  45. package/temp/coverage/coverage-final.json +2 -2
  46. package/temp/coverage/lcov-report/HttpBuildCacheProvider.ts.html +166 -79
  47. package/temp/coverage/lcov-report/RushHttpBuildCachePlugin.ts.html +29 -44
  48. package/temp/coverage/lcov-report/index.html +24 -24
  49. package/temp/coverage/lcov-report/index.ts.html +1 -1
  50. package/temp/coverage/lcov.info +236 -218
  51. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941.map +0 -1
  52. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247 +0 -362
  53. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247.map +0 -1
  54. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa +0 -73
  55. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa.map +0 -1
  56. package/.rush/temp/rushstack+rush-http-build-cache-plugin-_phase_build-5e3cfa01506c2ac77af487ee9732b935a5bbe122.log +0 -27
  57. package/lib/HttpBuildCacheProvider.test.d.ts.map +0 -1
  58. package/lib/HttpBuildCacheProvider.test.js.map +0 -1
  59. package/src/HttpBuildCacheProvider.test.ts +0 -58
  60. /package/lib/{HttpBuildCacheProvider.test.d.ts → test/HttpBuildCacheProvider.test.d.ts} +0 -0
@@ -1,7 +1,7 @@
1
- 8a7c57b19616090b7a25ecded908799c
1
+ d7ca309fcdee7a342a3c0286b2254732
2
2
  {
3
3
  "name": "@rushstack/rush-http-build-cache-plugin",
4
- "version": "5.97.1-pr3481.18",
4
+ "version": "5.97.1",
5
5
  "description": "Rush plugin for generic HTTP cloud build cache",
6
6
  "repository": {
7
7
  "type": "git",
@@ -0,0 +1,65 @@
1
+ e6c5bed1f7986cd8ce6fbe3127c3695a
2
+ "use strict";
3
+ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
4
+ // See LICENSE in the project root for license information.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PrefixProxyTerminalProvider = void 0;
7
+ const Text_1 = require("../Text");
8
+ /**
9
+ * Wraps an existing {@link ITerminalProvider} that prefixes each line of output with a specified
10
+ * prefix string.
11
+ *
12
+ * @beta
13
+ */
14
+ class PrefixProxyTerminalProvider {
15
+ constructor(options) {
16
+ const { terminalProvider } = options;
17
+ this._parentTerminalProvider = terminalProvider;
18
+ if (options.prefix !== undefined) {
19
+ const { prefix } = options;
20
+ this._getPrefix = () => prefix;
21
+ }
22
+ else {
23
+ const { getPrefix } = options;
24
+ this._getPrefix = getPrefix;
25
+ }
26
+ this._isOnNewline = true;
27
+ // eslint-disable-next-line @rushstack/security/no-unsafe-regexp
28
+ this._newlineRegex = new RegExp(`${Text_1.Text.escapeRegExp(terminalProvider.eolCharacter)}|\\n`, 'g');
29
+ }
30
+ /** @override */
31
+ get supportsColor() {
32
+ return this._parentTerminalProvider.supportsColor;
33
+ }
34
+ /** @override */
35
+ get eolCharacter() {
36
+ return this._parentTerminalProvider.eolCharacter;
37
+ }
38
+ /** @override */
39
+ write(data, severity) {
40
+ // We need to track newlines to ensure that the prefix is added to each line
41
+ let currentIndex = 0;
42
+ // eslint-disable-next-line @rushstack/no-new-null
43
+ let newlineMatch;
44
+ while ((newlineMatch = this._newlineRegex.exec(data))) {
45
+ // Extract the line, add the prefix, and write it out with the newline
46
+ const newlineIndex = newlineMatch.index;
47
+ const newIndex = newlineIndex + newlineMatch[0].length;
48
+ const prefix = this._isOnNewline ? this._getPrefix() : '';
49
+ const dataToWrite = `${prefix}${data.substring(currentIndex, newIndex)}`;
50
+ this._parentTerminalProvider.write(dataToWrite, severity);
51
+ // Update the currentIndex to start the search from the char after the newline
52
+ currentIndex = newIndex;
53
+ this._isOnNewline = true;
54
+ }
55
+ // The remaining data is not postfixed by a newline, so write out the data and set _isNewline to false
56
+ const remainingData = data.substring(currentIndex);
57
+ if (remainingData.length) {
58
+ const prefix = this._isOnNewline ? this._getPrefix() : '';
59
+ this._parentTerminalProvider.write(`${prefix}${remainingData}`, severity);
60
+ this._isOnNewline = false;
61
+ }
62
+ }
63
+ }
64
+ exports.PrefixProxyTerminalProvider = PrefixProxyTerminalProvider;
65
+ //# sourceMappingURL=PrefixProxyTerminalProvider.js.map
@@ -1,9 +1,9 @@
1
- 3fc85697379a38faf34a7605e1fb101f
1
+ f61eba7a5a2c575630864aa4cbd126af
2
2
  "use strict";
3
3
  // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
4
4
  // See LICENSE in the project root for license information.
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.TypeUuid = exports.StringBufferTerminalProvider = exports.ConsoleTerminalProvider = exports.TerminalProviderSeverity = exports.TextAttribute = exports.ColorValue = exports.Colors = exports.Terminal = exports.SubprocessTerminator = exports.StringBuilder = exports.LegacyAdapters = exports.FileWriter = exports.FileSystem = exports.AlreadyExistsBehavior = exports.Sort = exports.NewlineKind = exports.Text = exports.Encoding = exports.Path = exports.PackageNameParser = exports.PackageName = exports.PackageJsonLookup = exports.ProtectableMap = exports.PosixModeBits = exports.MapExtensions = exports.LockFile = exports.JsonSchema = exports.JsonFile = exports.JsonSyntax = exports.InternalError = exports.Import = exports.FileError = exports.Executable = exports.EnvironmentMap = exports.Enum = exports.FolderConstants = exports.FileConstants = exports.Async = exports.AnsiEscape = exports.AlreadyReportedError = void 0;
6
+ exports.TypeUuid = exports.TerminalWritable = exports.PrefixProxyTerminalProvider = exports.StringBufferTerminalProvider = exports.ConsoleTerminalProvider = exports.TerminalProviderSeverity = exports.TextAttribute = exports.ColorValue = exports.Colors = exports.Terminal = exports.SubprocessTerminator = exports.StringBuilder = exports.LegacyAdapters = exports.FileWriter = exports.FileSystem = exports.AlreadyExistsBehavior = exports.Sort = exports.NewlineKind = exports.Text = exports.Encoding = exports.Path = exports.PackageNameParser = exports.PackageName = exports.PackageJsonLookup = exports.ProtectableMap = exports.PosixModeBits = exports.MapExtensions = exports.LockFile = exports.JsonSchema = exports.JsonFile = exports.JsonSyntax = exports.InternalError = exports.Import = exports.FileError = exports.Executable = exports.EnvironmentMap = exports.Enum = exports.FolderConstants = exports.FileConstants = exports.AsyncQueue = exports.Async = exports.AnsiEscape = exports.AlreadyReportedError = void 0;
7
7
  /**
8
8
  * Core libraries that every NodeJS toolchain project should use.
9
9
  *
@@ -15,6 +15,7 @@ var AnsiEscape_1 = require("./Terminal/AnsiEscape");
15
15
  Object.defineProperty(exports, "AnsiEscape", { enumerable: true, get: function () { return AnsiEscape_1.AnsiEscape; } });
16
16
  var Async_1 = require("./Async");
17
17
  Object.defineProperty(exports, "Async", { enumerable: true, get: function () { return Async_1.Async; } });
18
+ Object.defineProperty(exports, "AsyncQueue", { enumerable: true, get: function () { return Async_1.AsyncQueue; } });
18
19
  var Constants_1 = require("./Constants");
19
20
  Object.defineProperty(exports, "FileConstants", { enumerable: true, get: function () { return Constants_1.FileConstants; } });
20
21
  Object.defineProperty(exports, "FolderConstants", { enumerable: true, get: function () { return Constants_1.FolderConstants; } });
@@ -79,6 +80,10 @@ var ConsoleTerminalProvider_1 = require("./Terminal/ConsoleTerminalProvider");
79
80
  Object.defineProperty(exports, "ConsoleTerminalProvider", { enumerable: true, get: function () { return ConsoleTerminalProvider_1.ConsoleTerminalProvider; } });
80
81
  var StringBufferTerminalProvider_1 = require("./Terminal/StringBufferTerminalProvider");
81
82
  Object.defineProperty(exports, "StringBufferTerminalProvider", { enumerable: true, get: function () { return StringBufferTerminalProvider_1.StringBufferTerminalProvider; } });
83
+ var PrefixProxyTerminalProvider_1 = require("./Terminal/PrefixProxyTerminalProvider");
84
+ Object.defineProperty(exports, "PrefixProxyTerminalProvider", { enumerable: true, get: function () { return PrefixProxyTerminalProvider_1.PrefixProxyTerminalProvider; } });
85
+ var TerminalWritable_1 = require("./Terminal/TerminalWritable");
86
+ Object.defineProperty(exports, "TerminalWritable", { enumerable: true, get: function () { return TerminalWritable_1.TerminalWritable; } });
82
87
  var TypeUuid_1 = require("./TypeUuid");
83
88
  Object.defineProperty(exports, "TypeUuid", { enumerable: true, get: function () { return TypeUuid_1.TypeUuid; } });
84
89
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- 28c22609423832de2833ef481b973472
1
+ b87edf65543b606c1d04096508b93380
2
2
  "use strict";
3
3
  // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
4
4
  // See LICENSE in the project root for license information.
@@ -217,7 +217,12 @@ class ConfigurationFile {
217
217
  path: jsonPath,
218
218
  json: configurationJson,
219
219
  callback: (payload, payloadType, fullPayload) => {
220
- const resolvedPath = this._resolvePathProperty(resolvedConfigurationFilePath, fullPayload.path, fullPayload.value, metadata);
220
+ const resolvedPath = this._resolvePathProperty({
221
+ propertyName: fullPayload.path,
222
+ propertyValue: fullPayload.value,
223
+ configurationFilePath: resolvedConfigurationFilePath,
224
+ configurationFile: configurationJson
225
+ }, metadata);
221
226
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
227
  fullPayload.parent[fullPayload.parentProperty] = resolvedPath;
223
228
  },
@@ -298,7 +303,8 @@ class ConfigurationFile {
298
303
  };
299
304
  }
300
305
  }
301
- _resolvePathProperty(configurationFilePath, propertyName, propertyValue, metadata) {
306
+ _resolvePathProperty(resolverOptions, metadata) {
307
+ const { propertyValue, configurationFilePath } = resolverOptions;
302
308
  const resolutionMethod = metadata.pathResolutionMethod;
303
309
  if (resolutionMethod === undefined) {
304
310
  return propertyValue;
@@ -326,7 +332,7 @@ class ConfigurationFile {
326
332
  throw new Error(`The pathResolutionMethod was set to "${PathResolutionMethod[resolutionMethod]}", but a custom ` +
327
333
  'resolver was not provided.');
328
334
  }
329
- return metadata.customResolver(configurationFilePath, propertyName, propertyValue);
335
+ return metadata.customResolver(resolverOptions);
330
336
  }
331
337
  default: {
332
338
  throw new Error(`Unsupported PathResolutionMethod: ${PathResolutionMethod[resolutionMethod]} (${resolutionMethod})`);
@@ -1,4 +1,4 @@
1
- 473b627574fe4fcbad35df266fec1453
1
+ 565b92bf0e1785f75decd07ff6d5ccea
2
2
  /******/ (() => { // webpackBootstrap
3
3
  /******/ var __webpack_modules__ = ({
4
4
 
@@ -56,6 +56,17 @@ module.exports = require("@rushstack/package-deps-hash");
56
56
 
57
57
  /***/ }),
58
58
 
59
+ /***/ 297839:
60
+ /*!***********************************************!*\
61
+ !*** external "@rushstack/package-extractor" ***!
62
+ \***********************************************/
63
+ /***/ ((module) => {
64
+
65
+ "use strict";
66
+ module.exports = require("@rushstack/package-extractor");
67
+
68
+ /***/ }),
69
+
59
70
  /***/ 192492:
60
71
  /*!*****************************************!*\
61
72
  !*** external "@rushstack/rig-package" ***!
@@ -254,14 +265,14 @@ module.exports = require("inquirer/lib/utils/paginator");
254
265
 
255
266
  /***/ }),
256
267
 
257
- /***/ 609227:
258
- /*!************************!*\
259
- !*** external "jszip" ***!
260
- \************************/
268
+ /***/ 546517:
269
+ /*!*************************!*\
270
+ !*** external "lodash" ***!
271
+ \*************************/
261
272
  /***/ ((module) => {
262
273
 
263
274
  "use strict";
264
- module.exports = require("jszip");
275
+ module.exports = require("lodash");
265
276
 
266
277
  /***/ }),
267
278
 
@@ -298,17 +309,6 @@ module.exports = require("npm-package-arg");
298
309
 
299
310
  /***/ }),
300
311
 
301
- /***/ 172644:
302
- /*!*******************************!*\
303
- !*** external "npm-packlist" ***!
304
- \*******************************/
305
- /***/ ((module) => {
306
-
307
- "use strict";
308
- module.exports = require("npm-packlist");
309
-
310
- /***/ }),
311
-
312
312
  /***/ 5745:
313
313
  /*!************************************!*\
314
314
  !*** external "read-package-tree" ***!
@@ -320,17 +320,6 @@ module.exports = require("read-package-tree");
320
320
 
321
321
  /***/ }),
322
322
 
323
- /***/ 288048:
324
- /*!**************************!*\
325
- !*** external "resolve" ***!
326
- \**************************/
327
- /***/ ((module) => {
328
-
329
- "use strict";
330
- module.exports = require("resolve");
331
-
332
- /***/ }),
333
-
334
323
  /***/ 315863:
335
324
  /*!*********************************!*\
336
325
  !*** external "rxjs/operators" ***!
@@ -0,0 +1,116 @@
1
+ 0519f8790a936bb8ba38492165726378
2
+ "use strict";
3
+ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
4
+ // See LICENSE in the project root for license information.
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ jest.mock('node-fetch', function () {
30
+ return Object.assign(jest.fn(), jest.requireActual('node-fetch'));
31
+ });
32
+ const node_fetch_1 = __importStar(require("node-fetch"));
33
+ const rush_sdk_1 = require("@rushstack/rush-sdk");
34
+ const node_core_library_1 = require("@rushstack/node-core-library");
35
+ const HttpBuildCacheProvider_1 = require("../HttpBuildCacheProvider");
36
+ const EXAMPLE_OPTIONS = {
37
+ url: 'https://buildcache.example.acme.com',
38
+ tokenHandler: {
39
+ exec: 'node',
40
+ args: ['tokenHandler.js']
41
+ },
42
+ uploadMethod: 'POST',
43
+ isCacheWriteAllowed: false,
44
+ pluginName: 'example-plugin',
45
+ rushProjectRoot: '/repo',
46
+ minHttpRetryDelayMs: 1
47
+ };
48
+ describe('HttpBuildCacheProvider', () => {
49
+ let terminalBuffer;
50
+ let terminal;
51
+ beforeEach(() => {
52
+ terminalBuffer = new node_core_library_1.StringBufferTerminalProvider();
53
+ terminal = new node_core_library_1.Terminal(terminalBuffer);
54
+ });
55
+ describe('tryGetCacheEntryBufferByIdAsync', () => {
56
+ it('prints warning if read credentials are not available', async () => {
57
+ jest.spyOn(rush_sdk_1.EnvironmentConfiguration, 'buildCacheCredential', 'get').mockReturnValue(undefined);
58
+ const session = {};
59
+ const provider = new HttpBuildCacheProvider_1.HttpBuildCacheProvider(EXAMPLE_OPTIONS, session);
60
+ mocked(node_fetch_1.default).mockResolvedValue(new node_fetch_1.Response('Unauthorized', {
61
+ status: 401,
62
+ statusText: 'Unauthorized'
63
+ }));
64
+ const result = await provider.tryGetCacheEntryBufferByIdAsync(terminal, 'some-key');
65
+ expect(result).toBe(undefined);
66
+ expect(node_fetch_1.default).toHaveBeenCalledTimes(1);
67
+ expect(node_fetch_1.default).toHaveBeenNthCalledWith(1, 'https://buildcache.example.acme.com/some-key', {
68
+ body: undefined,
69
+ headers: {},
70
+ method: 'GET',
71
+ redirect: 'follow'
72
+ });
73
+ expect(terminalBuffer.getWarningOutput()).toMatchInlineSnapshot(`"Error getting cache entry: Error: Credentials for https://buildcache.example.acme.com/ have not been provided.[n]In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.[n][n]For local developers, run:[n][n] rush update-cloud-credentials --interactive[n][n]"`);
74
+ });
75
+ it('attempts up to 3 times to download a cache entry', async () => {
76
+ jest.spyOn(rush_sdk_1.EnvironmentConfiguration, 'buildCacheCredential', 'get').mockReturnValue(undefined);
77
+ const session = {};
78
+ const provider = new HttpBuildCacheProvider_1.HttpBuildCacheProvider(EXAMPLE_OPTIONS, session);
79
+ mocked(node_fetch_1.default).mockResolvedValueOnce(new node_fetch_1.Response('InternalServiceError', {
80
+ status: 500,
81
+ statusText: 'InternalServiceError'
82
+ }));
83
+ mocked(node_fetch_1.default).mockResolvedValueOnce(new node_fetch_1.Response('ServiceUnavailable', {
84
+ status: 503,
85
+ statusText: 'ServiceUnavailable'
86
+ }));
87
+ mocked(node_fetch_1.default).mockResolvedValueOnce(new node_fetch_1.Response('BadGateway', {
88
+ status: 504,
89
+ statusText: 'BadGateway'
90
+ }));
91
+ const result = await provider.tryGetCacheEntryBufferByIdAsync(terminal, 'some-key');
92
+ expect(result).toBe(undefined);
93
+ expect(node_fetch_1.default).toHaveBeenCalledTimes(3);
94
+ expect(node_fetch_1.default).toHaveBeenNthCalledWith(1, 'https://buildcache.example.acme.com/some-key', {
95
+ body: undefined,
96
+ headers: {},
97
+ method: 'GET',
98
+ redirect: 'follow'
99
+ });
100
+ expect(node_fetch_1.default).toHaveBeenNthCalledWith(2, 'https://buildcache.example.acme.com/some-key', {
101
+ body: undefined,
102
+ headers: {},
103
+ method: 'GET',
104
+ redirect: 'follow'
105
+ });
106
+ expect(node_fetch_1.default).toHaveBeenNthCalledWith(3, 'https://buildcache.example.acme.com/some-key', {
107
+ body: undefined,
108
+ headers: {},
109
+ method: 'GET',
110
+ redirect: 'follow'
111
+ });
112
+ expect(terminalBuffer.getWarningOutput()).toMatchInlineSnapshot(`"Could not get cache entry: HTTP 504: BadGateway[n]"`);
113
+ });
114
+ });
115
+ });
116
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL2hvbWUvdnN0cy93b3JrLzEvcy9ydXNoLXBsdWdpbnMvcnVzaC1odHRwLWJ1aWxkLWNhY2hlLXBsdWdpbi9zcmMvdGVzdC9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyLnRlc3QudHMiLCJzb3VyY2VzIjpbIi9ob21lL3ZzdHMvd29yay8xL3MvcnVzaC1wbHVnaW5zL3J1c2gtaHR0cC1idWlsZC1jYWNoZS1wbHVnaW4vc3JjL3Rlc3QvSHR0cEJ1aWxkQ2FjaGVQcm92aWRlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0RkFBNEY7QUFDNUYsMkRBQTJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO0lBQ3RCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyxDQUFDO0FBRUgseURBQTZDO0FBQzdDLGtEQUE0RTtBQUM1RSxvRUFBc0Y7QUFFdEYsc0VBQW1FO0FBRW5FLE1BQU0sZUFBZSxHQUFHO0lBQ3RCLEdBQUcsRUFBRSxxQ0FBcUM7SUFDMUMsWUFBWSxFQUFFO1FBQ1osSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztLQUMxQjtJQUNELFlBQVksRUFBRSxNQUFNO0lBQ3BCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixlQUFlLEVBQUUsT0FBTztJQUN4QixtQkFBbUIsRUFBRSxDQUFDO0NBQ3ZCLENBQUM7QUFFRixRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLElBQUksY0FBNEMsQ0FBQztJQUNqRCxJQUFJLFFBQW1CLENBQUM7SUFFeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGNBQWMsR0FBRyxJQUFJLGdEQUE0QixFQUFFLENBQUM7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LDhDQUE4QyxFQUFFO2dCQUN2RixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsRUFBRTtnQkFDWCxNQUFNLEVBQUUsS0FBSztnQkFDYixRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsb0JBQUssQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSw4Q0FBOEMsRUFBRTtnQkFDdkYsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLG9CQUFLLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsOENBQThDLEVBQUU7Z0JBQ3ZGLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE1BQU0sRUFBRSxLQUFLO2dCQUNiLFFBQVEsRUFBRSxRQUFRO2FBQ25CLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixDQUM3RCxzREFBc0QsQ0FDdkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5qZXN0Lm1vY2soJ25vZGUtZmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGplc3QuZm4oKSwgamVzdC5yZXF1aXJlQWN0dWFsKCdub2RlLWZldGNoJykpO1xufSk7XG5cbmltcG9ydCBmZXRjaCwgeyBSZXNwb25zZSB9IGZyb20gJ25vZGUtZmV0Y2gnO1xuaW1wb3J0IHsgUnVzaFNlc3Npb24sIEVudmlyb25tZW50Q29uZmlndXJhdGlvbiB9IGZyb20gJ0BydXNoc3RhY2svcnVzaC1zZGsnO1xuaW1wb3J0IHsgU3RyaW5nQnVmZmVyVGVybWluYWxQcm92aWRlciwgVGVybWluYWwgfSBmcm9tICdAcnVzaHN0YWNrL25vZGUtY29yZS1saWJyYXJ5JztcblxuaW1wb3J0IHsgSHR0cEJ1aWxkQ2FjaGVQcm92aWRlciB9IGZyb20gJy4uL0h0dHBCdWlsZENhY2hlUHJvdmlkZXInO1xuXG5jb25zdCBFWEFNUExFX09QVElPTlMgPSB7XG4gIHVybDogJ2h0dHBzOi8vYnVpbGRjYWNoZS5leGFtcGxlLmFjbWUuY29tJyxcbiAgdG9rZW5IYW5kbGVyOiB7XG4gICAgZXhlYzogJ25vZGUnLFxuICAgIGFyZ3M6IFsndG9rZW5IYW5kbGVyLmpzJ11cbiAgfSxcbiAgdXBsb2FkTWV0aG9kOiAnUE9TVCcsXG4gIGlzQ2FjaGVXcml0ZUFsbG93ZWQ6IGZhbHNlLFxuICBwbHVnaW5OYW1lOiAnZXhhbXBsZS1wbHVnaW4nLFxuICBydXNoUHJvamVjdFJvb3Q6ICcvcmVwbycsXG4gIG1pbkh0dHBSZXRyeURlbGF5TXM6IDFcbn07XG5cbmRlc2NyaWJlKCdIdHRwQnVpbGRDYWNoZVByb3ZpZGVyJywgKCkgPT4ge1xuICBsZXQgdGVybWluYWxCdWZmZXI6IFN0cmluZ0J1ZmZlclRlcm1pbmFsUHJvdmlkZXI7XG4gIGxldCB0ZXJtaW5hbCE6IFRlcm1pbmFsO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRlcm1pbmFsQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlclRlcm1pbmFsUHJvdmlkZXIoKTtcbiAgICB0ZXJtaW5hbCA9IG5ldyBUZXJtaW5hbCh0ZXJtaW5hbEJ1ZmZlcik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0cnlHZXRDYWNoZUVudHJ5QnVmZmVyQnlJZEFzeW5jJywgKCkgPT4ge1xuICAgIGl0KCdwcmludHMgd2FybmluZyBpZiByZWFkIGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgamVzdC5zcHlPbihFbnZpcm9ubWVudENvbmZpZ3VyYXRpb24sICdidWlsZENhY2hlQ3JlZGVudGlhbCcsICdnZXQnKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKTtcblxuICAgICAgY29uc3Qgc2Vzc2lvbjogUnVzaFNlc3Npb24gPSB7fSBhcyBSdXNoU2Vzc2lvbjtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IEh0dHBCdWlsZENhY2hlUHJvdmlkZXIoRVhBTVBMRV9PUFRJT05TLCBzZXNzaW9uKTtcblxuICAgICAgbW9ja2VkKGZldGNoKS5tb2NrUmVzb2x2ZWRWYWx1ZShcbiAgICAgICAgbmV3IFJlc3BvbnNlKCdVbmF1dGhvcml6ZWQnLCB7XG4gICAgICAgICAgc3RhdHVzOiA0MDEsXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ1VuYXV0aG9yaXplZCdcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnRyeUdldENhY2hlRW50cnlCdWZmZXJCeUlkQXN5bmModGVybWluYWwsICdzb21lLWtleScpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KGZldGNoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3QoZmV0Y2gpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKDEsICdodHRwczovL2J1aWxkY2FjaGUuZXhhbXBsZS5hY21lLmNvbS9zb21lLWtleScsIHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgcmVkaXJlY3Q6ICdmb2xsb3cnXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdCh0ZXJtaW5hbEJ1ZmZlci5nZXRXYXJuaW5nT3V0cHV0KCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgICAgYFwiRXJyb3IgZ2V0dGluZyBjYWNoZSBlbnRyeTogRXJyb3I6IENyZWRlbnRpYWxzIGZvciBodHRwczovL2J1aWxkY2FjaGUuZXhhbXBsZS5hY21lLmNvbS8gaGF2ZSBub3QgYmVlbiBwcm92aWRlZC5bbl1JbiBDSSwgdmVyaWZ5IHRoYXQgUlVTSF9CVUlMRF9DQUNIRV9DUkVERU5USUFMIGNvbnRhaW5zIGEgdmFsaWQgQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUuW25dW25dRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpbbl1bbl0gICAgcnVzaCB1cGRhdGUtY2xvdWQtY3JlZGVudGlhbHMgLS1pbnRlcmFjdGl2ZVtuXVtuXVwiYFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdhdHRlbXB0cyB1cCB0byAzIHRpbWVzIHRvIGRvd25sb2FkIGEgY2FjaGUgZW50cnknLCBhc3luYyAoKSA9PiB7XG4gICAgICBqZXN0LnNweU9uKEVudmlyb25tZW50Q29uZmlndXJhdGlvbiwgJ2J1aWxkQ2FjaGVDcmVkZW50aWFsJywgJ2dldCcpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpO1xuXG4gICAgICBjb25zdCBzZXNzaW9uOiBSdXNoU2Vzc2lvbiA9IHt9IGFzIFJ1c2hTZXNzaW9uO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgSHR0cEJ1aWxkQ2FjaGVQcm92aWRlcihFWEFNUExFX09QVElPTlMsIHNlc3Npb24pO1xuXG4gICAgICBtb2NrZWQoZmV0Y2gpLm1vY2tSZXNvbHZlZFZhbHVlT25jZShcbiAgICAgICAgbmV3IFJlc3BvbnNlKCdJbnRlcm5hbFNlcnZpY2VFcnJvcicsIHtcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnSW50ZXJuYWxTZXJ2aWNlRXJyb3InXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgbW9ja2VkKGZldGNoKS5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoXG4gICAgICAgIG5ldyBSZXNwb25zZSgnU2VydmljZVVuYXZhaWxhYmxlJywge1xuICAgICAgICAgIHN0YXR1czogNTAzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdTZXJ2aWNlVW5hdmFpbGFibGUnXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgbW9ja2VkKGZldGNoKS5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoXG4gICAgICAgIG5ldyBSZXNwb25zZSgnQmFkR2F0ZXdheScsIHtcbiAgICAgICAgICBzdGF0dXM6IDUwNCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnQmFkR2F0ZXdheSdcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnRyeUdldENhY2hlRW50cnlCdWZmZXJCeUlkQXN5bmModGVybWluYWwsICdzb21lLWtleScpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KGZldGNoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICBleHBlY3QoZmV0Y2gpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKDEsICdodHRwczovL2J1aWxkY2FjaGUuZXhhbXBsZS5hY21lLmNvbS9zb21lLWtleScsIHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgcmVkaXJlY3Q6ICdmb2xsb3cnXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChmZXRjaCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoMiwgJ2h0dHBzOi8vYnVpbGRjYWNoZS5leGFtcGxlLmFjbWUuY29tL3NvbWUta2V5Jywge1xuICAgICAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICByZWRpcmVjdDogJ2ZvbGxvdydcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGZldGNoKS50b0hhdmVCZWVuTnRoQ2FsbGVkV2l0aCgzLCAnaHR0cHM6Ly9idWlsZGNhY2hlLmV4YW1wbGUuYWNtZS5jb20vc29tZS1rZXknLCB7XG4gICAgICAgIGJvZHk6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHJlZGlyZWN0OiAnZm9sbG93J1xuICAgICAgfSk7XG4gICAgICBleHBlY3QodGVybWluYWxCdWZmZXIuZ2V0V2FybmluZ091dHB1dCgpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICAgIGBcIkNvdWxkIG5vdCBnZXQgY2FjaGUgZW50cnk6IEhUVFAgNTA0OiBCYWRHYXRld2F5W25dXCJgXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/test/HttpBuildCacheProvider.test.ts","sources":["/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/test/HttpBuildCacheProvider.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\njest.mock('node-fetch', function () {\n return Object.assign(jest.fn(), jest.requireActual('node-fetch'));\n});\n\nimport fetch, { Response } from 'node-fetch';\nimport { RushSession, EnvironmentConfiguration } from '@rushstack/rush-sdk';\nimport { StringBufferTerminalProvider, Terminal } from '@rushstack/node-core-library';\n\nimport { HttpBuildCacheProvider } from '../HttpBuildCacheProvider';\n\nconst EXAMPLE_OPTIONS = {\n url: 'https://buildcache.example.acme.com',\n tokenHandler: {\n exec: 'node',\n args: ['tokenHandler.js']\n },\n uploadMethod: 'POST',\n isCacheWriteAllowed: false,\n pluginName: 'example-plugin',\n rushProjectRoot: '/repo',\n minHttpRetryDelayMs: 1\n};\n\ndescribe('HttpBuildCacheProvider', () => {\n let terminalBuffer: StringBufferTerminalProvider;\n let terminal!: Terminal;\n\n beforeEach(() => {\n terminalBuffer = new StringBufferTerminalProvider();\n terminal = new Terminal(terminalBuffer);\n });\n\n describe('tryGetCacheEntryBufferByIdAsync', () => {\n it('prints warning if read credentials are not available', async () => {\n jest.spyOn(EnvironmentConfiguration, 'buildCacheCredential', 'get').mockReturnValue(undefined);\n\n const session: RushSession = {} as RushSession;\n const provider = new HttpBuildCacheProvider(EXAMPLE_OPTIONS, session);\n\n mocked(fetch).mockResolvedValue(\n new Response('Unauthorized', {\n status: 401,\n statusText: 'Unauthorized'\n })\n );\n\n const result = await provider.tryGetCacheEntryBufferByIdAsync(terminal, 'some-key');\n expect(result).toBe(undefined);\n expect(fetch).toHaveBeenCalledTimes(1);\n expect(fetch).toHaveBeenNthCalledWith(1, 'https://buildcache.example.acme.com/some-key', {\n body: undefined,\n headers: {},\n method: 'GET',\n redirect: 'follow'\n });\n expect(terminalBuffer.getWarningOutput()).toMatchInlineSnapshot(\n `\"Error getting cache entry: Error: Credentials for https://buildcache.example.acme.com/ have not been provided.[n]In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.[n][n]For local developers, run:[n][n] rush update-cloud-credentials --interactive[n][n]\"`\n );\n });\n\n it('attempts up to 3 times to download a cache entry', async () => {\n jest.spyOn(EnvironmentConfiguration, 'buildCacheCredential', 'get').mockReturnValue(undefined);\n\n const session: RushSession = {} as RushSession;\n const provider = new HttpBuildCacheProvider(EXAMPLE_OPTIONS, session);\n\n mocked(fetch).mockResolvedValueOnce(\n new Response('InternalServiceError', {\n status: 500,\n statusText: 'InternalServiceError'\n })\n );\n mocked(fetch).mockResolvedValueOnce(\n new Response('ServiceUnavailable', {\n status: 503,\n statusText: 'ServiceUnavailable'\n })\n );\n mocked(fetch).mockResolvedValueOnce(\n new Response('BadGateway', {\n status: 504,\n statusText: 'BadGateway'\n })\n );\n\n const result = await provider.tryGetCacheEntryBufferByIdAsync(terminal, 'some-key');\n expect(result).toBe(undefined);\n expect(fetch).toHaveBeenCalledTimes(3);\n expect(fetch).toHaveBeenNthCalledWith(1, 'https://buildcache.example.acme.com/some-key', {\n body: undefined,\n headers: {},\n method: 'GET',\n redirect: 'follow'\n });\n expect(fetch).toHaveBeenNthCalledWith(2, 'https://buildcache.example.acme.com/some-key', {\n body: undefined,\n headers: {},\n method: 'GET',\n redirect: 'follow'\n });\n expect(fetch).toHaveBeenNthCalledWith(3, 'https://buildcache.example.acme.com/some-key', {\n body: undefined,\n headers: {},\n method: 'GET',\n redirect: 'follow'\n });\n expect(terminalBuffer.getWarningOutput()).toMatchInlineSnapshot(\n `\"Could not get cache entry: HTTP 504: BadGateway[n]\"`\n );\n });\n });\n});\n"]}