@rushstack/rush-http-build-cache-plugin 5.97.1 → 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 (53) 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/{9d/commons_9d513d1d600f9112f73547da918dcbb7 → 2e/commons_2e52897dfe4222d991674613f5b35882} +356 -314
  3. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/34/PrefixProxyTerminalProvider_34b4603b9c4455de1c3cc05820149fdd +65 -0
  4. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{53/index_53d9d5a344c3984994c801733764f503 → 46/index_46761981528d09d1a0e438f06cd2c548} +6 -2
  5. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{06/ConfigurationFile_06d7f35feb0bd944d9b9a2a4d9e112c8 → 57/ConfigurationFile_57c950e8ef4673e11bff94304a50823c} +10 -4
  6. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{68/rushlib_68c59fa059ba441c9c6883bcfed4a8d2 → 69/rushlib_695f6e29167e91482e2906a8d09b3a5a} +17 -6
  7. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893 +116 -0
  8. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893.map +1 -0
  9. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be +1551 -0
  10. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be.map +1 -0
  11. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ba/TerminalWritable_ba71b4b7bfe6a26c85f4fd0245057a0a +54 -0
  12. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{5d/Text_5da85b5db9a2f06bbe29cdcd91e6fbca → df/Text_df57ddd200e4237e617fc183dcb5fe67} +7 -1
  13. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4 +4668 -0
  14. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4.map +1 -0
  15. package/.heft/build-cache/jest-cache/perf-cache-bae913f9b9aa720eb4deeae0a60a4b27-da39a3ee5e6b4b0d3255bfef95601890 +1 -1
  16. package/.rush/temp/operation/_phase_build/state.json +1 -1
  17. package/.rush/temp/operation/_phase_test/all.log +14 -14
  18. package/.rush/temp/operation/_phase_test/state.json +1 -1
  19. package/.rush/temp/package-deps__phase_build.json +3 -3
  20. package/.rush/temp/package-deps__phase_test.json +3 -3
  21. package/.rush/temp/{rushstack+rush-http-build-cache-plugin-_phase_build-646439b80a2010050f5b4b8a916e50afae04c3ab.log → rushstack+rush-http-build-cache-plugin-_phase_build-08118e08afc6d454e5623f20498fd64b5e3e9051.log} +2 -2
  22. package/lib/HttpBuildCacheProvider.d.ts +2 -0
  23. package/lib/HttpBuildCacheProvider.d.ts.map +1 -1
  24. package/lib/HttpBuildCacheProvider.js +26 -7
  25. package/lib/HttpBuildCacheProvider.js.map +1 -1
  26. package/lib/RushHttpBuildCachePlugin.d.ts.map +1 -1
  27. package/lib/RushHttpBuildCachePlugin.js +28 -4
  28. package/lib/RushHttpBuildCachePlugin.js.map +1 -1
  29. package/lib/test/HttpBuildCacheProvider.test.d.ts.map +1 -0
  30. package/lib/{HttpBuildCacheProvider.test.js → test/HttpBuildCacheProvider.test.js} +46 -3
  31. package/lib/test/HttpBuildCacheProvider.test.js.map +1 -0
  32. package/package.json +6 -6
  33. package/rush-logs/rush-http-build-cache-plugin._phase_test.log +14 -14
  34. package/src/HttpBuildCacheProvider.ts +36 -7
  35. package/src/RushHttpBuildCachePlugin.ts +23 -28
  36. package/src/test/HttpBuildCacheProvider.test.ts +115 -0
  37. package/temp/coverage/clover.xml +117 -109
  38. package/temp/coverage/coverage-final.json +2 -2
  39. package/temp/coverage/lcov-report/HttpBuildCacheProvider.ts.html +166 -79
  40. package/temp/coverage/lcov-report/RushHttpBuildCachePlugin.ts.html +29 -44
  41. package/temp/coverage/lcov-report/index.html +24 -24
  42. package/temp/coverage/lcov-report/index.ts.html +1 -1
  43. package/temp/coverage/lcov.info +236 -218
  44. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941 +0 -4367
  45. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941.map +0 -1
  46. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247 +0 -362
  47. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247.map +0 -1
  48. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa +0 -73
  49. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa.map +0 -1
  50. package/lib/HttpBuildCacheProvider.test.d.ts.map +0 -1
  51. package/lib/HttpBuildCacheProvider.test.js.map +0 -1
  52. package/src/HttpBuildCacheProvider.test.ts +0 -58
  53. /package/lib/{HttpBuildCacheProvider.test.d.ts → test/HttpBuildCacheProvider.test.d.ts} +0 -0
@@ -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
- adb811159db27c5599c1a613d0999adf
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.AsyncQueue = 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
  *
@@ -80,6 +80,10 @@ var ConsoleTerminalProvider_1 = require("./Terminal/ConsoleTerminalProvider");
80
80
  Object.defineProperty(exports, "ConsoleTerminalProvider", { enumerable: true, get: function () { return ConsoleTerminalProvider_1.ConsoleTerminalProvider; } });
81
81
  var StringBufferTerminalProvider_1 = require("./Terminal/StringBufferTerminalProvider");
82
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; } });
83
87
  var TypeUuid_1 = require("./TypeUuid");
84
88
  Object.defineProperty(exports, "TypeUuid", { enumerable: true, get: function () { return TypeUuid_1.TypeUuid; } });
85
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
- a6ae40f8d161627615c097829cdb31c8
1
+ 565b92bf0e1785f75decd07ff6d5ccea
2
2
  /******/ (() => { // webpackBootstrap
3
3
  /******/ var __webpack_modules__ = ({
4
4
 
@@ -56,14 +56,14 @@ module.exports = require("@rushstack/package-deps-hash");
56
56
 
57
57
  /***/ }),
58
58
 
59
- /***/ 484344:
60
- /*!********************************************************************!*\
61
- !*** external "@rushstack/package-extractor/lib/PackageExtractor" ***!
62
- \********************************************************************/
59
+ /***/ 297839:
60
+ /*!***********************************************!*\
61
+ !*** external "@rushstack/package-extractor" ***!
62
+ \***********************************************/
63
63
  /***/ ((module) => {
64
64
 
65
65
  "use strict";
66
- module.exports = require("@rushstack/package-extractor/lib/PackageExtractor");
66
+ module.exports = require("@rushstack/package-extractor");
67
67
 
68
68
  /***/ }),
69
69
 
@@ -265,6 +265,17 @@ module.exports = require("inquirer/lib/utils/paginator");
265
265
 
266
266
  /***/ }),
267
267
 
268
+ /***/ 546517:
269
+ /*!*************************!*\
270
+ !*** external "lodash" ***!
271
+ \*************************/
272
+ /***/ ((module) => {
273
+
274
+ "use strict";
275
+ module.exports = require("lodash");
276
+
277
+ /***/ }),
278
+
268
279
  /***/ 374809:
269
280
  /*!*****************************!*\
270
281
  !*** external "node-fetch" ***!
@@ -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"]}