@azure/playwright 1.1.2 → 1.1.3-alpha.20260310.1

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 (168) hide show
  1. package/dist/browser/common/types.d.ts +1 -1
  2. package/dist/browser/common/types.d.ts.map +1 -1
  3. package/dist/browser/common/types.js.map +1 -1
  4. package/dist/browser/index.d.ts +1 -1
  5. package/dist/browser/index.d.ts.map +1 -1
  6. package/dist/browser/index.js.map +1 -1
  7. package/dist/browser/utils/PlaywrightServiceClient.d.ts +1 -1
  8. package/dist/browser/utils/PlaywrightServiceClient.d.ts.map +1 -1
  9. package/dist/browser/utils/PlaywrightServiceClient.js.map +1 -1
  10. package/dist/browser/utils/playwrightReporterStorageManager.d.ts.map +1 -1
  11. package/dist/browser/utils/playwrightReporterStorageManager.js.map +1 -1
  12. package/dist/browser/utils/utils.d.ts +2 -2
  13. package/dist/browser/utils/utils.d.ts.map +1 -1
  14. package/dist/browser/utils/utils.js.map +1 -1
  15. package/dist/commonjs/common/constants.js +127 -95
  16. package/dist/commonjs/common/constants.js.map +7 -1
  17. package/dist/commonjs/common/customerConfig.js +31 -14
  18. package/dist/commonjs/common/customerConfig.js.map +7 -1
  19. package/dist/commonjs/common/entraIdAccessToken.js +106 -83
  20. package/dist/commonjs/common/entraIdAccessToken.js.map +7 -1
  21. package/dist/commonjs/common/environmentVariables.js +43 -24
  22. package/dist/commonjs/common/environmentVariables.js.map +7 -1
  23. package/dist/commonjs/common/executor.js +88 -67
  24. package/dist/commonjs/common/executor.js.map +7 -1
  25. package/dist/commonjs/common/httpService.js +54 -35
  26. package/dist/commonjs/common/httpService.js.map +7 -1
  27. package/dist/commonjs/common/logger.js +28 -8
  28. package/dist/commonjs/common/logger.js.map +7 -1
  29. package/dist/commonjs/common/messages.js +189 -169
  30. package/dist/commonjs/common/messages.js.map +7 -1
  31. package/dist/commonjs/common/playwrightServiceConfig.js +113 -98
  32. package/dist/commonjs/common/playwrightServiceConfig.js.map +7 -1
  33. package/dist/commonjs/common/state.js +30 -10
  34. package/dist/commonjs/common/state.js.map +7 -1
  35. package/dist/commonjs/common/types.d.ts +1 -1
  36. package/dist/commonjs/common/types.d.ts.map +1 -1
  37. package/dist/commonjs/common/types.js +15 -5
  38. package/dist/commonjs/common/types.js.map +7 -1
  39. package/dist/commonjs/core/global/playwright-service-global-setup.js +52 -26
  40. package/dist/commonjs/core/global/playwright-service-global-setup.js.map +7 -1
  41. package/dist/commonjs/core/global/playwright-service-global-teardown.js +49 -20
  42. package/dist/commonjs/core/global/playwright-service-global-teardown.js.map +7 -1
  43. package/dist/commonjs/core/initializePlaywrightServiceTestRun.js +39 -27
  44. package/dist/commonjs/core/initializePlaywrightServiceTestRun.js.map +7 -1
  45. package/dist/commonjs/core/playwrightService.js +166 -205
  46. package/dist/commonjs/core/playwrightService.js.map +7 -1
  47. package/dist/commonjs/core/playwrightServiceEntra.js +67 -48
  48. package/dist/commonjs/core/playwrightServiceEntra.js.map +7 -1
  49. package/dist/commonjs/core/playwrightServiceUtils.d.ts +1 -1
  50. package/dist/commonjs/core/playwrightServiceUtils.d.ts.map +1 -0
  51. package/dist/commonjs/core/playwrightServiceUtils.js +44 -11
  52. package/dist/commonjs/core/playwrightServiceUtils.js.map +7 -0
  53. package/dist/commonjs/index.d.ts +1 -1
  54. package/dist/commonjs/index.d.ts.map +1 -1
  55. package/dist/commonjs/index.js +36 -18
  56. package/dist/commonjs/index.js.map +7 -1
  57. package/dist/commonjs/reporter/index.js +34 -15
  58. package/dist/commonjs/reporter/index.js.map +7 -1
  59. package/dist/commonjs/reporter/playwrightReporter.js +222 -216
  60. package/dist/commonjs/reporter/playwrightReporter.js.map +7 -1
  61. package/dist/commonjs/tsdoc-metadata.json +1 -1
  62. package/dist/commonjs/utils/PlaywrightServiceClient.d.ts +1 -1
  63. package/dist/commonjs/utils/PlaywrightServiceClient.d.ts.map +1 -1
  64. package/dist/commonjs/utils/PlaywrightServiceClient.js +140 -91
  65. package/dist/commonjs/utils/PlaywrightServiceClient.js.map +7 -1
  66. package/dist/commonjs/utils/cIInfoProvider.js +81 -74
  67. package/dist/commonjs/utils/cIInfoProvider.js.map +7 -1
  68. package/dist/commonjs/utils/getPackageVersion.d.ts +1 -1
  69. package/dist/commonjs/utils/getPackageVersion.d.ts.map +1 -0
  70. package/dist/commonjs/utils/getPackageVersion.js +50 -19
  71. package/dist/commonjs/utils/getPackageVersion.js.map +7 -0
  72. package/dist/commonjs/utils/getPlaywrightVersion.js +42 -21
  73. package/dist/commonjs/utils/getPlaywrightVersion.js.map +7 -1
  74. package/dist/commonjs/utils/packageManager.js +59 -40
  75. package/dist/commonjs/utils/packageManager.js.map +7 -1
  76. package/dist/commonjs/utils/parseJwt.js +37 -17
  77. package/dist/commonjs/utils/parseJwt.js.map +7 -1
  78. package/dist/commonjs/utils/playwrightReporterStorageManager.d.ts.map +1 -1
  79. package/dist/commonjs/utils/playwrightReporterStorageManager.js +381 -342
  80. package/dist/commonjs/utils/playwrightReporterStorageManager.js.map +7 -1
  81. package/dist/commonjs/utils/utils.d.ts +2 -2
  82. package/dist/commonjs/utils/utils.d.ts.map +1 -1
  83. package/dist/commonjs/utils/utils.js +417 -369
  84. package/dist/commonjs/utils/utils.js.map +7 -1
  85. package/dist/esm/common/constants.js +92 -92
  86. package/dist/esm/common/constants.js.map +7 -1
  87. package/dist/esm/common/customerConfig.js +11 -11
  88. package/dist/esm/common/customerConfig.js.map +7 -1
  89. package/dist/esm/common/entraIdAccessToken.js +85 -77
  90. package/dist/esm/common/entraIdAccessToken.js.map +7 -1
  91. package/dist/esm/common/environmentVariables.js +19 -19
  92. package/dist/esm/common/environmentVariables.js.map +7 -1
  93. package/dist/esm/common/executor.js +51 -58
  94. package/dist/esm/common/executor.js.map +7 -1
  95. package/dist/esm/common/httpService.js +34 -29
  96. package/dist/esm/common/httpService.js.map +7 -1
  97. package/dist/esm/common/logger.js +4 -4
  98. package/dist/esm/common/logger.js.map +7 -1
  99. package/dist/esm/common/messages.js +166 -166
  100. package/dist/esm/common/messages.js.map +7 -1
  101. package/dist/esm/common/playwrightServiceConfig.js +91 -91
  102. package/dist/esm/common/playwrightServiceConfig.js.map +7 -1
  103. package/dist/esm/common/state.js +7 -7
  104. package/dist/esm/common/state.js.map +7 -1
  105. package/dist/esm/common/types.d.ts +1 -1
  106. package/dist/esm/common/types.d.ts.map +1 -1
  107. package/dist/esm/common/types.js +0 -4
  108. package/dist/esm/common/types.js.map +7 -1
  109. package/dist/esm/core/global/playwright-service-global-setup.js +17 -17
  110. package/dist/esm/core/global/playwright-service-global-setup.js.map +7 -1
  111. package/dist/esm/core/global/playwright-service-global-teardown.js +16 -13
  112. package/dist/esm/core/global/playwright-service-global-teardown.js.map +7 -1
  113. package/dist/esm/core/initializePlaywrightServiceTestRun.js +13 -21
  114. package/dist/esm/core/initializePlaywrightServiceTestRun.js.map +7 -1
  115. package/dist/esm/core/playwrightService.js +144 -195
  116. package/dist/esm/core/playwrightService.js.map +7 -1
  117. package/dist/esm/core/playwrightServiceEntra.js +44 -42
  118. package/dist/esm/core/playwrightServiceEntra.js.map +7 -1
  119. package/dist/esm/core/playwrightServiceUtils.js +6 -8
  120. package/dist/esm/core/playwrightServiceUtils.js.map +7 -1
  121. package/dist/esm/index.d.ts +1 -1
  122. package/dist/esm/index.d.ts.map +1 -1
  123. package/dist/esm/index.js +7 -9
  124. package/dist/esm/index.js.map +7 -1
  125. package/dist/esm/reporter/index.js +4 -11
  126. package/dist/esm/reporter/index.js.map +7 -1
  127. package/dist/esm/reporter/playwrightReporter.js +202 -207
  128. package/dist/esm/reporter/playwrightReporter.js.map +7 -1
  129. package/dist/esm/utils/PlaywrightServiceClient.d.ts +1 -1
  130. package/dist/esm/utils/PlaywrightServiceClient.d.ts.map +1 -1
  131. package/dist/esm/utils/PlaywrightServiceClient.js +120 -85
  132. package/dist/esm/utils/PlaywrightServiceClient.js.map +7 -1
  133. package/dist/esm/utils/cIInfoProvider.js +58 -71
  134. package/dist/esm/utils/cIInfoProvider.js.map +7 -1
  135. package/dist/esm/utils/getPackageVersion.js +12 -17
  136. package/dist/esm/utils/getPackageVersion.js.map +7 -1
  137. package/dist/esm/utils/getPlaywrightVersion.js +15 -13
  138. package/dist/esm/utils/getPlaywrightVersion.js.map +7 -1
  139. package/dist/esm/utils/packageManager.js +37 -37
  140. package/dist/esm/utils/packageManager.js.map +7 -1
  141. package/dist/esm/utils/parseJwt.js +15 -14
  142. package/dist/esm/utils/parseJwt.js.map +7 -1
  143. package/dist/esm/utils/playwrightReporterStorageManager.d.ts.map +1 -1
  144. package/dist/esm/utils/playwrightReporterStorageManager.js +358 -333
  145. package/dist/esm/utils/playwrightReporterStorageManager.js.map +7 -1
  146. package/dist/esm/utils/utils.d.ts +2 -2
  147. package/dist/esm/utils/utils.d.ts.map +1 -1
  148. package/dist/esm/utils/utils.js +377 -350
  149. package/dist/esm/utils/utils.js.map +7 -1
  150. package/dist/react-native/common/types.d.ts +1 -1
  151. package/dist/react-native/common/types.d.ts.map +1 -1
  152. package/dist/react-native/common/types.js.map +1 -1
  153. package/dist/react-native/index.d.ts +1 -1
  154. package/dist/react-native/index.d.ts.map +1 -1
  155. package/dist/react-native/index.js.map +1 -1
  156. package/dist/react-native/utils/PlaywrightServiceClient.d.ts +1 -1
  157. package/dist/react-native/utils/PlaywrightServiceClient.d.ts.map +1 -1
  158. package/dist/react-native/utils/PlaywrightServiceClient.js.map +1 -1
  159. package/dist/react-native/utils/playwrightReporterStorageManager.d.ts.map +1 -1
  160. package/dist/react-native/utils/playwrightReporterStorageManager.js.map +1 -1
  161. package/dist/react-native/utils/utils.d.ts +2 -2
  162. package/dist/react-native/utils/utils.d.ts.map +1 -1
  163. package/dist/react-native/utils/utils.js.map +1 -1
  164. package/package.json +6 -24
  165. package/dist/commonjs/core/playwrightServiceUtils-cjs.cjs.map +0 -1
  166. package/dist/commonjs/core/playwrightServiceUtils-cjs.d.cts.map +0 -1
  167. package/dist/commonjs/utils/getPackageVersion-cjs.cjs.map +0 -1
  168. package/dist/commonjs/utils/getPackageVersion-cjs.d.cts.map +0 -1
@@ -1,441 +1,489 @@
1
- "use strict";
2
- // Copyright (c) Microsoft Corporation.
3
- // Licensed under the MIT License.
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.getStorageAccountNameFromUri = exports.getTestRunConfig = exports.validatePlaywrightVersion = exports.getVersionInfo = exports.fetchOrValidateAccessToken = exports.warnIfAccessTokenCloseToExpiry = exports.validateMptPAT = exports.ValidateRunID = exports.validateServiceUrl = exports.getServiceWSEndpoint = exports.getAndSetRunId = exports.isValidGuid = exports.getServiceBaseURL = exports.getAccessToken = exports.populateValuesFromServiceUrl = exports.throwErrorWithFailureMessage = exports.exitWithFailureMessage = exports.getPackageVersion = exports.parseJwt = exports.getPlaywrightVersion = void 0;
6
- exports.getTestRunApiUrl = getTestRunApiUrl;
7
- exports.isNullOrEmpty = isNullOrEmpty;
8
- exports.getRunName = getRunName;
9
- exports.extractErrorMessage = extractErrorMessage;
10
- exports.getWorkspaceMetaDataApiUrl = getWorkspaceMetaDataApiUrl;
11
- exports.getHtmlReporterOutputFolder = getHtmlReporterOutputFolder;
12
- exports.getContentType = getContentType;
13
- exports.calculateOptimalConcurrency = calculateOptimalConcurrency;
14
- exports.collectAllFiles = collectAllFiles;
15
- exports.resolveTenantDomain = resolveTenantDomain;
16
- exports.getPortalTestRunUrl = getPortalTestRunUrl;
17
- const tslib_1 = require("tslib");
18
- const constants_js_1 = require("../common/constants.js");
19
- const messages_js_1 = require("../common/messages.js");
20
- const logger_js_1 = require("../common/logger.js");
21
- const node_process_1 = tslib_1.__importDefault(require("node:process"));
22
- const node_crypto_1 = require("node:crypto");
23
- const parseJwt_js_1 = require("./parseJwt.js");
24
- const getPlaywrightVersion_js_1 = require("./getPlaywrightVersion.js");
25
- const entraIdAccessToken_js_1 = require("../common/entraIdAccessToken.js");
26
- const cIInfoProvider_js_1 = require("./cIInfoProvider.js");
27
- const child_process_1 = require("child_process");
28
- const getPackageVersion_js_1 = require("./getPackageVersion.js");
29
- const fs_1 = require("fs");
30
- const path_1 = require("path");
31
- const constants_js_2 = require("../common/constants.js");
32
- // Re-exporting for backward compatibility
33
- var getPlaywrightVersion_js_2 = require("./getPlaywrightVersion.js");
34
- Object.defineProperty(exports, "getPlaywrightVersion", { enumerable: true, get: function () { return getPlaywrightVersion_js_2.getPlaywrightVersion; } });
35
- var parseJwt_js_2 = require("./parseJwt.js");
36
- Object.defineProperty(exports, "parseJwt", { enumerable: true, get: function () { return parseJwt_js_2.parseJwt; } });
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var utils_exports = {};
29
+ __export(utils_exports, {
30
+ ValidateRunID: () => ValidateRunID,
31
+ calculateOptimalConcurrency: () => calculateOptimalConcurrency,
32
+ collectAllFiles: () => collectAllFiles,
33
+ exitWithFailureMessage: () => exitWithFailureMessage,
34
+ extractErrorMessage: () => extractErrorMessage,
35
+ fetchOrValidateAccessToken: () => fetchOrValidateAccessToken,
36
+ getAccessToken: () => getAccessToken,
37
+ getAndSetRunId: () => getAndSetRunId,
38
+ getContentType: () => getContentType,
39
+ getHtmlReporterOutputFolder: () => getHtmlReporterOutputFolder,
40
+ getPackageVersion: () => getPackageVersion,
41
+ getPlaywrightVersion: () => import_getPlaywrightVersion2.getPlaywrightVersion,
42
+ getPortalTestRunUrl: () => getPortalTestRunUrl,
43
+ getRunName: () => getRunName,
44
+ getServiceBaseURL: () => getServiceBaseURL,
45
+ getServiceWSEndpoint: () => getServiceWSEndpoint,
46
+ getStorageAccountNameFromUri: () => getStorageAccountNameFromUri,
47
+ getTestRunApiUrl: () => getTestRunApiUrl,
48
+ getTestRunConfig: () => getTestRunConfig,
49
+ getVersionInfo: () => getVersionInfo,
50
+ getWorkspaceMetaDataApiUrl: () => getWorkspaceMetaDataApiUrl,
51
+ isNullOrEmpty: () => isNullOrEmpty,
52
+ isValidGuid: () => isValidGuid,
53
+ parseJwt: () => import_parseJwt2.parseJwt,
54
+ populateValuesFromServiceUrl: () => populateValuesFromServiceUrl,
55
+ resolveTenantDomain: () => resolveTenantDomain,
56
+ throwErrorWithFailureMessage: () => throwErrorWithFailureMessage,
57
+ validateMptPAT: () => validateMptPAT,
58
+ validatePlaywrightVersion: () => validatePlaywrightVersion,
59
+ validateServiceUrl: () => validateServiceUrl,
60
+ warnIfAccessTokenCloseToExpiry: () => warnIfAccessTokenCloseToExpiry
61
+ });
62
+ module.exports = __toCommonJS(utils_exports);
63
+ var import_constants = require("../common/constants.js");
64
+ var import_messages = require("../common/messages.js");
65
+ var import_logger = require("../common/logger.js");
66
+ var import_node_process = __toESM(require("node:process"));
67
+ var import_node_crypto = require("node:crypto");
68
+ var import_parseJwt = require("./parseJwt.js");
69
+ var import_getPlaywrightVersion = require("./getPlaywrightVersion.js");
70
+ var import_entraIdAccessToken = require("../common/entraIdAccessToken.js");
71
+ var import_cIInfoProvider = require("./cIInfoProvider.js");
72
+ var import_child_process = require("child_process");
73
+ var import_getPackageVersion = require("./getPackageVersion.js");
74
+ var import_fs = require("fs");
75
+ var import_path = require("path");
76
+ var import_constants2 = require("../common/constants.js");
77
+ var import_getPlaywrightVersion2 = require("./getPlaywrightVersion.js");
78
+ var import_parseJwt2 = require("./parseJwt.js");
37
79
  const getPackageVersion = () => {
38
- // hacky way to get package version
39
- // try from dist folder first (customer perspective)
40
- const distVersion = (0, getPackageVersion_js_1.getPackageVersionFromFolder)("../../../");
41
- if (distVersion) {
42
- return distVersion;
43
- }
44
- // if not found, try from src folder (internal test suite)
45
- const srcVersion = (0, getPackageVersion_js_1.getPackageVersionFromFolder)("../../");
46
- if (srcVersion) {
47
- return srcVersion;
48
- }
49
- return "unknown-version";
80
+ const distVersion = (0, import_getPackageVersion.getPackageVersionFromFolder)("../../../");
81
+ if (distVersion) {
82
+ return distVersion;
83
+ }
84
+ const srcVersion = (0, import_getPackageVersion.getPackageVersionFromFolder)("../../");
85
+ if (srcVersion) {
86
+ return srcVersion;
87
+ }
88
+ return "unknown-version";
50
89
  };
51
- exports.getPackageVersion = getPackageVersion;
52
90
  const exitWithFailureMessage = (error, errorDetails) => {
53
- console.log();
54
- if (error.formatWithErrorDetails && errorDetails) {
55
- console.error(error.formatWithErrorDetails(errorDetails));
56
- }
57
- else {
58
- console.error(error.message);
59
- }
60
- // eslint-disable-next-line n/no-process-exit
61
- node_process_1.default.exit(1);
91
+ console.log();
92
+ if (error.formatWithErrorDetails && errorDetails) {
93
+ console.error(error.formatWithErrorDetails(errorDetails));
94
+ } else {
95
+ console.error(error.message);
96
+ }
97
+ import_node_process.default.exit(1);
62
98
  };
63
- exports.exitWithFailureMessage = exitWithFailureMessage;
64
99
  const throwErrorWithFailureMessage = (error, errorDetails) => {
65
- console.log();
66
- const finalMessage = error.formatWithErrorDetails && errorDetails
67
- ? error.formatWithErrorDetails(errorDetails)
68
- : error.message;
69
- throw new Error(finalMessage);
100
+ console.log();
101
+ const finalMessage = error.formatWithErrorDetails && errorDetails ? error.formatWithErrorDetails(errorDetails) : error.message;
102
+ throw new Error(finalMessage);
70
103
  };
71
- exports.throwErrorWithFailureMessage = throwErrorWithFailureMessage;
72
104
  const populateValuesFromServiceUrl = () => {
73
- // Service URL format: wss://<region>.api.playwright.microsoft.com/accounts/<workspace-id>/browsers
74
- const url = node_process_1.default.env["PLAYWRIGHT_SERVICE_URL"];
75
- if (url) {
76
- const parts = url.split("/");
77
- if (parts.length > 2) {
78
- const subdomainParts = parts[2].split(".");
79
- const region = subdomainParts.length > 0 ? subdomainParts[0] : null;
80
- const domain = subdomainParts.slice(2).join(".");
81
- const accountId = parts[4];
82
- return { region: region, domain: domain, accountId: accountId };
83
- }
84
- }
85
- return null;
105
+ const url = import_node_process.default.env["PLAYWRIGHT_SERVICE_URL"];
106
+ if (url) {
107
+ const parts = url.split("/");
108
+ if (parts.length > 2) {
109
+ const subdomainParts = parts[2].split(".");
110
+ const region = subdomainParts.length > 0 ? subdomainParts[0] : null;
111
+ const domain = subdomainParts.slice(2).join(".");
112
+ const accountId = parts[4];
113
+ return { region, domain, accountId };
114
+ }
115
+ }
116
+ return null;
86
117
  };
87
- exports.populateValuesFromServiceUrl = populateValuesFromServiceUrl;
88
118
  const getAccessToken = () => {
89
- return node_process_1.default.env[constants_js_1.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];
119
+ return import_node_process.default.env[import_constants.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];
90
120
  };
91
- exports.getAccessToken = getAccessToken;
92
121
  const getServiceBaseURL = () => {
93
- return node_process_1.default.env[constants_js_1.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_URL];
122
+ return import_node_process.default.env[import_constants.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_URL];
94
123
  };
95
- exports.getServiceBaseURL = getServiceBaseURL;
96
124
  const isValidGuid = (guid) => {
97
- if (!guid) {
98
- return false;
99
- }
100
- const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
101
- return guidRegex.test(guid);
125
+ if (!guid) {
126
+ return false;
127
+ }
128
+ const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
129
+ return guidRegex.test(guid);
102
130
  };
103
- exports.isValidGuid = isValidGuid;
104
131
  const getAndSetRunId = () => {
105
- const runId = (0, node_crypto_1.randomUUID)();
106
- node_process_1.default.env[constants_js_1.InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = runId;
107
- return runId;
132
+ const runId = (0, import_node_crypto.randomUUID)();
133
+ import_node_process.default.env[import_constants.InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = runId;
134
+ return runId;
108
135
  };
109
- exports.getAndSetRunId = getAndSetRunId;
110
136
  const getServiceWSEndpoint = (runId, os, apiVersion) => {
111
- return `${(0, exports.getServiceBaseURL)()}?runId=${encodeURIComponent(runId)}&os=${os}&api-version=${apiVersion}`;
137
+ return `${getServiceBaseURL()}?runId=${encodeURIComponent(runId)}&os=${os}&api-version=${apiVersion}`;
112
138
  };
113
- exports.getServiceWSEndpoint = getServiceWSEndpoint;
114
139
  const validateServiceUrl = () => {
115
- const serviceUrl = (0, exports.getServiceBaseURL)();
116
- if (!serviceUrl) {
117
- (0, exports.exitWithFailureMessage)(messages_js_1.ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);
118
- }
140
+ const serviceUrl = getServiceBaseURL();
141
+ if (!serviceUrl) {
142
+ exitWithFailureMessage(import_messages.ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);
143
+ }
119
144
  };
120
- exports.validateServiceUrl = validateServiceUrl;
121
145
  const ValidateRunID = (runID) => {
122
- const isValidRunID = (0, exports.isValidGuid)(runID);
123
- if (!isValidRunID) {
124
- const errorMessage = messages_js_1.ServiceErrorMessageConstants.INVALID_RUN_ID_FORMAT.message;
125
- throw new Error(errorMessage);
126
- }
146
+ const isValidRunID = isValidGuid(runID);
147
+ if (!isValidRunID) {
148
+ const errorMessage = import_messages.ServiceErrorMessageConstants.INVALID_RUN_ID_FORMAT.message;
149
+ throw new Error(errorMessage);
150
+ }
127
151
  };
128
- exports.ValidateRunID = ValidateRunID;
129
152
  const validateMptPAT = (validationFailureCallback) => {
130
- try {
131
- const accessToken = (0, exports.getAccessToken)();
132
- const result = (0, exports.populateValuesFromServiceUrl)();
133
- if (!accessToken) {
134
- validationFailureCallback(messages_js_1.ServiceErrorMessageConstants.NO_AUTH_ERROR_PAT_TOKEN);
135
- }
136
- const claims = (0, parseJwt_js_1.parseJwt)(accessToken);
137
- if (!claims.exp) {
138
- validationFailureCallback(messages_js_1.ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);
139
- }
140
- if (Date.now() >= claims.exp * 1000) {
141
- validationFailureCallback(messages_js_1.ServiceErrorMessageConstants.EXPIRED_MPT_PAT_ERROR);
142
- }
143
- if (result.accountId !== claims.pwid) {
144
- validationFailureCallback(messages_js_1.ServiceErrorMessageConstants.WORKSPACE_MISMATCH_ERROR);
145
- }
153
+ try {
154
+ const accessToken = getAccessToken();
155
+ const result = populateValuesFromServiceUrl();
156
+ if (!accessToken) {
157
+ validationFailureCallback(import_messages.ServiceErrorMessageConstants.NO_AUTH_ERROR_PAT_TOKEN);
158
+ }
159
+ const claims = (0, import_parseJwt.parseJwt)(accessToken);
160
+ if (!claims.exp) {
161
+ validationFailureCallback(import_messages.ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);
146
162
  }
147
- catch (err) {
148
- logger_js_1.coreLogger.error(err);
149
- (0, exports.exitWithFailureMessage)(messages_js_1.ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);
163
+ if (Date.now() >= claims.exp * 1e3) {
164
+ validationFailureCallback(import_messages.ServiceErrorMessageConstants.EXPIRED_MPT_PAT_ERROR);
150
165
  }
166
+ if (result.accountId !== claims.pwid) {
167
+ validationFailureCallback(import_messages.ServiceErrorMessageConstants.WORKSPACE_MISMATCH_ERROR);
168
+ }
169
+ } catch (err) {
170
+ import_logger.coreLogger.error(err);
171
+ exitWithFailureMessage(import_messages.ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);
172
+ }
151
173
  };
152
- exports.validateMptPAT = validateMptPAT;
153
174
  const isTokenExpiringSoon = (expirationTime, currentTime) => {
154
- return expirationTime * 1000 - currentTime <= constants_js_1.Constants.SevenDaysInMS;
175
+ return expirationTime * 1e3 - currentTime <= import_constants.Constants.SevenDaysInMS;
155
176
  };
156
177
  const warnAboutTokenExpiry = (expirationTime, currentTime) => {
157
- const daysToExpiration = Math.ceil((expirationTime * 1000 - currentTime) / constants_js_1.Constants.OneDayInMS);
158
- const expirationDate = new Date(expirationTime * 1000).toLocaleDateString();
159
- const expirationWarning = `Warning: The access token used for this test run will expire in ${daysToExpiration} days on ${expirationDate}. Generate a new token from the portal to avoid failures. For a simpler, more secure solution, switch to Microsoft Entra ID and eliminate token management. https://learn.microsoft.com/entra/identity/`;
160
- console.warn(expirationWarning);
178
+ const daysToExpiration = Math.ceil((expirationTime * 1e3 - currentTime) / import_constants.Constants.OneDayInMS);
179
+ const expirationDate = new Date(expirationTime * 1e3).toLocaleDateString();
180
+ const expirationWarning = `Warning: The access token used for this test run will expire in ${daysToExpiration} days on ${expirationDate}. Generate a new token from the portal to avoid failures. For a simpler, more secure solution, switch to Microsoft Entra ID and eliminate token management. https://learn.microsoft.com/entra/identity/`;
181
+ console.warn(expirationWarning);
161
182
  };
162
183
  const warnIfAccessTokenCloseToExpiry = () => {
163
- const accessToken = (0, exports.getAccessToken)();
164
- if (!accessToken) {
165
- throw new Error(messages_js_1.ServiceErrorMessageConstants.NO_AUTH_ERROR_PAT_TOKEN.message);
166
- }
167
- const claims = (0, parseJwt_js_1.parseJwt)(accessToken);
168
- const currentTime = Date.now();
169
- if (isTokenExpiringSoon(claims.exp, currentTime)) {
170
- warnAboutTokenExpiry(claims.exp, currentTime);
171
- }
184
+ const accessToken = getAccessToken();
185
+ if (!accessToken) {
186
+ throw new Error(import_messages.ServiceErrorMessageConstants.NO_AUTH_ERROR_PAT_TOKEN.message);
187
+ }
188
+ const claims = (0, import_parseJwt.parseJwt)(accessToken);
189
+ const currentTime = Date.now();
190
+ if (isTokenExpiringSoon(claims.exp, currentTime)) {
191
+ warnAboutTokenExpiry(claims.exp, currentTime);
192
+ }
172
193
  };
173
- exports.warnIfAccessTokenCloseToExpiry = warnIfAccessTokenCloseToExpiry;
174
194
  const fetchOrValidateAccessToken = async (credential) => {
175
- const entraIdAccessToken = (0, entraIdAccessToken_js_1.createEntraIdAccessToken)(credential);
176
- // Fetch a token or refresh if needed in a single call
177
- if (entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {
178
- await entraIdAccessToken.fetchEntraIdAccessToken();
179
- }
180
- const token = (0, exports.getAccessToken)();
181
- if (!token) {
182
- throw new Error(messages_js_1.ServiceErrorMessageConstants.NO_AUTH_ERROR_ENTRA_TOKEN.message);
183
- }
184
- return token;
195
+ const entraIdAccessToken = (0, import_entraIdAccessToken.createEntraIdAccessToken)(credential);
196
+ if (entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {
197
+ await entraIdAccessToken.fetchEntraIdAccessToken();
198
+ }
199
+ const token = getAccessToken();
200
+ if (!token) {
201
+ throw new Error(import_messages.ServiceErrorMessageConstants.NO_AUTH_ERROR_ENTRA_TOKEN.message);
202
+ }
203
+ return token;
185
204
  };
186
- exports.fetchOrValidateAccessToken = fetchOrValidateAccessToken;
187
205
  const getVersionInfo = (version) => {
188
- const regex = /^(\d+)(?:\.(\d+))?(?:\.(\d+))?/;
189
- const match = version.match(regex);
190
- const versionInfo = {
191
- major: 0,
192
- minor: 0,
193
- patch: 0,
194
- };
195
- versionInfo.major = match && match[1] ? parseInt(match[1], 10) : 0;
196
- versionInfo.minor = match && match[2] ? parseInt(match[2], 10) : 0;
197
- versionInfo.patch = match && match[3] ? parseInt(match[3], 10) : 0;
198
- return versionInfo;
206
+ const regex = /^(\d+)(?:\.(\d+))?(?:\.(\d+))?/;
207
+ const match = version.match(regex);
208
+ const versionInfo = {
209
+ major: 0,
210
+ minor: 0,
211
+ patch: 0
212
+ };
213
+ versionInfo.major = match && match[1] ? parseInt(match[1], 10) : 0;
214
+ versionInfo.minor = match && match[2] ? parseInt(match[2], 10) : 0;
215
+ versionInfo.patch = match && match[3] ? parseInt(match[3], 10) : 0;
216
+ return versionInfo;
199
217
  };
200
- exports.getVersionInfo = getVersionInfo;
201
218
  const validatePlaywrightVersion = () => {
202
- const minimumSupportedVersion = constants_js_1.Constants.MinimumSupportedPlaywrightVersion;
203
- const installedVersion = (0, getPlaywrightVersion_js_1.getPlaywrightVersion)();
204
- const minimumSupportedVersionInfo = (0, exports.getVersionInfo)(minimumSupportedVersion);
205
- const installedVersionInfo = (0, exports.getVersionInfo)(installedVersion);
206
- const isInstalledVersionGreater = installedVersionInfo.major > minimumSupportedVersionInfo.major ||
207
- (installedVersionInfo.major === minimumSupportedVersionInfo.major &&
208
- installedVersionInfo.minor >= minimumSupportedVersionInfo.minor);
209
- if (!isInstalledVersionGreater) {
210
- (0, exports.exitWithFailureMessage)(messages_js_1.ServiceErrorMessageConstants.INVALID_PLAYWRIGHT_VERSION_ERROR);
211
- }
219
+ const minimumSupportedVersion = import_constants.Constants.MinimumSupportedPlaywrightVersion;
220
+ const installedVersion = (0, import_getPlaywrightVersion.getPlaywrightVersion)();
221
+ const minimumSupportedVersionInfo = getVersionInfo(minimumSupportedVersion);
222
+ const installedVersionInfo = getVersionInfo(installedVersion);
223
+ const isInstalledVersionGreater = installedVersionInfo.major > minimumSupportedVersionInfo.major || installedVersionInfo.major === minimumSupportedVersionInfo.major && installedVersionInfo.minor >= minimumSupportedVersionInfo.minor;
224
+ if (!isInstalledVersionGreater) {
225
+ exitWithFailureMessage(import_messages.ServiceErrorMessageConstants.INVALID_PLAYWRIGHT_VERSION_ERROR);
226
+ }
212
227
  };
213
- exports.validatePlaywrightVersion = validatePlaywrightVersion;
214
228
  const getTestRunConfig = (config) => {
215
- const maxWorkers = config.workers || config.metadata.actualWorkers;
216
- const frameWorkVersion = config.version;
217
- const testRunConfig = {
218
- framework: {
219
- name: constants_js_1.RunConfigConstants.TEST_FRAMEWORK_NAME,
220
- version: frameWorkVersion,
221
- runnerName: constants_js_1.RunConfigConstants.TEST_FRAMEWORK_RUNNERNAME,
222
- },
223
- sdkLanguage: constants_js_1.RunConfigConstants.TEST_SDK_LANGUAGE,
224
- maxWorkers: maxWorkers,
225
- };
226
- return testRunConfig;
229
+ const maxWorkers = config.workers || config.metadata.actualWorkers;
230
+ const frameWorkVersion = config.version;
231
+ const testRunConfig = {
232
+ framework: {
233
+ name: import_constants.RunConfigConstants.TEST_FRAMEWORK_NAME,
234
+ version: frameWorkVersion,
235
+ runnerName: import_constants.RunConfigConstants.TEST_FRAMEWORK_RUNNERNAME
236
+ },
237
+ sdkLanguage: import_constants.RunConfigConstants.TEST_SDK_LANGUAGE,
238
+ maxWorkers
239
+ };
240
+ return testRunConfig;
227
241
  };
228
- exports.getTestRunConfig = getTestRunConfig;
229
242
  function getTestRunApiUrl() {
230
- const result = (0, exports.populateValuesFromServiceUrl)();
231
- const runId = node_process_1.default.env[constants_js_1.InternalEnvironmentVariables.MPT_SERVICE_RUN_ID];
232
- if (!result?.region || !result?.domain || !result?.accountId) {
233
- (0, exports.exitWithFailureMessage)(messages_js_1.ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);
234
- }
235
- const baseUrl = `https://${result?.region}.${constants_js_1.UrlConstants.ReportingApiSubdomain}.${result?.domain}/${constants_js_1.UrlConstants.PlaywrightWorkspacesPath}/${result?.accountId}/${constants_js_1.UrlConstants.TestRunsPath}`;
236
- const url = runId ? `${baseUrl}/${runId}` : baseUrl;
237
- return `${url}?api-version=${constants_js_1.Constants.LatestAPIVersion}`;
243
+ const result = populateValuesFromServiceUrl();
244
+ const runId = import_node_process.default.env[import_constants.InternalEnvironmentVariables.MPT_SERVICE_RUN_ID];
245
+ if (!result?.region || !result?.domain || !result?.accountId) {
246
+ exitWithFailureMessage(import_messages.ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);
247
+ }
248
+ const baseUrl = `https://${result?.region}.${import_constants.UrlConstants.ReportingApiSubdomain}.${result?.domain}/${import_constants.UrlConstants.PlaywrightWorkspacesPath}/${result?.accountId}/${import_constants.UrlConstants.TestRunsPath}`;
249
+ const url = runId ? `${baseUrl}/${runId}` : baseUrl;
250
+ return `${url}?api-version=${import_constants.Constants.LatestAPIVersion}`;
238
251
  }
239
252
  function isNullOrEmpty(str) {
240
- return !str || str.trim() === "";
253
+ return !str || str.trim() === "";
241
254
  }
242
255
  async function runCommand(command) {
243
- return new Promise((resolve, reject) => {
244
- (0, child_process_1.exec)(command, (error, stdout, stderr) => {
245
- if (error) {
246
- reject(error);
247
- return;
248
- }
249
- if (stderr) {
250
- reject(new Error(stderr));
251
- return;
252
- }
253
- resolve(stdout.trim());
254
- });
256
+ return new Promise((resolve, reject) => {
257
+ (0, import_child_process.exec)(command, (error, stdout, stderr) => {
258
+ if (error) {
259
+ reject(error);
260
+ return;
261
+ }
262
+ if (stderr) {
263
+ reject(new Error(stderr));
264
+ return;
265
+ }
266
+ resolve(stdout.trim());
255
267
  });
268
+ });
256
269
  }
257
270
  async function getRunName(ciInfo) {
258
- if (ciInfo.providerName === cIInfoProvider_js_1.CI_PROVIDERS.GITHUB &&
259
- node_process_1.default.env["GITHUB_EVENT_NAME"] === "pull_request") {
260
- const prNumber = `${node_process_1.default.env["GITHUB_REF_NAME"]?.split("/")[0]}`;
261
- const prLink = `${node_process_1.default.env["GITHUB_REPOSITORY"]}/pull/${prNumber}`;
262
- return `PR# ${prNumber} on Repo: ${node_process_1.default.env["GITHUB_REPOSITORY"]} (${prLink})`;
263
- }
264
- try {
265
- const gitVersion = await runCommand(constants_js_1.GitHubActionsConstants.GIT_VERSION_COMMAND);
266
- if (isNullOrEmpty(gitVersion)) {
267
- throw new Error("Git is not installed on the machine");
268
- }
269
- const isInsideWorkTree = await runCommand(constants_js_1.GitHubActionsConstants.GIT_REV_PARSE);
270
- if (isInsideWorkTree !== "true") {
271
- throw new Error("Not inside a git repository");
272
- }
273
- const gitCommitMessage = await runCommand(constants_js_1.GitHubActionsConstants.GIT_COMMIT_MESSAGE_COMMAND);
274
- return gitCommitMessage;
275
- }
276
- catch (err) {
277
- logger_js_1.coreLogger.error(`Error in getting git commit message: ${err}.`);
278
- return "";
279
- }
271
+ if (ciInfo.providerName === import_cIInfoProvider.CI_PROVIDERS.GITHUB && import_node_process.default.env["GITHUB_EVENT_NAME"] === "pull_request") {
272
+ const prNumber = `${import_node_process.default.env["GITHUB_REF_NAME"]?.split("/")[0]}`;
273
+ const prLink = `${import_node_process.default.env["GITHUB_REPOSITORY"]}/pull/${prNumber}`;
274
+ return `PR# ${prNumber} on Repo: ${import_node_process.default.env["GITHUB_REPOSITORY"]} (${prLink})`;
275
+ }
276
+ try {
277
+ const gitVersion = await runCommand(import_constants.GitHubActionsConstants.GIT_VERSION_COMMAND);
278
+ if (isNullOrEmpty(gitVersion)) {
279
+ throw new Error("Git is not installed on the machine");
280
+ }
281
+ const isInsideWorkTree = await runCommand(import_constants.GitHubActionsConstants.GIT_REV_PARSE);
282
+ if (isInsideWorkTree !== "true") {
283
+ throw new Error("Not inside a git repository");
284
+ }
285
+ const gitCommitMessage = await runCommand(import_constants.GitHubActionsConstants.GIT_COMMIT_MESSAGE_COMMAND);
286
+ return gitCommitMessage;
287
+ } catch (err) {
288
+ import_logger.coreLogger.error(`Error in getting git commit message: ${err}.`);
289
+ return "";
290
+ }
280
291
  }
281
292
  function extractErrorMessage(responseBody) {
282
- if (!responseBody) {
283
- return "";
284
- }
285
- try {
286
- const errorResponse = JSON.parse(responseBody);
287
- if (errorResponse.error && errorResponse.error.message) {
288
- return errorResponse.error.message;
289
- }
290
- return responseBody;
291
- }
292
- catch (e) {
293
- return responseBody;
294
- }
293
+ if (!responseBody) {
294
+ return "";
295
+ }
296
+ try {
297
+ const errorResponse = JSON.parse(responseBody);
298
+ if (errorResponse.error && errorResponse.error.message) {
299
+ return errorResponse.error.message;
300
+ }
301
+ return responseBody;
302
+ } catch (e) {
303
+ return responseBody;
304
+ }
295
305
  }
296
306
  function getWorkspaceMetaDataApiUrl() {
297
- const result = (0, exports.populateValuesFromServiceUrl)();
298
- if (!result?.region || !result?.domain || !result?.accountId) {
299
- (0, exports.exitWithFailureMessage)(messages_js_1.ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);
300
- }
301
- const baseUrl = `https://${result?.region}.${constants_js_1.UrlConstants.ApiSubdomain}.${result?.domain}/${constants_js_1.UrlConstants.PlaywrightWorkspacesPath}/${result?.accountId}`;
302
- return `${baseUrl}?api-version=${constants_js_1.Constants.LatestAPIVersion}`;
307
+ const result = populateValuesFromServiceUrl();
308
+ if (!result?.region || !result?.domain || !result?.accountId) {
309
+ exitWithFailureMessage(import_messages.ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);
310
+ }
311
+ const baseUrl = `https://${result?.region}.${import_constants.UrlConstants.ApiSubdomain}.${result?.domain}/${import_constants.UrlConstants.PlaywrightWorkspacesPath}/${result?.accountId}`;
312
+ return `${baseUrl}?api-version=${import_constants.Constants.LatestAPIVersion}`;
303
313
  }
304
314
  function getHtmlReporterOutputFolder(config) {
305
- const defaultFolder = "playwright-report";
306
- if (!config?.reporter) {
307
- return defaultFolder;
308
- }
309
- for (const reporter of config.reporter) {
310
- if (Array.isArray(reporter)) {
311
- const [reporterName, options] = reporter;
312
- if (reporterName === "html" && options && typeof options === "object") {
313
- return options.outputFolder || defaultFolder;
314
- }
315
- }
316
- else if (typeof reporter === "string" && reporter === "html") {
317
- return defaultFolder;
318
- }
319
- }
315
+ const defaultFolder = "playwright-report";
316
+ if (!config?.reporter) {
320
317
  return defaultFolder;
318
+ }
319
+ for (const reporter of config.reporter) {
320
+ if (Array.isArray(reporter)) {
321
+ const [reporterName, options] = reporter;
322
+ if (reporterName === "html" && options && typeof options === "object") {
323
+ return options.outputFolder || defaultFolder;
324
+ }
325
+ } else if (typeof reporter === "string" && reporter === "html") {
326
+ return defaultFolder;
327
+ }
328
+ }
329
+ return defaultFolder;
321
330
  }
322
331
  function getContentType(filePath) {
323
- const ext = filePath.toLowerCase().split(".").pop();
324
- const contentTypes = {
325
- html: "text/html",
326
- css: "text/css",
327
- js: "application/javascript",
328
- json: "application/json",
329
- png: "image/png",
330
- jpg: "image/jpeg",
331
- jpeg: "image/jpeg",
332
- svg: "image/svg+xml",
333
- ico: "image/x-icon",
334
- txt: "text/plain",
335
- ttf: "font/ttf",
336
- woff: "font/woff",
337
- woff2: "font/woff2",
338
- webmanifest: "application/manifest+json",
339
- map: "application/json",
340
- xml: "application/xml",
341
- pdf: "application/pdf",
342
- zip: "application/zip",
343
- };
344
- return contentTypes[ext || ""] || "application/octet-stream";
332
+ const ext = filePath.toLowerCase().split(".").pop();
333
+ const contentTypes = {
334
+ html: "text/html",
335
+ css: "text/css",
336
+ js: "application/javascript",
337
+ json: "application/json",
338
+ png: "image/png",
339
+ jpg: "image/jpeg",
340
+ jpeg: "image/jpeg",
341
+ svg: "image/svg+xml",
342
+ ico: "image/x-icon",
343
+ txt: "text/plain",
344
+ ttf: "font/ttf",
345
+ woff: "font/woff",
346
+ woff2: "font/woff2",
347
+ webmanifest: "application/manifest+json",
348
+ map: "application/json",
349
+ xml: "application/xml",
350
+ pdf: "application/pdf",
351
+ zip: "application/zip"
352
+ };
353
+ return contentTypes[ext || ""] || "application/octet-stream";
345
354
  }
346
355
  function calculateOptimalConcurrency(files) {
347
- const totalFiles = files.length;
348
- const totalSize = files.reduce((sum, f) => sum + f.size, 0);
349
- const avgFileSize = totalSize / totalFiles;
350
- let optimalConcurrency;
351
- if (totalFiles <= 10) {
352
- optimalConcurrency = Math.min(totalFiles, 10);
353
- }
354
- else if (avgFileSize < constants_js_2.UploadConstants.SMALL_FILE_THRESHOLD) {
355
- optimalConcurrency = Math.min(constants_js_2.UploadConstants.MAX_CONCURRENCY, Math.max(constants_js_2.UploadConstants.BASE_CONCURRENCY, totalFiles / 50));
356
- }
357
- else if (totalFiles > 1000) {
358
- optimalConcurrency = Math.min(constants_js_2.UploadConstants.MAX_CONCURRENCY, constants_js_2.UploadConstants.BASE_CONCURRENCY + Math.floor(totalFiles / 200));
359
- }
360
- else {
361
- optimalConcurrency = Math.min(constants_js_2.UploadConstants.MAX_CONCURRENCY, constants_js_2.UploadConstants.BASE_CONCURRENCY);
362
- }
363
- return Math.floor(optimalConcurrency);
356
+ const totalFiles = files.length;
357
+ const totalSize = files.reduce((sum, f) => sum + f.size, 0);
358
+ const avgFileSize = totalSize / totalFiles;
359
+ let optimalConcurrency;
360
+ if (totalFiles <= 10) {
361
+ optimalConcurrency = Math.min(totalFiles, 10);
362
+ } else if (avgFileSize < import_constants2.UploadConstants.SMALL_FILE_THRESHOLD) {
363
+ optimalConcurrency = Math.min(
364
+ import_constants2.UploadConstants.MAX_CONCURRENCY,
365
+ Math.max(import_constants2.UploadConstants.BASE_CONCURRENCY, totalFiles / 50)
366
+ );
367
+ } else if (totalFiles > 1e3) {
368
+ optimalConcurrency = Math.min(
369
+ import_constants2.UploadConstants.MAX_CONCURRENCY,
370
+ import_constants2.UploadConstants.BASE_CONCURRENCY + Math.floor(totalFiles / 200)
371
+ );
372
+ } else {
373
+ optimalConcurrency = Math.min(
374
+ import_constants2.UploadConstants.MAX_CONCURRENCY,
375
+ import_constants2.UploadConstants.BASE_CONCURRENCY
376
+ );
377
+ }
378
+ return Math.floor(optimalConcurrency);
364
379
  }
365
380
  function collectAllFiles(folderPath, basePath, runIdFolderPrefix) {
366
- const files = [];
367
- const stack = [folderPath];
368
- while (stack.length > 0) {
369
- const currentPath = stack.pop();
370
- try {
371
- const items = (0, fs_1.readdirSync)(currentPath);
372
- for (const item of items) {
373
- const itemPath = (0, path_1.join)(currentPath, item);
374
- const stats = (0, fs_1.statSync)(itemPath);
375
- if (stats.isDirectory()) {
376
- stack.push(itemPath);
377
- }
378
- else {
379
- let relativePath = (0, path_1.relative)(basePath, itemPath).split("\\").join("/");
380
- if (runIdFolderPrefix) {
381
- relativePath = `${runIdFolderPrefix}/${relativePath}`;
382
- }
383
- files.push({
384
- fullPath: itemPath,
385
- relativePath,
386
- size: stats.size,
387
- contentType: getContentType(itemPath),
388
- });
389
- }
390
- }
391
- }
392
- catch (error) {
393
- continue;
381
+ const files = [];
382
+ const stack = [folderPath];
383
+ while (stack.length > 0) {
384
+ const currentPath = stack.pop();
385
+ try {
386
+ const items = (0, import_fs.readdirSync)(currentPath);
387
+ for (const item of items) {
388
+ const itemPath = (0, import_path.join)(currentPath, item);
389
+ const stats = (0, import_fs.statSync)(itemPath);
390
+ if (stats.isDirectory()) {
391
+ stack.push(itemPath);
392
+ } else {
393
+ let relativePath = (0, import_path.relative)(basePath, itemPath).split("\\").join("/");
394
+ if (runIdFolderPrefix) {
395
+ relativePath = `${runIdFolderPrefix}/${relativePath}`;
396
+ }
397
+ files.push({
398
+ fullPath: itemPath,
399
+ relativePath,
400
+ size: stats.size,
401
+ contentType: getContentType(itemPath)
402
+ });
394
403
  }
404
+ }
405
+ } catch (error) {
406
+ continue;
395
407
  }
396
- return files;
408
+ }
409
+ return files;
397
410
  }
398
411
  function resolveTenantDomain(tenantId, tenants) {
399
- if (!tenantId || tenants.length === 0) {
400
- return undefined;
401
- }
402
- const matchingTenant = tenants.find((t) => t.tenantId === tenantId);
403
- logger_js_1.coreLogger.info(`Resolved tenant domain: ${JSON.stringify(matchingTenant?.defaultDomain)} for tenant ID: ${tenantId}`);
404
- return matchingTenant?.defaultDomain;
412
+ if (!tenantId || tenants.length === 0) {
413
+ return void 0;
414
+ }
415
+ const matchingTenant = tenants.find((t) => t.tenantId === tenantId);
416
+ import_logger.coreLogger.info(
417
+ `Resolved tenant domain: ${JSON.stringify(matchingTenant?.defaultDomain)} for tenant ID: ${tenantId}`
418
+ );
419
+ return matchingTenant?.defaultDomain;
405
420
  }
406
421
  function getPortalTestRunUrl(workspaceMetadata, tenantDomain) {
407
- const { subscriptionId, resourceId, name } = workspaceMetadata ?? {};
408
- if (!subscriptionId || !resourceId || !name) {
409
- throw new Error("Missing required workspace metadata: subscriptionId, resourceId, and name are required");
410
- }
411
- // Extract resource group from resourceId
412
- const resourceIdParts = resourceId.split("/");
413
- const resourceGroupIndex = resourceIdParts.findIndex((part) => part.toLowerCase() === constants_js_1.UrlConstants.ResourceGroupsPath);
414
- if (resourceGroupIndex === -1 || resourceGroupIndex + 1 >= resourceIdParts.length) {
415
- throw new Error("Invalid resourceId format: could not extract resource group name");
416
- }
417
- const resourceGroupName = resourceIdParts[resourceGroupIndex + 1];
418
- const tenantFragment = tenantDomain ? `#@${tenantDomain}` : "#";
419
- return `${constants_js_1.UrlConstants.AzurePortalBaseUrl}/${tenantFragment}${constants_js_1.UrlConstants.ResourcePath}${constants_js_1.UrlConstants.SubscriptionsPath}/${encodeURIComponent(subscriptionId)}${constants_js_1.UrlConstants.ResourceGroupsUrlPath}/${encodeURIComponent(resourceGroupName)}${constants_js_1.UrlConstants.ProvidersPath}/${constants_js_1.UrlConstants.LoadTestServiceProvider}/${constants_js_1.UrlConstants.PlaywrightWorkspacesResourceType}/${encodeURIComponent(name)}/${constants_js_1.UrlConstants.TestRunsRoute}`;
422
+ const { subscriptionId, resourceId, name } = workspaceMetadata ?? {};
423
+ if (!subscriptionId || !resourceId || !name) {
424
+ throw new Error(
425
+ "Missing required workspace metadata: subscriptionId, resourceId, and name are required"
426
+ );
427
+ }
428
+ const resourceIdParts = resourceId.split("/");
429
+ const resourceGroupIndex = resourceIdParts.findIndex(
430
+ (part) => part.toLowerCase() === import_constants.UrlConstants.ResourceGroupsPath
431
+ );
432
+ if (resourceGroupIndex === -1 || resourceGroupIndex + 1 >= resourceIdParts.length) {
433
+ throw new Error("Invalid resourceId format: could not extract resource group name");
434
+ }
435
+ const resourceGroupName = resourceIdParts[resourceGroupIndex + 1];
436
+ const tenantFragment = tenantDomain ? `#@${tenantDomain}` : "#";
437
+ return `${import_constants.UrlConstants.AzurePortalBaseUrl}/${tenantFragment}${import_constants.UrlConstants.ResourcePath}${import_constants.UrlConstants.SubscriptionsPath}/${encodeURIComponent(subscriptionId)}${import_constants.UrlConstants.ResourceGroupsUrlPath}/${encodeURIComponent(resourceGroupName)}${import_constants.UrlConstants.ProvidersPath}/${import_constants.UrlConstants.LoadTestServiceProvider}/${import_constants.UrlConstants.PlaywrightWorkspacesResourceType}/${encodeURIComponent(name)}/${import_constants.UrlConstants.TestRunsRoute}`;
420
438
  }
421
439
  const getStorageAccountNameFromUri = (storageUri) => {
422
- try {
423
- if (!storageUri || typeof storageUri !== "string") {
424
- return null;
425
- }
426
- const url = new URL(storageUri);
427
- const hostname = url.hostname;
428
- // Extract storage account name from hostname pattern: {accountname}.blob.core.windows.net
429
- const match = hostname.match(/^([^.]+)\.blob\.core\.windows\.net$/i);
430
- if (match && match[1]) {
431
- return match[1];
432
- }
433
- return null;
440
+ try {
441
+ if (!storageUri || typeof storageUri !== "string") {
442
+ return null;
434
443
  }
435
- catch (error) {
436
- console.warn("Failed to extract storage account name from URI:", storageUri, error);
437
- return null;
444
+ const url = new URL(storageUri);
445
+ const hostname = url.hostname;
446
+ const match = hostname.match(/^([^.]+)\.blob\.core\.windows\.net$/i);
447
+ if (match && match[1]) {
448
+ return match[1];
438
449
  }
450
+ return null;
451
+ } catch (error) {
452
+ console.warn("Failed to extract storage account name from URI:", storageUri, error);
453
+ return null;
454
+ }
439
455
  };
440
- exports.getStorageAccountNameFromUri = getStorageAccountNameFromUri;
441
- //# sourceMappingURL=utils.js.map
456
+ // Annotate the CommonJS export names for ESM import in node:
457
+ 0 && (module.exports = {
458
+ ValidateRunID,
459
+ calculateOptimalConcurrency,
460
+ collectAllFiles,
461
+ exitWithFailureMessage,
462
+ extractErrorMessage,
463
+ fetchOrValidateAccessToken,
464
+ getAccessToken,
465
+ getAndSetRunId,
466
+ getContentType,
467
+ getHtmlReporterOutputFolder,
468
+ getPackageVersion,
469
+ getPlaywrightVersion,
470
+ getPortalTestRunUrl,
471
+ getRunName,
472
+ getServiceBaseURL,
473
+ getServiceWSEndpoint,
474
+ getStorageAccountNameFromUri,
475
+ getTestRunApiUrl,
476
+ getTestRunConfig,
477
+ getVersionInfo,
478
+ getWorkspaceMetaDataApiUrl,
479
+ isNullOrEmpty,
480
+ isValidGuid,
481
+ parseJwt,
482
+ populateValuesFromServiceUrl,
483
+ resolveTenantDomain,
484
+ throwErrorWithFailureMessage,
485
+ validateMptPAT,
486
+ validatePlaywrightVersion,
487
+ validateServiceUrl,
488
+ warnIfAccessTokenCloseToExpiry
489
+ });